@@ -64,15 +64,15 @@ class PPC final : public TargetInfo {
6464static uint16_t lo (uint32_t v) { return v; }
6565static uint16_t ha (uint32_t v) { return (v + 0x8000 ) >> 16 ; }
6666
67- static uint32_t readFromHalf16 (const uint8_t *loc) {
67+ static uint32_t readFromHalf16 (Ctx &ctx, const uint8_t *loc) {
6868 return read32 (ctx.arg .isLE ? loc : loc - 2 );
6969}
7070
71- static void writeFromHalf16 (uint8_t *loc, uint32_t insn) {
71+ static void writeFromHalf16 (Ctx &ctx, uint8_t *loc, uint32_t insn) {
7272 write32 (ctx.arg .isLE ? loc : loc - 2 , insn);
7373}
7474
75- void elf::writePPC32GlinkSection (uint8_t *buf, size_t numEntries) {
75+ void elf::writePPC32GlinkSection (Ctx &ctx, uint8_t *buf, size_t numEntries) {
7676 // Create canonical PLT entries for non-PIE code. Compilers don't generate
7777 // non-GOT-non-PLT relocations referencing external functions for -fpie/-fPIE.
7878 uint32_t glink = ctx.in .plt ->getVA (); // VA of .glink
@@ -412,8 +412,8 @@ void PPC::relaxTlsGdToIe(uint8_t *loc, const Relocation &rel,
412412 switch (rel.type ) {
413413 case R_PPC_GOT_TLSGD16: {
414414 // addi rT, rA, x@got@tlsgd --> lwz rT, x@got@tprel(rA)
415- uint32_t insn = readFromHalf16 (loc);
416- writeFromHalf16 (loc, 0x80000000 | (insn & 0x03ff0000 ));
415+ uint32_t insn = readFromHalf16 (ctx, loc);
416+ writeFromHalf16 (ctx, loc, 0x80000000 | (insn & 0x03ff0000 ));
417417 relocateNoSym (loc, R_PPC_GOT_TPREL16, val);
418418 break ;
419419 }
@@ -431,7 +431,7 @@ void PPC::relaxTlsGdToLe(uint8_t *loc, const Relocation &rel,
431431 switch (rel.type ) {
432432 case R_PPC_GOT_TLSGD16:
433433 // addi r3, r31, x@got@tlsgd --> addis r3, r2, x@tprel@ha
434- writeFromHalf16 (loc, 0x3c620000 | ha (val));
434+ writeFromHalf16 (ctx, loc, 0x3c620000 | ha (val));
435435 break ;
436436 case R_PPC_TLSGD:
437437 // bl __tls_get_addr(x@tldgd) --> add r3, r3, x@tprel@l
@@ -447,7 +447,7 @@ void PPC::relaxTlsLdToLe(uint8_t *loc, const Relocation &rel,
447447 switch (rel.type ) {
448448 case R_PPC_GOT_TLSLD16:
449449 // addi r3, rA, x@got@tlsgd --> addis r3, r2, 0
450- writeFromHalf16 (loc, 0x3c620000 );
450+ writeFromHalf16 (ctx, loc, 0x3c620000 );
451451 break ;
452452 case R_PPC_TLSLD:
453453 // r3+x@dtprel computes r3+x-0x8000, while we want it to compute r3+x@tprel
@@ -471,8 +471,8 @@ void PPC::relaxTlsIeToLe(uint8_t *loc, const Relocation &rel,
471471 switch (rel.type ) {
472472 case R_PPC_GOT_TPREL16: {
473473 // lwz rT, x@got@tprel(rA) --> addis rT, r2, x@tprel@ha
474- uint32_t rt = readFromHalf16 (loc) & 0x03e00000 ;
475- writeFromHalf16 (loc, 0x3c020000 | rt | ha (val));
474+ uint32_t rt = readFromHalf16 (ctx, loc) & 0x03e00000 ;
475+ writeFromHalf16 (ctx, loc, 0x3c020000 | rt | ha (val));
476476 break ;
477477 }
478478 case R_PPC_TLS: {
0 commit comments