Re: [patch] fix bootstrap on FreeBSD i386/arm
On Mon, 2015-06-01 at 17:07 +0200, Andreas Tobler wrote: > > This patch worked for me. I am curious about why you use > > '!HAVE_DECL_ATOLL' in read-rtl.c instead of '!defined(HAVE_DECL_ATOLL)'. > > The use of !defined seems more common and is used in the HAVE_ATOQ check > > in the same #if statement. > > Because HAVE_DECL_ATOLL is either defined as 0 or 1. So it is always > defined. HAVE_ATOQ on the other side is only defined if it is available. > > From config.in: > > /* Define to 1 if we found a declaration for 'atoll', otherwise define to 0. > */ > #ifndef USED_FOR_TARGET > #undef HAVE_DECL_ATOLL > #endif > > > Andreas Ah, I looked at the code but didn't read the comment. When I look at auto-host.h I see that the header does what the comment says it does. Thanks for the explanation. Steve Ellcey sell...@imgtec.com
Re: [patch] fix bootstrap on FreeBSD i386/arm
On 01.06.15 16:43, Steve Ellcey wrote: On Sat, 2015-05-30 at 11:27 +0200, Andreas Tobler wrote: I'm sorry. I totally forgot about autoheader... I'm testing this one now. Would you mind giving it a try? Thanks, Andreas This patch worked for me. I am curious about why you use '!HAVE_DECL_ATOLL' in read-rtl.c instead of '!defined(HAVE_DECL_ATOLL)'. The use of !defined seems more common and is used in the HAVE_ATOQ check in the same #if statement. Because HAVE_DECL_ATOLL is either defined as 0 or 1. So it is always defined. HAVE_ATOQ on the other side is only defined if it is available. From config.in: /* Define to 1 if we found a declaration for 'atoll', otherwise define to 0. */ #ifndef USED_FOR_TARGET #undef HAVE_DECL_ATOLL #endif Andreas
Re: [patch] fix bootstrap on FreeBSD i386/arm
On Sat, 2015-05-30 at 11:27 +0200, Andreas Tobler wrote: > > I'm sorry. I totally forgot about autoheader... > > I'm testing this one now. Would you mind giving it a try? > > Thanks, > Andreas This patch worked for me. I am curious about why you use '!HAVE_DECL_ATOLL' in read-rtl.c instead of '!defined(HAVE_DECL_ATOLL)'. The use of !defined seems more common and is used in the HAVE_ATOQ check in the same #if statement. Steve Ellcey
Re: [patch] fix bootstrap on FreeBSD i386/arm
> I come that far on Sparc Solaris 10: > > Comparing stages 2 and 3 > warning: gcc/cc1plus-checksum.o differs > warning: gcc/cc1-checksum.o differs > Bootstrap comparison failure! > gcc/fortran/symbol.o differs > gcc/builtins.o differs > gcc/real.o differs > gcc/ubsan.o differs > libdecnumber/decimal128.o differs > gmake[2]: *** [compare] Error 1 > gmake[2]: Leaving directory `/export/data/tobleran/gcc-test/head/objdir' > gmake[1]: *** [stage3-bubble] Error 2 > gmake[1]: Leaving directory `/export/data/tobleran/gcc-test/head/objdir' > gmake: *** [bootstrap] Error 2 That's something else, namely PR bootstrap/66252. > I do not face any issues from -std=c++98 so far. But I can imagine that > there will be something in libjava? I don't know, I cannot go past stage #1, I have at least 3 different issues. -- Eric Botcazou
Re: [patch] fix bootstrap on FreeBSD i386/arm
OK, thanks. Jason
Re: [patch] fix bootstrap on FreeBSD i386/arm
Hi Jason, On 30.05.15 11:27, Andreas Tobler wrote: On 29.05.15 19:18, Steve Ellcey wrote: On Thu, 2015-05-28 at 23:54 +0200, Eric Botcazou wrote: This patch restores bootstrap on i386-*-freebsd*. The build was failing after the introduction of -std=c++98 configure/build flag. The -std=c++98 enables strict_ansi and on FreeBSD the libc function atoll is not defined for this. Solaris (x86 and SPARC) is also broken in various ways: for example, the "sun" preprocessor macro is no more defined. Why do we need strict ANSI exactly? Andreas, This patch (or the earlier one) is also breaking a build of my MIPS cross compiler. On CentOS 5.11 (yes I know that is old) I can build a cross compiler where the executables are x86_64 objects but not when they are i386 objects (i.e. when using -m32 to build GCC). The error is duplicate atoll definitions (one in read-rtl.c and one in stdlib.h). I may be mistaken but think when you moved the atoll check from AC_CHECK_FUNCS to gcc_AC_CHECK_DECLS you needed to change config.in and read-rtl.c because gcc_AC_CHECK_DECLS sets HAVE_DECL_ATOLL instead of HAVE_ATOLL. I'm sorry. I totally forgot about autoheader... I'm testing this one now. Would you mind giving it a try? Steve has a valid point here and my update, see below, fixes that. Is this ok for trunk as well? I tested on amd64/i386-freebsd and on x86_64 Gnu/Linux and also build in progress on i686 Gnu/Linux (CentOS). Thanks, Andreas 2015-05-31 Andreas Tobler * read-rtl.c: Adapt to use HAVE_DECL_ATOLL instead of HAVE_ATOLL. * config.in: Regenerate. Index: config.in === --- config.in (revision 223885) +++ config.in (working copy) @@ -624,12 +624,6 @@ #endif -/* Define to 1 if you have the `atoll' function. */ -#ifndef USED_FOR_TARGET -#undef HAVE_ATOLL -#endif - - /* Define to 1 if you have the `atoq' function. */ #ifndef USED_FOR_TARGET #undef HAVE_ATOQ @@ -686,9 +680,16 @@ #endif -/* Define to 1 if we found a declaration for 'basename', otherwise define to - 0. */ +/* Define to 1 if we found a declaration for 'atoll', otherwise define to 0. + */ #ifndef USED_FOR_TARGET +#undef HAVE_DECL_ATOLL +#endif + + +/* Define to 1 if you have the declaration of `basename(const char*)', and to + 0 if you don't. */ +#ifndef USED_FOR_TARGET #undef HAVE_DECL_BASENAME #endif @@ -963,8 +964,8 @@ #endif -/* Define to 1 if we found a declaration for 'strstr', otherwise define to 0. - */ +/* Define to 1 if you have the declaration of `strstr(const char*,const + char*)', and to 0 if you don't. */ #ifndef USED_FOR_TARGET #undef HAVE_DECL_STRSTR #endif Index: read-rtl.c === --- read-rtl.c (revision 223885) +++ read-rtl.c (working copy) @@ -704,7 +704,7 @@ /* Provide a version of a function to read a long long if the system does not provide one. */ -#if HOST_BITS_PER_WIDE_INT > HOST_BITS_PER_LONG && !defined(HAVE_ATOLL) && !defined(HAVE_ATOQ) +#if HOST_BITS_PER_WIDE_INT > HOST_BITS_PER_LONG && !HAVE_DECL_ATOLL && !defined(HAVE_ATOQ) HOST_WIDE_INT atoll (const char *); HOST_WIDE_INT @@ -1328,7 +1328,7 @@ #else /* Prefer atoll over atoq, since the former is in the ISO C99 standard. But prefer not to use our hand-rolled function above either. */ -#if defined(HAVE_ATOLL) || !defined(HAVE_ATOQ) +#if HAVE_DECL_ATOLL || !defined(HAVE_ATOQ) tmp_wide = atoll (name.string); #else tmp_wide = atoq (name.string);
Re: [patch] fix bootstrap on FreeBSD i386/arm
On 28.05.15 23:54, Eric Botcazou wrote: This patch restores bootstrap on i386-*-freebsd*. The build was failing after the introduction of -std=c++98 configure/build flag. The -std=c++98 enables strict_ansi and on FreeBSD the libc function atoll is not defined for this. Solaris (x86 and SPARC) is also broken in various ways: for example, the "sun" preprocessor macro is no more defined. Why do we need strict ANSI exactly? It comes from -std=c++98, I don't know why we need it. I come that far on Sparc Solaris 10: Comparing stages 2 and 3 warning: gcc/cc1plus-checksum.o differs warning: gcc/cc1-checksum.o differs Bootstrap comparison failure! gcc/fortran/symbol.o differs gcc/builtins.o differs gcc/real.o differs gcc/ubsan.o differs libdecnumber/decimal128.o differs gmake[2]: *** [compare] Error 1 gmake[2]: Leaving directory `/export/data/tobleran/gcc-test/head/objdir' gmake[1]: *** [stage3-bubble] Error 2 gmake[1]: Leaving directory `/export/data/tobleran/gcc-test/head/objdir' gmake: *** [bootstrap] Error 2 I do not face any issues from -std=c++98 so far. But I can imagine that there will be something in libjava? There we disable 'sun' with -Usun. But this should not be a big issue. Andreas
Re: [patch] fix bootstrap on FreeBSD i386/arm
Hi Steve, On 29.05.15 19:18, Steve Ellcey wrote: On Thu, 2015-05-28 at 23:54 +0200, Eric Botcazou wrote: This patch restores bootstrap on i386-*-freebsd*. The build was failing after the introduction of -std=c++98 configure/build flag. The -std=c++98 enables strict_ansi and on FreeBSD the libc function atoll is not defined for this. Solaris (x86 and SPARC) is also broken in various ways: for example, the "sun" preprocessor macro is no more defined. Why do we need strict ANSI exactly? Andreas, This patch (or the earlier one) is also breaking a build of my MIPS cross compiler. On CentOS 5.11 (yes I know that is old) I can build a cross compiler where the executables are x86_64 objects but not when they are i386 objects (i.e. when using -m32 to build GCC). The error is duplicate atoll definitions (one in read-rtl.c and one in stdlib.h). I may be mistaken but think when you moved the atoll check from AC_CHECK_FUNCS to gcc_AC_CHECK_DECLS you needed to change config.in and read-rtl.c because gcc_AC_CHECK_DECLS sets HAVE_DECL_ATOLL instead of HAVE_ATOLL. I'm sorry. I totally forgot about autoheader... I'm testing this one now. Would you mind giving it a try? Thanks, Andreas Index: config.in === --- config.in (revision 223885) +++ config.in (working copy) @@ -624,12 +624,6 @@ #endif -/* Define to 1 if you have the `atoll' function. */ -#ifndef USED_FOR_TARGET -#undef HAVE_ATOLL -#endif - - /* Define to 1 if you have the `atoq' function. */ #ifndef USED_FOR_TARGET #undef HAVE_ATOQ @@ -686,9 +680,16 @@ #endif -/* Define to 1 if we found a declaration for 'basename', otherwise define to - 0. */ +/* Define to 1 if we found a declaration for 'atoll', otherwise define to 0. + */ #ifndef USED_FOR_TARGET +#undef HAVE_DECL_ATOLL +#endif + + +/* Define to 1 if you have the declaration of `basename(const char*)', and to + 0 if you don't. */ +#ifndef USED_FOR_TARGET #undef HAVE_DECL_BASENAME #endif @@ -963,8 +964,8 @@ #endif -/* Define to 1 if we found a declaration for 'strstr', otherwise define to 0. - */ +/* Define to 1 if you have the declaration of `strstr(const char*,const + char*)', and to 0 if you don't. */ #ifndef USED_FOR_TARGET #undef HAVE_DECL_STRSTR #endif Index: read-rtl.c === --- read-rtl.c (revision 223885) +++ read-rtl.c (working copy) @@ -704,7 +704,7 @@ /* Provide a version of a function to read a long long if the system does not provide one. */ -#if HOST_BITS_PER_WIDE_INT > HOST_BITS_PER_LONG && !defined(HAVE_ATOLL) && !defined(HAVE_ATOQ) +#if HOST_BITS_PER_WIDE_INT > HOST_BITS_PER_LONG && !HAVE_DECL_ATOLL && !defined(HAVE_ATOQ) HOST_WIDE_INT atoll (const char *); HOST_WIDE_INT @@ -1328,7 +1328,7 @@ #else /* Prefer atoll over atoq, since the former is in the ISO C99 standard. But prefer not to use our hand-rolled function above either. */ -#if defined(HAVE_ATOLL) || !defined(HAVE_ATOQ) +#if HAVE_DECL_ATOLL || !defined(HAVE_ATOQ) tmp_wide = atoll (name.string); #else tmp_wide = atoq (name.string);
Re: [patch] fix bootstrap on FreeBSD i386/arm
On Thu, 2015-05-28 at 23:54 +0200, Eric Botcazou wrote: > > This patch restores bootstrap on i386-*-freebsd*. > > The build was failing after the introduction of -std=c++98 > > configure/build flag. The -std=c++98 enables strict_ansi and on FreeBSD > > the libc function atoll is not defined for this. > > Solaris (x86 and SPARC) is also broken in various ways: for example, the > "sun" > preprocessor macro is no more defined. Why do we need strict ANSI exactly? Andreas, This patch (or the earlier one) is also breaking a build of my MIPS cross compiler. On CentOS 5.11 (yes I know that is old) I can build a cross compiler where the executables are x86_64 objects but not when they are i386 objects (i.e. when using -m32 to build GCC). The error is duplicate atoll definitions (one in read-rtl.c and one in stdlib.h). I may be mistaken but think when you moved the atoll check from AC_CHECK_FUNCS to gcc_AC_CHECK_DECLS you needed to change config.in and read-rtl.c because gcc_AC_CHECK_DECLS sets HAVE_DECL_ATOLL instead of HAVE_ATOLL. Steve Ellcey sell...@imgtec.com
Re: [patch] fix bootstrap on FreeBSD i386/arm
Eric Botcazou writes: >> Only Solaris 10, actually: Solaris 11 isn't affected since it has >> clearenv(3C). > > That's not the only problem AFAICS: > > /usr/include/sys/resource.h: At global scope: > /usr/include/sys/resource.h:79:25: error: declaration does not declare > anything [-fpermissive] I didn't see this: my has typedef u_longlong_trlim_t; on line 79. > /homes/botcazou/gcc-head/src/gcc/system.h:469:48: error: 'char* strstr(const > char*, const char*)' conflicts with previous using declaration 'const char* > std::strstr(const char*, const char*)' > > and so on. It's SPARC/Solaris 10. Not during a Solaris 10/x86 bootstrap: has extern const char *strstr(const char *, const char *); #if __cplusplus >= 199711L. Maybe this changed sometime after S10 FCS. >> OTOH, why use sun in this place instead of __sun__ (or rather __sun__ && >> __svr4__) like any other platform? > > Yes, I can change that, but it's probably not the only case. Possibly not. Still, it would be good to be consistent here. Rainer -- - Rainer Orth, Center for Biotechnology, Bielefeld University
Re: [patch] fix bootstrap on FreeBSD i386/arm
> Only Solaris 10, actually: Solaris 11 isn't affected since it has > clearenv(3C). That's not the only problem AFAICS: /usr/include/sys/resource.h: At global scope: /usr/include/sys/resource.h:79:25: error: declaration does not declare anything [-fpermissive] /homes/botcazou/gcc-head/src/gcc/system.h:469:48: error: 'char* strstr(const char*, const char*)' conflicts with previous using declaration 'const char* std::strstr(const char*, const char*)' and so on. It's SPARC/Solaris 10. > OTOH, why use sun in this place instead of __sun__ (or rather __sun__ && > __svr4__) like any other platform? Yes, I can change that, but it's probably not the only case. -- Eric Botcazou
Re: [patch] fix bootstrap on FreeBSD i386/arm
Eric Botcazou writes: >> This patch restores bootstrap on i386-*-freebsd*. >> The build was failing after the introduction of -std=c++98 >> configure/build flag. The -std=c++98 enables strict_ansi and on FreeBSD >> the libc function atoll is not defined for this. > > Solaris (x86 and SPARC) is also broken in various ways: for example, the > "sun" > preprocessor macro is no more defined. Why do we need strict ANSI exactly? Only Solaris 10, actually: Solaris 11 isn't affected since it has clearenv(3C). OTOH, why use sun in this place instead of __sun__ (or rather __sun__ && __svr4__) like any other platform? Rainer -- - Rainer Orth, Center for Biotechnology, Bielefeld University
Re: [patch] fix bootstrap on FreeBSD i386/arm
> This patch restores bootstrap on i386-*-freebsd*. > The build was failing after the introduction of -std=c++98 > configure/build flag. The -std=c++98 enables strict_ansi and on FreeBSD > the libc function atoll is not defined for this. Solaris (x86 and SPARC) is also broken in various ways: for example, the "sun" preprocessor macro is no more defined. Why do we need strict ANSI exactly? -- Eric Botcazou
Re: [patch] fix bootstrap on FreeBSD i386/arm
OK, thanks. Jason
[patch] fix bootstrap on FreeBSD i386/arm
All, This patch restores bootstrap on i386-*-freebsd*. The build was failing after the introduction of -std=c++98 configure/build flag. The -std=c++98 enables strict_ansi and on FreeBSD the libc function atoll is not defined for this. But the configure always stated atoll available. A bit debugging showed, to my understanding now, the AC_CHECK_FUNCS only checks it a func is available, not more. While the gcc_AC_CHECK_DECLS really recognises the build flags and tells me that atoll w/o std=c++98 is available and with std=c++98 it is not available. So, the below patch addresses this and restores bootstrap on FreeBSD. Ok for trunk? Thanks, Andreas 2015-05-28 Andreas Tobler * configure.ac: Move the atoll check from AC_CHECK_FUNCS to gcc_AC_CHECK_DECLS. * configure: Regenerate. Index: configure.ac === --- configure.ac(revision 223845) +++ configure.ac(working copy) @@ -1149,7 +1149,7 @@ fileno_unlocked fprintf_unlocked fputc_unlocked fputs_unlocked dnl fread_unlocked fwrite_unlocked getchar_unlocked getc_unlocked dnl putchar_unlocked putc_unlocked) -AC_CHECK_FUNCS(times clock kill getrlimit setrlimit atoll atoq \ +AC_CHECK_FUNCS(times clock kill getrlimit setrlimit atoq \ popen sysconf strsignal getrusage nl_langinfo \ gettimeofday mbstowcs wcswidth mmap setlocale \ gcc_UNLOCKED_FUNCS madvise) @@ -1213,7 +1213,7 @@ #include "ansidecl.h" #include "system.h"]) -gcc_AC_CHECK_DECLS(getenv atol asprintf sbrk abort atof getcwd getwd \ +gcc_AC_CHECK_DECLS(getenv atol atoll asprintf sbrk abort atof getcwd getwd \ madvise stpcpy strnlen strsignal strverscmp \ strtol strtoul strtoll strtoull \ errno snprintf vsnprintf vasprintf malloc realloc calloc \