diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-16 19:27:10 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-16 19:27:10 +0000 |
commit | 32c8b04ddb6829a3f5f7267a666b4caa3cf38a1f (patch) | |
tree | 6e5b1b98afaeadd19ba7fd4b710f71cbf187942e /src/cmd/internal/obj | |
parent | Adding upstream version 1.22.1. (diff) | |
download | golang-1.22-32c8b04ddb6829a3f5f7267a666b4caa3cf38a1f.tar.xz golang-1.22-32c8b04ddb6829a3f5f7267a666b4caa3cf38a1f.zip |
Adding upstream version 1.22.2.upstream/1.22.2
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 a3d392d..7e26118 100644 --- a/src/cmd/internal/obj/ppc64/obj9.go +++ b/src/cmd/internal/obj/ppc64/obj9.go @@ -37,6 +37,7 @@ import ( "internal/abi" "log" "math/bits" + "strings" ) // Test if this value can encoded as a mask for @@ -72,6 +73,22 @@ func encodePPC64RLDCMask(mask int64) (mb, me int) { return mb, me - 1 } +// 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 @@ -762,7 +779,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: // |