https://gcc.gnu.org/bugzilla/show_bug.cgi?id=80115

Jakub Jelinek <jakub at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |fche at redhat dot com,
                   |                            |jakub at gcc dot gnu.org,
                   |                            |rth at gcc dot gnu.org,
                   |                            |uros at gcc dot gnu.org

--- Comment #4 from Jakub Jelinek <jakub at gcc dot gnu.org> ---
That looks like a systemtap or OpenJDK bug to me.
For bool and other 8-bit values, one can't use the "r" constraint on ia32, but
has to use "q" constraint instead, because ia32 32-bit doesn't have %sil, %dil,
%bpl and %spl registers.
So, for #ifdef __i386__, either sdt.h needs to force the sub-int arguments into
int (e.g.
#define _SDT_ARGVAL(x) ((x) + 0)
would do it I think), or
# define STAP_SDT_ARG_CONSTRAINT        noq
instead of nor (again, ia32 only), or perhaps use the constraint conditional
depending on sizeof (x).
This "worked" in gcc 6 and earlier because we happily emitted %sil etc. into
the inline assembly, even when it is not valid for 32-bit code, but starting
with
r245815 we diagnose that.

Reply via email to