Lines Matching refs:Loc

108                      const uint8_t *Loc) const override;
112 void relocateOne(uint8_t *Loc, RelType Type, uint64_t Val) const override;
120 void relaxTlsGdToIe(uint8_t *Loc, RelType Type, uint64_t Val) const override;
121 void relaxTlsGdToLe(uint8_t *Loc, RelType Type, uint64_t Val) const override;
122 void relaxTlsLdToLe(uint8_t *Loc, RelType Type, uint64_t Val) const override;
123 void relaxTlsIeToLe(uint8_t *Loc, RelType Type, uint64_t Val) const override;
125 bool adjustPrologueForCrossSplitStack(uint8_t *Loc, uint8_t *End,
189 static void writeInstrFromHalf16(uint8_t *Loc, uint32_t Instr) { in writeInstrFromHalf16() argument
190 write32(Loc - (Config->EKind == ELF64BEKind ? 2 : 0), Instr); in writeInstrFromHalf16()
193 static uint32_t readInstrFromHalf16(const uint8_t *Loc) { in readInstrFromHalf16() argument
194 return read32(Loc - (Config->EKind == ELF64BEKind ? 2 : 0)); in readInstrFromHalf16()
256 void PPC64::relaxTlsGdToLe(uint8_t *Loc, RelType Type, uint64_t Val) const { in relaxTlsGdToLe() argument
274 writeInstrFromHalf16(Loc, 0x60000000); // nop in relaxTlsGdToLe()
278 writeInstrFromHalf16(Loc, 0x3c6d0000); // addis r3, r13 in relaxTlsGdToLe()
279 relocateOne(Loc, R_PPC64_TPREL16_HA, Val); in relaxTlsGdToLe()
282 write32(Loc, 0x60000000); // nop in relaxTlsGdToLe()
283 write32(Loc + 4, 0x38630000); // addi r3, r3 in relaxTlsGdToLe()
287 relocateOne(Loc + 4 + (Config->EKind == ELF64BEKind ? 2 : 0), in relaxTlsGdToLe()
295 void PPC64::relaxTlsLdToLe(uint8_t *Loc, RelType Type, uint64_t Val) const { in relaxTlsLdToLe() argument
313 writeInstrFromHalf16(Loc, 0x60000000); // nop in relaxTlsLdToLe()
316 writeInstrFromHalf16(Loc, 0x3c6d0000); // addis r3, r13, 0 in relaxTlsLdToLe()
319 write32(Loc, 0x60000000); // nop in relaxTlsLdToLe()
320 write32(Loc + 4, 0x38631000); // addi r3, r3, 4096 in relaxTlsLdToLe()
332 relocateOne(Loc, Type, Val); in relaxTlsLdToLe()
365 void PPC64::relaxTlsIeToLe(uint8_t *Loc, RelType Type, uint64_t Val) const { in relaxTlsIeToLe() argument
388 write32(Loc - Offset, 0x60000000); // nop in relaxTlsIeToLe()
392 uint32_t RegNo = read32(Loc - Offset) & 0x03E00000; // bits 6-10 in relaxTlsIeToLe()
393 write32(Loc - Offset, 0x3C0D0000 | RegNo); // addis RegNo, r13 in relaxTlsIeToLe()
394 relocateOne(Loc, R_PPC64_TPREL16_HA, Val); in relaxTlsIeToLe()
398 uint32_t PrimaryOp = getPrimaryOpCode(read32(Loc)); in relaxTlsIeToLe()
401 uint32_t SecondaryOp = (read32(Loc) & 0x000007FE) >> 1; // bits 21-30 in relaxTlsIeToLe()
403 write32(Loc, ((DFormOp << 26) | (read32(Loc) & 0x03FFFFFF))); in relaxTlsIeToLe()
404 relocateOne(Loc + Offset, R_PPC64_TPREL16_LO, Val); in relaxTlsIeToLe()
414 const uint8_t *Loc) const { in getRelExpr()
614 void PPC64::relocateOne(uint8_t *Loc, RelType Type, uint64_t Val) const { in relocateOne() argument
626 checkAlignment(Loc, Val, 4, Type); in relocateOne()
628 uint8_t AALK = Loc[3]; in relocateOne()
629 write16(Loc + 2, (AALK & 3) | (Val & 0xfffc)); in relocateOne()
634 checkInt(Loc, Val, 16, OriginalType); in relocateOne()
635 write16(Loc, Val); in relocateOne()
639 checkInt(Loc, Val, 16, OriginalType); in relocateOne()
642 uint16_t Mask = isDQFormInstruction(readInstrFromHalf16(Loc)) ? 0xF : 0x3; in relocateOne()
643 checkAlignment(Loc, lo(Val), Mask + 1, OriginalType); in relocateOne()
644 write16(Loc, (read16(Loc) & Mask) | lo(Val)); in relocateOne()
650 writeInstrFromHalf16(Loc, 0x60000000); in relocateOne()
652 write16(Loc, ha(Val)); in relocateOne()
657 write16(Loc, hi(Val)); in relocateOne()
661 write16(Loc, higher(Val)); in relocateOne()
665 write16(Loc, highera(Val)); in relocateOne()
669 write16(Loc, highest(Val)); in relocateOne()
673 write16(Loc, highesta(Val)); in relocateOne()
682 uint32_t Instr = readInstrFromHalf16(Loc); in relocateOne()
684 error(getErrorLocation(Loc) + in relocateOne()
688 writeInstrFromHalf16(Loc, Instr); in relocateOne()
690 write16(Loc, lo(Val)); in relocateOne()
696 uint32_t Inst = readInstrFromHalf16(Loc); in relocateOne()
698 checkAlignment(Loc, lo(Val), Mask + 1, OriginalType); in relocateOne()
704 error(getErrorLocation(Loc) + in relocateOne()
708 writeInstrFromHalf16(Loc, Inst); in relocateOne()
710 write16(Loc, (read16(Loc) & Mask) | lo(Val)); in relocateOne()
714 checkInt(Loc, Val, 32, Type); in relocateOne()
715 write32(Loc, Val); in relocateOne()
720 write64(Loc, Val); in relocateOne()
724 checkInt(Loc, Val, 16, Type); in relocateOne()
725 checkAlignment(Loc, Val, 4, Type); in relocateOne()
726 write32(Loc, (read32(Loc) & ~Mask) | (Val & Mask)); in relocateOne()
731 checkInt(Loc, Val, 26, Type); in relocateOne()
732 checkAlignment(Loc, Val, 4, Type); in relocateOne()
733 write32(Loc, (read32(Loc) & ~Mask) | (Val & Mask)); in relocateOne()
737 write64(Loc, Val - DynamicThreadPointerOffset); in relocateOne()
740 error(getErrorLocation(Loc) + "unrecognized reloc " + Twine(Type)); in relocateOne()
809 void PPC64::relaxTlsGdToIe(uint8_t *Loc, RelType Type, uint64_t Val) const { in relaxTlsGdToIe() argument
814 relocateOne(Loc, R_PPC64_GOT_TPREL16_HA, Val); in relaxTlsGdToIe()
819 uint32_t InputRegister = (readInstrFromHalf16(Loc) & (0x1f << 16)); in relaxTlsGdToIe()
820 writeInstrFromHalf16(Loc, 0xE8600000 | InputRegister); in relaxTlsGdToIe()
821 relocateOne(Loc, R_PPC64_GOT_TPREL16_LO_DS, Val); in relaxTlsGdToIe()
825 write32(Loc, 0x60000000); // bl __tls_get_addr(sym@tlsgd) --> nop in relaxTlsGdToIe()
826 write32(Loc + 4, 0x7c636A14); // nop --> add r3, r3, r13 in relaxTlsGdToIe()
861 bool PPC64::adjustPrologueForCrossSplitStack(uint8_t *Loc, uint8_t *End, in adjustPrologueForCrossSplitStack() argument
865 Loc += getPPC64GlobalEntryToLocalEntryOffset(StOther); in adjustPrologueForCrossSplitStack()
871 if (Loc + 12 >= End) in adjustPrologueForCrossSplitStack()
875 if (read32(Loc) != 0xe80d8fc0) in adjustPrologueForCrossSplitStack()
882 int32_t FirstInstr = read32(Loc + 4); in adjustPrologueForCrossSplitStack()
893 uint32_t SecondInstr = read32(Loc + 8); in adjustPrologueForCrossSplitStack()
917 error(getErrorLocation(Loc) + "split-stack prologue adjustment overflows"); in adjustPrologueForCrossSplitStack()
927 write32(Loc + 4, 0x3D810000 | (uint16_t)HiImm); in adjustPrologueForCrossSplitStack()
930 write32(Loc + 8, SecondInstr); in adjustPrologueForCrossSplitStack()
933 write32(Loc + 4, (0x39810000) | (uint16_t)LoImm); in adjustPrologueForCrossSplitStack()
934 write32(Loc + 8, 0x60000000); in adjustPrologueForCrossSplitStack()