https://sourceware.org/bugzilla/show_bug.cgi?id=32443
--- Comment #4 from H.J. Lu <hjl.tools at gmail dot com> ---
(In reply to Stephen Kell from comment #3)
> (In reply to H.J. Lu from comment #2)
> > (In reply to Stephen Kell from comment #0)
> > > $ grep . exe.c lib.c lib.lds
> > > exe.c:extern void lib_func(void);
> > > exe.c:int main(void)
> > > exe.c:{
> > > exe.c: lib_func();
> > > exe.c:}
> > > lib.c:#include <stdio.h>
> > > lib.c:extern void value;
> >
> > If the above line is changed to:
> >
> > extern void value __attribute__ ((visibility("hidden")));
> >
> > what should be the expected behavior?
>
> I think it should be unchanged, i.e. I expect 0x2a as the ABS symbol's value.
When compiler sees a hidden undefined symbol, it assumes that
it is defined somewhere else and it isn't an ABS symbol. As
the result, you won't get 0x2a.
> Caveat: currently struggling to find the relevant ELF spec for the meaning
> of an UND symbol of hidden visibility. If it's analogous to protected, I
Linker disallows undefined hidden symbol during the final link.
> think it means it should only bind to a hidden def. So the link might fail
> in the non-PROVIDE_HIDDEN cases. But if it does link, I would expect the
> value 0x2a.
--
You are receiving this mail because:
You are on the CC list for the bug.