| Submitter | Christian Bruel |
|---|---|
| Date | Dec. 18, 2012, 2:41 p.m. |
| Message ID | <50D080B6.6080509@st.com> |
| Download | mbox | patch |
| Permalink | /patch/207141/ |
| State | New |
| Headers | show |
Comments
On Tue, Dec 18, 2012 at 03:41:58PM +0100, Christian Bruel wrote: > Canadian Cross Builds fail to build libgcc/unwind-dw2.c > > ... > ../../../../libgcc/unwind-dw2.c:42:21: fatal error: sys/sdt.h: No such > file or directory > ... > > when the build machine has sys/sdt.h installed (systemtap-sdt-devel), > but not the target's, because of this: > > #ifdef HAVE_SYS_SDT_H > #include <sys/sdt.h> > #endif > > This appears to be because auto-host.h unconditionally defines > HAVE_SYS_SDT_H from config.in, that should be guarded with #ifndef > USED_FOR_TARGET > > This patch changes the sys/sdt.h detection to the standard macro to > correctly generate it. And need to regenerate configure and config.in. > > Checked for x86 native boostrap OK and SH4-linux Cross and Native builds > on host (with and without systemtap host header installed) > > OK for trunk ? That doesn't look like a correct fix. If HAVE_SYS_SDT_H define is always guarded with #ifndef USED_FOR_TARGET, then it will never be used in the target unwind-dw2.c where it is supposed to be used if available. The configury snippet was clearly looking for target sys/sdt.h header: if test -f $target_header_dir/sys/sdt.h; then have_sys_sdt_h=yes so the question is why it found a host header instead in your case. Jakub
On 12/18/2012 03:47 PM, Jakub Jelinek wrote: > On Tue, Dec 18, 2012 at 03:41:58PM +0100, Christian Bruel wrote: >> Canadian Cross Builds fail to build libgcc/unwind-dw2.c >> >> ... >> ../../../../libgcc/unwind-dw2.c:42:21: fatal error: sys/sdt.h: No such >> file or directory >> ... >> >> when the build machine has sys/sdt.h installed (systemtap-sdt-devel), >> but not the target's, because of this: >> >> #ifdef HAVE_SYS_SDT_H >> #include <sys/sdt.h> >> #endif >> >> This appears to be because auto-host.h unconditionally defines >> HAVE_SYS_SDT_H from config.in, that should be guarded with #ifndef >> USED_FOR_TARGET >> >> This patch changes the sys/sdt.h detection to the standard macro to >> correctly generate it. And need to regenerate configure and config.in. >> >> Checked for x86 native boostrap OK and SH4-linux Cross and Native builds >> on host (with and without systemtap host header installed) >> >> OK for trunk ? > > That doesn't look like a correct fix. If HAVE_SYS_SDT_H define is always > guarded with #ifndef USED_FOR_TARGET, then it will never be used in the > target unwind-dw2.c where it is supposed to be used if available. > The configury snippet was clearly looking for target sys/sdt.h header: > if test -f $target_header_dir/sys/sdt.h; then > have_sys_sdt_h=yes > Well, it should be used by unwind-dw2.c, because we have #include "tconfig.h" that includes it: #ifndef GCC_TCONFIG_H #define GCC_TCONFIG_H #ifndef USED_FOR_TARGET # define USED_FOR_TARGET #endif #include "auto-host.h" in which there is : #ifndef USED_FOR_TARGET #define HAVE_SYS_SDT_H 1 #endif So HAVE_SYS_SDT will be defined in unwind-dw2.c on system that need it. > so the question is why it found a host header instead in your case. This is for everyone. The auto-host.h is used commonly for the target, unded the definition of 'USED_FOR_TARGET' Cheers Christian > > Jakub >
Patch
2012-12-18 Christian Bruel <christian.bruel@st.com> * configure.ac: Check sys/sdt.h with AC_CHECK_HEADERS. * configure: Regenerate. * config.in: Regenerat.e Index: gcc/configure =================================================================== --- gcc/configure (revision 194574) +++ gcc/configure (working copy) @@ -8286,7 +8286,7 @@ fi for ac_header in limits.h stddef.h string.h strings.h stdlib.h time.h iconv.h \ fcntl.h unistd.h sys/file.h sys/time.h sys/mman.h \ - sys/resource.h sys/param.h sys/times.h sys/stat.h \ + sys/resource.h sys/param.h sys/times.h sys/sdt.h sys/stat.h \ direct.h malloc.h langinfo.h ldfcn.h locale.h wchar.h libintl.h do : as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` @@ -26716,20 +26716,6 @@ $as_echo "#define TARGET_LIBC_PROVIDES_SSP 1" >>co fi -# Test for <sys/sdt.h> on the target. - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking sys/sdt.h in the target C library" >&5 -$as_echo_n "checking sys/sdt.h in the target C library... " >&6; } -have_sys_sdt_h=no -if test -f $target_header_dir/sys/sdt.h; then - have_sys_sdt_h=yes - -$as_echo "#define HAVE_SYS_SDT_H 1" >>confdefs.h - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $have_sys_sdt_h" >&5 -$as_echo "$have_sys_sdt_h" >&6; } - # Check if TFmode long double should be used by default or not. # Some glibc targets used DFmode long double, but with glibc 2.4 # and later they can use TFmode. Index: gcc/config.in =================================================================== --- gcc/config.in (revision 194574) +++ gcc/config.in (working copy) @@ -266,12 +266,6 @@ #endif -/* Define if your assembler supports SPARC4 instructions. */ -#ifndef USED_FOR_TARGET -#undef HAVE_AS_SPARC4 -#endif - - /* Define if your assembler supports fprnd. */ #ifndef USED_FOR_TARGET #undef HAVE_AS_FPRND @@ -477,6 +471,12 @@ #endif +/* Define if your assembler supports SPARC4 instructions. */ +#ifndef USED_FOR_TARGET +#undef HAVE_AS_SPARC4 +#endif + + /* Define if your assembler and linker support GOTDATA_OP relocs. */ #ifndef USED_FOR_TARGET #undef HAVE_AS_SPARC_GOTDATA_OP @@ -1228,7 +1228,7 @@ #endif -/* Define if your PowerPC64 linker supports a large TOC. */ +/* Define if your AIX linker supports a large TOC. */ #ifndef USED_FOR_TARGET #undef HAVE_LD_LARGE_TOC #endif @@ -1470,9 +1470,12 @@ #endif -/* Define if your target C library provides sys/sdt.h */ +/* Define to 1 if you have the <sys/sdt.h> header file. */ +#ifndef USED_FOR_TARGET #undef HAVE_SYS_SDT_H +#endif + /* Define to 1 if you have the <sys/stat.h> header file. */ #ifndef USED_FOR_TARGET #undef HAVE_SYS_STAT_H Index: gcc/configure.ac =================================================================== --- gcc/configure.ac (revision 194574) +++ gcc/configure.ac (working copy) @@ -940,7 +940,7 @@ ACX_HEADER_STRING AC_HEADER_SYS_WAIT AC_CHECK_HEADERS(limits.h stddef.h string.h strings.h stdlib.h time.h iconv.h \ fcntl.h unistd.h sys/file.h sys/time.h sys/mman.h \ - sys/resource.h sys/param.h sys/times.h sys/stat.h \ + sys/resource.h sys/param.h sys/times.h sys/sdt.h sys/stat.h \ direct.h malloc.h langinfo.h ldfcn.h locale.h wchar.h libintl.h) # Check for thread headers. @@ -4718,17 +4718,6 @@ if test x$gcc_cv_libc_provides_ssp = xyes; then [Define if your target C library provides stack protector support]) fi -# Test for <sys/sdt.h> on the target. -GCC_TARGET_TEMPLATE([HAVE_SYS_SDT_H]) -AC_MSG_CHECKING(sys/sdt.h in the target C library) -have_sys_sdt_h=no -if test -f $target_header_dir/sys/sdt.h; then - have_sys_sdt_h=yes - AC_DEFINE(HAVE_SYS_SDT_H, 1, - [Define if your target C library provides sys/sdt.h]) -fi -AC_MSG_RESULT($have_sys_sdt_h) - # Check if TFmode long double should be used by default or not. # Some glibc targets used DFmode long double, but with glibc 2.4 # and later they can use TFmode.