mirror of
https://github.com/golang/go
synced 2024-11-19 14:04:46 -07:00
cmd/link: suppress unnecessary DWARF relocs that confuse dsymutil
During Mach-O linking, dsymutil takes the DWARF from individual object files and combines it into a debug archive. Because it's content-aware, it doesn't need our help to do its job. Nonetheless, it does try to honor relocations that are present in its input. When dsymutil encounters a relocation, it uses the value of that relocation as an index into the debug map to find its final location. When it does that, it's assuming that the value is an address in the object file. But DWARF references are section-relative. So when it processes a relocation for a DWARF reference, it gets confused, and if the value happens to match the address of a function or data symbol, it will rewrite it incorrectly. Since the relocations don't help, and can hurt, drop them when externally linking a Mach-O binary. Fixes #22068 Change-Id: I8ec36da626575d9f6c8d0e7a0b76eab8ba22d62c Reviewed-on: https://go-review.googlesource.com/68330 Run-TryBot: Heschi Kreinick <heschi@google.com> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: David Crawshaw <crawshaw@golang.org>
This commit is contained in:
parent
764a6ac29e
commit
a0402b6bf8
@ -313,6 +313,16 @@ func relocsym(ctxt *Link, s *sym.Symbol) {
|
||||
|
||||
if ctxt.LinkMode == LinkExternal {
|
||||
r.Done = false
|
||||
|
||||
// On most platforms, the external linker needs to adjust DWARF references
|
||||
// as it combines DWARF sections. However, on Darwin, dsymutil does the
|
||||
// DWARF linking, and it understands how to follow section offsets.
|
||||
// Leaving in the relocation records confuses it (see
|
||||
// https://golang.org/issue/22068) so drop them for Darwin.
|
||||
if Headtype == objabi.Hdarwin {
|
||||
r.Done = true
|
||||
}
|
||||
|
||||
// PE code emits IMAGE_REL_I386_SECREL and IMAGE_REL_AMD64_SECREL
|
||||
// for R_DWARFREF relocations, while R_ADDR is replaced with
|
||||
// IMAGE_REL_I386_DIR32, IMAGE_REL_AMD64_ADDR64 and IMAGE_REL_AMD64_ADDR32.
|
||||
|
Loading…
Reference in New Issue
Block a user