فهرست منبع

fix powerpc dynamic linker thread-pointer-relative relocations

processing of R_PPC_TPREL32 was ignoring the addend provided by the
RELA-style relocation and instead using the inline value as the
addend. this presumably broke dynamic-linked access to initial TLS in
cases where the addend was nonzero.

(cherry picked from commit 94cf991bf4b18bb87a15a96e7b5e7d92fab787ba)
Rich Felker 10 سال پیش
والد
کامیت
f70401eae5
1فایلهای تغییر یافته به همراه3 افزوده شده و 3 حذف شده
  1. 3 3
      arch/powerpc/reloc.h

+ 3 - 3
arch/powerpc/reloc.h

@@ -32,9 +32,9 @@ static inline void do_single_reloc(
 		*reloc_addr = def.sym->st_value + addend;
 		break;
 	case R_PPC_TPREL32:
-		*reloc_addr += def.sym
-			? def.sym->st_value + def.dso->tls_offset - 0x7000
-			: self->tls_offset - 0x7000;
+		*reloc_addr = (def.sym
+			? def.sym->st_value + def.dso->tls_offset
+			: self->tls_offset) - 0x7000 + addend;
 		break;
 	}
 }