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