]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/link: increase the reserved space for ELF relocations
authorerifan01 <eric.fang@arm.com>
Tue, 16 Apr 2019 02:49:09 +0000 (02:49 +0000)
committerIan Lance Taylor <iant@golang.org>
Wed, 17 Apr 2019 23:31:28 +0000 (23:31 +0000)
Currently the offset values of ELF relocations and Macho relocations
are 256 and 512 respectively, which means that the space reserved for
ELF relocations is only 256. But AARCH64 has more than 256 ELF relocation
types, in fact the maximum AARCH64 ELF relocation type recorded in file
src/debug/elf/elf.go is 1032 currently. So this CL increases the offset
of Macho relocations to 2048 to leave enough space for AARCH64 ELF
relocations.

Change-Id: I784ac38aeb3e102ac7825f6d621086849c8d3146
Reviewed-on: https://go-review.googlesource.com/c/go/+/172497
Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Ian Lance Taylor <iant@golang.org>
src/cmd/internal/objabi/util.go
src/cmd/link/internal/amd64/asm.go
src/cmd/link/internal/arm/asm.go
src/cmd/link/internal/ld/data.go
src/cmd/link/internal/ld/pe.go
src/cmd/link/internal/loadelf/ldelf.go
src/cmd/link/internal/loadmacho/ldmacho.go
src/cmd/link/internal/ppc64/asm.go
src/cmd/link/internal/s390x/asm.go
src/cmd/link/internal/sym/reloc.go
src/cmd/link/internal/x86/asm.go

index e28447d14199c38145e52b3c640c32cd00a5880c..57f19f2e3c26b5cfbef424355e628cfdea4dc8ef 100644 (file)
@@ -34,6 +34,11 @@ var (
        Version  = version
 )
 
+const (
+       ElfRelocOffset   = 256
+       MachoRelocOffset = 2048 // reserve enough space for ELF relocations
+)
+
 func goarm() int {
        switch v := envOr("GOARM", defaultGOARM); v {
        case "5":
index e922fe2db94ee5982fdb05a3f563ce4038b86438..fca4877a45a5d57589d8b743d9a5eaf902486d25 100644 (file)
@@ -103,13 +103,13 @@ func adddynrel(ctxt *ld.Link, s *sym.Symbol, r *sym.Reloc) bool {
 
        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)
                }
@@ -122,7 +122,7 @@ func adddynrel(ctxt *ld.Link, s *sym.Symbol, r *sym.Reloc) bool {
                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)
                }
@@ -133,7 +133,7 @@ func adddynrel(ctxt *ld.Link, s *sym.Symbol, r *sym.Reloc) bool {
                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 {
@@ -144,7 +144,9 @@ func adddynrel(ctxt *ld.Link, s *sym.Symbol, r *sym.Reloc) bool {
 
                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 {
@@ -167,7 +169,7 @@ func adddynrel(ctxt *ld.Link, s *sym.Symbol, r *sym.Reloc) bool {
                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)
                }
@@ -175,9 +177,9 @@ func adddynrel(ctxt *ld.Link, s *sym.Symbol, r *sym.Reloc) bool {
                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
 
@@ -186,7 +188,7 @@ func adddynrel(ctxt *ld.Link, s *sym.Symbol, r *sym.Reloc) bool {
                }
                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)
@@ -196,11 +198,11 @@ func adddynrel(ctxt *ld.Link, s *sym.Symbol, r *sym.Reloc) bool {
                }
                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 {
@@ -208,7 +210,7 @@ func adddynrel(ctxt *ld.Link, s *sym.Symbol, r *sym.Reloc) bool {
                }
                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
@@ -223,7 +225,7 @@ func adddynrel(ctxt *ld.Link, s *sym.Symbol, r *sym.Reloc) bool {
                }
                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)
                }
@@ -333,7 +335,7 @@ func adddynrel(ctxt *ld.Link, s *sym.Symbol, r *sym.Reloc) bool {
                                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
                }
 
@@ -359,7 +361,7 @@ func adddynrel(ctxt *ld.Link, s *sym.Symbol, r *sym.Reloc) bool {
                        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
                }
        }
index efcd41d72b0f616200d6aa1da175f732da6cf410..7ea1fe5f8f9c07d273380ee00c7581ede46126d9 100644 (file)
@@ -120,13 +120,13 @@ func adddynrel(ctxt *ld.Link, s *sym.Symbol, r *sym.Reloc) bool {
 
        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 {
@@ -137,11 +137,11 @@ func adddynrel(ctxt *ld.Link, s *sym.Symbol, r *sym.Reloc) bool {
 
                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 {
@@ -153,7 +153,7 @@ func adddynrel(ctxt *ld.Link, s *sym.Symbol, r *sym.Reloc) bool {
                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 {
@@ -165,19 +165,19 @@ func adddynrel(ctxt *ld.Link, s *sym.Symbol, r *sym.Reloc) bool {
                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)
@@ -187,13 +187,13 @@ func adddynrel(ctxt *ld.Link, s *sym.Symbol, r *sym.Reloc) bool {
 
                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)
                }
@@ -201,7 +201,7 @@ func adddynrel(ctxt *ld.Link, s *sym.Symbol, r *sym.Reloc) bool {
                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
@@ -210,8 +210,8 @@ func adddynrel(ctxt *ld.Link, s *sym.Symbol, r *sym.Reloc) bool {
                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)
index b869eea2786aceb9256d0c3f75bc9b84669a0994..cb74b9a723de687342efcb22c7a486b61ba5437f 100644 (file)
@@ -162,7 +162,7 @@ func relocsym(ctxt *Link, s *sym.Symbol) {
                        }
                }
 
-               if r.Type >= 256 {
+               if r.Type >= objabi.ElfRelocOffset {
                        continue
                }
                if r.Siz == 0 { // informational relocation - no work to do
@@ -636,7 +636,7 @@ func dynrelocsym(ctxt *Link, s *sym.Symbol) {
                        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)
                        }
index 3d9cb4898d1e4307420a098f94337574321a3a2a..ca29da4f0195d912e7b5f6bdee7fd52a5923b5a8 100644 (file)
@@ -1401,7 +1401,7 @@ func addPEBaseRelocSym(ctxt *Link, s *sym.Symbol, rt *peBaseRelocTable) {
                if !r.Sym.Attr.Reachable() {
                        continue
                }
-               if r.Type >= 256 {
+               if r.Type >= objabi.ElfRelocOffset {
                        continue
                }
                if r.Siz == 0 { // informational relocation
index 916b7cf9f2d7232378ac2dbef49209f92b6dd787..a22a77bd47e185ccf1d80df263a491b91cf8766e 100644 (file)
@@ -923,7 +923,7 @@ func Load(arch *sys.Arch, syms *sym.Symbols, f *bio.Reader, pkg string, length i
                                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
index e2b0d63aa3686ce5cc4267febb7d144574294111..a8e41a94c7bc941dbd90868a298e6cb2f3a60dfa 100644 (file)
@@ -771,7 +771,7 @@ func Load(arch *sys.Arch, syms *sym.Symbols, f *bio.Reader, pkg string, length i
                                                        // 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)
@@ -805,7 +805,7 @@ func Load(arch *sys.Arch, syms *sym.Symbols, f *bio.Reader, pkg string, length i
                        }
 
                        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).
index a8576949626db61789a1689ad6071f2d23eabbd5..d376c4de58709f5e6678c35251b710cc3b87dddc 100644 (file)
@@ -95,7 +95,7 @@ func genplt(ctxt *ld.Link) {
        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
                        }
 
@@ -275,13 +275,13 @@ func addelfdynrel(ctxt *ld.Link, s *sym.Symbol, r *sym.Reloc) bool {
 
        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
@@ -298,7 +298,7 @@ func addelfdynrel(ctxt *ld.Link, s *sym.Symbol, r *sym.Reloc) bool {
 
                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
 
@@ -308,7 +308,7 @@ func addelfdynrel(ctxt *ld.Link, s *sym.Symbol, r *sym.Reloc) bool {
 
                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
@@ -318,54 +318,54 @@ func addelfdynrel(ctxt *ld.Link, s *sym.Symbol, r *sym.Reloc) bool {
                        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
index 88199f3a562c751bc51dd4c37dec3c4c35434e90..46a6ffef828e4fbb591f7f6f0b14062180c653eb 100644 (file)
@@ -107,30 +107,30 @@ func adddynrel(ctxt *ld.Link, s *sym.Symbol, r *sym.Reloc) bool {
 
        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)
                }
@@ -143,14 +143,14 @@ func adddynrel(ctxt *ld.Link, s *sym.Symbol, r *sym.Reloc) bool {
                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)
@@ -161,8 +161,8 @@ func adddynrel(ctxt *ld.Link, s *sym.Symbol, r *sym.Reloc) bool {
                }
                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 {
@@ -172,37 +172,37 @@ func adddynrel(ctxt *ld.Link, s *sym.Symbol, r *sym.Reloc) bool {
                }
                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)
@@ -211,14 +211,14 @@ func adddynrel(ctxt *ld.Link, s *sym.Symbol, r *sym.Reloc) bool {
                }
                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
index da696d327b3263d2c78e3de1b67479e4de8368c2..9c862f109d76d3f6a0e149670060a250c83be7d4 100644 (file)
@@ -57,8 +57,8 @@ func RelocName(arch *sys.Arch, r objabi.RelocType) string {
        // 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()
@@ -71,8 +71,8 @@ func RelocName(arch *sys.Arch, r objabi.RelocType) 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()
index 1744ab4d9969f124c52fdcaeab585451af05de8a..9472f5516d071930dac0abb07a5ab01ec3cc6636 100644 (file)
@@ -172,13 +172,13 @@ func adddynrel(ctxt *ld.Link, s *sym.Symbol, r *sym.Reloc) bool {
 
        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)
                }
@@ -191,7 +191,7 @@ func adddynrel(ctxt *ld.Link, s *sym.Symbol, r *sym.Reloc) bool {
                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 {
@@ -202,7 +202,8 @@ func adddynrel(ctxt *ld.Link, s *sym.Symbol, r *sym.Reloc) bool {
 
                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 {
@@ -233,31 +234,31 @@ func adddynrel(ctxt *ld.Link, s *sym.Symbol, r *sym.Reloc) bool {
                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)
@@ -269,7 +270,7 @@ func adddynrel(ctxt *ld.Link, s *sym.Symbol, r *sym.Reloc) bool {
                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
@@ -342,7 +343,7 @@ func adddynrel(ctxt *ld.Link, s *sym.Symbol, r *sym.Reloc) bool {
                        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
                }
        }