aboutsummaryrefslogtreecommitdiff
path: root/src/cmd/ld/dwarf.c
AgeCommit message (Collapse)Author
2015-03-01cmd/5l etc: replace C code with Go codeRuss Cox
mv cmd/new5l cmd/5l and so on. Minimal changes to cmd/dist and cmd/go to keep things building. More can be deleted in followup CLs. Change-Id: I1449eca7654ce2580d1f413a56dc4a75f3d4618b Reviewed-on: https://go-review.googlesource.com/6361 Reviewed-by: Rob Pike <r@golang.org>
2015-03-01cmd/ld: clean for c2goRuss Cox
Change-Id: Iaab2be9a1919f2fa9dbc61a5b7fbf99bcd0712a9 Reviewed-on: https://go-review.googlesource.com/6332 Reviewed-by: Rob Pike <r@golang.org> Reviewed-by: Minux Ma <minux@golang.org>
2015-02-17[dev.cc] cmd/gc, cmd/ld, runtime: minor tweaks for c2goRuss Cox
Change-Id: I3be69a4ebf300ad24b55b5f43fd7ad1f001c762e Reviewed-on: https://go-review.googlesource.com/4838 Reviewed-by: Rob Pike <r@golang.org>
2015-02-13cmd/ld: make cmd/ld a real libraryRuss Cox
Make cmd/ld a real library invoked by the individual linkers. There are no reverse symbol references anymore (symbols referred to in cmd/ld but defined in cmd/5l etc). This means that in principle we could do an automatic conversion of these to Go, as a stopgap until cmd/link is done or as a replacement for cmd/link. Change-Id: I4a94570257a3a7acc31601bfe0fad9dea0aea054 Reviewed-on: https://go-review.googlesource.com/4649 Reviewed-by: Rob Pike <r@golang.org>
2015-02-06cmd/ld: restore .debug_gdb_script section after runtime reorganizationShenghou Ma
On some systems, gdb refuses to load Python plugin from arbitrary paths, so we have to add $GOROOT/src/runtime to auto-load-safe-path in the gdb script test. Change-Id: Icc44baab8d04a65bd21ceac2ab8ddb13c8d083e8 Reviewed-on: https://go-review.googlesource.com/2905 Reviewed-by: Ian Lance Taylor <iant@golang.org> Reviewed-by: Josh Bleecher Snyder <josharian@gmail.com>
2015-01-30cmd/gc, cmd/ld, liblink: update for portable Prog, Addr changesRuss Cox
Change-Id: Ia6f8badca56565b9df80c8dbe28c47f6cf7e653f Reviewed-on: https://go-review.googlesource.com/3515 Reviewed-by: Austin Clements <austin@google.com> Reviewed-by: Aram Hăvărneanu <aram@mgk.ro>
2014-12-22runtime: hashmap: move overflow pointer to end of bucketKeith Randall
Pointers to zero-sized values may end up pointing to the next object in memory, and possibly off the end of a span. This can cause memory leaks and/or confuse the garbage collector. By putting the overflow pointer at the end of the bucket, we make sure that pointers to any zero-sized keys or values don't accidentally point to the next object in memory. fixes #9384 Change-Id: I5d434df176984cb0210b4d0195dd106d6eb28f73 Reviewed-on: https://go-review.googlesource.com/1869 Reviewed-by: Russ Cox <rsc@golang.org>
2014-10-22[dev.power64] all: merge default into dev.power64Austin Clements
This brings dev.power64 up-to-date with the current tip of default. go_bootstrap is still panicking with a bad defer when initializing the runtime (even on amd64). LGTM=rsc R=rsc CC=golang-codereviews https://golang.org/cl/152570049
2014-10-22build: merge the great pkg/ rename into dev.power64Austin Clements
This also removes pkg/runtime/traceback_lr.c, which was ported to Go in an earlier commit and then moved to runtime/traceback.go. Reviewer: rsc@golang.org rsc: LGTM
2014-10-08cmd/ld: don't add line number info for the final address of an FDEIan Lance Taylor
This makes dwardump --verify happy. Update #8846 LGTM=r R=golang-codereviews, r CC=golang-codereviews https://golang.org/cl/150370043
2014-09-08build: adjustments for move from src/pkg to srcRuss Cox
This CL adjusts code referring to src/pkg to refer to src. Immediately after submitting this CL, I will submit a change doing 'hg mv src/pkg/* src'. That change will be too large to review with Rietveld but will contain only the 'hg mv'. This CL will break the build. The followup 'hg mv' will fix it. For more about the move, see golang.org/s/go14nopkg. LGTM=r R=r CC=golang-codereviews https://golang.org/cl/134570043
2014-08-07[dev.power64] cmd/ld: update for power64Shenghou Ma
LGTM=rsc R=rsc, iant CC=golang-codereviews https://golang.org/cl/121380043
2014-08-05runtime: remove type.goDmitriy Vyukov
We have an autogenerated version in zruntime_defs. I am not sure what are the consequences as gdb never printed any values for me. But it looks unnecessary to manually duplicate it. LGTM=rsc R=golang-codereviews, rsc CC=golang-codereviews, iant, khr https://golang.org/cl/115660043
2014-07-16runtime: convert map implementation to Go.Keith Randall
It's a bit slower, but not painfully so. There is still room for improvement (saving space so we can use nosplit, and removing the requirement for hash/eq stubs). benchmark old ns/op new ns/op delta BenchmarkMegMap 23.5 24.2 +2.98% BenchmarkMegOneMap 14.9 15.7 +5.37% BenchmarkMegEqMap 71668 72234 +0.79% BenchmarkMegEmptyMap 4.05 4.93 +21.73% BenchmarkSmallStrMap 21.9 22.5 +2.74% BenchmarkMapStringKeysEight_16 23.1 26.3 +13.85% BenchmarkMapStringKeysEight_32 21.9 25.0 +14.16% BenchmarkMapStringKeysEight_64 21.9 25.1 +14.61% BenchmarkMapStringKeysEight_1M 21.9 25.0 +14.16% BenchmarkIntMap 21.8 12.5 -42.66% BenchmarkRepeatedLookupStrMapKey32 39.3 30.2 -23.16% BenchmarkRepeatedLookupStrMapKey1M 322353 322675 +0.10% BenchmarkNewEmptyMap 129 136 +5.43% BenchmarkMapIter 137 107 -21.90% BenchmarkMapIterEmpty 7.14 8.71 +21.99% BenchmarkSameLengthMap 5.24 6.82 +30.15% BenchmarkBigKeyMap 34.5 35.3 +2.32% BenchmarkBigValMap 36.1 36.1 +0.00% BenchmarkSmallKeyMap 26.9 26.7 -0.74% LGTM=rsc R=golang-codereviews, dave, dvyukov, rsc, gobot, khr CC=golang-codereviews https://golang.org/cl/99380043
2014-07-16cmd/ld: use count, not upper bound, in type of arrayRob Pike
DWARF says only one is necessary. The count is preferable because it admits 0-length arrays. Update debug/dwarf to handle either form. LGTM=rsc R=rsc CC=golang-codereviews https://golang.org/cl/111230044
2014-07-15cmd/ld: change DWARF encoding for array lengthsRob Pike
They can be large, so use a varint encoding rather than only one byte. LGTM=iant, rsc R=rsc, iant CC=golang-codereviews https://golang.org/cl/113180043
2014-07-15cmd/ld: generate correct upper bound value for array types.Rob Pike
LGTM=rsc R=rsc CC=golang-codereviews https://golang.org/cl/115820043
2014-07-11cmd/ld: add go-specific dwarf type informationRuss Cox
LGTM=r R=r CC=golang-codereviews https://golang.org/cl/116720043
2014-07-11ld: change DWARF output for structsRob Pike
The debug/dwarf package cannot parse the format generated here, but the format can be changed so it does. After this edit, tweaking the expression defining the offset of a struct field, the dwarf package can parse the tables (again?). LGTM=rsc R=rsc CC=golang-codereviews https://golang.org/cl/105710043
2014-07-07cmd/ld: fix off-by-one in DWARF frame tablesRob Pike
The code generating the .debug_frame section emits pairs of "advance PC", "set SP offset" pseudo-instructions. Before the fix, the PC advance comes out before the SP setting, which means the emitted offset for a block is actually the value at the end of the block, which is incorrect for the block itself. The easiest way to fix this problem is to emit the SP offset before the PC advance. One delicate point: the last instruction to come out is now an "advance PC", which means that if there are padding intsructions after the final RET, they will appear to have a non-zero offset. This is odd but harmless because there is no legal way to have a PC in that range, or to put it another way, if you get here the SP is certainly screwed up so getting the wrong (virtual) frame pointer is the least of your worries. LGTM=iant R=rsc, iant, lvd CC=golang-codereviews https://golang.org/cl/112750043
2014-06-10cmd/ld: fix PC deltas in DWARF line number tableIan Lance Taylor
The putpclcdelta function set the DWARF line number PC to s->value + pcline->pc, which is correct, but the code then set the local variable pc to epc, which can be a different value. This caused the next delta in the DWARF table to be wrong. Fixes #8098. LGTM=rsc R=rsc CC=golang-codereviews https://golang.org/cl/104950045
2014-05-20cmd/ld: make lldb happy with Mach-O 6.out filesRuss Cox
Apparently all the __DWARF sections need addresses even though they are marked as "do not load from disk". Continue the address numbering from the data segment. With this change: g% lldb helloworld Current executable set to 'helloworld' (x86_64). (lldb) b main.main Breakpoint 1: where = helloworld`main.main + 25 at helloworld.go:12, address = 0x0000000000002019 (lldb) r Process 68509 launched: '/Users/rsc/g/go/src/cmd/6l/helloworld' (x86_64) 1 location added to breakpoint 1 (lldb) Process 68509 stopped * thread #1: tid = 0x8b7a27, 0x0000000000002019 helloworld`main.main + 25 at helloworld.go:12, stop reason = breakpoint 1.2 frame #0: 0x0000000000002019 helloworld`main.main + 25 at helloworld.go:12 9 package main 10 11 func main() { -> 12 print("hello, world\n") 13 } (lldb) bt * thread #1: tid = 0x8b7a27, 0x0000000000002019 helloworld`main.main + 25 at helloworld.go:12, stop reason = breakpoint 1.2 * frame #0: 0x0000000000002019 helloworld`main.main + 25 at helloworld.go:12 (lldb) disas helloworld`main.main at helloworld.go:11: 0x2000: movq %gs:0x8a0, %rcx 0x2009: cmpq (%rcx), %rsp 0x200c: ja 0x2015 ; main.main + 21 at helloworld.go:11 0x200e: callq 0x20da0 ; runtime.morestack00_noctxt at atomic_amd64x.c:28 0x2013: jmp 0x2000 ; main.main at helloworld.go:11 0x2015: subq $0x10, %rsp -> 0x2019: leaq 0x2c2e0, %rbx 0x2021: leaq (%rsp), %rbp 0x2025: movq %rbp, %rdi 0x2028: movq %rbx, %rsi 0x202b: movsq 0x202d: movsq 0x202f: callq 0x10300 ; runtime.printstring at compiler.go:1 0x2034: addq $0x10, %rsp 0x2038: ret 0x2039: addb %al, (%rax) 0x203b: addb %al, (%rax) 0x203d: addb %al, (%rax) (lldb) quit Quitting LLDB will kill one or more processes. Do you really want to proceed: [Y/n] y g% Fixes #7070. LGTM=iant R=golang-codereviews, iant CC=golang-codereviews https://golang.org/cl/93510043
2014-04-16liblink, cmd/ld: reenable nosplit checking and testRuss Cox
The new code is adapted from the Go 1.2 nosplit code, but it does not have the bug reported in issue 7623: g% go run nosplit.go g% go1.2 run nosplit.go BUG rejected incorrectly: main 0 call f; f 120 linker output: # _/tmp/go-test-nosplit021064539 main.main: nosplit stack overflow 120 guaranteed after split check in main.main 112 on entry to main.f -8 after main.f uses 120 g% Fixes #6931. Fixes #7623. LGTM=iant R=golang-codereviews, iant, ality CC=golang-codereviews, r https://golang.org/cl/88190043
2014-04-16cmd/ld: correct comment.Shenghou Ma
LGTM=iant R=golang-codereviews, iant CC=golang-codereviews https://golang.org/cl/88360044
2014-04-15cmd/ld: record complete runtime-gdb.py path againRuss Cox
This code never got updated after the liblink shuffle. Tested by hand that it works and respects GOROOT_FINAL. The discussion in issue 6963 suggests that perhaps we should just drop runtime-gdb.py entirely, but I am not convinced that is true. It was in Go 1.2 and I don't see a reason not to keep it in Go 1.3. The fact that binaries have not been emitting the reference was just a missed detail in the liblink conversion, not part of a grand plan. Fixes #7506. Fixes #6963. LGTM=bradfitz R=golang-codereviews, bradfitz CC=golang-codereviews, iant, r https://golang.org/cl/87870048
2014-04-14liblink: remove arch-specific constants from file formatRuss Cox
The relocation and automatic variable types were using arch-specific numbers. Introduce portable enumerations instead. To the best of my knowledge, these are the only arch-specific bits left in the new object file format. Remove now, before Go 1.3, because file formats are forever. LGTM=iant R=iant CC=golang-codereviews https://golang.org/cl/87670044
2014-04-02cmd/ld: get rid of map.bucket's data field from dwarf info.Keith Randall
The data field is the generic array that acts as a standin for the keys and values arrays for the generic runtime code. We want to substitute the keys and values arrays for the data array, not just add keys and values in addition to it. LGTM=iant R=golang-codereviews, iant CC=golang-codereviews https://golang.org/cl/81160044
2014-03-03cmd/ld: DWARF opcode base to 10Graham King
DWARF 2 has 9 standard opcodes, so dwarfdump expects us to use an opcode base of at least 10. Previously we used 5. Discussion: https://groups.google.com/forum/#!topic/golang-dev/d-BqpPgalzc LGTM=josharian, rsc R=golang-codereviews, gobot, rsc, josharian, iant, bradfitz CC=golang-codereviews https://golang.org/cl/69320043
2014-02-20cmd/ld: fix off-by-one error in DWARF .debug_line transcriptionJosh Bleecher Snyder
The liblink refactor changed the DWARF .debug_line flow control. The mapping was off by one pcline entry. The fix here preserves pc until it can be compared to pcline.pc. Sample dwarfdump .debug_line output for main.main from the program in issue 7351, before liblink (correct): 0x0000003c: 00 Extended: <9> 02 DW_LNE_set_address( 0x0000000000002000 ) 0x00000047: 03 DW_LNS_advance_line( 6 ) 0x00000049: 01 DW_LNS_copy 0x0000000000002000 1 7 0 is_stmt 0x0000004a: 8b address += 21, line += 1 0x0000000000002021 1 8 0 is_stmt 0x0000004b: 02 DW_LNS_advance_pc( 153 ) 0x0000004e: 03 DW_LNS_advance_line( 1 ) 0x00000050: 01 DW_LNS_copy 0x00000000000020ba 1 9 0 is_stmt After liblink (off by one entry): 0x00001bbf: 00 Extended: <9> 02 DW_LNE_set_address( 0x0000000000002000 ) 0x00001bca: 02 DW_LNS_advance_pc( 33 ) 0x00001bcc: 03 DW_LNS_advance_line( 6 ) 0x00001bce: 01 DW_LNS_copy 0x0000000000002021 1 7 0 is_stmt 0x00001bcf: 02 DW_LNS_advance_pc( 153 ) 0x00001bd2: 03 DW_LNS_advance_line( 1 ) 0x00001bd4: 01 DW_LNS_copy 0x00000000000020ba 1 8 0 is_stmt 0x00001bd5: 02 DW_LNS_advance_pc( 153 ) 0x00001bd8: 03 DW_LNS_advance_line( 1 ) 0x00001bda: 01 DW_LNS_copy 0x0000000000002153 1 9 0 is_stmt After this CL (the line 9 pc offset changed due to intervening compiler changes): 0x00001d07: 00 Extended: <9> 02 DW_LNE_set_address( 0x0000000000002000 ) 0x00001d12: 03 DW_LNS_advance_line( 6 ) 0x00001d14: 01 DW_LNS_copy 0x0000000000002000 1 7 0 is_stmt 0x00001d15: 8b address += 21, line += 1 0x0000000000002021 1 8 0 is_stmt 0x00001d16: 02 DW_LNS_advance_pc( 189 ) 0x00001d19: 03 DW_LNS_advance_line( 1 ) 0x00001d1b: 01 DW_LNS_copy 0x00000000000020de 1 9 0 is_stmt Fixes #7351. LGTM=rsc R=rsc CC=golang-codereviews https://golang.org/cl/66290043
2013-12-18cmd/6g, cmd/gc, cmd/ld: fix Plan 9 amd64 warningsDavid du Colombier
warning: src/cmd/6g/reg.c:671 format mismatch d VLONG, arg 4 warning: src/cmd/gc/pgen.c:230 set and not used: oldstksize warning: src/cmd/gc/plive.c:877 format mismatch lx UVLONG, arg 2 warning: src/cmd/gc/walk.c:2878 set and not used: cbv warning: src/cmd/gc/walk.c:2885 set and not used: hbv warning: src/cmd/ld/data.c:198 format mismatch s IND FUNC(IND CHAR) INT, arg 2 warning: src/cmd/ld/data.c:230 format mismatch s IND FUNC(IND CHAR) INT, arg 2 warning: src/cmd/ld/dwarf.c:1517 set and not used: pc warning: src/cmd/ld/elf.c:1507 format mismatch d VLONG, arg 2 warning: src/cmd/ld/ldmacho.c:509 set and not used: dsymtab R=golang-dev, gobot, rsc CC=golang-dev https://golang.org/cl/36740045
2013-12-16cmd/ld: move instruction selection + layout into compilers, assemblersRuss Cox
- new object file reader/writer (liblink/objfile.c) - remove old object file writing routines - add pcdata iterator - remove all trace of "line number stack" and "path fragments" from object files, linker (!!!) - dwarf now writes a single "compilation unit" instead of one per package This CL disables the check for chains of no-split functions that could overflow the stack red zone. A future CL will attack the problem of reenabling that check (issue 6931). This CL is just the liblink and cmd/ld changes. There are minor associated adjustments in CL 37030045. Each depends on the other. R=golang-dev, dave, iant CC=golang-dev https://golang.org/cl/39680043
2013-12-08liblink: create new library based on linker codeRuss Cox
There is an enormous amount of code moving around in this CL, but the code is the same, and it is invoked in the same ways. This CL is preparation for the new linker structure, not the new structure itself. The new library's definition is in include/link.h. The main change is the use of a Link structure to hold all the linker-relevant state, replacing the smattering of global variables. The Link structure should both make it clearer which state must be carried around and make it possible to parallelize more easily later. The main body of the linker has moved into the architecture-independent cmd/ld directory. That includes the list of known header types, so the distinction between Hplan9x32 and Hplan9x64 is removed (no other header type distinguished 32- and 64-bit formats), and code for unused formats such as ipaq kernels has been deleted. The code being deleted from 5l, 6l, and 8l reappears in liblink or in ld. Because multiple files are being merged in the liblink directory, it is not possible to show the diffs nicely in hg. The Prog and Addr structures have been unified into an architecture-independent form and moved to link.h, where they will be shared by all tools: the assemblers, the compilers, and the linkers. The unification makes it possible to write architecture-independent traversal of Prog lists, among other benefits. The Sym structures cannot be unified: they are too fundamentally different between the linker and the compilers. Instead, liblink defines an LSym - a linker Sym - to be used in the Prog and Addr structures, and the linker now refers exclusively to LSyms. The compilers will keep using their own syms but will fill out the corresponding LSyms in the Prog and Addr structures. Although code from 5l, 6l, and 8l is now in a single library, the code has been arranged so that only one architecture needs to be linked into a particular program: 5l will not contain the code needed for x86 instruction layout, for example. The object file writing code in liblink/obj.c is from cmd/gc/obj.c. Preparation for golang.org/s/go13linker work. This CL does not build by itself. It depends on 35740044 and will be submitted at the same time. R=iant CC=golang-dev https://golang.org/cl/35790044
2013-09-05cmd/ld: emit relocations for .debug_frame in external link modeIan Lance Taylor
This should have been part of revision 16731:cdedb129e020, but I missed it. This fixes printing local variables when doing an external link. No test because we aren't doing any debug info testing yet. Fixes #5719. R=golang-dev, r CC=golang-dev https://golang.org/cl/13464046
2013-06-09all: fix typosShenghou Ma
R=golang-dev, bradfitz, khr, r CC=golang-dev https://golang.org/cl/7461046
2013-04-30cmd/ld: when linking externally, only generate dwarf info for ELFRob Pike
R=golang-dev, iant CC=golang-dev https://golang.org/cl/9025047
2013-04-30cmd/ld: emit relocs for DWARF info when doing an external linkIan Lance Taylor
I would like opinions on whether this is a good idea for 1.1. On the one hand it's a moderately important issue. On the other hand this introduces at least the possibility of external linker errors due to the additional relocations and it may be better to wait. I'm fairly confident that the behaviour is unchanged when not using an external linker. Update #5221 This CL is tested lightly on 386 and amd64 and fixes the cases I tested. I have not tested it on Darwin or Windows. R=golang-dev, dave, daniel.morsing, rsc CC=golang-dev https://golang.org/cl/8858047
2013-03-29runtime: fix gdb printing of mapsKeith Randall
Fixes #5098 R=minux.ma, bradfitz, khr, rsc CC=golang-dev https://golang.org/cl/7746045
2013-03-22cmd/ld: don't generate DW_AT_type attr for unsafe.Pointer to match gcc behaviorShenghou Ma
gcc generates only attr DW_AT_byte_size for DW_TAG_pointer_type of "void *", but we used to also generate DW_AT_type pointing to imaginary unspecified type "void", which confuses some gdb. This change makes old Apple gdb 6.x (specifically, Apple version gdb-1515) accepts our binary without issue like this: (gdb) b 'main.main' Die: DW_TAG_unspecified_type (abbrev = 10, offset = 47079) has children: FALSE attributes: DW_AT_name (DW_FORM_string) string: "void" Dwarf Error: Cannot find type of die [in module /Users/minux/go/go2.hg/bin/go] Special thanks to Russ Cox for pointing out the problem in comment #6 of CL 7891044. R=golang-dev, rsc CC=golang-dev https://golang.org/cl/7744051
2013-03-22cmd/ld: fix bad mergeShenghou Ma
CL 7504044 accidentally reverted part of CL 7891044 and 7552045, this CL bring those part back. R=golang-dev TBR=rsc CC=golang-dev https://golang.org/cl/7950045
2013-03-20runtime: faster hashmap implementation.Keith Randall
Hashtable is arranged as an array of 8-entry buckets with chained overflow. Each bucket has 8 extra hash bits per key to provide quick lookup within a bucket. Table is grown incrementally. Update #3885 Go time drops from 0.51s to 0.34s. R=r, rsc, m3b, dave, bradfitz, khr, ugorji, remyoudompheng CC=golang-dev https://golang.org/cl/7504044
2013-03-19cmd/ld: fix typoRuss Cox
R=golang-dev, minux.ma CC=golang-dev https://golang.org/cl/7552045
2013-03-19cmd/ld: generate relocated DWARF in hostobj modeRuss Cox
While we're here, downgrade DWARF to version 2. We're not using any version 3 features, and OS X gdb only supports version 2. Fixes #3436. R=golang-dev, minux.ma CC=golang-dev https://golang.org/cl/7891044
2013-03-10cmd/ld: make mach-o sections match internal sectionsRuss Cox
This brings Mach-O generation more in line with ELF generation. Having separate sections for the symtab and pclntab mean that we can find them that way, instead of using the deprecated debug segments. (And the host linker will keep separate sections for us, but probably not the debug segments.) R=ken2 CC=golang-dev https://golang.org/cl/7688043
2013-03-07cmd/ld: host linking support for linux/amd64Russ Cox
Still to do: non-linux and non-amd64. It may work on other ELF-based amd64 systems too, but untested. "go test -ldflags -hostobj $GOROOT/misc/cgo/test" passes. Much may yet change, but this seems a reasonable checkpoint. R=iant CC=golang-dev https://golang.org/cl/7369057
2013-02-26all: clean up C function prototypesAnthony Martin
R=minux.ma, rsc, akumar, bradfitz CC=golang-dev https://golang.org/cl/7313070
2012-11-27libmach, cmd/cc, cmd/cov, cmd/ld, cmd/prof: check malloc return valueShenghou Ma
Update #4415. R=golang-dev, rsc CC=golang-dev https://golang.org/cl/6856080
2012-11-13reflect: add ArrayOf, ChanOf, MapOf, SliceOfRuss Cox
In order to add these, we need to be able to find references to such types that already exist in the binary. To do that, introduce a new linker section holding a list of the types corresponding to arrays, chans, maps, and slices. To offset the storage cost of this list, and to simplify the code, remove the interface{} header from the representation of a runtime type. It was used in early versions of the code but was made obsolete by the kind field: a switch on kind is more efficient than a type switch. In the godoc binary, removing the interface{} header cuts two words from each of about 10,000 types. Adding back the list of pointers to array, chan, map, and slice types reintroduces one word for each of about 500 types. On a 64-bit machine, then, this CL *removes* a net 156 kB of read-only data from the binary. This CL does not include the needed support for precise garbage collection. I have created issue 4375 to track that. This CL also does not set the 'algorithm' - specifically the equality and copy functions - for a new array correctly, so I have unexported ArrayOf for now. That is also part of issue 4375. Fixes #2339. R=r, remyoudompheng, mirtchovski, iant CC=golang-dev https://golang.org/cl/6572043
2012-09-13ld: add .gcdata and .gcbss sectionsJan Ziak
R=rsc CC=golang-dev https://golang.org/cl/6281048
2012-06-02runtime: add (unused for now) gc field to type informationJan Ziak
R=rsc CC=golang-dev https://golang.org/cl/6255074
2012-02-12runtime: delete Type and implementations (use reflect instead)Russ Cox
unsafe: delete Typeof, Reflect, Unreflect, New, NewArray Part of issue 2955 and issue 2968. R=golang-dev, r CC=golang-dev https://golang.org/cl/5650069