Commit cc8cfefd authored by Dmitriy Vyukov's avatar Dmitriy Vyukov

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
parent a29f3136
...@@ -56,5 +56,7 @@ Options new in this version: ...@@ -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
...@@ -72,6 +72,8 @@ Lflag(char *arg) ...@@ -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) ...@@ -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) ...@@ -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'])
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment