On Wed, Jan 17, 2007 at 11:15:55AM +0200, Balint Cristian wrote: > Is it a bug ? > > Maybe i still dont understand how this is emmited, but anyone knows why a > cross-compiler vs normal compiler using the -fstack-protector option why > will act differnetly ? > > e.g nm on same object compiled with: > cross: > U __stack_chk_fail > U __stack_chk_guard > native: > U __stack_chk_guard > > somehow the cross one still put outside reference to __stack_chk_fail ...
Badly configured cross? The configure check in question is: case "$target" in *-*-linux*) AC_CACHE_CHECK(__stack_chk_fail in target GNU C library, gcc_cv_libc_provides_ssp, [gcc_cv_libc_provides_ssp=no if test x$host != x$target || test "x$TARGET_SYSTEM_ROOT" != x; then if test "x$with_sysroot" = x; then glibc_header_dir="${exec_prefix}/${target_noncanonical}/sys-include" elif test "x$with_sysroot" = xyes; then glibc_header_dir="${exec_prefix}/${target_noncanonical}/sys-root/usr/include" else glibc_header_dir="${with_sysroot}/usr/include" fi else glibc_header_dir=/usr/include fi # glibc 2.4 and later provides __stack_chk_fail and # either __stack_chk_guard, or TLS access to stack guard canary. if test -f $glibc_header_dir/features.h \ && $EGREP '^@<:@ @:>@*#[ ]*define[ ]+__GNU_LIBRARY__[ ]+([1-9][0-9]|[6-9])' \ $glibc_header_dir/features.h > /dev/null; then if $EGREP '^@<:@ @:>@*#[ ]*define[ ]+__GLIBC__[ ]+([1-9][0-9]|[3-9])' \ $glibc_header_dir/features.h > /dev/null; then gcc_cv_libc_provides_ssp=yes elif $EGREP '^@<:@ @:>@*#[ ]*define[ ]+__GLIBC__[ ]+2' \ $glibc_header_dir/features.h > /dev/null \ && $EGREP '^@<:@ @:>@*#[ ]*define[ ]+__GLIBC_MINOR__[ ]+([1-9][0-9]|[4-9])' \ $glibc_header_dir/features.h > /dev/null; then gcc_cv_libc_provides_ssp=yes fi fi]) ;; *) gcc_cv_libc_provides_ssp=no ;; esac so when your cross is not --with-sysroot, you should have your target glibc headers in /usr/sparc-redhat-linux/sys-include before configure. Jakub