ldso: convert TLSDESC_BACKWARDS from "#ifdef" to "if" logic

this style is preferred because it allows the code to be
compile-checked even on archs where it is not used.
This commit is contained in:
Rich Felker 2023-11-06 21:48:02 -05:00
parent 7b6a6516e1
commit 039d3c34f2
3 changed files with 10 additions and 6 deletions

View file

@ -26,7 +26,7 @@
#define REL_TPOFF R_ARM_TLS_TPOFF32 #define REL_TPOFF R_ARM_TLS_TPOFF32
#define REL_TLSDESC R_ARM_TLS_DESC #define REL_TLSDESC R_ARM_TLS_DESC
#define TLSDESC_BACKWARDS #define TLSDESC_BACKWARDS 1
#define CRTJMP(pc,sp) __asm__ __volatile__( \ #define CRTJMP(pc,sp) __asm__ __volatile__( \
"mov sp,%1 ; bx %0" : : "r"(pc), "r"(sp) : "memory" ) "mov sp,%1 ; bx %0" : : "r"(pc), "r"(sp) : "memory" )

View file

@ -542,13 +542,13 @@ static void do_relocs(struct dso *dso, size_t *rel, size_t rel_size, size_t stri
+ addend; + addend;
#endif #endif
} }
#ifdef TLSDESC_BACKWARDS
/* Some archs (32-bit ARM at least) invert the order of /* Some archs (32-bit ARM at least) invert the order of
* the descriptor members. Fix them up here. */ * the descriptor members. Fix them up here. */
size_t tmp = reloc_addr[0]; if (TLSDESC_BACKWARDS) {
reloc_addr[0] = reloc_addr[1]; size_t tmp = reloc_addr[0];
reloc_addr[1] = tmp; reloc_addr[0] = reloc_addr[1];
#endif reloc_addr[1] = tmp;
}
break; break;
default: default:
error("Error relocating %s: unsupported relocation type %d", error("Error relocating %s: unsupported relocation type %d",

View file

@ -73,6 +73,10 @@ struct fdpic_dummy_loadmap {
#define DL_NOMMU_SUPPORT 0 #define DL_NOMMU_SUPPORT 0
#endif #endif
#ifndef TLSDESC_BACKWARDS
#define TLSDESC_BACKWARDS 0
#endif
#if !DL_FDPIC #if !DL_FDPIC
#define IS_RELATIVE(x,s) ( \ #define IS_RELATIVE(x,s) ( \
(R_TYPE(x) == REL_RELATIVE) || \ (R_TYPE(x) == REL_RELATIVE) || \