3.4 PATCH: Fix Solaris/x86 bootstrap failure (-Werror fallout)
Andreas Jaeger
aj@suse.de
Wed Nov 5 17:25:00 GMT 2003
Rainer Orth <ro@TechFak.Uni-Bielefeld.DE> writes:
> The libgcc etc. -Werror patch caused Solaris/x86 bootstrap to fail. Even
> with the patch now reverted, it seems useful to fix the problems found:
Thanks for looking into these!
> * I had to add -Wno-error to CRTSTUFF_T_CFLAGS to avoid this error:
>
> /vol/gnu/src/gcc/gcc/gcc/libgcc2.c: In function `__enable_execute_stack':
>
> /vol/gnu/src/gcc/gcc/gcc/libgcc2.c:1607: warning: implicit declaration of function `mprotect'
> make[3]: *** [libgcc/./_trampoline.o] Error 1
>
> (same as on Solaris/SPARC). Initially, this didn't work until I noticed
> that for unknown reasons, t-svr4 was listed in tmake_files *after*
> i386/t-sol2. It should certainly be the other way round to allow the
> Solaris/x86 fragment to override the t-svr4 defaults.
>
> * i386/gmon-sol2.c has several obvious errors. The patch below fixes them
> for now, but the obvious course of action is to merge the sparc and i386
> versions of gmon-sol2.c. I'll try this once I get to it.
>
> Bootstrapped without regressions on i386-pc-solaris2.9.
>
> Ok for mainline?
>
> Rainer
>
> -----------------------------------------------------------------------------
> Rainer Orth, Faculty of Technology, Bielefeld University
>
>
> Tue Nov 4 21:04:58 2003 Rainer Orth <ro@TechFak.Uni-Bielefeld.DE>
>
> * config.gcc (i[34567]86-*-solaris2*): Let i386/t-sol2 override
> t-svr4.
>
> * config/i386/t-sol2 (TARGET_LIBGCC2_CFLAGS): Add -Wno-error.
>
> * config/i386/gmon-sol2.c (sccsid): Disable, unused.
> Include various headers for declarations of system functions.
> (monstartup, _mcleanup, internal_mcount, moncontrol): Declare.
> Change definitions to ISO C90 form.
> (_mcleanup): Comment text after #endif.
> (internal_mcount): Provide full etext prototype.
> Cast monstartup args.
>
> Index: gcc/config.gcc
> ===================================================================
> RCS file: /cvs/gcc/gcc/gcc/config.gcc,v
> retrieving revision 1.405
> diff -u -p -r1.405 config.gcc
> --- gcc/config.gcc 23 Oct 2003 05:16:52 -0000 1.405
> +++ gcc/config.gcc 4 Nov 2003 20:13:52 -0000
> @@ -1034,7 +1034,7 @@ i[34567]86-*-sco3.2v5*) # 80386 running
> i[34567]86-*-solaris2*)
> xm_defines="SMALL_ARG_MAX"
> tm_file="${tm_file} i386/unix.h i386/att.h dbxelf.h elfos.h svr4.h i386/sysv4.h sol2.h i386/sol2.h"
> - tmake_file="i386/t-sol2 t-svr4"
> + tmake_file="t-svr4 i386/t-sol2"
> if test x$gnu_ld = xyes; then
> tmake_file="$tmake_file t-slibgcc-elf-ver"
> else
> Index: gcc/config/i386/gmon-sol2.c
> ===================================================================
> RCS file: /cvs/gcc/gcc/gcc/config/i386/gmon-sol2.c,v
> retrieving revision 1.3
> diff -u -p -r1.3 gmon-sol2.c
> --- gcc/config/i386/gmon-sol2.c 22 Nov 1999 18:40:19 -0000 1.3
> +++ gcc/config/i386/gmon-sol2.c 4 Nov 2003 20:14:10 -0000
> @@ -54,14 +54,16 @@
> * should be.
> */
>
> -#ifndef lint
> +#if 0
We should remove these completlty IMO.
> static char sccsid[] = "@(#)gmon.c 5.3 (Berkeley) 5/22/91";
> #endif /* not lint */
>
> -#if 0
> -#include <unistd.h>
> +#include "tconfig.h"
> +#include "tsystem.h"
> +#include <fcntl.h>
> +#include "coretypes.h"
> +#include "tm.h"
>
> -#endif
> #ifdef DEBUG
> #include <stdio.h>
> #endif
> @@ -105,6 +107,11 @@ struct rawarc {
> extern char *sbrk ();
> #endif
>
> +void monstartup (char *, char *);
> +void _mcleanup (void);
> +void internal_mcount (void);
> +void moncontrol (int);
> +
> /*
> * froms is actually a bunch of unsigned shorts indexing tos
> */
> @@ -126,9 +133,8 @@ static int s_scale;
>
> extern int errno;
>
> -monstartup(lowpc, highpc)
> - char *lowpc;
> - char *highpc;
> +void
> +monstartup(char *lowpc, char *highpc)
This single change is approved under the ISO C90 conversion rule.
> {
> int monsize;
> char *buffer;
> @@ -203,7 +209,8 @@ monstartup(lowpc, highpc)
> moncontrol(1);
> }
>
> -_mcleanup()
> +void
> +_mcleanup(void)
This falls also under the ISO C90 rule.
> {
> int fd;
> int fromindex;
> @@ -220,7 +227,7 @@ _mcleanup()
> }
> # ifdef DEBUG
> fprintf( stderr , "[mcleanup] sbuf 0x%x ssiz %d\n" , sbuf , ssiz );
> -# endif DEBUG
> +# endif /* DEBUG */
This falls also under the ISO C90 rule.
>
> write( fd , sbuf , ssiz );
> endfrom = s_textsize / (HASHFRACTION * sizeof(*froms));
> @@ -234,7 +241,7 @@ _mcleanup()
> fprintf( stderr ,
> "[mcleanup] frompc 0x%x selfpc 0x%x count %d\n" ,
> frompc , tos[toindex].selfpc , tos[toindex].count );
> -# endif DEBUG
> +# endif /* DEBUG */
This falls also under the ISO C90 rule.
> rawarc.raw_frompc = (unsigned long) frompc;
> rawarc.raw_selfpc = (unsigned long) tos[toindex].selfpc;
> rawarc.raw_count = tos[toindex].count;
> @@ -249,7 +256,8 @@ asm(".globl _mcount; _mcount: jmp intern
> /* This is for compatibility with old versions of gcc which used mcount. */
> asm(".globl mcount; mcount: jmp internal_mcount");
>
> -internal_mcount()
> +void
> +internal_mcount(void)
This falls also under the ISO C90 rule.
> {
> register char *selfpc;
> register unsigned short *frompcindex;
> @@ -271,10 +279,10 @@ internal_mcount()
> frompcindex = (void *) __builtin_return_address (1);
>
> if(!already_setup) {
> - extern etext();
> + extern void etext(void);
This falls also under the ISO C90 rule.
> already_setup = 1;
> /* monstartup(0, etext); */
> - monstartup(0x08040000, etext);
> + monstartup((char *)0x08040000, (char *)etext);
> #ifdef USE_ONEXIT
> on_exit(_mcleanup, 0);
> #else
> @@ -387,8 +395,8 @@ overflow:
> * profiling is what mcount checks to see if
> * all the data structures are ready.
> */
> -moncontrol(mode)
> - int mode;
> +void
> +moncontrol(int mode)
This falls also under the ISO C90 rule.
> {
> if (mode)
> {
> Index: gcc/config/i386/t-sol2
> ===================================================================
> RCS file: /cvs/gcc/gcc/gcc/config/i386/t-sol2,v
> retrieving revision 1.5
> diff -u -p -r1.5 t-sol2
> --- gcc/config/i386/t-sol2 17 May 2001 03:15:56 -0000 1.5
> +++ gcc/config/i386/t-sol2 4 Nov 2003 20:14:10 -0000
> @@ -31,4 +31,4 @@ crtn.o: $(srcdir)/config/i386/sol2-cn.as
> # .text section.
>
> CRTSTUFF_T_CFLAGS = -fPIC -O2
> -TARGET_LIBGCC2_CFLAGS = -fPIC
> +TARGET_LIBGCC2_CFLAGS = -fPIC -Wno-error
>
That's all I can comment on,
Andreas
--
Andreas Jaeger, aj@suse.de, http://www.suse.de/~aj
SuSE Linux AG, Deutschherrnstr. 15-19, 90429 Nürnberg, Germany
GPG fingerprint = 93A3 365E CE47 B889 DF7F FED1 389A 563C C272 A126
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 197 bytes
Desc: not available
URL: <http://gcc.gnu.org/pipermail/gcc-patches/attachments/20031105/4e534792/attachment.sig>
More information about the Gcc-patches
mailing list