Subject: Re: removing init/fini_fallthru
To: Simon Burge <simonb@NetBSD.org>
From: Jason Thorpe <thorpej@shagadelic.org>
List: tech-toolchain
Date: 06/19/2006 20:37:53
On Jun 19, 2006, at 7:38 AM, Simon Burge wrote:

> MIPS with gcc4 is having some problems generating bad code which we  
> sort
> of worked around but breaking gcc3 in the process.  Nick Hudson and I
> have come up with the following which does away with the init_fallthru
> and fini_fallthru functions and just puts _init and _fini directly in
> the .init and .fini sections.  I've tested this with gcc4 and Nick has
> tested this with gcc3 and c++ and threaded programs work fine.

I don't see any problem with putting _init and _fini in their  
correspondingly-named sections.  If you're going to do it on one  
platform, we should do it on all.

That said, it would be nice to have a bug report filed on the codegen  
problem.

>
> Further to this, is there any reason why we should use  
> init_fallthru and
> fini_fallthru on any architecture and not this method?
>
> Cheers,
> Simon.
>
> Index: lib/csu/common_elf/crti.c
> ===================================================================
> RCS file: /cvsroot/src/lib/csu/common_elf/crti.c,v
> retrieving revision 1.3
> diff -d -p -u -r1.3 crti.c
> --- lib/csu/common_elf/crti.c	19 May 2006 19:11:12 -0000	1.3
> +++ lib/csu/common_elf/crti.c	19 Jun 2006 14:29:15 -0000
> @@ -43,6 +43,7 @@
>  #include "sysident.h"
>  #include <dot_init.h>
>
> +#ifndef MD_DO_NOT_NEED_FALLTHRU
>  INIT_FALLTHRU_DECL;
>  FINI_FALLTHRU_DECL;
>
> @@ -62,6 +63,7 @@ _fini(void)
>
>  	FINI_FALLTHRU();
>  }
> +#endif /* MD_DO_NOT_NEED_FALLTHRU */
>
>  MD_INIT_SECTION_PROLOGUE;
>  MD_FINI_SECTION_PROLOGUE;
> Index: lib/csu/mips/dot_init.h
> ===================================================================
> RCS file: /cvsroot/src/lib/csu/mips/dot_init.h,v
> retrieving revision 1.5
> diff -d -p -u -r1.5 dot_init.h
> --- lib/csu/mips/dot_init.h	12 Jun 2006 22:05:49 -0000	1.5
> +++ lib/csu/mips/dot_init.h	19 Jun 2006 14:29:15 -0000
> @@ -36,17 +36,6 @@
>
>  #include <sys/cdefs.h>			/* RCS ID & Copyright macro defns */
>
> -/*
> - * These must be extern to avoid warnings ("declared static but  
> never defined")
> - * However, only the declaration is extern, the actually __asm()  
> defines them
> - * as static.
> - */
> -#define	INIT_FALLTHRU_DECL void init_fallthru(void)
> -#define	FINI_FALLTHRU_DECL void fini_fallthru(void)
> -
> -#define	INIT_FALLTHRU()	init_fallthru()
> -#define	FINI_FALLTHRU()	fini_fallthru()
> -
>  #define	ra	"$31"
>
>  /*
> @@ -91,8 +80,10 @@
>  		"	.set	reorder			\n"\
>  		".previous")
>
> -#define	MD_INIT_SECTION_PROLOGUE MD_SECTION_PROLOGUE(.init,  
> init_fallthru)
> -#define	MD_FINI_SECTION_PROLOGUE MD_SECTION_PROLOGUE(.fini,  
> fini_fallthru)
> +#define	MD_INIT_SECTION_PROLOGUE MD_SECTION_PROLOGUE(.init, _init)
> +#define	MD_FINI_SECTION_PROLOGUE MD_SECTION_PROLOGUE(.fini, _fini)
>
>  #define	MD_INIT_SECTION_EPILOGUE MD_SECTION_EPILOGUE(.init)
>  #define	MD_FINI_SECTION_EPILOGUE MD_SECTION_EPILOGUE(.fini)
> +
> +#define	MD_DO_NOT_NEED_FALLTHRU

-- thorpej