http://gcc.gnu.org/bugzilla/show_bug.cgi?id=47222
--- Comment #4 from H.J. Lu <hjl.tools at gmail dot com> 2011-01-08 18:20:58 UTC --- (In reply to comment #2) > > Hmm, this does not seem to be dependent on plugin implementation, but it seems > like > bug in 32bit only testcase. The testcase seems to use: > > int g_edi=INIT_EDI, g_esi=INIT_ESI, g_ebx=INIT_EBX; > int g_ebp, g_ebp_save, g_esp, g_esp_save; > int n_error; > > and > > __asm__ __volatile__ ( > "movl %ebp," ASMNAME("g_ebp_save")"\n\t" > "movl %esp," ASMNAME("g_esp_save")"\n\t" > ); > > I guess either g_ebp_save needs externally_visible attribute or the asm > statement needs to be modified to use g_ebp_save as an destination. I tried diff --git a/gcc/testsuite/g++.dg/torture/stackalign/test-unwind.h b/gcc/testsuite/g++.dg/torture/stackalign/test-unwind.h index b07b27c..ff56027 100644 --- a/gcc/testsuite/g++.dg/torture/stackalign/test-unwind.h +++ b/gcc/testsuite/g++.dg/torture/stackalign/test-unwind.h @@ -47,8 +47,13 @@ copy (char *p, int size) __builtin_strncpy (p, "good", size); } -int g_edi=INIT_EDI, g_esi=INIT_ESI, g_ebx=INIT_EBX; -int g_ebp, g_ebp_save, g_esp, g_esp_save; +int g_edi __attribute__((externally_visible)) =INIT_EDI; +int g_esi __attribute__((externally_visible)) =INIT_ESI; +int g_ebx __attribute__((externally_visible)) = INIT_EBX; +int g_ebp __attribute__((externally_visible)); +int g_esp __attribute__((externally_visible)); +int g_ebp_save __attribute__((externally_visible)); +int g_esp_save __attribute__((externally_visible)); int n_error; int and it doesn't make a difference. > I think this testcase is "yours", so perhaps you can fix it? > Was there some reason to use the ASMNAME hack instead of memory output > constraint? We want to verify the contents of registers.