The pclntab encoding supports writing only some PCDATA and FUNCDATA values.
However, the encoding is dense: The max index in use determines the space used.
We should thus choose a numbering in which frequently used indices are smaller.
This change re-orders the PCDATA and FUNCDATA indices using that principle,
using a quick and dirty instrumentation to measure index frequency.
It shrinks binaries by about 0.5%.
Updates #6853
file before after Δ %
go
14745044 14671316 -73728 -0.500%
addr2line
4305128 4280552 -24576 -0.571%
api
6095800 6058936 -36864 -0.605%
asm
4930928 4906352 -24576 -0.498%
buildid
2881520 2861040 -20480 -0.711%
cgo
4896584 4867912 -28672 -0.586%
compile
25868408 25770104 -98304 -0.380%
cover
5319656 5286888 -32768 -0.616%
dist
3654528 3634048 -20480 -0.560%
doc
4719672 4691000 -28672 -0.607%
fix
3418312 3393736 -24576 -0.719%
link
6137952 6109280 -28672 -0.467%
nm
4250536 4225960 -24576 -0.578%
objdump
4665192 4636520 -28672 -0.615%
pack
2297488 2285200 -12288 -0.535%
pprof
14735332 14657508 -77824 -0.528%
test2json
2834952 2818568 -16384 -0.578%
trace
11679964 11618524 -61440 -0.526%
vet
8452696 8403544 -49152 -0.581%
Change-Id: I30665dce57ec7a52e7d3c6718560b3aa5b83dd0b
Reviewed-on: https://go-review.googlesource.com/c/go/+/171760
Run-TryBot: Josh Bleecher Snyder <josharian@gmail.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Austin Clements <austin@google.com>
// ../../../runtime/symtab.go.
const (
- PCDATA_StackMapIndex = 0
- PCDATA_InlTreeIndex = 1
- PCDATA_RegMapIndex = 2
+ PCDATA_RegMapIndex = 0
+ PCDATA_StackMapIndex = 1
+ PCDATA_InlTreeIndex = 2
+
FUNCDATA_ArgsPointerMaps = 0
FUNCDATA_LocalsPointerMaps = 1
- FUNCDATA_InlTree = 2
- FUNCDATA_RegPointerMaps = 3
- FUNCDATA_StackObjects = 4
+ FUNCDATA_RegPointerMaps = 2
+ FUNCDATA_StackObjects = 3
+ FUNCDATA_InlTree = 4
// ArgsSizeUnknown is set in Func.argsize to mark all functions
// whose argument size is unknown (C vararg functions, and
//
// These must agree with symtab.go and ../cmd/internal/objabi/funcdata.go.
-#define PCDATA_StackMapIndex 0
-#define PCDATA_InlTreeIndex 1
-#define PCDATA_RegMapIndex 2
+#define PCDATA_RegMapIndex 0
+#define PCDATA_StackMapIndex 1
+#define PCDATA_InlTreeIndex 2
#define FUNCDATA_ArgsPointerMaps 0 /* garbage collector blocks */
#define FUNCDATA_LocalsPointerMaps 1
-#define FUNCDATA_InlTree 2
-#define FUNCDATA_RegPointerMaps 3
-#define FUNCDATA_StackObjects 4
+#define FUNCDATA_RegPointerMaps 2
+#define FUNCDATA_StackObjects 3
+#define FUNCDATA_InlTree 4
// Pseudo-assembly statements.
//
// See funcdata.h and ../cmd/internal/objabi/funcdata.go.
const (
- _PCDATA_StackMapIndex = 0
- _PCDATA_InlTreeIndex = 1
- _PCDATA_RegMapIndex = 2
+ _PCDATA_RegMapIndex = 0
+ _PCDATA_StackMapIndex = 1
+ _PCDATA_InlTreeIndex = 2
+
_FUNCDATA_ArgsPointerMaps = 0
_FUNCDATA_LocalsPointerMaps = 1
- _FUNCDATA_InlTree = 2
- _FUNCDATA_RegPointerMaps = 3
- _FUNCDATA_StackObjects = 4
- _ArgsSizeUnknown = -0x80000000
+ _FUNCDATA_RegPointerMaps = 2
+ _FUNCDATA_StackObjects = 3
+ _FUNCDATA_InlTree = 4
+
+ _ArgsSizeUnknown = -0x80000000
)
// A FuncID identifies particular functions that need to be treated