diff options
author | Rich Felker <dalias@aerifal.cx> | 2023-11-06 21:48:02 -0500 |
---|---|---|
committer | Rich Felker <dalias@aerifal.cx> | 2023-11-06 21:48:02 -0500 |
commit | 039d3c34f2e3578a8b7ada42f89213b844aa7a4e (patch) | |
tree | ca5f6460bc374a8fc27c70d6f8ea473e7d741da2 | |
parent | 7b6a6516e133a4154022de4d15b3d5bc800ab3ad (diff) | |
download | musl-039d3c34f2e3578a8b7ada42f89213b844aa7a4e.tar.gz |
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.
-rw-r--r-- | arch/arm/reloc.h | 2 | ||||
-rw-r--r-- | ldso/dynlink.c | 10 | ||||
-rw-r--r-- | src/internal/dynlink.h | 4 |
3 files changed, 10 insertions, 6 deletions
diff --git a/arch/arm/reloc.h b/arch/arm/reloc.h index d091d2ad..d98eb8af 100644 --- a/arch/arm/reloc.h +++ b/arch/arm/reloc.h @@ -26,7 +26,7 @@ #define REL_TPOFF R_ARM_TLS_TPOFF32 #define REL_TLSDESC R_ARM_TLS_DESC -#define TLSDESC_BACKWARDS +#define TLSDESC_BACKWARDS 1 #define CRTJMP(pc,sp) __asm__ __volatile__( \ "mov sp,%1 ; bx %0" : : "r"(pc), "r"(sp) : "memory" ) diff --git a/ldso/dynlink.c b/ldso/dynlink.c index bb02cd3c..6ba51b0a 100644 --- a/ldso/dynlink.c +++ b/ldso/dynlink.c @@ -542,13 +542,13 @@ static void do_relocs(struct dso *dso, size_t *rel, size_t rel_size, size_t stri + addend; #endif } -#ifdef TLSDESC_BACKWARDS /* Some archs (32-bit ARM at least) invert the order of * the descriptor members. Fix them up here. */ - size_t tmp = reloc_addr[0]; - reloc_addr[0] = reloc_addr[1]; - reloc_addr[1] = tmp; -#endif + if (TLSDESC_BACKWARDS) { + size_t tmp = reloc_addr[0]; + reloc_addr[0] = reloc_addr[1]; + reloc_addr[1] = tmp; + } break; default: error("Error relocating %s: unsupported relocation type %d", diff --git a/src/internal/dynlink.h b/src/internal/dynlink.h index 06f41d09..40c743e2 100644 --- a/src/internal/dynlink.h +++ b/src/internal/dynlink.h @@ -73,6 +73,10 @@ struct fdpic_dummy_loadmap { #define DL_NOMMU_SUPPORT 0 #endif +#ifndef TLSDESC_BACKWARDS +#define TLSDESC_BACKWARDS 0 +#endif + #if !DL_FDPIC #define IS_RELATIVE(x,s) ( \ (R_TYPE(x) == REL_RELATIVE) || \ |