[cfe-dev] Implementation of stdbool.h

Török Edwin edwintorok at gmail.com
Fri Feb 29 06:39:02 PST 2008


Keith Bauer wrote:
> On Fri, Feb 29, 2008 at 7:18 PM, Chris Lattner <clattner at apple.com> wrote:
>   
>>  Actually, dladdr seems useful on unix'y systems.  Does this work on
>>  linux?
>>     
>
> A quick trip to Google suggests that dladdr is nonstandard,
> implemented on Solaris, Linux (glibc), Mac OS X, maybe FreeBSD,
> definitely not OpenBSD.

It depends on OpenBSD version, on 4.2 it works[*], but only if you pass
an address of a symbol from a dynamic libray, not the main executable.
So this works:
$ gcc -shared p.c -o p.so
$ gcc p.so
$ LD_LIBRARY_PATH=. ./a.out
1
./p.so

Note that you'll get the path to the library!
[*] it looks like it works since OpenBSD 3.6 (2004): "Add dladdr(3)
<http://www.openbsd.org/cgi-bin/man.cgi?query=dladdr&sektion=3> support
to the dynamic loader" (http://www.openbsd.org/plus36.html)

Also on Linux you need to #define _GNU_SOURCE, otherwise you get a
compile error (Dl_info undeclared).

Have a look at dlloader.h from XFree86 (http://preview.tinyurl.com/3yxc9e)
#if (defined(linux) && defined(__GLIBC__)) || \

   (defined(__FreeBSD__) && defined(__ELF__)) || \
    defined(__NetBSD__) || \
    (defined(__OpenBSD__) && defined(OpenBSD) && OpenBSD >= 200411) || \
    (defined(sun) && defined(SVR4)) || \
    defined(sgi)
#define *HAVE_DLADDR*
#endif

Best regards,
--Edwin



More information about the cfe-dev mailing list