On Wed, May 06, 2015 at 12:05:20PM -0700, H.J. Lu wrote: > >> -Bsymbolic will bind all references to local definitions in shared > >> libraries, > >> with and without visibility, weak or non-weak. Compiler can use it > >> in binds_tls_local_p and we can generate much better codes in shared > >> libraries. > > > > Yes, I'm aware of what it does. But at compile-time the compiler can't > > know whether the referenced symbol will be defined in the same DSO > > unless this is visibility annotation telling it. Even when linking a > > shared library using -Bsymbolic, the library code can still make calls > > (or data references) to symbols in other DSOs. > > Even without LTO, -fsymbolic -fPIC will generate better codes for > > --- > int glob_a = 1; > > int foo () > { > return glob_a; > } > ---
I see how this case is improved, but it depends on the dubious (and undocumented?) behavior of -Bsymbolic breaking copy relocations. > and > > --- > int glob_a (void) > { > return -1; > } > > int foo () > { > return glob_a (); > } > --- I don't see how this case is improved unless GCC is failing to consider strong definitions in the same TU as locally-binding. If this is the case, is there a reason for that behavior? IMO it's wrong. Rich