On Wed, Feb 4, 2015 at 1:53 PM, Sriraman Tallam <tmsri...@google.com> wrote: > On Wed, Feb 4, 2015 at 10:57 AM, H.J. Lu <hjl.to...@gmail.com> wrote: >> On Wed, Feb 4, 2015 at 10:51 AM, Sriraman Tallam <tmsri...@google.com> wrote: >>> On Wed, Feb 4, 2015 at 10:45 AM, H.J. Lu <hjl.to...@gmail.com> wrote: >>>> On Wed, Feb 4, 2015 at 10:42 AM, Jakub Jelinek <ja...@redhat.com> wrote: >>>>> On Wed, Feb 04, 2015 at 10:38:48AM -0800, H.J. Lu wrote: >>>>>> Common symbol should be resolved locally for PIE. >>>>> >>>>> binds_local_p yes, binds_to_current_def_p no. >>>>> >>>> >>>> Is SYMBOL_REF_LOCAL_P set to binds_local_p or >>>> binds_to_current_def_p? >>> >>> Looks like binds_local_p: >>> >>> varasm.c: >>> void >>> default_encode_section_info (tree decl, rtx rtl, int first ATTRIBUTE_UNUSED) >>> { >>> ... >>> if (targetm.binds_local_p (decl)) >>> flags |= SYMBOL_FLAG_LOCAL; >>> >> >> Why is SYMBOL_REF_LOCAL_P false? > > In varasm.c, default_binds_local_p_1 > > > /* Default visibility weak data can be overridden by a strong symbol > in another module and so are not local. */ > else if (DECL_WEAK (exp) > && !resolved_locally) ^^^^^^^^^^^^^^^^^^^ Why is resolved_locally false? It should be true for common symbol when compiling for PIE.
> local_p = false; > > For weak definition, it is set to false here. > -- H.J.