mirror of
https://github.com/golang/go.git
synced 2026-02-06 10:55:05 +03:00
cmd/link: don't create __x86.get_pc_thunk symbol if it already exists
On 386, in some build modes we need to create the __x86.get_pc_thunk symbols, to support PC-relative addressing. In some situation the thunk symbols may already exist, e.g. loaded from a C object in internal linking mode. In this case, we should use the exiting symbol instead of making a new one. The current code updates the symbol content in place but also adds a duplicated entry to Textp, which breaks the address sorting order. Fixes #76815. Change-Id: Iab11106ce592dc5219b7a0e07cfafcd270661a2f Reviewed-on: https://go-review.googlesource.com/c/go/+/730161 Reviewed-by: David Chase <drchase@google.com> LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
This commit is contained in:
@@ -72,6 +72,9 @@ func gentext(ctxt *ld.Link, ldr *loader.Loader) {
|
||||
{"di", 7},
|
||||
} {
|
||||
thunkfunc := ldr.CreateSymForUpdate("__x86.get_pc_thunk."+r.name, 0)
|
||||
if t := thunkfunc.Type(); t != 0 && t != sym.SXREF && t != sym.SDYNIMPORT && t != sym.SUNDEFEXT {
|
||||
continue // symbol already exists, probably loaded from a C object
|
||||
}
|
||||
thunkfunc.SetType(sym.STEXT)
|
||||
ldr.SetAttrLocal(thunkfunc.Sym(), true)
|
||||
o := func(op ...uint8) {
|
||||
|
||||
Reference in New Issue
Block a user