Compile the following, with "-O2 -fvisibility=hidden -S" without/with -DH. Compare assembly code. For this target, you'll see the following diff, but the difference was noticed on the CRIS TLS w.i.p. using [gcc-4_3-branch revision 135713]:
--- hh.s 2008-12-18 23:14:54.000000000 +0100 +++ h.s 2008-12-18 23:15:05.000000000 +0100 @@ -13,5 +13,6 @@ foo: popl %ebp ret .size foo, .-foo + .hidden xyzzy .ident "GCC: (GNU) 4.3.0 20080428 (Red Hat 4.3.0-8)" .section .note.GNU-stack,"",@progbits -- Summary: -fvisibility=hidden not affecting thread variables while attribute hidden does. Product: gcc Version: 4.3.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: middle-end AssignedTo: unassigned at gcc dot gnu dot org ReportedBy: hp at gcc dot gnu dot org GCC host triplet: i686-pc-linux-gnu GCC target triplet: i686-pc-linux-gnu http://gcc.gnu.org/bugzilla/show_bug.cgi?id=38574