This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC 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: Another AIX Bootstrap failure


> > To avoid using PLT and GOT when the unit refers to the symbol and we know
> > that interposition does not matter.
> 
> I am not certain if the linker is creating the PLT stub code because
> it wants to allow interpolation or because it cannot see a definition
> of the function and wants to allow for some other shared library to
> provide the definition at runtime.

OK, but the definition appears in the same file..
> 
> > Why branch to a non-global (static) symbol
> >   b ._ZN14__gnu_parallel9_SettingsC1Ev.localalias.0
> > leads to PLT stub here and why branching to such symbols seems to work otherwise?
> 
> Branching to non-global (static) symbol, even an alias, is working
> here. The weak function seems to be the problem.
> 
> > The failing branch is
> >>         b ._ZN14__gnu_parallel9_SettingsC1Ev.localalias.0
> > so the call to static construction seems to have happened correctly but we can
> > not get right the call from the constructor to static function (that is an alias
> > of a global symbol)
> 
> The linker appears to not want to resolve the weak function. If I
> change ._ZN14__gnu_parallel9_SettingsC1Ev to lglobl, it works. If I
> change the static constructor to call the weak function directly,
> avoiding the alias, it shows the same failure mode.
> 
> I don't know what code generation looked like before.  Was GCC
> generating calls to weak functions within the same file?

Yes, this is how you implement COMDAT functions, right?  I looked at rs6000 call
expansion and it does not seem to care about visibility properties (just about
direct wrt indirect call).

One problem I can think of is a scenario where linked unify calls comdat functoins
in between units somehow forgetting about the aliases, but this function seems to
not be shared.
Index: symtab.c
===================================================================
--- symtab.c    (revision 211693)
+++ symtab.c    (working copy)
@@ -1327,10 +1327,8 @@
                               (void *)&new_node, true);
   if (new_node)
     return new_node;
-#ifndef ASM_OUTPUT_DEF
   /* If aliases aren't supported by the assembler, fail.  */
   return NULL;
-#endif
 
   /* Otherwise create a new one.  */
   new_decl = copy_node (node->decl);

disable generation of the local aliases completely.  I do not see much of difference
in the actual codegen with this...
I will check older GCC

Honza
> 
> Thanks, David


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