Lines Matching refs:Off

82 static void applySecRel(const SectionChunk *Sec, uint8_t *Off,  in applySecRel()  argument
91 add32(Off, SecRel); in applySecRel()
94 static void applySecIdx(uint8_t *Off, OutputSection *OS) { in applySecIdx() argument
99 add16(Off, OS->SectionIndex); in applySecIdx()
101 add16(Off, DefinedAbsolute::NumOutputSections + 1); in applySecIdx()
104 void SectionChunk::applyRelX64(uint8_t *Off, uint16_t Type, OutputSection *OS, in applyRelX64() argument
107 case IMAGE_REL_AMD64_ADDR32: add32(Off, S + Config->ImageBase); break; in applyRelX64()
108 case IMAGE_REL_AMD64_ADDR64: add64(Off, S + Config->ImageBase); break; in applyRelX64()
109 case IMAGE_REL_AMD64_ADDR32NB: add32(Off, S); break; in applyRelX64()
110 case IMAGE_REL_AMD64_REL32: add32(Off, S - P - 4); break; in applyRelX64()
111 case IMAGE_REL_AMD64_REL32_1: add32(Off, S - P - 5); break; in applyRelX64()
112 case IMAGE_REL_AMD64_REL32_2: add32(Off, S - P - 6); break; in applyRelX64()
113 case IMAGE_REL_AMD64_REL32_3: add32(Off, S - P - 7); break; in applyRelX64()
114 case IMAGE_REL_AMD64_REL32_4: add32(Off, S - P - 8); break; in applyRelX64()
115 case IMAGE_REL_AMD64_REL32_5: add32(Off, S - P - 9); break; in applyRelX64()
116 case IMAGE_REL_AMD64_SECTION: applySecIdx(Off, OS); break; in applyRelX64()
117 case IMAGE_REL_AMD64_SECREL: applySecRel(this, Off, OS, S); break; in applyRelX64()
124 void SectionChunk::applyRelX86(uint8_t *Off, uint16_t Type, OutputSection *OS, in applyRelX86() argument
128 case IMAGE_REL_I386_DIR32: add32(Off, S + Config->ImageBase); break; in applyRelX86()
129 case IMAGE_REL_I386_DIR32NB: add32(Off, S); break; in applyRelX86()
130 case IMAGE_REL_I386_REL32: add32(Off, S - P - 4); break; in applyRelX86()
131 case IMAGE_REL_I386_SECTION: applySecIdx(Off, OS); break; in applyRelX86()
132 case IMAGE_REL_I386_SECREL: applySecRel(this, Off, OS, S); break; in applyRelX86()
139 static void applyMOV(uint8_t *Off, uint16_t V) { in applyMOV() argument
140 write16le(Off, (read16le(Off) & 0xfbf0) | ((V & 0x800) >> 1) | ((V >> 12) & 0xf)); in applyMOV()
141 write16le(Off + 2, (read16le(Off + 2) & 0x8f00) | ((V & 0x700) << 4) | (V & 0xff)); in applyMOV()
144 static uint16_t readMOV(uint8_t *Off, bool MOVT) { in readMOV() argument
145 uint16_t Op1 = read16le(Off); in readMOV()
149 uint16_t Op2 = read16le(Off + 2); in readMOV()
157 void applyMOV32T(uint8_t *Off, uint32_t V) { in applyMOV32T() argument
158 uint16_t ImmW = readMOV(Off, false); // read MOVW operand in applyMOV32T()
159 uint16_t ImmT = readMOV(Off + 4, true); // read MOVT operand in applyMOV32T()
162 applyMOV(Off, V); // set MOVW operand in applyMOV32T()
163 applyMOV(Off + 4, V >> 16); // set MOVT operand in applyMOV32T()
166 static void applyBranch20T(uint8_t *Off, int32_t V) { in applyBranch20T() argument
172 or16(Off, (S << 10) | ((V >> 12) & 0x3f)); in applyBranch20T()
173 or16(Off + 2, (J1 << 13) | (J2 << 11) | ((V >> 1) & 0x7ff)); in applyBranch20T()
176 void applyBranch24T(uint8_t *Off, int32_t V) { in applyBranch24T() argument
182 or16(Off, (S << 10) | ((V >> 12) & 0x3ff)); in applyBranch24T()
184 write16le(Off + 2, (read16le(Off + 2) & 0xd000) | (J1 << 13) | (J2 << 11) | ((V >> 1) & 0x7ff)); in applyBranch24T()
187 void SectionChunk::applyRelARM(uint8_t *Off, uint16_t Type, OutputSection *OS, in applyRelARM() argument
194 case IMAGE_REL_ARM_ADDR32: add32(Off, SX + Config->ImageBase); break; in applyRelARM()
195 case IMAGE_REL_ARM_ADDR32NB: add32(Off, SX); break; in applyRelARM()
196 case IMAGE_REL_ARM_MOV32T: applyMOV32T(Off, SX + Config->ImageBase); break; in applyRelARM()
197 case IMAGE_REL_ARM_BRANCH20T: applyBranch20T(Off, SX - P - 4); break; in applyRelARM()
198 case IMAGE_REL_ARM_BRANCH24T: applyBranch24T(Off, SX - P - 4); break; in applyRelARM()
199 case IMAGE_REL_ARM_BLX23T: applyBranch24T(Off, SX - P - 4); break; in applyRelARM()
200 case IMAGE_REL_ARM_SECTION: applySecIdx(Off, OS); break; in applyRelARM()
201 case IMAGE_REL_ARM_SECREL: applySecRel(this, Off, OS, S); break; in applyRelARM()
211 void applyArm64Addr(uint8_t *Off, uint64_t S, uint64_t P, int Shift) { in applyArm64Addr() argument
212 uint32_t Orig = read32le(Off); in applyArm64Addr()
219 write32le(Off, (Orig & ~Mask) | ImmLo | ImmHi); in applyArm64Addr()
225 void applyArm64Imm(uint8_t *Off, uint64_t Imm, uint32_t RangeLimit) { in applyArm64Imm() argument
226 uint32_t Orig = read32le(Off); in applyArm64Imm()
229 write32le(Off, Orig | ((Imm & (0xFFF >> RangeLimit)) << 10)); in applyArm64Imm()
240 static void applyArm64Ldr(uint8_t *Off, uint64_t Imm) { in applyArm64Ldr() argument
241 uint32_t Orig = read32le(Off); in applyArm64Ldr()
249 applyArm64Imm(Off, Imm >> Size, Size); in applyArm64Ldr()
252 static void applySecRelLow12A(const SectionChunk *Sec, uint8_t *Off, in applySecRelLow12A() argument
255 applyArm64Imm(Off, (S - OS->getRVA()) & 0xfff, 0); in applySecRelLow12A()
258 static void applySecRelHigh12A(const SectionChunk *Sec, uint8_t *Off, in applySecRelHigh12A() argument
268 applyArm64Imm(Off, SecRel & 0xfff, 0); in applySecRelHigh12A()
271 static void applySecRelLdr(const SectionChunk *Sec, uint8_t *Off, in applySecRelLdr() argument
274 applyArm64Ldr(Off, (S - OS->getRVA()) & 0xfff); in applySecRelLdr()
277 void applyArm64Branch26(uint8_t *Off, int64_t V) { in applyArm64Branch26() argument
280 or32(Off, (V & 0x0FFFFFFC) >> 2); in applyArm64Branch26()
283 static void applyArm64Branch19(uint8_t *Off, int64_t V) { in applyArm64Branch19() argument
286 or32(Off, (V & 0x001FFFFC) << 3); in applyArm64Branch19()
289 static void applyArm64Branch14(uint8_t *Off, int64_t V) { in applyArm64Branch14() argument
292 or32(Off, (V & 0x0000FFFC) << 3); in applyArm64Branch14()
295 void SectionChunk::applyRelARM64(uint8_t *Off, uint16_t Type, OutputSection *OS, in applyRelARM64() argument
298 case IMAGE_REL_ARM64_PAGEBASE_REL21: applyArm64Addr(Off, S, P, 12); break; in applyRelARM64()
299 case IMAGE_REL_ARM64_REL21: applyArm64Addr(Off, S, P, 0); break; in applyRelARM64()
300 case IMAGE_REL_ARM64_PAGEOFFSET_12A: applyArm64Imm(Off, S & 0xfff, 0); break; in applyRelARM64()
301 case IMAGE_REL_ARM64_PAGEOFFSET_12L: applyArm64Ldr(Off, S & 0xfff); break; in applyRelARM64()
302 case IMAGE_REL_ARM64_BRANCH26: applyArm64Branch26(Off, S - P); break; in applyRelARM64()
303 case IMAGE_REL_ARM64_BRANCH19: applyArm64Branch19(Off, S - P); break; in applyRelARM64()
304 case IMAGE_REL_ARM64_BRANCH14: applyArm64Branch14(Off, S - P); break; in applyRelARM64()
305 case IMAGE_REL_ARM64_ADDR32: add32(Off, S + Config->ImageBase); break; in applyRelARM64()
306 case IMAGE_REL_ARM64_ADDR32NB: add32(Off, S); break; in applyRelARM64()
307 case IMAGE_REL_ARM64_ADDR64: add64(Off, S + Config->ImageBase); break; in applyRelARM64()
308 case IMAGE_REL_ARM64_SECREL: applySecRel(this, Off, OS, S); break; in applyRelARM64()
309 case IMAGE_REL_ARM64_SECREL_LOW12A: applySecRelLow12A(this, Off, OS, S); break; in applyRelARM64()
310 case IMAGE_REL_ARM64_SECREL_HIGH12A: applySecRelHigh12A(this, Off, OS, S); break; in applyRelARM64()
311 case IMAGE_REL_ARM64_SECREL_LOW12L: applySecRelLdr(this, Off, OS, S); break; in applyRelARM64()
312 case IMAGE_REL_ARM64_SECTION: applySecIdx(Off, OS); break; in applyRelARM64()
367 uint8_t *Off = Buf + OutputSectionOff + Rel.VirtualAddress; in writeTo() local
395 applyRelX64(Off, Rel.Type, OS, S, P); in writeTo()
398 applyRelX86(Off, Rel.Type, OS, S, P); in writeTo()
401 applyRelARM(Off, Rel.Type, OS, S, P); in writeTo()
404 applyRelARM64(Off, Rel.Type, OS, S, P); in writeTo()
659 int64_t Off = ImpSymbol->getRVA() & 0xfff; in writeTo() local
662 applyArm64Ldr(Buf + OutputSectionOff + 4, Off); in writeTo()
852 size_t Off = Builder.getOffset(toStringRef(C->getContents())); in finalizeContents() local
854 C->setRVA(RVA + Off); in finalizeContents()
855 C->OutputSectionOff = OutputSectionOff + Off; in finalizeContents()