On Mon, Jan 29, 2024 at 11:22:44PM +0100, Jakub Jelinek wrote:
> On Mon, Jan 29, 2024 at 02:01:56PM -0800, H.J. Lu wrote:
> > > A function accesses a function symbol defined in a comdat group.
> > > If the function symbol is public, any comdat definition of the same group
> > > signature should provide the function definition.  If the function symbol
> > > is private to the comdat group, only functions in the same comdat
> > > group can access the private function symbol.  If a function in a 
> > > different
> > > comdat group accesses a private symbol, it is a compiler bug and
> > > link may catch it like in this case.
> > >
> > 
> > My patch simply puts the constant pool of the function symbol reference
> > in the same comdat group as the function definition.  I believe it is the
> > right thing to do.
> 
> I disagree, I think we should use something like
>       if (current_function_decl)

Or perhaps && DECL_COMDAT_GROUP (current_function_decl) added here as well,
just to make it change things less often.

>       return targetm.asm_out.function_rodata_section (current_function_decl,
>                                                       true);
> 
> Obviously, for non-reloc or non-pic, we don't want an unconditional
>   if (current_function_decl)
>     return targetm.asm_out.function_rodata_section (current_function_decl,
>                                                   false);
> that would kill mergeable sections, so perhaps
>   if (current_function_decl
>       && reloc
>       && DECL_COMDAT_GROUP (current_function_decl))
>     return targetm.asm_out.function_rodata_section (current_function_decl,
>                                                   false);

        Jakub

Reply via email to