>> Here is a patch for the test. It contains two changes: >> 1. For emutls, there will be an explicit call generated at expand >> pass, and no stack adjustment is needed. So add /* { >> dg-require-effective-target tls_native } */ in the test. >> 2. Replace cfi_def_cfa_offset with insn sequence check. >> >> Is it ok? > > No, the test FAILs for 32-bit i386-pc-solaris2.11 with Sun as/ld: > > FAIL: gcc.target/i386/pr58066.c scan-assembler > sub[^\r\n]*8[^\r\n]*sp.*call[^\r\n]*__tls_get_addr.*sub[^\r\n]*8[^\r\n]*sp.*call[^\r\n]*__tls_get_addr > > The TLS code sequence is different here: > > subl $8, %esp > leal ccc1@tlsgd(,%ebx,1), %eax > call ccc1@tlsgdplt > > I fear this insn scanning is going to be extremely fragile. > > Rainer
Thanks for trying the testcase. rtl scanning will be slightly better than assembly scanning. So how about this one? Thanks, Wei. Index: testsuite/gcc.target/i386/pr58066.c =================================================================== --- testsuite/gcc.target/i386/pr58066.c (revision 210222) +++ testsuite/gcc.target/i386/pr58066.c (working copy) @@ -1,5 +1,6 @@ /* { dg-do compile } */ -/* { dg-options "-fPIC -O2" } */ +/* { dg-require-effective-target tls_native } */ +/* { dg-options "-fPIC -fomit-frame-pointer -O2 -fdump-rtl-final" } */ /* Check whether the stack frame starting addresses of tls expanded calls in foo and goo are 16bytes aligned. */ @@ -15,4 +16,6 @@ void* goo() return &ccc2; } -/* { dg-final { scan-assembler-times ".cfi_def_cfa_offset 16" 2 } } */ +/* { dg-final { scan-rtl-dump "Function foo.*set\[^\r\n\]*sp\\)\[\r\n\]\[^\r\n\]*plus\[^\r\n\]*sp\\)\[\r\n\]\[^\r\n\]*const_int -8.*UNSPEC_TLS.*Function goo" "final" } } */ +/* { dg-final { scan-rtl-dump "Function goo.*set\[^\r\n\]*sp\\)\[\r\n\]\[^\r\n\]*plus\[^\r\n\]*sp\\)\[\r\n\]\[^\r\n\]*const_int -8.*UNSPEC_TLS" "final" } } */ +/* { dg-final { cleanup-rtl-dump "final" } } */