Skip to content

Commit e946f0e

Browse files
pmurlaboger
authored andcommitted
cmd/link: support R_PPC64_REL24_P9NOTOC
This can be treated identically to R_PPC64_REL24_NOTOC as stubs are generated based on GOPPC64 and -buildmode. Change-Id: I3c42a9bf3c08d107fb656e6bf59b2307783bd9af Reviewed-on: https://go-review.googlesource.com/c/go/+/497915 Reviewed-by: Michael Knyszek <[email protected]> TryBot-Result: Gopher Robot <[email protected]> Reviewed-by: Lynn Boger <[email protected]> Reviewed-by: Ian Lance Taylor <[email protected]> Run-TryBot: Paul Murphy <[email protected]>
1 parent f07901d commit e946f0e

File tree

2 files changed

+8
-2
lines changed

2 files changed

+8
-2
lines changed

src/cmd/link/internal/loadelf/ldelf.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1066,6 +1066,7 @@ func relSize(arch *sys.Arch, pn string, elftype uint32) (uint8, uint8, error) {
10661066
I386 | uint32(elf.R_386_GOT32X)<<16,
10671067
PPC64 | uint32(elf.R_PPC64_REL24)<<16,
10681068
PPC64 | uint32(elf.R_PPC64_REL24_NOTOC)<<16,
1069+
PPC64 | uint32(elf.R_PPC64_REL24_P9NOTOC)<<16,
10691070
PPC64 | uint32(elf.R_PPC_REL32)<<16,
10701071
S390X | uint32(elf.R_390_32)<<16,
10711072
S390X | uint32(elf.R_390_PC32)<<16,

src/cmd/link/internal/ppc64/asm.go

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -304,6 +304,10 @@ func genstubs(ctxt *ld.Link, ldr *loader.Loader) {
304304
}
305305
}
306306

307+
case objabi.ElfRelocOffset + objabi.RelocType(elf.R_PPC64_REL24_P9NOTOC):
308+
// This can be treated identically to R_PPC64_REL24_NOTOC, as stubs are determined by
309+
// GOPPC64 and -buildmode.
310+
fallthrough
307311
case objabi.ElfRelocOffset + objabi.RelocType(elf.R_PPC64_REL24_NOTOC):
308312
switch ldr.SymType(r.Sym()) {
309313
case sym.SDYNIMPORT:
@@ -602,13 +606,14 @@ func addelfdynrel(target *ld.Target, ldr *loader.Loader, syms *ld.ArchSyms, s lo
602606
}
603607

604608
// Handle relocations found in ELF object files.
605-
case objabi.ElfRelocOffset + objabi.RelocType(elf.R_PPC64_REL24_NOTOC):
609+
case objabi.ElfRelocOffset + objabi.RelocType(elf.R_PPC64_REL24_NOTOC),
610+
objabi.ElfRelocOffset + objabi.RelocType(elf.R_PPC64_REL24_P9NOTOC):
606611
su := ldr.MakeSymbolUpdater(s)
607612
su.SetRelocType(rIdx, objabi.R_CALLPOWER)
608613

609614
if targType == sym.SDYNIMPORT {
610615
// Should have been handled in elfsetupplt
611-
ldr.Errorf(s, "unexpected R_PPC64_REL24_NOTOC for dyn import")
616+
ldr.Errorf(s, "unexpected R_PPC64_REL24_NOTOC/R_PPC64_REL24_P9NOTOC for dyn import")
612617
}
613618
return true
614619

0 commit comments

Comments
 (0)