|
|
Message-ID: <20130116125119.GA27914@port70.net>
Date: Wed, 16 Jan 2013 13:51:19 +0100
From: Szabolcs Nagy <nsz@...t70.net>
To: musl@...ts.openwall.com, pierre@...entlife.com
Subject: Re: dladdr()
* pierre <pierre@...entlife.com> [2013-01-16 12:00:18 +0100]:
>
> // glibc:
> // gcc hello.c -o hello -ldl
>
> // musl:
> // musl-gcc hello.c -o hello
>
> I am attaching the source code linked with musl 0.9.8
> so you can duplicate this issue without wasting time.
>
> Besides knowing how to enable dladdr() in dynamic mode,
> I am interested in knowing what other steps are needed
> beyond replacing the #ifdef SHARED by another custom
> define (#ifdef __FORCE_DL) for musl's dl implementation
> to do the job in static binaries (with exported symbols).
>
there was a thread about dl* in static binaries, it is
not yet supported and non-trivial to get right
i linked to the most interesting posts at the bottom:
http://port70.net/~nsz/32_dynlink.html
i ran hello in gdb and it seems
sym->st_shndx==0
for the "puts" symbol, i dont know the semantics of
st_shndx, but the following patch makes hello.c work:
diff --git a/src/ldso/dynlink.c b/src/ldso/dynlink.c
index 935367e..ba0bd8f 100644
--- a/src/ldso/dynlink.c
+++ b/src/ldso/dynlink.c
@@ -1178,7 +1178,7 @@ int __dladdr(void *addr, Dl_info *info)
}
for (; nsym; nsym--, sym++) {
- if (sym->st_shndx && sym->st_value
+ if (/*sym->st_shndx &&*/ sym->st_value
&& (1<<(sym->st_info&0xf) & OK_TYPES)
&& (1<<(sym->st_info>>4) & OK_BINDS)) {
void *symaddr = p->base + sym->st_value;
Powered by blists - more mailing lists
Confused about mailing lists and their use? Read about mailing lists on Wikipedia and check out these guidelines on proper formatting of your messages.