This is the mail archive of the binutils@sourceware.org mailing list for the binutils project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: PowerpC pointer_equality_needed optimisation


On Sun, Feb 24, 2008 at 01:45:17PM +1030, Alan Modra wrote:
> On Sat, Feb 23, 2008 at 03:53:09PM -0800, H.J. Lu wrote:
> > Yes, it is a weak and hidden with shared library. How do you make
> > the pointer to a weak hidden symbol in a shared library to NULL
> > at the runtime? Do you modify the instruction addressing mode?
> 
> In the executable, we load the address of f via the got.  ld.so is
> responsible for resolving f and returns zero.
> 
> Here's another problem case.
> 
> cat > weakref.c <<EOF
> #include <stdio.h>
> 
> extern int __attribute__ ((weak)) foo (void);
> extern int (*fooptr) (void);
> 
> int main (void)
> {
>   if (fooptr)
>     printf ("fooptr = %p, foo returns %d\n", fooptr, foo ());
>   else
>     printf ("fooptr = null\n");
>   return 0;
> }
> EOF
> cat > weakptr.c <<EOF
> extern int __attribute__ ((weak)) foo (void);
> int (*fooptr) (void) = &foo;
> EOF
> cat > weakreflib.c <<EOF
> extern int (*fooptr) (void);
> int foo (void)
> {
>   return &foo == fooptr;
> }
> EOF
> echo -n > empty.o
> gcc -O -fpic -shared -o deflib.so weakreflib.c -Wl,-soname,weak.so
> gcc -O -fpic -shared -o nodeflib.so empty.o -Wl,-soname,weak.so
> gcc -O -fpic -o weakref weakref.c weakptr.c
> LD_LIBRARY_PATH=. ./weakref
> gcc -O -fpic -o weakref weakref.c weakptr.c deflib.so
> ln -sfn deflib.so weak.so
> LD_LIBRARY_PATH=. ./weakref
> ln -sfn nodeflib.so weak.so
> LD_LIBRARY_PATH=. ./weakref
> 
> The last weakref run fails with a segfault because we don't emit a
> dynamic reloc on the fooptr initialisation.

I am not sure if it should work. deflib.so and deflib.so have
different ABIs. This behavior isn't well defined.


H.J.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]