1
0
mirror of https://github.com/golang/go synced 2024-11-21 20:24:50 -07:00

race: linker changes

This is the second part of a bigger change that adds data race detection feature:
https://golang.org/cl/6456044
This change makes the linker emit dependency on runtime/race package when supplied with -b flag.

R=rsc, minux.ma
CC=golang-dev
https://golang.org/cl/6488074
This commit is contained in:
Dmitriy Vyukov 2012-09-19 01:05:25 +04:00
parent a29f3136b4
commit cc8cfefd8a
2 changed files with 10 additions and 1 deletions

View File

@ -56,5 +56,7 @@ Options new in this version:
Set the value of an otherwise uninitialized string variable. Set the value of an otherwise uninitialized string variable.
The symbol name should be of the form importpath.name, The symbol name should be of the form importpath.name,
as displayed in the symbol table printed by "go tool nm". as displayed in the symbol table printed by "go tool nm".
-b
Link with race detection libraries.
*/ */
package documentation package documentation

View File

@ -72,6 +72,8 @@ Lflag(char *arg)
void void
libinit(void) libinit(void)
{ {
char *race;
fmtinstall('i', iconv); fmtinstall('i', iconv);
fmtinstall('Y', Yconv); fmtinstall('Y', Yconv);
fmtinstall('Z', Zconv); fmtinstall('Z', Zconv);
@ -80,7 +82,10 @@ libinit(void)
print("goarch is not known: %s\n", goarch); print("goarch is not known: %s\n", goarch);
// add goroot to the end of the libdir list. // add goroot to the end of the libdir list.
Lflag(smprint("%s/pkg/%s_%s", goroot, goos, goarch)); race = "";
if(debug['b'])
race = "_race";
Lflag(smprint("%s/pkg/%s_%s%s", goroot, goos, goarch, race));
// Unix doesn't like it when we write to a running (or, sometimes, // Unix doesn't like it when we write to a running (or, sometimes,
// recently run) binary, so remove the output file before writing it. // recently run) binary, so remove the output file before writing it.
@ -281,6 +286,8 @@ loadlib(void)
loadinternal("runtime"); loadinternal("runtime");
if(thechar == '5') if(thechar == '5')
loadinternal("math"); loadinternal("math");
if(debug['b'])
loadinternal("runtime/race");
for(i=0; i<libraryp; i++) { for(i=0; i<libraryp; i++) {
if(debug['v']) if(debug['v'])