On Wed, Mar 09, 2022 at 08:18:38AM +0100, Richard Biener wrote: > I wonder if this is a good case for general-regs-only instead? At > least no-sse cannot be functionally equivalent (since then we would > not have needed general-regs-only ...).
I think general-regs-only is approx. equivalent to no-mmx,no-sse, we don't really need/want mmx in the unwinder I guess. The following seems to work fine too, regtested with -O2 -msse2 -mfpmath=sse -mstackrealign in {C,CXX,XC,TC}FLAGS on i686-linux (where without the patch it fails to build). 2022-03-09 Jakub Jelinek <ja...@redhat.com> PR target/104781 * config/i386/i386.h (LIBGCC2_UNWIND_ATTRIBUTE): Define for ia32. --- gcc/config/i386/i386.h.jj 2022-02-25 21:59:29.356291326 +0100 +++ gcc/config/i386/i386.h 2022-03-09 10:00:38.242376504 +0100 @@ -2848,6 +2848,12 @@ extern enum attr_cpu ix86_schedule; #define NUM_X86_64_MS_CLOBBERED_REGS 12 #endif +/* __builtin_eh_return can't handle stack realignment, so restrict to + general regs in 32-bit libgcc functions that call it. */ +#ifndef __x86_64__ +#define LIBGCC2_UNWIND_ATTRIBUTE __attribute__((target ("general-regs-only"))) +#endif + /* Local variables: version-control: t Jakub