diff options
| author | Ian Lance Taylor <iant@golang.org> | 2022-06-10 16:49:51 -0700 |
|---|---|---|
| committer | Gopher Robot <gobot@golang.org> | 2022-06-13 19:09:14 +0000 |
| commit | fbc75dff2fa5bac474936e611ff1b7e778617be3 (patch) | |
| tree | f4544c7ca481a10bc280d11c781520db4807262d /src/cmd/cgo | |
| parent | 5ee939b8199266446d7ccc563751a9d3db26bf8b (diff) | |
| download | go-fbc75dff2fa5bac474936e611ff1b7e778617be3.tar.xz | |
cmd/cgo: remove -fsanitize=hwaddress hardware tags
No test because this isn't support on any of the builders.
Fixes #53285
Change-Id: If8d17bdcdac81a6ce404a35a289bf83f07f02855
Reviewed-on: https://go-review.googlesource.com/c/go/+/411698
Auto-Submit: Ian Lance Taylor <iant@google.com>
Reviewed-by: Ian Lance Taylor <iant@google.com>
Reviewed-by: Cherry Mui <cherryyz@google.com>
Run-TryBot: Ian Lance Taylor <iant@google.com>
TryBot-Result: Gopher Robot <gobot@golang.org>
Diffstat (limited to 'src/cmd/cgo')
| -rw-r--r-- | src/cmd/cgo/gcc.go | 37 |
1 files changed, 29 insertions, 8 deletions
diff --git a/src/cmd/cgo/gcc.go b/src/cmd/cgo/gcc.go index 8ce5d4de73..4dff5e2b1c 100644 --- a/src/cmd/cgo/gcc.go +++ b/src/cmd/cgo/gcc.go @@ -1831,6 +1831,23 @@ func (p *Package) gccDebug(stdin []byte, nnames int) (d *dwarf.Data, ints []int6 bo := f.ByteOrder symtab, err := f.Symbols() if err == nil { + // Check for use of -fsanitize=hwaddress (issue 53285). + removeTag := func(v uint64) uint64 { return v } + if goarch == "arm64" { + for i := range symtab { + if symtab[i].Name == "__hwasan_init" { + // -fsanitize=hwaddress on ARM + // uses the upper byte of a + // memory address as a hardware + // tag. Remove it so that + // we can find the associated + // data. + removeTag = func(v uint64) uint64 { return v &^ (0xff << (64 - 8)) } + break + } + } + } + for i := range symtab { s := &symtab[i] switch { @@ -1838,9 +1855,10 @@ func (p *Package) gccDebug(stdin []byte, nnames int) (d *dwarf.Data, ints []int6 // Found it. Now find data section. if i := int(s.Section); 0 <= i && i < len(f.Sections) { sect := f.Sections[i] - if sect.Addr <= s.Value && s.Value < sect.Addr+sect.Size { + val := removeTag(s.Value) + if sect.Addr <= val && val < sect.Addr+sect.Size { if sdat, err := sect.Data(); err == nil { - data := sdat[s.Value-sect.Addr:] + data := sdat[val-sect.Addr:] ints = make([]int64, len(data)/8) for i := range ints { ints[i] = int64(bo.Uint64(data[i*8:])) @@ -1852,9 +1870,10 @@ func (p *Package) gccDebug(stdin []byte, nnames int) (d *dwarf.Data, ints []int6 // Found it. Now find data section. if i := int(s.Section); 0 <= i && i < len(f.Sections) { sect := f.Sections[i] - if sect.Addr <= s.Value && s.Value < sect.Addr+sect.Size { + val := removeTag(s.Value) + if sect.Addr <= val && val < sect.Addr+sect.Size { if sdat, err := sect.Data(); err == nil { - data := sdat[s.Value-sect.Addr:] + data := sdat[val-sect.Addr:] floats = make([]float64, len(data)/8) for i := range floats { floats[i] = math.Float64frombits(bo.Uint64(data[i*8:])) @@ -1867,9 +1886,10 @@ func (p *Package) gccDebug(stdin []byte, nnames int) (d *dwarf.Data, ints []int6 // Found it. Now find data section. if i := int(s.Section); 0 <= i && i < len(f.Sections) { sect := f.Sections[i] - if sect.Addr <= s.Value && s.Value < sect.Addr+sect.Size { + val := removeTag(s.Value) + if sect.Addr <= val && val < sect.Addr+sect.Size { if sdat, err := sect.Data(); err == nil { - data := sdat[s.Value-sect.Addr:] + data := sdat[val-sect.Addr:] strdata[n] = string(data) } } @@ -1880,9 +1900,10 @@ func (p *Package) gccDebug(stdin []byte, nnames int) (d *dwarf.Data, ints []int6 // Found it. Now find data section. if i := int(s.Section); 0 <= i && i < len(f.Sections) { sect := f.Sections[i] - if sect.Addr <= s.Value && s.Value < sect.Addr+sect.Size { + val := removeTag(s.Value) + if sect.Addr <= val && val < sect.Addr+sect.Size { if sdat, err := sect.Data(); err == nil { - data := sdat[s.Value-sect.Addr:] + data := sdat[val-sect.Addr:] strlen := bo.Uint64(data[:8]) if strlen > (1<<(uint(p.IntSize*8)-1) - 1) { // greater than MaxInt? fatalf("string literal too big") |
