Version = version
)
+const (
+ ElfRelocOffset = 256
+ MachoRelocOffset = 2048 // reserve enough space for ELF relocations
+)
+
func goarm() int {
switch v := envOr("GOARM", defaultGOARM); v {
case "5":
switch r.Type {
default:
- if r.Type >= 256 {
+ if r.Type >= objabi.ElfRelocOffset {
ld.Errorf(s, "unexpected relocation type %d (%s)", r.Type, sym.RelocName(ctxt.Arch, r.Type))
return false
}
// Handle relocations found in ELF object files.
- case 256 + objabi.RelocType(elf.R_X86_64_PC32):
+ case objabi.ElfRelocOffset + objabi.RelocType(elf.R_X86_64_PC32):
if targ.Type == sym.SDYNIMPORT {
ld.Errorf(s, "unexpected R_X86_64_PC32 relocation for dynamic symbol %s", targ.Name)
}
r.Add += 4
return true
- case 256 + objabi.RelocType(elf.R_X86_64_PC64):
+ case objabi.ElfRelocOffset + objabi.RelocType(elf.R_X86_64_PC64):
if targ.Type == sym.SDYNIMPORT {
ld.Errorf(s, "unexpected R_X86_64_PC64 relocation for dynamic symbol %s", targ.Name)
}
r.Add += 8
return true
- case 256 + objabi.RelocType(elf.R_X86_64_PLT32):
+ case objabi.ElfRelocOffset + objabi.RelocType(elf.R_X86_64_PLT32):
r.Type = objabi.R_PCREL
r.Add += 4
if targ.Type == sym.SDYNIMPORT {
return true
- case 256 + objabi.RelocType(elf.R_X86_64_GOTPCREL), 256 + objabi.RelocType(elf.R_X86_64_GOTPCRELX), 256 + objabi.RelocType(elf.R_X86_64_REX_GOTPCRELX):
+ case objabi.ElfRelocOffset + objabi.RelocType(elf.R_X86_64_GOTPCREL),
+ objabi.ElfRelocOffset + objabi.RelocType(elf.R_X86_64_GOTPCRELX),
+ objabi.ElfRelocOffset + objabi.RelocType(elf.R_X86_64_REX_GOTPCRELX):
if targ.Type != sym.SDYNIMPORT {
// have symbol
if r.Off >= 2 && s.P[r.Off-2] == 0x8b {
r.Add += int64(targ.Got())
return true
- case 256 + objabi.RelocType(elf.R_X86_64_64):
+ case objabi.ElfRelocOffset + objabi.RelocType(elf.R_X86_64_64):
if targ.Type == sym.SDYNIMPORT {
ld.Errorf(s, "unexpected R_X86_64_64 relocation for dynamic symbol %s", targ.Name)
}
return true
// Handle relocations found in Mach-O object files.
- case 512 + ld.MACHO_X86_64_RELOC_UNSIGNED*2 + 0,
- 512 + ld.MACHO_X86_64_RELOC_SIGNED*2 + 0,
- 512 + ld.MACHO_X86_64_RELOC_BRANCH*2 + 0:
+ case objabi.MachoRelocOffset + ld.MACHO_X86_64_RELOC_UNSIGNED*2 + 0,
+ objabi.MachoRelocOffset + ld.MACHO_X86_64_RELOC_SIGNED*2 + 0,
+ objabi.MachoRelocOffset + ld.MACHO_X86_64_RELOC_BRANCH*2 + 0:
// TODO: What is the difference between all these?
r.Type = objabi.R_ADDR
}
return true
- case 512 + ld.MACHO_X86_64_RELOC_BRANCH*2 + 1:
+ case objabi.MachoRelocOffset + ld.MACHO_X86_64_RELOC_BRANCH*2 + 1:
if targ.Type == sym.SDYNIMPORT {
addpltsym(ctxt, targ)
r.Sym = ctxt.Syms.Lookup(".plt", 0)
}
fallthrough
- case 512 + ld.MACHO_X86_64_RELOC_UNSIGNED*2 + 1,
- 512 + ld.MACHO_X86_64_RELOC_SIGNED*2 + 1,
- 512 + ld.MACHO_X86_64_RELOC_SIGNED_1*2 + 1,
- 512 + ld.MACHO_X86_64_RELOC_SIGNED_2*2 + 1,
- 512 + ld.MACHO_X86_64_RELOC_SIGNED_4*2 + 1:
+ case objabi.MachoRelocOffset + ld.MACHO_X86_64_RELOC_UNSIGNED*2 + 1,
+ objabi.MachoRelocOffset + ld.MACHO_X86_64_RELOC_SIGNED*2 + 1,
+ objabi.MachoRelocOffset + ld.MACHO_X86_64_RELOC_SIGNED_1*2 + 1,
+ objabi.MachoRelocOffset + ld.MACHO_X86_64_RELOC_SIGNED_2*2 + 1,
+ objabi.MachoRelocOffset + ld.MACHO_X86_64_RELOC_SIGNED_4*2 + 1:
r.Type = objabi.R_PCREL
if targ.Type == sym.SDYNIMPORT {
}
return true
- case 512 + ld.MACHO_X86_64_RELOC_GOT_LOAD*2 + 1:
+ case objabi.MachoRelocOffset + ld.MACHO_X86_64_RELOC_GOT_LOAD*2 + 1:
if targ.Type != sym.SDYNIMPORT {
// have symbol
// turn MOVQ of GOT entry into LEAQ of symbol itself
}
fallthrough
- case 512 + ld.MACHO_X86_64_RELOC_GOT*2 + 1:
+ case objabi.MachoRelocOffset + ld.MACHO_X86_64_RELOC_GOT*2 + 1:
if targ.Type != sym.SDYNIMPORT {
ld.Errorf(s, "unexpected GOT reloc for non-dynamic symbol %s", targ.Name)
}
rela.AddUint64(ctxt.Arch, ld.ELF64_R_INFO(uint32(targ.Dynid), uint32(elf.R_X86_64_32)))
}
rela.AddUint64(ctxt.Arch, uint64(r.Add))
- r.Type = 256 // ignore during relocsym
+ r.Type = objabi.ElfRelocOffset // ignore during relocsym
return true
}
s.Value = got.Size
got.AddUint64(ctxt.Arch, 0)
ctxt.Syms.Lookup(".linkedit.got", 0).AddUint32(ctxt.Arch, uint32(targ.Dynid))
- r.Type = 256 // ignore during relocsym
+ r.Type = objabi.ElfRelocOffset // ignore during relocsym
return true
}
}
switch r.Type {
default:
- if r.Type >= 256 {
+ if r.Type >= objabi.ElfRelocOffset {
ld.Errorf(s, "unexpected relocation type %d (%s)", r.Type, sym.RelocName(ctxt.Arch, r.Type))
return false
}
// Handle relocations found in ELF object files.
- case 256 + objabi.RelocType(elf.R_ARM_PLT32):
+ case objabi.ElfRelocOffset + objabi.RelocType(elf.R_ARM_PLT32):
r.Type = objabi.R_CALLARM
if targ.Type == sym.SDYNIMPORT {
return true
- case 256 + objabi.RelocType(elf.R_ARM_THM_PC22): // R_ARM_THM_CALL
+ case objabi.ElfRelocOffset + objabi.RelocType(elf.R_ARM_THM_PC22): // R_ARM_THM_CALL
ld.Exitf("R_ARM_THM_CALL, are you using -marm?")
return false
- case 256 + objabi.RelocType(elf.R_ARM_GOT32): // R_ARM_GOT_BREL
+ case objabi.ElfRelocOffset + objabi.RelocType(elf.R_ARM_GOT32): // R_ARM_GOT_BREL
if targ.Type != sym.SDYNIMPORT {
addgotsyminternal(ctxt, targ)
} else {
r.Add += int64(targ.Got())
return true
- case 256 + objabi.RelocType(elf.R_ARM_GOT_PREL): // GOT(nil) + A - nil
+ case objabi.ElfRelocOffset + objabi.RelocType(elf.R_ARM_GOT_PREL): // GOT(nil) + A - nil
if targ.Type != sym.SDYNIMPORT {
addgotsyminternal(ctxt, targ)
} else {
r.Add += int64(targ.Got()) + 4
return true
- case 256 + objabi.RelocType(elf.R_ARM_GOTOFF): // R_ARM_GOTOFF32
+ case objabi.ElfRelocOffset + objabi.RelocType(elf.R_ARM_GOTOFF): // R_ARM_GOTOFF32
r.Type = objabi.R_GOTOFF
return true
- case 256 + objabi.RelocType(elf.R_ARM_GOTPC): // R_ARM_BASE_PREL
+ case objabi.ElfRelocOffset + objabi.RelocType(elf.R_ARM_GOTPC): // R_ARM_BASE_PREL
r.Type = objabi.R_PCREL
r.Sym = ctxt.Syms.Lookup(".got", 0)
r.Add += 4
return true
- case 256 + objabi.RelocType(elf.R_ARM_CALL):
+ case objabi.ElfRelocOffset + objabi.RelocType(elf.R_ARM_CALL):
r.Type = objabi.R_CALLARM
if targ.Type == sym.SDYNIMPORT {
addpltsym(ctxt, targ)
return true
- case 256 + objabi.RelocType(elf.R_ARM_REL32): // R_ARM_REL32
+ case objabi.ElfRelocOffset + objabi.RelocType(elf.R_ARM_REL32): // R_ARM_REL32
r.Type = objabi.R_PCREL
r.Add += 4
return true
- case 256 + objabi.RelocType(elf.R_ARM_ABS32):
+ case objabi.ElfRelocOffset + objabi.RelocType(elf.R_ARM_ABS32):
if targ.Type == sym.SDYNIMPORT {
ld.Errorf(s, "unexpected R_ARM_ABS32 relocation for dynamic symbol %s", targ.Name)
}
return true
// we can just ignore this, because we are targeting ARM V5+ anyway
- case 256 + objabi.RelocType(elf.R_ARM_V4BX):
+ case objabi.ElfRelocOffset + objabi.RelocType(elf.R_ARM_V4BX):
if r.Sym != nil {
// R_ARM_V4BX is ABS relocation, so this symbol is a dummy symbol, ignore it
r.Sym.Type = 0
r.Sym = nil
return true
- case 256 + objabi.RelocType(elf.R_ARM_PC24),
- 256 + objabi.RelocType(elf.R_ARM_JUMP24):
+ case objabi.ElfRelocOffset + objabi.RelocType(elf.R_ARM_PC24),
+ objabi.ElfRelocOffset + objabi.RelocType(elf.R_ARM_JUMP24):
r.Type = objabi.R_CALLARM
if targ.Type == sym.SDYNIMPORT {
addpltsym(ctxt, targ)
}
}
- if r.Type >= 256 {
+ if r.Type >= objabi.ElfRelocOffset {
continue
}
if r.Siz == 0 { // informational relocation - no work to do
continue
}
- if r.Sym != nil && r.Sym.Type == sym.SDYNIMPORT || r.Type >= 256 {
+ if r.Sym != nil && r.Sym.Type == sym.SDYNIMPORT || r.Type >= objabi.ElfRelocOffset {
if r.Sym != nil && !r.Sym.Attr.Reachable() {
Errorf(s, "dynamic relocation to unreachable symbol %s", r.Sym.Name)
}
if !r.Sym.Attr.Reachable() {
continue
}
- if r.Type >= 256 {
+ if r.Type >= objabi.ElfRelocOffset {
continue
}
if r.Siz == 0 { // informational relocation
rp.Sym = elfsym.sym
}
- rp.Type = 256 + objabi.RelocType(info)
+ rp.Type = objabi.ElfRelocOffset + objabi.RelocType(info)
rp.Siz, err = relSize(arch, pn, uint32(info))
if err != nil {
return nil, 0, err
// handle reference to __IMPORT/__pointers.
// how much worse can this get?
// why are we supporting 386 on the mac anyway?
- rp.Type = 512 + MACHO_FAKE_GOTPCREL
+ rp.Type = objabi.MachoRelocOffset + MACHO_FAKE_GOTPCREL
// figure out which pointer this is a reference to.
k = int(uint64(ks.res1) + (uint64(rel.value)-ks.addr)/4)
}
rp.Siz = rel.length
- rp.Type = 512 + (objabi.RelocType(rel.type_) << 1) + objabi.RelocType(rel.pcrel)
+ rp.Type = objabi.MachoRelocOffset + (objabi.RelocType(rel.type_) << 1) + objabi.RelocType(rel.pcrel)
rp.Off = int32(rel.addr)
// Handle X86_64_RELOC_SIGNED referencing a section (rel->extrn == 0).
for _, s := range ctxt.Textp {
for i := range s.R {
r := &s.R[i]
- if r.Type != 256+objabi.RelocType(elf.R_PPC64_REL24) || r.Sym.Type != sym.SDYNIMPORT {
+ if r.Type != objabi.ElfRelocOffset+objabi.RelocType(elf.R_PPC64_REL24) || r.Sym.Type != sym.SDYNIMPORT {
continue
}
switch r.Type {
default:
- if r.Type >= 256 {
+ if r.Type >= objabi.ElfRelocOffset {
ld.Errorf(s, "unexpected relocation type %d (%s)", r.Type, sym.RelocName(ctxt.Arch, r.Type))
return false
}
// Handle relocations found in ELF object files.
- case 256 + objabi.RelocType(elf.R_PPC64_REL24):
+ case objabi.ElfRelocOffset + objabi.RelocType(elf.R_PPC64_REL24):
r.Type = objabi.R_CALLPOWER
// This is a local call, so the caller isn't setting
return true
- case 256 + objabi.RelocType(elf.R_PPC_REL32):
+ case objabi.ElfRelocOffset + objabi.RelocType(elf.R_PPC_REL32):
r.Type = objabi.R_PCREL
r.Add += 4
return true
- case 256 + objabi.RelocType(elf.R_PPC64_ADDR64):
+ case objabi.ElfRelocOffset + objabi.RelocType(elf.R_PPC64_ADDR64):
r.Type = objabi.R_ADDR
if targ.Type == sym.SDYNIMPORT {
// These happen in .toc sections
rela.AddAddrPlus(ctxt.Arch, s, int64(r.Off))
rela.AddUint64(ctxt.Arch, ld.ELF64_R_INFO(uint32(targ.Dynid), uint32(elf.R_PPC64_ADDR64)))
rela.AddUint64(ctxt.Arch, uint64(r.Add))
- r.Type = 256 // ignore during relocsym
+ r.Type = objabi.ElfRelocOffset // ignore during relocsym
}
return true
- case 256 + objabi.RelocType(elf.R_PPC64_TOC16):
+ case objabi.ElfRelocOffset + objabi.RelocType(elf.R_PPC64_TOC16):
r.Type = objabi.R_POWER_TOC
r.Variant = sym.RV_POWER_LO | sym.RV_CHECK_OVERFLOW
return true
- case 256 + objabi.RelocType(elf.R_PPC64_TOC16_LO):
+ case objabi.ElfRelocOffset + objabi.RelocType(elf.R_PPC64_TOC16_LO):
r.Type = objabi.R_POWER_TOC
r.Variant = sym.RV_POWER_LO
return true
- case 256 + objabi.RelocType(elf.R_PPC64_TOC16_HA):
+ case objabi.ElfRelocOffset + objabi.RelocType(elf.R_PPC64_TOC16_HA):
r.Type = objabi.R_POWER_TOC
r.Variant = sym.RV_POWER_HA | sym.RV_CHECK_OVERFLOW
return true
- case 256 + objabi.RelocType(elf.R_PPC64_TOC16_HI):
+ case objabi.ElfRelocOffset + objabi.RelocType(elf.R_PPC64_TOC16_HI):
r.Type = objabi.R_POWER_TOC
r.Variant = sym.RV_POWER_HI | sym.RV_CHECK_OVERFLOW
return true
- case 256 + objabi.RelocType(elf.R_PPC64_TOC16_DS):
+ case objabi.ElfRelocOffset + objabi.RelocType(elf.R_PPC64_TOC16_DS):
r.Type = objabi.R_POWER_TOC
r.Variant = sym.RV_POWER_DS | sym.RV_CHECK_OVERFLOW
return true
- case 256 + objabi.RelocType(elf.R_PPC64_TOC16_LO_DS):
+ case objabi.ElfRelocOffset + objabi.RelocType(elf.R_PPC64_TOC16_LO_DS):
r.Type = objabi.R_POWER_TOC
r.Variant = sym.RV_POWER_DS
return true
- case 256 + objabi.RelocType(elf.R_PPC64_REL16_LO):
+ case objabi.ElfRelocOffset + objabi.RelocType(elf.R_PPC64_REL16_LO):
r.Type = objabi.R_PCREL
r.Variant = sym.RV_POWER_LO
r.Add += 2 // Compensate for relocation size of 2
return true
- case 256 + objabi.RelocType(elf.R_PPC64_REL16_HI):
+ case objabi.ElfRelocOffset + objabi.RelocType(elf.R_PPC64_REL16_HI):
r.Type = objabi.R_PCREL
r.Variant = sym.RV_POWER_HI | sym.RV_CHECK_OVERFLOW
r.Add += 2
return true
- case 256 + objabi.RelocType(elf.R_PPC64_REL16_HA):
+ case objabi.ElfRelocOffset + objabi.RelocType(elf.R_PPC64_REL16_HA):
r.Type = objabi.R_PCREL
r.Variant = sym.RV_POWER_HA | sym.RV_CHECK_OVERFLOW
r.Add += 2
switch r.Type {
default:
- if r.Type >= 256 {
+ if r.Type >= objabi.ElfRelocOffset {
ld.Errorf(s, "unexpected relocation type %d", r.Type)
return false
}
// Handle relocations found in ELF object files.
- case 256 + objabi.RelocType(elf.R_390_12),
- 256 + objabi.RelocType(elf.R_390_GOT12):
- ld.Errorf(s, "s390x 12-bit relocations have not been implemented (relocation type %d)", r.Type-256)
+ case objabi.ElfRelocOffset + objabi.RelocType(elf.R_390_12),
+ objabi.ElfRelocOffset + objabi.RelocType(elf.R_390_GOT12):
+ ld.Errorf(s, "s390x 12-bit relocations have not been implemented (relocation type %d)", r.Type-objabi.ElfRelocOffset)
return false
- case 256 + objabi.RelocType(elf.R_390_8),
- 256 + objabi.RelocType(elf.R_390_16),
- 256 + objabi.RelocType(elf.R_390_32),
- 256 + objabi.RelocType(elf.R_390_64):
+ case objabi.ElfRelocOffset + objabi.RelocType(elf.R_390_8),
+ objabi.ElfRelocOffset + objabi.RelocType(elf.R_390_16),
+ objabi.ElfRelocOffset + objabi.RelocType(elf.R_390_32),
+ objabi.ElfRelocOffset + objabi.RelocType(elf.R_390_64):
if targ.Type == sym.SDYNIMPORT {
ld.Errorf(s, "unexpected R_390_nn relocation for dynamic symbol %s", targ.Name)
}
r.Type = objabi.R_ADDR
return true
- case 256 + objabi.RelocType(elf.R_390_PC16),
- 256 + objabi.RelocType(elf.R_390_PC32),
- 256 + objabi.RelocType(elf.R_390_PC64):
+ case objabi.ElfRelocOffset + objabi.RelocType(elf.R_390_PC16),
+ objabi.ElfRelocOffset + objabi.RelocType(elf.R_390_PC32),
+ objabi.ElfRelocOffset + objabi.RelocType(elf.R_390_PC64):
if targ.Type == sym.SDYNIMPORT {
ld.Errorf(s, "unexpected R_390_PCnn relocation for dynamic symbol %s", targ.Name)
}
r.Add += int64(r.Siz)
return true
- case 256 + objabi.RelocType(elf.R_390_GOT16),
- 256 + objabi.RelocType(elf.R_390_GOT32),
- 256 + objabi.RelocType(elf.R_390_GOT64):
- ld.Errorf(s, "unimplemented S390x relocation: %v", r.Type-256)
+ case objabi.ElfRelocOffset + objabi.RelocType(elf.R_390_GOT16),
+ objabi.ElfRelocOffset + objabi.RelocType(elf.R_390_GOT32),
+ objabi.ElfRelocOffset + objabi.RelocType(elf.R_390_GOT64):
+ ld.Errorf(s, "unimplemented S390x relocation: %v", r.Type-objabi.ElfRelocOffset)
return true
- case 256 + objabi.RelocType(elf.R_390_PLT16DBL),
- 256 + objabi.RelocType(elf.R_390_PLT32DBL):
+ case objabi.ElfRelocOffset + objabi.RelocType(elf.R_390_PLT16DBL),
+ objabi.ElfRelocOffset + objabi.RelocType(elf.R_390_PLT32DBL):
r.Type = objabi.R_PCREL
r.Variant = sym.RV_390_DBL
r.Add += int64(r.Siz)
}
return true
- case 256 + objabi.RelocType(elf.R_390_PLT32),
- 256 + objabi.RelocType(elf.R_390_PLT64):
+ case objabi.ElfRelocOffset + objabi.RelocType(elf.R_390_PLT32),
+ objabi.ElfRelocOffset + objabi.RelocType(elf.R_390_PLT64):
r.Type = objabi.R_PCREL
r.Add += int64(r.Siz)
if targ.Type == sym.SDYNIMPORT {
}
return true
- case 256 + objabi.RelocType(elf.R_390_COPY):
- ld.Errorf(s, "unimplemented S390x relocation: %v", r.Type-256)
+ case objabi.ElfRelocOffset + objabi.RelocType(elf.R_390_COPY):
+ ld.Errorf(s, "unimplemented S390x relocation: %v", r.Type-objabi.ElfRelocOffset)
return false
- case 256 + objabi.RelocType(elf.R_390_GLOB_DAT):
- ld.Errorf(s, "unimplemented S390x relocation: %v", r.Type-256)
+ case objabi.ElfRelocOffset + objabi.RelocType(elf.R_390_GLOB_DAT):
+ ld.Errorf(s, "unimplemented S390x relocation: %v", r.Type-objabi.ElfRelocOffset)
return false
- case 256 + objabi.RelocType(elf.R_390_JMP_SLOT):
- ld.Errorf(s, "unimplemented S390x relocation: %v", r.Type-256)
+ case objabi.ElfRelocOffset + objabi.RelocType(elf.R_390_JMP_SLOT):
+ ld.Errorf(s, "unimplemented S390x relocation: %v", r.Type-objabi.ElfRelocOffset)
return false
- case 256 + objabi.RelocType(elf.R_390_RELATIVE):
- ld.Errorf(s, "unimplemented S390x relocation: %v", r.Type-256)
+ case objabi.ElfRelocOffset + objabi.RelocType(elf.R_390_RELATIVE):
+ ld.Errorf(s, "unimplemented S390x relocation: %v", r.Type-objabi.ElfRelocOffset)
return false
- case 256 + objabi.RelocType(elf.R_390_GOTOFF):
+ case objabi.ElfRelocOffset + objabi.RelocType(elf.R_390_GOTOFF):
if targ.Type == sym.SDYNIMPORT {
ld.Errorf(s, "unexpected R_390_GOTOFF relocation for dynamic symbol %s", targ.Name)
}
r.Type = objabi.R_GOTOFF
return true
- case 256 + objabi.RelocType(elf.R_390_GOTPC):
+ case objabi.ElfRelocOffset + objabi.RelocType(elf.R_390_GOTPC):
r.Type = objabi.R_PCREL
r.Sym = ctxt.Syms.Lookup(".got", 0)
r.Add += int64(r.Siz)
return true
- case 256 + objabi.RelocType(elf.R_390_PC16DBL),
- 256 + objabi.RelocType(elf.R_390_PC32DBL):
+ case objabi.ElfRelocOffset + objabi.RelocType(elf.R_390_PC16DBL),
+ objabi.ElfRelocOffset + objabi.RelocType(elf.R_390_PC32DBL):
r.Type = objabi.R_PCREL
r.Variant = sym.RV_390_DBL
r.Add += int64(r.Siz)
}
return true
- case 256 + objabi.RelocType(elf.R_390_GOTPCDBL):
+ case objabi.ElfRelocOffset + objabi.RelocType(elf.R_390_GOTPCDBL):
r.Type = objabi.R_PCREL
r.Variant = sym.RV_390_DBL
r.Sym = ctxt.Syms.Lookup(".got", 0)
r.Add += int64(r.Siz)
return true
- case 256 + objabi.RelocType(elf.R_390_GOTENT):
+ case objabi.ElfRelocOffset + objabi.RelocType(elf.R_390_GOTENT):
addgotsym(ctxt, targ)
r.Type = objabi.R_PCREL
// Uncomment code when we include those in bootstrap code.
switch {
- case r >= 512: // Mach-O
- // nr := (r - 512)>>1
+ case r >= objabi.MachoRelocOffset: // Mach-O
+ // nr := (r - objabi.MachoRelocOffset)>>1
// switch ctxt.Arch.Family {
// case sys.AMD64:
// return macho.RelocTypeX86_64(nr).String()
// default:
// panic("unreachable")
// }
- case r >= 256: // ELF
- nr := r - 256
+ case r >= objabi.ElfRelocOffset: // ELF
+ nr := r - objabi.ElfRelocOffset
switch arch.Family {
case sys.AMD64:
return elf.R_X86_64(nr).String()
switch r.Type {
default:
- if r.Type >= 256 {
+ if r.Type >= objabi.ElfRelocOffset {
ld.Errorf(s, "unexpected relocation type %d (%s)", r.Type, sym.RelocName(ctxt.Arch, r.Type))
return false
}
// Handle relocations found in ELF object files.
- case 256 + objabi.RelocType(elf.R_386_PC32):
+ case objabi.ElfRelocOffset + objabi.RelocType(elf.R_386_PC32):
if targ.Type == sym.SDYNIMPORT {
ld.Errorf(s, "unexpected R_386_PC32 relocation for dynamic symbol %s", targ.Name)
}
r.Add += 4
return true
- case 256 + objabi.RelocType(elf.R_386_PLT32):
+ case objabi.ElfRelocOffset + objabi.RelocType(elf.R_386_PLT32):
r.Type = objabi.R_PCREL
r.Add += 4
if targ.Type == sym.SDYNIMPORT {
return true
- case 256 + objabi.RelocType(elf.R_386_GOT32), 256 + objabi.RelocType(elf.R_386_GOT32X):
+ case objabi.ElfRelocOffset + objabi.RelocType(elf.R_386_GOT32),
+ objabi.ElfRelocOffset + objabi.RelocType(elf.R_386_GOT32X):
if targ.Type != sym.SDYNIMPORT {
// have symbol
if r.Off >= 2 && s.P[r.Off-2] == 0x8b {
r.Add += int64(targ.Got())
return true
- case 256 + objabi.RelocType(elf.R_386_GOTOFF):
+ case objabi.ElfRelocOffset + objabi.RelocType(elf.R_386_GOTOFF):
r.Type = objabi.R_GOTOFF
return true
- case 256 + objabi.RelocType(elf.R_386_GOTPC):
+ case objabi.ElfRelocOffset + objabi.RelocType(elf.R_386_GOTPC):
r.Type = objabi.R_PCREL
r.Sym = ctxt.Syms.Lookup(".got", 0)
r.Add += 4
return true
- case 256 + objabi.RelocType(elf.R_386_32):
+ case objabi.ElfRelocOffset + objabi.RelocType(elf.R_386_32):
if targ.Type == sym.SDYNIMPORT {
ld.Errorf(s, "unexpected R_386_32 relocation for dynamic symbol %s", targ.Name)
}
r.Type = objabi.R_ADDR
return true
- case 512 + ld.MACHO_GENERIC_RELOC_VANILLA*2 + 0:
+ case objabi.MachoRelocOffset + ld.MACHO_GENERIC_RELOC_VANILLA*2 + 0:
r.Type = objabi.R_ADDR
if targ.Type == sym.SDYNIMPORT {
ld.Errorf(s, "unexpected reloc for dynamic symbol %s", targ.Name)
}
return true
- case 512 + ld.MACHO_GENERIC_RELOC_VANILLA*2 + 1:
+ case objabi.MachoRelocOffset + ld.MACHO_GENERIC_RELOC_VANILLA*2 + 1:
if targ.Type == sym.SDYNIMPORT {
addpltsym(ctxt, targ)
r.Sym = ctxt.Syms.Lookup(".plt", 0)
r.Type = objabi.R_PCREL
return true
- case 512 + ld.MACHO_FAKE_GOTPCREL:
+ case objabi.MachoRelocOffset + ld.MACHO_FAKE_GOTPCREL:
if targ.Type != sym.SDYNIMPORT {
// have symbol
// turn MOVL of GOT entry into LEAL of symbol itself
s.Value = got.Size
got.AddUint32(ctxt.Arch, 0)
ctxt.Syms.Lookup(".linkedit.got", 0).AddUint32(ctxt.Arch, uint32(targ.Dynid))
- r.Type = 256 // ignore during relocsym
+ r.Type = objabi.ElfRelocOffset // ignore during relocsym
return true
}
}