diff options
author | Ian Lance Taylor <iant@golang.org> | 2010-02-26 14:03:52 -0800 |
---|---|---|
committer | Ian Lance Taylor <iant@golang.org> | 2010-02-26 14:03:52 -0800 |
commit | af11b1b86dbe30e9a35fa3cd6c5b3775a3c74a31 (patch) | |
tree | 606c0a351c81516bc01bf3a74c04716e2ecabaea /src/cmd/5l | |
parent | 3e86f1a9b48d063a29ebf9fdfc84978f762f9b0e (diff) | |
download | golang-af11b1b86dbe30e9a35fa3cd6c5b3775a3c74a31.tar.gz |
Add -r option to 6l/8l/5l.
This permits more flexibility with cgo and swig in cases where
the program is run on a machine other than the one on which it
is built. Rather than storing the absolute path to the shared
library in the DT_NEEDED entry, we can store just the name,
and let the dynamic linker find it using DT_RUNPATH or the
LD_LIBRARY_PATH environment variable.
R=rsc
CC=golang-dev
http://codereview.appspot.com/223068
Diffstat (limited to 'src/cmd/5l')
-rw-r--r-- | src/cmd/5l/asm.c | 2 | ||||
-rw-r--r-- | src/cmd/5l/doc.go | 2 | ||||
-rw-r--r-- | src/cmd/5l/l.h | 1 | ||||
-rw-r--r-- | src/cmd/5l/obj.c | 5 |
4 files changed, 9 insertions, 1 deletions
diff --git a/src/cmd/5l/asm.c b/src/cmd/5l/asm.c index 143a4076d..2a9265a88 100644 --- a/src/cmd/5l/asm.c +++ b/src/cmd/5l/asm.c @@ -322,6 +322,8 @@ doelf(void) elfwritedynentsym(s, DT_REL, lookup(".rel", 0)); elfwritedynentsymsize(s, DT_RELSZ, lookup(".rel", 0)); elfwritedynent(s, DT_RELENT, ELF32RELSIZE); + if(rpath) + elfwritedynent(s, DT_RUNPATH, addstring(dynstr, rpath)); elfwritedynent(s, DT_NULL, 0); } } diff --git a/src/cmd/5l/doc.go b/src/cmd/5l/doc.go index b724e7012..b09995d71 100644 --- a/src/cmd/5l/doc.go +++ b/src/cmd/5l/doc.go @@ -23,6 +23,8 @@ Options new in this version: -L dir1,dir2,.. Search for libraries (package files) in the comma-separated list of directories. The default is the single location $GOROOT/pkg/$GOOS_arm. +-r dir1:dir2:... + Set the dynamic linker search path when using ELF. -V Print the linker version. diff --git a/src/cmd/5l/l.h b/src/cmd/5l/l.h index 9a54122a7..ac627e456 100644 --- a/src/cmd/5l/l.h +++ b/src/cmd/5l/l.h @@ -333,6 +333,7 @@ EXTERN Oprang thumboprange[ALAST]; EXTERN char* outfile; EXTERN int32 pc; EXTERN uchar repop[ALAST]; +EXTERN char* rpath; EXTERN uint32 stroffset; EXTERN int32 symsize; EXTERN Prog* textp; diff --git a/src/cmd/5l/obj.c b/src/cmd/5l/obj.c index 9f7aa19c3..06a84eeac 100644 --- a/src/cmd/5l/obj.c +++ b/src/cmd/5l/obj.c @@ -81,7 +81,7 @@ linkername[] = void usage(void) { - fprint(2, "usage: 5l [-E entry] [-H head] [-L dir] [-T text] [-D data] [-R rnd] [-o out] main.5\n"); + fprint(2, "usage: 5l [-E entry] [-H head] [-L dir] [-T text] [-D data] [-R rnd] [-r path] [-o out] main.5\n"); errorexit(); } @@ -128,6 +128,9 @@ main(int argc, char *argv[]) case 'R': INITRND = atolwhex(EARGF(usage())); break; + case 'r': + rpath = EARGF(usage()); + break; case 'H': HEADTYPE = atolwhex(EARGF(usage())); /* do something about setting INITTEXT */ |