https://gcc.gnu.org/bugzilla/show_bug.cgi?id=125205
Rainer Orth <ro at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
CC| |ro at gcc dot gnu.org
--- Comment #1 from Rainer Orth <ro at gcc dot gnu.org> ---
*Please* Cc me in PRs you file for Solaris issues.
(In reply to H.J. Lu from comment #0)
> Since ix86_stack_protect_fail returns default_external_stack_protect_fail for
> 64-bit and default_hidden_stack_protect_fail for 32-bit which references
> __stack_chk_fail_local. But __stack_chk_fail_local isn't provided on
> Solaris.
It is present all right:
for x in .libs/*.{a,so}; do echo $x; readelf -sW $x|grep
__stack_chk_fail_local; done
.libs/libssp_nonshared.a
10: 00000000 28 FUNC GLOBAL HIDDEN 2 __stack_chk_fail_local
.libs/libssp.a
29: 00000130 11 FUNC GLOBAL HIDDEN 1 __stack_chk_fail_local
.libs/libssp.so
48: 00001660 28 FUNC LOCAL HIDDEN 17 __stack_chk_fail_local
The only difference to Linux is that it's local/hidden in libssp.so since
it's not exported in ssp.map.
On Linux/x86, it's provided by libc.so.6 instead:
readelf -sW /lib32/libc.so.6|grep __stack_chk
562: 00135410 25 FUNC GLOBAL DEFAULT 14 __stack_chk_fail@@GLIBC_2.4
Seems like a bug in the map file to me.