Browse Source

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.
Rich Felker 1 năm trước cách đây
mục cha
commit
039d3c34f2
3 tập tin đã thay đổi với 10 bổ sung6 xóa
  1. 1 1
      arch/arm/reloc.h
  2. 5 5
      ldso/dynlink.c
  3. 4 0
      src/internal/dynlink.h

+ 1 - 1
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" )

+ 5 - 5
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",

+ 4 - 0
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) || \