Serious PPC stdarg problem with 2.95.2

Franz Sirl Franz.Sirl-kernel@lauterbach.com
Wed Mar 1 06:30:00 GMT 2000


At 19:20 27.02.00, Gunther Nikl wrote:
>Hello Franz!
>
>On 23-Feb-00, you wrote:
> > At 18:35 23.02.00 , Gunther Nikl wrote:
> >>>> several really bogus code parts. (Look for !!!!)
> >>>>
> >>> Maybe because it doesn't happen? :-)
> >>>
> >>> Do you have any modification in your sources? On powerpc-linux-gnu this
> >>> works just fine as the appended source shows.
> >>
> >> Yes, there is a change: structure elements are only wordaligned...
> >> This clashes with the way gcc creates the va_list structure. The
> >> question is should gcc obey a requested structere layout?
> >> The problem wasn't visible before because the va_list structure was
> >> created in "va-ppc.h" thus getting the requested alignment.
> >
> > What do you mean with word-aligned? The minimum alignment for the PPC SYSV
> > ABI is 32bit anyway. Did you change it to be half-word (16-bit) aligned
> > (which sounds like a very bad idea)?
>
>  I knew should write the bit count ;-) Yes, the compiler mentioned included
>  a change that aligns structure elements on a 16 bit boundary only. That
>  may violate the PPC SYSV ABI and may cause a speed penalty.

Not "may" violate, it IS violating the SYSV/EABI ABI.


> >This is an ABI change and if you do that YOU have to make sure all the
> >corresponding places in the compiler are changed as well.
>
>  I have to disagree with you on this topic. The compilers behavoiur was
>  changed through a *well defined* and *documented* way namely with
>  ADJUST_FIELD_ALIGN. I think using hooks provided in the GCC sources
>  to alter the compiler behavoir is legal and GCC should respect this.

Well, but the passing of varargs is ABI specific and building of va_list is 
handled in the backend (look at expand_builtin_saveregs in rs6000.c). And 
since that's the backend, we only care about the supported ABI's. Being 
generic here just unnecessarily expands codesize and complexity.


> >A lot of routines in the backend are tailored to a specific ABI convention.
>
>  Well, that is certainly true but in this particular case this doesn't
>  apply. Structure layout does not belong to the backend, thats why its
>  done in stor-layout.c and in the developer sources rs6000.c no longer
>  carves the structure itself.

But it is an ABI defined structure and it is perfectly legal to handle that 
in the backend. In fact in current gcc-2.96 va-ppc.h is gone and 
_everything_ related to that structure is handled in the backend (and your 
problem wouldn't show up here I assume).


>  Franz, I only wanted to explain what happened and that there is no "real"
>  bug in the PPC V.4 stdarg support. For our particular environment it
>  didn't work because GCC took a shortcut.

No, you took a shortcut and didn't change expand_builtin_saveregs() 
according to your ABI :-).

Franz.



More information about the Gcc-bugs mailing list