Jakub Jelinek <ja...@redhat.com> writes:

> Hi!
>
> As mentioned in the PR, bootstrap with m2 enabled currently fails
> on powerpc64le-linux, we get weird ICE after printing some diagnostics.
> The problem is that mc creates from *.def prototypes like
> extern void m2linemap_WarningAtf (m2linemap_location_t location, void * 
> message);
> but the actual function definitions use
> void m2linemap_WarningAtf (m2linemap_location_t location, void * message,
> ...) { code }
> and on powerpc64le-linux such lying about the prototype results in
> wrong-code, on the caller side we assume the function isn't varargs
> and so don't reserve 64 bytes in the frame for it, while the callee
> relies on the area being reserved and stores into it.
>
> Fixed by adding non-stdarg wrappers around stdarg functions (because
> we want va_list and pass it to diagnostics functions).
>
> Bootstrapped/regtested on {x86_64,i686,powerpc64le,s390x,aarch64}-linux,
> ok for trunk?
>
> 2022-12-19  Jakub Jelinek  <ja...@redhat.com>
>
>       PR modula2/108147
>       * m2/gm2-gcc/m2linemap.def (ErrorAtf, WarningAtf, NoteAtf):
>       Comment out prototypes with varargs.
>       * m2/gm2-gcc/m2linemap.h (m2linemap_ErrorAtf, m2linemap_WarningAtf,
>       m2linemap_NoteAtf): No longer varargs.
>       * m2/gm2-gcc/m2linemap.cc (m2linemap_ErrorAtf): Turned into a
>       non-varargs wrapper around ...
>       (m2linemap_ErrorAtf_1): ... this.  New static function.
>       (m2linemap_WarningAtf): Turned into a non-varargs wrapper around ...
>       (m2linemap_WarningAtf_1): ... this.  New static function.
>       (m2linemap_NoteAtf): Turned into a non-varargs wrapper around ...
>       (m2linemap_NoteAtf_1): ... this.  New static function.

thanks for the patch, both this and the subsequent followup patch LGTM,

regards,
Gaius

Reply via email to