diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-16 19:22:05 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-16 19:22:05 +0000 |
commit | 0559cc1b27c6c48668985801cfc1c157969ed320 (patch) | |
tree | 23c372a43091dfed26b103cc9f0ec06401c84997 /src/cmd/internal/obj | |
parent | Releasing progress-linux version 1.21.8-1~progress7.99u1. (diff) | |
download | golang-1.21-0559cc1b27c6c48668985801cfc1c157969ed320.tar.xz golang-1.21-0559cc1b27c6c48668985801cfc1c157969ed320.zip |
Merging upstream version 1.21.9.
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'src/cmd/internal/obj')
-rw-r--r-- | src/cmd/internal/obj/ppc64/obj9.go | 19 |
1 files changed, 18 insertions, 1 deletions
diff --git a/src/cmd/internal/obj/ppc64/obj9.go b/src/cmd/internal/obj/ppc64/obj9.go index 02831b8..57660ce 100644 --- a/src/cmd/internal/obj/ppc64/obj9.go +++ b/src/cmd/internal/obj/ppc64/obj9.go @@ -36,8 +36,25 @@ import ( "cmd/internal/sys" "internal/abi" "log" + "strings" ) +// Is this a symbol which should never have a TOC prologue generated? +// These are special functions which should not have a TOC regeneration +// prologue. +func isNOTOCfunc(name string) bool { + switch { + case name == "runtime.duffzero": + return true + case name == "runtime.duffcopy": + return true + case strings.HasPrefix(name, "runtime.elf_"): + return true + default: + return false + } +} + func progedit(ctxt *obj.Link, p *obj.Prog, newprog obj.ProgAlloc) { p.From.Class = 0 p.To.Class = 0 @@ -643,7 +660,7 @@ func preprocess(ctxt *obj.Link, cursym *obj.LSym, newprog obj.ProgAlloc) { q = p - if NeedTOCpointer(c.ctxt) && c.cursym.Name != "runtime.duffzero" && c.cursym.Name != "runtime.duffcopy" { + if NeedTOCpointer(c.ctxt) && !isNOTOCfunc(c.cursym.Name) { // When compiling Go into PIC, without PCrel support, all functions must start // with instructions to load the TOC pointer into r2: // |