aboutsummaryrefslogtreecommitdiff
path: root/src/cmd/internal
diff options
context:
space:
mode:
authorCherry Mui <cherryyz@google.com>2021-09-28 16:20:29 -0400
committerCherry Mui <cherryyz@google.com>2021-09-29 13:53:07 +0000
commit587b3c1192397393afb0ec5acd608e3dfe9f2116 (patch)
tree6bd55a3ce98e3b17f8cb50711753b473a32adf5f /src/cmd/internal
parent435718edd9e9ba60d0c5bca45cc9d57c6b5527bc (diff)
downloadgo-587b3c1192397393afb0ec5acd608e3dfe9f2116.tar.gz
go-587b3c1192397393afb0ec5acd608e3dfe9f2116.zip
cmd/link: access pcdata via aux symbols
Pcdata are now separate aux symbols. Read them from aux, instead of using funcinfo. Now we can remove pcdata fields from funcinfo. Change-Id: Ie65e3962edecc0f39127a5f6963dc59d1f141e67 Reviewed-on: https://go-review.googlesource.com/c/go/+/352893 Trust: Cherry Mui <cherryyz@google.com> Run-TryBot: Cherry Mui <cherryyz@google.com> TryBot-Result: Go Bot <gobot@golang.org> Reviewed-by: Than McIntosh <thanm@google.com>
Diffstat (limited to 'src/cmd/internal')
-rw-r--r--src/cmd/internal/goobj/funcinfo.go55
-rw-r--r--src/cmd/internal/obj/objfile.go8
2 files changed, 3 insertions, 60 deletions
diff --git a/src/cmd/internal/goobj/funcinfo.go b/src/cmd/internal/goobj/funcinfo.go
index 6d33a10a51..6e7970fb74 100644
--- a/src/cmd/internal/goobj/funcinfo.go
+++ b/src/cmd/internal/goobj/funcinfo.go
@@ -16,19 +16,12 @@ type CUFileIndex uint32
// FuncInfo is serialized as a symbol (aux symbol). The symbol data is
// the binary encoding of the struct below.
-//
-// TODO: make each pcdata a separate symbol?
type FuncInfo struct {
Args uint32
Locals uint32
FuncID objabi.FuncID
FuncFlag objabi.FuncFlag
- Pcsp SymRef
- Pcfile SymRef
- Pcline SymRef
- Pcinline SymRef
- Pcdata []SymRef
Funcdataoff []uint32
File []CUFileIndex
@@ -44,10 +37,6 @@ func (a *FuncInfo) Write(w *bytes.Buffer) {
binary.LittleEndian.PutUint32(b[:], x)
w.Write(b[:])
}
- writeSymRef := func(s SymRef) {
- writeUint32(s.PkgIdx)
- writeUint32(s.SymIdx)
- }
writeUint32(a.Args)
writeUint32(a.Locals)
@@ -55,14 +44,6 @@ func (a *FuncInfo) Write(w *bytes.Buffer) {
writeUint8(uint8(a.FuncFlag))
writeUint8(0) // pad to uint32 boundary
writeUint8(0)
- writeSymRef(a.Pcsp)
- writeSymRef(a.Pcfile)
- writeSymRef(a.Pcline)
- writeSymRef(a.Pcinline)
- writeUint32(uint32(len(a.Pcdata)))
- for _, sym := range a.Pcdata {
- writeSymRef(sym)
- }
writeUint32(uint32(len(a.Funcdataoff)))
for _, x := range a.Funcdataoff {
@@ -84,8 +65,6 @@ func (a *FuncInfo) Write(w *bytes.Buffer) {
// corresponding "off" field stores the byte offset of the start of
// the items in question.
type FuncInfoLengths struct {
- NumPcdata uint32
- PcdataOff uint32
NumFuncdataoff uint32
FuncdataoffOff uint32
NumFile uint32
@@ -98,13 +77,9 @@ type FuncInfoLengths struct {
func (*FuncInfo) ReadFuncInfoLengths(b []byte) FuncInfoLengths {
var result FuncInfoLengths
- // Offset to the number of pcdata values. This value is determined by counting
- // the number of bytes until we write pcdata to the file.
- const numpcdataOff = 44
- result.NumPcdata = binary.LittleEndian.Uint32(b[numpcdataOff:])
- result.PcdataOff = numpcdataOff + 4
-
- numfuncdataoffOff := result.PcdataOff + 8*result.NumPcdata
+ // Offset to the number of funcdataoff values. This value is determined by counting
+ // the number of bytes until we write funcdataoff to the file.
+ const numfuncdataoffOff = 12
result.NumFuncdataoff = binary.LittleEndian.Uint32(b[numfuncdataoffOff:])
result.FuncdataoffOff = numfuncdataoffOff + 4
@@ -129,30 +104,6 @@ func (*FuncInfo) ReadFuncID(b []byte) objabi.FuncID { return objabi.FuncID(b[8])
func (*FuncInfo) ReadFuncFlag(b []byte) objabi.FuncFlag { return objabi.FuncFlag(b[9]) }
-func (*FuncInfo) ReadPcsp(b []byte) SymRef {
- return SymRef{binary.LittleEndian.Uint32(b[12:]), binary.LittleEndian.Uint32(b[16:])}
-}
-
-func (*FuncInfo) ReadPcfile(b []byte) SymRef {
- return SymRef{binary.LittleEndian.Uint32(b[20:]), binary.LittleEndian.Uint32(b[24:])}
-}
-
-func (*FuncInfo) ReadPcline(b []byte) SymRef {
- return SymRef{binary.LittleEndian.Uint32(b[28:]), binary.LittleEndian.Uint32(b[32:])}
-}
-
-func (*FuncInfo) ReadPcinline(b []byte) SymRef {
- return SymRef{binary.LittleEndian.Uint32(b[36:]), binary.LittleEndian.Uint32(b[40:])}
-}
-
-func (*FuncInfo) ReadPcdata(b []byte) []SymRef {
- syms := make([]SymRef, binary.LittleEndian.Uint32(b[44:]))
- for i := range syms {
- syms[i] = SymRef{binary.LittleEndian.Uint32(b[48+i*8:]), binary.LittleEndian.Uint32(b[52+i*8:])}
- }
- return syms
-}
-
func (*FuncInfo) ReadFuncdataoff(b []byte, funcdataofffoff uint32, k uint32) int64 {
return int64(binary.LittleEndian.Uint32(b[funcdataofffoff+4*k:]))
}
diff --git a/src/cmd/internal/obj/objfile.go b/src/cmd/internal/obj/objfile.go
index 030a02b499..bed32198d7 100644
--- a/src/cmd/internal/obj/objfile.go
+++ b/src/cmd/internal/obj/objfile.go
@@ -671,14 +671,6 @@ func genFuncInfoSyms(ctxt *Link) {
FuncFlag: fn.FuncFlag,
}
pc := &fn.Pcln
- o.Pcsp = makeSymRef(pc.Pcsp)
- o.Pcfile = makeSymRef(pc.Pcfile)
- o.Pcline = makeSymRef(pc.Pcline)
- o.Pcinline = makeSymRef(pc.Pcinline)
- o.Pcdata = make([]goobj.SymRef, len(pc.Pcdata))
- for i, pcSym := range pc.Pcdata {
- o.Pcdata[i] = makeSymRef(pcSym)
- }
o.Funcdataoff = make([]uint32, len(pc.Funcdataoff))
for i, x := range pc.Funcdataoff {
o.Funcdataoff[i] = uint32(x)