[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Bug ld/15096] New: DT_RPATH != DT_RUNPATH
From: |
hjl.tools at gmail dot com |
Subject: |
[Bug ld/15096] New: DT_RPATH != DT_RUNPATH |
Date: |
Mon, 04 Feb 2013 18:09:53 +0000 |
http://sourceware.org/bugzilla/show_bug.cgi?id=15096
Bug #: 15096
Summary: DT_RPATH != DT_RUNPATH
Product: binutils
Version: 2.24 (HEAD)
Status: NEW
Severity: normal
Priority: P2
Component: ld
AssignedTo: address@hidden
ReportedBy: address@hidden
Classification: Unclassified
According to gABI,
The set of directories specified by a given DT_RUNPATH entry is used to
find only the immediate dependencies of the executable or shared object
containing the DT_RUNPATH entry. That is, it is used only for those
dependencies contained in the DT_NEEDED entries of the dynamic structure
containing the DT_RUNPATH entry, itself. One object's DT_RUNPATH entry
does not affect the search for any other object's dependencies.
That means DT_RUNPATH on executable doesn't apply to shared objects
which executable depends on:
address@hidden runpath]$ cat foo.c
#include <dlfcn.h>
int
main ()
{
void* handle = dlopen("libso1.so", RTLD_LAZY);
typedef int (*hello_t)();
hello_t hello1 = (hello_t)dlsym(handle, "hello1");
hello1();
return 0;
}
address@hidden runpath]$ cat so1.c
extern void hello2 (void);
void
hello1 (void)
{
hello2();
}
address@hidden runpath]$ cat so2.c
#include <stdio.h>
void
hello2 ()
{
printf ("hello\n");
}
address@hidden runpath]$ make
gcc -fPIC -O2 -shared -o libso2.so so2.c
gcc -fPIC -O2 -shared -o libso1.so so1.c libso2.so
gcc -o foo1 foo.c libso1.so -Wl,-rpath,. -ldl
gcc -B./ -o foo2 foo.c libso1.so -Wl,-rpath,. -ldl
readelf -d foo1
Dynamic section at offset 0x8b0 contains 27 entries:
Tag Type Name/Value
0x0000000000000001 (NEEDED) Shared library: [libso1.so]
0x0000000000000001 (NEEDED) Shared library: [libdl.so.2]
0x0000000000000001 (NEEDED) Shared library: [libc.so.6]
0x000000000000000f (RPATH) Library rpath: [.]
0x000000000000000c (INIT) 0x400558
0x000000000000000d (FINI) 0x400794
0x0000000000000019 (INIT_ARRAY) 0x600898
0x000000000000001b (INIT_ARRAYSZ) 8 (bytes)
0x000000000000001a (FINI_ARRAY) 0x6008a0
0x000000000000001c (FINI_ARRAYSZ) 8 (bytes)
0x000000006ffffef5 (GNU_HASH) 0x400260
0x0000000000000005 (STRTAB) 0x4003d0
0x0000000000000006 (SYMTAB) 0x400298
0x000000000000000a (STRSZ) 202 (bytes)
0x000000000000000b (SYMENT) 24 (bytes)
0x0000000000000015 (DEBUG) 0x0
0x0000000000000003 (PLTGOT) 0x600ab8
0x0000000000000002 (PLTRELSZ) 72 (bytes)
0x0000000000000014 (PLTREL) RELA
0x0000000000000017 (JMPREL) 0x400510
0x0000000000000007 (RELA) 0x4004f8
0x0000000000000008 (RELASZ) 24 (bytes)
0x0000000000000009 (RELAENT) 24 (bytes)
0x000000006ffffffe (VERNEED) 0x4004b8
0x000000006fffffff (VERNEEDNUM) 2
0x000000006ffffff0 (VERSYM) 0x40049a
0x0000000000000000 (NULL) 0x0
./foo1
hello
readelf -d foo2
Dynamic section at offset 0x8b0 contains 27 entries:
Tag Type Name/Value
0x0000000000000001 (NEEDED) Shared library: [libso1.so]
0x0000000000000001 (NEEDED) Shared library: [libdl.so.2]
0x0000000000000001 (NEEDED) Shared library: [libc.so.6]
0x000000000000001d (RUNPATH) Library runpath: [.]
0x000000000000000c (INIT) 0x400558
0x000000000000000d (FINI) 0x400794
0x0000000000000019 (INIT_ARRAY) 0x600898
0x000000000000001b (INIT_ARRAYSZ) 8 (bytes)
0x000000000000001a (FINI_ARRAY) 0x6008a0
0x000000000000001c (FINI_ARRAYSZ) 8 (bytes)
0x000000006ffffef5 (GNU_HASH) 0x400260
0x0000000000000005 (STRTAB) 0x4003d0
0x0000000000000006 (SYMTAB) 0x400298
0x000000000000000a (STRSZ) 202 (bytes)
0x000000000000000b (SYMENT) 24 (bytes)
0x0000000000000015 (DEBUG) 0x0
0x0000000000000003 (PLTGOT) 0x600ab8
0x0000000000000002 (PLTRELSZ) 72 (bytes)
0x0000000000000014 (PLTREL) RELA
0x0000000000000017 (JMPREL) 0x400510
0x0000000000000007 (RELA) 0x4004f8
0x0000000000000008 (RELASZ) 24 (bytes)
0x0000000000000009 (RELAENT) 24 (bytes)
0x000000006ffffffe (VERNEED) 0x4004b8
0x000000006fffffff (VERNEEDNUM) 2
0x000000006ffffff0 (VERSYM) 0x40049a
0x0000000000000000 (NULL) 0x0
./foo2
./foo2: error while loading shared libraries: libso2.so: cannot open shared
object file: No such file or directory
make: *** [all] Error 127
address@hidden runpath]$
--
Configure bugmail: http://sourceware.org/bugzilla/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are on the CC list for the bug.
- [Bug ld/15096] New: DT_RPATH != DT_RUNPATH,
hjl.tools at gmail dot com <=
- [Bug ld/15096] DT_RPATH != DT_RUNPATH, hjl.tools at gmail dot com, 2013/02/04
- [Bug ld/15096] DT_RPATH != DT_RUNPATH, hjl.tools at gmail dot com, 2013/02/04
- [Bug ld/15096] DT_RPATH != DT_RUNPATH, cvs-commit at gcc dot gnu.org, 2013/02/04
- [Bug ld/15096] DT_RPATH != DT_RUNPATH, hjl.tools at gmail dot com, 2013/02/04
- [Bug ld/15096] DT_RPATH != DT_RUNPATH, amodra at gmail dot com, 2013/02/05