Elfwritedynent(s, DT_RELENT, ELF32RELSIZE)
}
- if rpath != "" {
- Elfwritedynent(s, DT_RUNPATH, uint64(Addstring(dynstr, rpath)))
+ if rpath.val != "" {
+ Elfwritedynent(s, DT_RUNPATH, uint64(Addstring(dynstr, rpath.val)))
}
if Thearch.Thechar == '9' {
Vput func(uint64)
}
+type Rpath struct {
+ set bool
+ val string
+}
+
+func (r *Rpath) Set(val string) error {
+ r.set = true
+ r.val = val
+ return nil
+}
+
+func (r *Rpath) String() string {
+ return r.val
+}
+
var (
Thearch Arch
datap *LSym
Debug [128]int
Lcsize int32
- rpath string
+ rpath Rpath
Spsize int32
Symsize int32
)
argv = append(argv, "-o")
argv = append(argv, outfile)
- if rpath != "" {
- argv = append(argv, fmt.Sprintf("-Wl,-rpath,%s", rpath))
+ if rpath.val != "" {
+ argv = append(argv, fmt.Sprintf("-Wl,-rpath,%s", rpath.val))
}
// Force global symbols to be exported for dlopen, etc.
for _, shlib := range Ctxt.Shlibs {
dir, base := filepath.Split(shlib)
argv = append(argv, "-L"+dir)
- argv = append(argv, "-Wl,-rpath="+dir)
+ if !rpath.set {
+ argv = append(argv, "-Wl,-rpath="+dir)
+ }
base = strings.TrimSuffix(base, ".so")
base = strings.TrimPrefix(base, "lib")
argv = append(argv, "-l"+base)
flag.BoolVar(&Linkshared, "linkshared", false, "link against installed Go shared libraries")
obj.Flagcount("n", "dump symbol table", &Debug['n'])
obj.Flagstr("o", "outfile: set output file", &outfile)
- obj.Flagstr("r", "dir1:dir2:...: set ELF dynamic linker search path", &rpath)
+ flag.Var(&rpath, "r", "dir1:dir2:...: set ELF dynamic linker search path")
obj.Flagcount("race", "enable race detector", &flag_race)
obj.Flagcount("s", "disable symbol table", &Debug['s'])
var flagShared int