Lines Matching full:off

86 static void applySecRel(const SectionChunk *sec, uint8_t *off,  in applySecRel()  argument
95 add32(off, secRel); in applySecRel()
98 static void applySecIdx(uint8_t *off, OutputSection *os, in applySecIdx() argument
108 add16(off, os->sectionIndex); in applySecIdx()
110 add16(off, numOutputSections + 1); in applySecIdx()
113 void SectionChunk::applyRelX64(uint8_t *off, uint16_t type, OutputSection *os, in applyRelX64() argument
118 add32(off, s + imageBase); in applyRelX64()
121 add64(off, s + imageBase); in applyRelX64()
123 case IMAGE_REL_AMD64_ADDR32NB: add32(off, s); break; in applyRelX64()
124 case IMAGE_REL_AMD64_REL32: add32(off, s - p - 4); break; in applyRelX64()
125 case IMAGE_REL_AMD64_REL32_1: add32(off, s - p - 5); break; in applyRelX64()
126 case IMAGE_REL_AMD64_REL32_2: add32(off, s - p - 6); break; in applyRelX64()
127 case IMAGE_REL_AMD64_REL32_3: add32(off, s - p - 7); break; in applyRelX64()
128 case IMAGE_REL_AMD64_REL32_4: add32(off, s - p - 8); break; in applyRelX64()
129 case IMAGE_REL_AMD64_REL32_5: add32(off, s - p - 9); break; in applyRelX64()
131 applySecIdx(off, os, file->ctx.outputSections.size()); in applyRelX64()
133 case IMAGE_REL_AMD64_SECREL: applySecRel(this, off, os, s); break; in applyRelX64()
140 void SectionChunk::applyRelX86(uint8_t *off, uint16_t type, OutputSection *os, in applyRelX86() argument
146 add32(off, s + imageBase); in applyRelX86()
148 case IMAGE_REL_I386_DIR32NB: add32(off, s); break; in applyRelX86()
149 case IMAGE_REL_I386_REL32: add32(off, s - p - 4); break; in applyRelX86()
151 applySecIdx(off, os, file->ctx.outputSections.size()); in applyRelX86()
153 case IMAGE_REL_I386_SECREL: applySecRel(this, off, os, s); break; in applyRelX86()
160 static void applyMOV(uint8_t *off, uint16_t v) { in applyMOV() argument
161 write16le(off, (read16le(off) & 0xfbf0) | ((v & 0x800) >> 1) | ((v >> 12) & 0xf)); in applyMOV()
162 write16le(off + 2, (read16le(off + 2) & 0x8f00) | ((v & 0x700) << 4) | (v & 0xff)); in applyMOV()
165 static uint16_t readMOV(uint8_t *off, bool movt) { in readMOV() argument
166 uint16_t op1 = read16le(off); in readMOV()
170 uint16_t op2 = read16le(off + 2); in readMOV()
178 void applyMOV32T(uint8_t *off, uint32_t v) { in applyMOV32T() argument
179 uint16_t immW = readMOV(off, false); // read MOVW operand in applyMOV32T()
180 uint16_t immT = readMOV(off + 4, true); // read MOVT operand in applyMOV32T()
183 applyMOV(off, v); // set MOVW operand in applyMOV32T()
184 applyMOV(off + 4, v >> 16); // set MOVT operand in applyMOV32T()
187 static void applyBranch20T(uint8_t *off, int32_t v) { in applyBranch20T() argument
193 or16(off, (s << 10) | ((v >> 12) & 0x3f)); in applyBranch20T()
194 or16(off + 2, (j1 << 13) | (j2 << 11) | ((v >> 1) & 0x7ff)); in applyBranch20T()
197 void applyBranch24T(uint8_t *off, int32_t v) { in applyBranch24T() argument
203 or16(off, (s << 10) | ((v >> 12) & 0x3ff)); in applyBranch24T()
205 write16le(off + 2, (read16le(off + 2) & 0xd000) | (j1 << 13) | (j2 << 11) | ((v >> 1) & 0x7ff)); in applyBranch24T()
208 void SectionChunk::applyRelARM(uint8_t *off, uint16_t type, OutputSection *os, in applyRelARM() argument
217 add32(off, sx + imageBase); in applyRelARM()
219 case IMAGE_REL_ARM_ADDR32NB: add32(off, sx); break; in applyRelARM()
221 applyMOV32T(off, sx + imageBase); in applyRelARM()
223 case IMAGE_REL_ARM_BRANCH20T: applyBranch20T(off, sx - p - 4); break; in applyRelARM()
224 case IMAGE_REL_ARM_BRANCH24T: applyBranch24T(off, sx - p - 4); break; in applyRelARM()
225 case IMAGE_REL_ARM_BLX23T: applyBranch24T(off, sx - p - 4); break; in applyRelARM()
227 applySecIdx(off, os, file->ctx.outputSections.size()); in applyRelARM()
229 case IMAGE_REL_ARM_SECREL: applySecRel(this, off, os, s); break; in applyRelARM()
230 case IMAGE_REL_ARM_REL32: add32(off, sx - p - 4); break; in applyRelARM()
240 void applyArm64Addr(uint8_t *off, uint64_t s, uint64_t p, int shift) { in applyArm64Addr() argument
241 uint32_t orig = read32le(off); in applyArm64Addr()
249 write32le(off, (orig & ~mask) | immLo | immHi); in applyArm64Addr()
255 void applyArm64Imm(uint8_t *off, uint64_t imm, uint32_t rangeLimit) { in applyArm64Imm() argument
256 uint32_t orig = read32le(off); in applyArm64Imm()
259 write32le(off, orig | ((imm & (0xFFF >> rangeLimit)) << 10)); in applyArm64Imm()
270 static void applyArm64Ldr(uint8_t *off, uint64_t imm) { in applyArm64Ldr() argument
271 uint32_t orig = read32le(off); in applyArm64Ldr()
279 applyArm64Imm(off, imm >> size, size); in applyArm64Ldr()
282 static void applySecRelLow12A(const SectionChunk *sec, uint8_t *off, in applySecRelLow12A() argument
285 applyArm64Imm(off, (s - os->getRVA()) & 0xfff, 0); in applySecRelLow12A()
288 static void applySecRelHigh12A(const SectionChunk *sec, uint8_t *off, in applySecRelHigh12A() argument
298 applyArm64Imm(off, secRel & 0xfff, 0); in applySecRelHigh12A()
301 static void applySecRelLdr(const SectionChunk *sec, uint8_t *off, in applySecRelLdr() argument
304 applyArm64Ldr(off, (s - os->getRVA()) & 0xfff); in applySecRelLdr()
307 void applyArm64Branch26(uint8_t *off, int64_t v) { in applyArm64Branch26() argument
310 or32(off, (v & 0x0FFFFFFC) >> 2); in applyArm64Branch26()
313 static void applyArm64Branch19(uint8_t *off, int64_t v) { in applyArm64Branch19() argument
316 or32(off, (v & 0x001FFFFC) << 3); in applyArm64Branch19()
319 static void applyArm64Branch14(uint8_t *off, int64_t v) { in applyArm64Branch14() argument
322 or32(off, (v & 0x0000FFFC) << 3); in applyArm64Branch14()
325 void SectionChunk::applyRelARM64(uint8_t *off, uint16_t type, OutputSection *os, in applyRelARM64() argument
329 case IMAGE_REL_ARM64_PAGEBASE_REL21: applyArm64Addr(off, s, p, 12); break; in applyRelARM64()
330 case IMAGE_REL_ARM64_REL21: applyArm64Addr(off, s, p, 0); break; in applyRelARM64()
331 case IMAGE_REL_ARM64_PAGEOFFSET_12A: applyArm64Imm(off, s & 0xfff, 0); break; in applyRelARM64()
332 case IMAGE_REL_ARM64_PAGEOFFSET_12L: applyArm64Ldr(off, s & 0xfff); break; in applyRelARM64()
333 case IMAGE_REL_ARM64_BRANCH26: applyArm64Branch26(off, s - p); break; in applyRelARM64()
334 case IMAGE_REL_ARM64_BRANCH19: applyArm64Branch19(off, s - p); break; in applyRelARM64()
335 case IMAGE_REL_ARM64_BRANCH14: applyArm64Branch14(off, s - p); break; in applyRelARM64()
337 add32(off, s + imageBase); in applyRelARM64()
339 case IMAGE_REL_ARM64_ADDR32NB: add32(off, s); break; in applyRelARM64()
341 add64(off, s + imageBase); in applyRelARM64()
343 case IMAGE_REL_ARM64_SECREL: applySecRel(this, off, os, s); break; in applyRelARM64()
344 case IMAGE_REL_ARM64_SECREL_LOW12A: applySecRelLow12A(this, off, os, s); break; in applyRelARM64()
345 case IMAGE_REL_ARM64_SECREL_HIGH12A: applySecRelHigh12A(this, off, os, s); break; in applyRelARM64()
346 case IMAGE_REL_ARM64_SECREL_LOW12L: applySecRelLdr(this, off, os, s); break; in applyRelARM64()
348 applySecIdx(off, os, file->ctx.outputSections.size()); in applyRelARM64()
350 case IMAGE_REL_ARM64_REL32: add32(off, s - p - 4); break; in applyRelARM64()
421 void SectionChunk::applyRelocation(uint8_t *off, in applyRelocation() argument
448 applyRelX64(off, rel.Type, os, s, p, imageBase); in applyRelocation()
451 applyRelX86(off, rel.Type, os, s, p, imageBase); in applyRelocation()
454 applyRelARM(off, rel.Type, os, s, p, imageBase); in applyRelocation()
457 applyRelARM64(off, rel.Type, os, s, p, imageBase); in applyRelocation()
811 int64_t off = impSymbol->getRVA() & 0xfff; in writeTo() local
814 applyArm64Ldr(buf + 4, off); in writeTo()
1048 size_t off = builder.getOffset(toStringRef(c->getContents())); in assignSubsectionRVAs() local
1049 c->setRVA(rva + off); in assignSubsectionRVAs()