Message ID | 20140407080440.GB16008@reddwarf.lablan |
---|---|
State | Accepted |
Commit | 278a06d7abcc8774ba9bb9c15779749c7e2d68cd |
Headers | show |
On 7 April 2014 10:04, =?UTF-8?q?C=C3=A9dric=20VINCENT?= <cedric.vincent@st.com> wrote: > If the dynamic linker is built with LDSO_STANDALONE_SUPPORT=y, it can > load then run a dynamically linked program when explicitly invoked > from the command line. This is used for test and prelink purposes, > and also by other tools like PRoot to force the kernel to load the > right ELF interpreter. > > This feature is currently broken on x86_64 since the number of command > line arguments (ie. argc) passed from the kernel is an "elf_addr_t" > (64 bit on x86_64), whereas it is read as an "unsigned int" (32 bit on > x86_64). > > Ref: https://github.com/cedric-vincent/PRoot/issues/45 > Signed-off-by: Cédric VINCENT <cedric.vincent@st.com> > > v2: use "ElfW(Addr)", as suggested by Bernhard Reutner-Fischer Applied, thanks!
diff --git a/ldso/ldso/ldso.c b/ldso/ldso/ldso.c index becabd3..a3745c3 100644 --- a/ldso/ldso/ldso.c +++ b/ldso/ldso/ldso.c @@ -526,8 +526,8 @@ void *_dl_get_ready_to_run(struct elf_resolve *tpnt, DL_LOADADDR_TYPE load_addr, #ifdef __LDSO_STANDALONE_SUPPORT__ if (_start == (void *) auxvt[AT_ENTRY].a_un.a_val) { - unsigned int *aux_dat = (unsigned int *) argv; - int argc = aux_dat[-1]; + ElfW(Addr) *aux_dat = (ElfW(Addr) *) argv; + int argc = (int) aux_dat[-1]; tpnt->libname = argv[0]; while (argc > 1)
If the dynamic linker is built with LDSO_STANDALONE_SUPPORT=y, it can load then run a dynamically linked program when explicitly invoked from the command line. This is used for test and prelink purposes, and also by other tools like PRoot to force the kernel to load the right ELF interpreter. This feature is currently broken on x86_64 since the number of command line arguments (ie. argc) passed from the kernel is an "elf_addr_t" (64 bit on x86_64), whereas it is read as an "unsigned int" (32 bit on x86_64). Ref: https://github.com/cedric-vincent/PRoot/issues/45 Signed-off-by: Cédric VINCENT <cedric.vincent@st.com> v2: use "ElfW(Addr)", as suggested by Bernhard Reutner-Fischer --- ldso/ldso/ldso.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)