This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: 3.4 PATCH: Fix Solaris/x86 bootstrap failure (-Werror fallout)


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

Attachment: pgp00000.pgp
Description: PGP signature


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]