public inbox for gcc-patches@gcc.gnu.org
 help / color / mirror / Atom feed
* [PATCH, rs6000] fix visibility problems for out-of-line prologues/epilogues
@ 2008-10-07 17:51 Nathan Froyd
  2008-10-07 19:54 ` Andrew Pinski
  2008-10-07 20:07 ` Jakub Jelinek
  0 siblings, 2 replies; 11+ messages in thread
From: Nathan Froyd @ 2008-10-07 17:51 UTC (permalink / raw)
  To: gcc-patches; +Cc: dje

The patch below solves a problem related to the visibility of the
out-of-line prologue/epilogue functions.  These functions are called by
the compiler at -Os; since they have non-standard calling conventions,
they are placed into static libgcc.a.  However, they have default
visibility on ELF systems, which leads to the following failure mode:

  gcc -Os -c -o libcode.o libcode.c

libcode.o now calls the out-of-line prologue/epilogue functions.

  gcc -Os -shared -o libcode.so.1 -Wl,-soname,libcode.so.1

libcode.so.1 now exports the out-of-line prologue/epilogue functions.

  gcc -Os -o myapp myapp.c -lcode

myapp calls the prologue/epilogue functions, but they are resolved to
the versions in the shared library instead of libgcc, which means they
get called through the PLT.

  ./myapp
  Segmentation fault

When an prologue/epilogue function is called, the PLT resolver gets
invoked, which trashes r11...which the prologue/epilogue function
depended on, leading to bad results.

The fix, of course, is to make the prologue/epilogue functions hidden so
that when creating the shared library, they are not exported.  Then when
myapp gets linked, the routines from libgcc.a are picked up rather than
the routines from the shared library.

I realize that doing this potentially breaks applications that were
using the symbol.  However, if you were using the symbol, then things
were broken anyway.  (FWIW, you could use LD_BIND_NOW to prevent this
from happening...but then the problem nor the fix will affect you
anyway.)

The patch is straightforward enough.  Tested on powerpc-linux-gnuspe.
OK to commit?

-Nathan

2008-10-07  Nathan Froyd  <froydnj@codesourcery.com>

	* config/rs6000/ppc-asm.h (HIDDEN_FUNC): New macro.
	* config/rs6000/crtresfpr.asm, config/rs6000/crtresgpr.asm,
	config/rs6000/crtresxfpr.asm, config/rs6000/crtresxgpr.asm,
	config/rs6000/crtsavfpr.asm, config/rs6000/crtsavgpr.asm,
	config/rs6000/e500crtres32gpr.asm,
	config/rs6000/e500crtres64gpr.asm,
	config/rs6000/e500crtres64gprctr.asm,
	config/rs6000/e500crtrest32gpr.asm,
	config/rs6000/e500crtrest64gpr.asm,
	config/rs6000/e500crtresx32gpr.asm,
	config/rs6000/e500crtresx64gpr.asm,
	config/rs6000/e500crtsav32gpr.asm,
	config/rs6000/e500crtsav64gpr.asm,
	config/rs6000/e500crtsav64gprctr.asm,
	config/rs6000/e500crtsavg32gpr.asm,
	config/rs6000/e500crtsavg64gpr.asm,
	config/rs6000/e500crtsavg64gprctr.asm: Use it.

Index: gcc/config/rs6000/crtresfpr.asm
===================================================================
--- gcc/config/rs6000/crtresfpr.asm	(revision 140940)
+++ gcc/config/rs6000/crtresfpr.asm	(working copy)
@@ -48,24 +48,24 @@
 /* Called with r11 pointing to the stack header word of the caller of the */
 /* function, just beyond the end of the floating point save area.  */
 
-FUNC_START(_restfpr_14)	lfd	14,-144(11)	/* restore fp registers */
-FUNC_START(_restfpr_15)	lfd	15,-136(11)
-FUNC_START(_restfpr_16)	lfd	16,-128(11)
-FUNC_START(_restfpr_17)	lfd	17,-120(11)
-FUNC_START(_restfpr_18)	lfd	18,-112(11)
-FUNC_START(_restfpr_19)	lfd	19,-104(11)
-FUNC_START(_restfpr_20)	lfd	20,-96(11)
-FUNC_START(_restfpr_21)	lfd	21,-88(11)
-FUNC_START(_restfpr_22)	lfd	22,-80(11)
-FUNC_START(_restfpr_23)	lfd	23,-72(11)
-FUNC_START(_restfpr_24)	lfd	24,-64(11)
-FUNC_START(_restfpr_25)	lfd	25,-56(11)
-FUNC_START(_restfpr_26)	lfd	26,-48(11)
-FUNC_START(_restfpr_27)	lfd	27,-40(11)
-FUNC_START(_restfpr_28)	lfd	28,-32(11)
-FUNC_START(_restfpr_29)	lfd	29,-24(11)
-FUNC_START(_restfpr_30)	lfd	30,-16(11)
-FUNC_START(_restfpr_31)	lfd	31,-8(11)
+HIDDEN_FUNC(_restfpr_14)	lfd	14,-144(11)	/* restore fp registers */
+HIDDEN_FUNC(_restfpr_15)	lfd	15,-136(11)
+HIDDEN_FUNC(_restfpr_16)	lfd	16,-128(11)
+HIDDEN_FUNC(_restfpr_17)	lfd	17,-120(11)
+HIDDEN_FUNC(_restfpr_18)	lfd	18,-112(11)
+HIDDEN_FUNC(_restfpr_19)	lfd	19,-104(11)
+HIDDEN_FUNC(_restfpr_20)	lfd	20,-96(11)
+HIDDEN_FUNC(_restfpr_21)	lfd	21,-88(11)
+HIDDEN_FUNC(_restfpr_22)	lfd	22,-80(11)
+HIDDEN_FUNC(_restfpr_23)	lfd	23,-72(11)
+HIDDEN_FUNC(_restfpr_24)	lfd	24,-64(11)
+HIDDEN_FUNC(_restfpr_25)	lfd	25,-56(11)
+HIDDEN_FUNC(_restfpr_26)	lfd	26,-48(11)
+HIDDEN_FUNC(_restfpr_27)	lfd	27,-40(11)
+HIDDEN_FUNC(_restfpr_28)	lfd	28,-32(11)
+HIDDEN_FUNC(_restfpr_29)	lfd	29,-24(11)
+HIDDEN_FUNC(_restfpr_30)	lfd	30,-16(11)
+HIDDEN_FUNC(_restfpr_31)	lfd	31,-8(11)
 			blr
 FUNC_END(_restfpr_31)
 FUNC_END(_restfpr_30)
Index: gcc/config/rs6000/crtresgpr.asm
===================================================================
--- gcc/config/rs6000/crtresgpr.asm	(revision 140940)
+++ gcc/config/rs6000/crtresgpr.asm	(working copy)
@@ -48,24 +48,24 @@
 /* Called with r11 pointing to the stack header word of the caller of the */
 /* function, just beyond the end of the integer restore area.  */
 
-FUNC_START(_restgpr_14)	lwz	14,-72(11)	/* restore gp registers */
-FUNC_START(_restgpr_15)	lwz	15,-68(11)
-FUNC_START(_restgpr_16)	lwz	16,-64(11)
-FUNC_START(_restgpr_17)	lwz	17,-60(11)
-FUNC_START(_restgpr_18)	lwz	18,-56(11)
-FUNC_START(_restgpr_19)	lwz	19,-52(11)
-FUNC_START(_restgpr_20)	lwz	20,-48(11)
-FUNC_START(_restgpr_21)	lwz	21,-44(11)
-FUNC_START(_restgpr_22)	lwz	22,-40(11)
-FUNC_START(_restgpr_23)	lwz	23,-36(11)
-FUNC_START(_restgpr_24)	lwz	24,-32(11)
-FUNC_START(_restgpr_25)	lwz	25,-28(11)
-FUNC_START(_restgpr_26)	lwz	26,-24(11)
-FUNC_START(_restgpr_27)	lwz	27,-20(11)
-FUNC_START(_restgpr_28)	lwz	28,-16(11)
-FUNC_START(_restgpr_29)	lwz	29,-12(11)
-FUNC_START(_restgpr_30)	lwz	30,-8(11)
-FUNC_START(_restgpr_31)	lwz	31,-4(11)
+HIDDEN_FUNC(_restgpr_14)	lwz	14,-72(11)	/* restore gp registers */
+HIDDEN_FUNC(_restgpr_15)	lwz	15,-68(11)
+HIDDEN_FUNC(_restgpr_16)	lwz	16,-64(11)
+HIDDEN_FUNC(_restgpr_17)	lwz	17,-60(11)
+HIDDEN_FUNC(_restgpr_18)	lwz	18,-56(11)
+HIDDEN_FUNC(_restgpr_19)	lwz	19,-52(11)
+HIDDEN_FUNC(_restgpr_20)	lwz	20,-48(11)
+HIDDEN_FUNC(_restgpr_21)	lwz	21,-44(11)
+HIDDEN_FUNC(_restgpr_22)	lwz	22,-40(11)
+HIDDEN_FUNC(_restgpr_23)	lwz	23,-36(11)
+HIDDEN_FUNC(_restgpr_24)	lwz	24,-32(11)
+HIDDEN_FUNC(_restgpr_25)	lwz	25,-28(11)
+HIDDEN_FUNC(_restgpr_26)	lwz	26,-24(11)
+HIDDEN_FUNC(_restgpr_27)	lwz	27,-20(11)
+HIDDEN_FUNC(_restgpr_28)	lwz	28,-16(11)
+HIDDEN_FUNC(_restgpr_29)	lwz	29,-12(11)
+HIDDEN_FUNC(_restgpr_30)	lwz	30,-8(11)
+HIDDEN_FUNC(_restgpr_31)	lwz	31,-4(11)
 			blr
 FUNC_END(_restgpr_31)
 FUNC_END(_restgpr_30)
Index: gcc/config/rs6000/crtresxfpr.asm
===================================================================
--- gcc/config/rs6000/crtresxfpr.asm	(revision 140940)
+++ gcc/config/rs6000/crtresxfpr.asm	(working copy)
@@ -50,24 +50,24 @@
 /* In addition to restoring the fp registers, it will return to the caller's */
 /* caller */
 
-FUNC_START(_restfpr_14_x)	lfd	14,-144(11)	/* restore fp registers */
-FUNC_START(_restfpr_15_x)	lfd	15,-136(11)
-FUNC_START(_restfpr_16_x)	lfd	16,-128(11)
-FUNC_START(_restfpr_17_x)	lfd	17,-120(11)
-FUNC_START(_restfpr_18_x)	lfd	18,-112(11)
-FUNC_START(_restfpr_19_x)	lfd	19,-104(11)
-FUNC_START(_restfpr_20_x)	lfd	20,-96(11)
-FUNC_START(_restfpr_21_x)	lfd	21,-88(11)
-FUNC_START(_restfpr_22_x)	lfd	22,-80(11)
-FUNC_START(_restfpr_23_x)	lfd	23,-72(11)
-FUNC_START(_restfpr_24_x)	lfd	24,-64(11)
-FUNC_START(_restfpr_25_x)	lfd	25,-56(11)
-FUNC_START(_restfpr_26_x)	lfd	26,-48(11)
-FUNC_START(_restfpr_27_x)	lfd	27,-40(11)
-FUNC_START(_restfpr_28_x)	lfd	28,-32(11)
-FUNC_START(_restfpr_29_x)	lfd	29,-24(11)
-FUNC_START(_restfpr_30_x)	lfd	30,-16(11)
-FUNC_START(_restfpr_31_x)	lwz	0,4(11)
+HIDDEN_FUNC(_restfpr_14_x)	lfd	14,-144(11)	/* restore fp registers */
+HIDDEN_FUNC(_restfpr_15_x)	lfd	15,-136(11)
+HIDDEN_FUNC(_restfpr_16_x)	lfd	16,-128(11)
+HIDDEN_FUNC(_restfpr_17_x)	lfd	17,-120(11)
+HIDDEN_FUNC(_restfpr_18_x)	lfd	18,-112(11)
+HIDDEN_FUNC(_restfpr_19_x)	lfd	19,-104(11)
+HIDDEN_FUNC(_restfpr_20_x)	lfd	20,-96(11)
+HIDDEN_FUNC(_restfpr_21_x)	lfd	21,-88(11)
+HIDDEN_FUNC(_restfpr_22_x)	lfd	22,-80(11)
+HIDDEN_FUNC(_restfpr_23_x)	lfd	23,-72(11)
+HIDDEN_FUNC(_restfpr_24_x)	lfd	24,-64(11)
+HIDDEN_FUNC(_restfpr_25_x)	lfd	25,-56(11)
+HIDDEN_FUNC(_restfpr_26_x)	lfd	26,-48(11)
+HIDDEN_FUNC(_restfpr_27_x)	lfd	27,-40(11)
+HIDDEN_FUNC(_restfpr_28_x)	lfd	28,-32(11)
+HIDDEN_FUNC(_restfpr_29_x)	lfd	29,-24(11)
+HIDDEN_FUNC(_restfpr_30_x)	lfd	30,-16(11)
+HIDDEN_FUNC(_restfpr_31_x)	lwz	0,4(11)
 				lfd	31,-8(11)
 				mtlr	0
 				mr	1,11
Index: gcc/config/rs6000/crtresxgpr.asm
===================================================================
--- gcc/config/rs6000/crtresxgpr.asm	(revision 140940)
+++ gcc/config/rs6000/crtresxgpr.asm	(working copy)
@@ -48,24 +48,24 @@
 /* Called with r11 pointing to the stack header word of the caller of the */
 /* function, just beyond the end of the integer restore area.  */
 
-FUNC_START(_restgpr_14_x)	lwz	14,-72(11)	/* restore gp registers */
-FUNC_START(_restgpr_15_x)	lwz	15,-68(11)
-FUNC_START(_restgpr_16_x)	lwz	16,-64(11)
-FUNC_START(_restgpr_17_x)	lwz	17,-60(11)
-FUNC_START(_restgpr_18_x)	lwz	18,-56(11)
-FUNC_START(_restgpr_19_x)	lwz	19,-52(11)
-FUNC_START(_restgpr_20_x)	lwz	20,-48(11)
-FUNC_START(_restgpr_21_x)	lwz	21,-44(11)
-FUNC_START(_restgpr_22_x)	lwz	22,-40(11)
-FUNC_START(_restgpr_23_x)	lwz	23,-36(11)
-FUNC_START(_restgpr_24_x)	lwz	24,-32(11)
-FUNC_START(_restgpr_25_x)	lwz	25,-28(11)
-FUNC_START(_restgpr_26_x)	lwz	26,-24(11)
-FUNC_START(_restgpr_27_x)	lwz	27,-20(11)
-FUNC_START(_restgpr_28_x)	lwz	28,-16(11)
-FUNC_START(_restgpr_29_x)	lwz	29,-12(11)
-FUNC_START(_restgpr_30_x)	lwz	30,-8(11)
-FUNC_START(_restgpr_31_x)	lwz	0,4(11)
+HIDDEN_FUNC(_restgpr_14_x)	lwz	14,-72(11)	/* restore gp registers */
+HIDDEN_FUNC(_restgpr_15_x)	lwz	15,-68(11)
+HIDDEN_FUNC(_restgpr_16_x)	lwz	16,-64(11)
+HIDDEN_FUNC(_restgpr_17_x)	lwz	17,-60(11)
+HIDDEN_FUNC(_restgpr_18_x)	lwz	18,-56(11)
+HIDDEN_FUNC(_restgpr_19_x)	lwz	19,-52(11)
+HIDDEN_FUNC(_restgpr_20_x)	lwz	20,-48(11)
+HIDDEN_FUNC(_restgpr_21_x)	lwz	21,-44(11)
+HIDDEN_FUNC(_restgpr_22_x)	lwz	22,-40(11)
+HIDDEN_FUNC(_restgpr_23_x)	lwz	23,-36(11)
+HIDDEN_FUNC(_restgpr_24_x)	lwz	24,-32(11)
+HIDDEN_FUNC(_restgpr_25_x)	lwz	25,-28(11)
+HIDDEN_FUNC(_restgpr_26_x)	lwz	26,-24(11)
+HIDDEN_FUNC(_restgpr_27_x)	lwz	27,-20(11)
+HIDDEN_FUNC(_restgpr_28_x)	lwz	28,-16(11)
+HIDDEN_FUNC(_restgpr_29_x)	lwz	29,-12(11)
+HIDDEN_FUNC(_restgpr_30_x)	lwz	30,-8(11)
+HIDDEN_FUNC(_restgpr_31_x)	lwz	0,4(11)
 				lwz	31,-4(11)
 				mtlr	0
 				mr	1,11
Index: gcc/config/rs6000/crtsavfpr.asm
===================================================================
--- gcc/config/rs6000/crtsavfpr.asm	(revision 140940)
+++ gcc/config/rs6000/crtsavfpr.asm	(working copy)
@@ -48,24 +48,24 @@
 /* Called with r11 pointing to the stack header word of the caller of the */
 /* function, just beyond the end of the floating point save area.  */
 
-FUNC_START(_savefpr_14)	stfd	14,-144(11)	/* save fp registers */
-FUNC_START(_savefpr_15)	stfd	15,-136(11)
-FUNC_START(_savefpr_16)	stfd	16,-128(11)
-FUNC_START(_savefpr_17)	stfd	17,-120(11)
-FUNC_START(_savefpr_18)	stfd	18,-112(11)
-FUNC_START(_savefpr_19)	stfd	19,-104(11)
-FUNC_START(_savefpr_20)	stfd	20,-96(11)
-FUNC_START(_savefpr_21)	stfd	21,-88(11)
-FUNC_START(_savefpr_22)	stfd	22,-80(11)
-FUNC_START(_savefpr_23)	stfd	23,-72(11)
-FUNC_START(_savefpr_24)	stfd	24,-64(11)
-FUNC_START(_savefpr_25)	stfd	25,-56(11)
-FUNC_START(_savefpr_26)	stfd	26,-48(11)
-FUNC_START(_savefpr_27)	stfd	27,-40(11)
-FUNC_START(_savefpr_28)	stfd	28,-32(11)
-FUNC_START(_savefpr_29)	stfd	29,-24(11)
-FUNC_START(_savefpr_30)	stfd	30,-16(11)
-FUNC_START(_savefpr_31)	stfd	31,-8(11)
+HIDDEN_FUNC(_savefpr_14)	stfd	14,-144(11)	/* save fp registers */
+HIDDEN_FUNC(_savefpr_15)	stfd	15,-136(11)
+HIDDEN_FUNC(_savefpr_16)	stfd	16,-128(11)
+HIDDEN_FUNC(_savefpr_17)	stfd	17,-120(11)
+HIDDEN_FUNC(_savefpr_18)	stfd	18,-112(11)
+HIDDEN_FUNC(_savefpr_19)	stfd	19,-104(11)
+HIDDEN_FUNC(_savefpr_20)	stfd	20,-96(11)
+HIDDEN_FUNC(_savefpr_21)	stfd	21,-88(11)
+HIDDEN_FUNC(_savefpr_22)	stfd	22,-80(11)
+HIDDEN_FUNC(_savefpr_23)	stfd	23,-72(11)
+HIDDEN_FUNC(_savefpr_24)	stfd	24,-64(11)
+HIDDEN_FUNC(_savefpr_25)	stfd	25,-56(11)
+HIDDEN_FUNC(_savefpr_26)	stfd	26,-48(11)
+HIDDEN_FUNC(_savefpr_27)	stfd	27,-40(11)
+HIDDEN_FUNC(_savefpr_28)	stfd	28,-32(11)
+HIDDEN_FUNC(_savefpr_29)	stfd	29,-24(11)
+HIDDEN_FUNC(_savefpr_30)	stfd	30,-16(11)
+HIDDEN_FUNC(_savefpr_31)	stfd	31,-8(11)
 			blr
 FUNC_END(_savefpr_31)
 FUNC_END(_savefpr_30)
Index: gcc/config/rs6000/crtsavgpr.asm
===================================================================
--- gcc/config/rs6000/crtsavgpr.asm	(revision 140940)
+++ gcc/config/rs6000/crtsavgpr.asm	(working copy)
@@ -48,24 +48,24 @@
 /* Called with r11 pointing to the stack header word of the caller of the */
 /* function, just beyond the end of the integer save area.  */
 
-FUNC_START(_savegpr_14)	stw	14,-72(11)	/* save gp registers */
-FUNC_START(_savegpr_15)	stw	15,-68(11)
-FUNC_START(_savegpr_16)	stw	16,-64(11)
-FUNC_START(_savegpr_17)	stw	17,-60(11)
-FUNC_START(_savegpr_18)	stw	18,-56(11)
-FUNC_START(_savegpr_19)	stw	19,-52(11)
-FUNC_START(_savegpr_20)	stw	20,-48(11)
-FUNC_START(_savegpr_21)	stw	21,-44(11)
-FUNC_START(_savegpr_22)	stw	22,-40(11)
-FUNC_START(_savegpr_23)	stw	23,-36(11)
-FUNC_START(_savegpr_24)	stw	24,-32(11)
-FUNC_START(_savegpr_25)	stw	25,-28(11)
-FUNC_START(_savegpr_26)	stw	26,-24(11)
-FUNC_START(_savegpr_27)	stw	27,-20(11)
-FUNC_START(_savegpr_28)	stw	28,-16(11)
-FUNC_START(_savegpr_29)	stw	29,-12(11)
-FUNC_START(_savegpr_30)	stw	30,-8(11)
-FUNC_START(_savegpr_31)	stw	31,-4(11)
+HIDDEN_FUNC(_savegpr_14)	stw	14,-72(11)	/* save gp registers */
+HIDDEN_FUNC(_savegpr_15)	stw	15,-68(11)
+HIDDEN_FUNC(_savegpr_16)	stw	16,-64(11)
+HIDDEN_FUNC(_savegpr_17)	stw	17,-60(11)
+HIDDEN_FUNC(_savegpr_18)	stw	18,-56(11)
+HIDDEN_FUNC(_savegpr_19)	stw	19,-52(11)
+HIDDEN_FUNC(_savegpr_20)	stw	20,-48(11)
+HIDDEN_FUNC(_savegpr_21)	stw	21,-44(11)
+HIDDEN_FUNC(_savegpr_22)	stw	22,-40(11)
+HIDDEN_FUNC(_savegpr_23)	stw	23,-36(11)
+HIDDEN_FUNC(_savegpr_24)	stw	24,-32(11)
+HIDDEN_FUNC(_savegpr_25)	stw	25,-28(11)
+HIDDEN_FUNC(_savegpr_26)	stw	26,-24(11)
+HIDDEN_FUNC(_savegpr_27)	stw	27,-20(11)
+HIDDEN_FUNC(_savegpr_28)	stw	28,-16(11)
+HIDDEN_FUNC(_savegpr_29)	stw	29,-12(11)
+HIDDEN_FUNC(_savegpr_30)	stw	30,-8(11)
+HIDDEN_FUNC(_savegpr_31)	stw	31,-4(11)
 			blr
 FUNC_END(_savegpr_31)
 FUNC_END(_savegpr_30)
Index: gcc/config/rs6000/e500crtres32gpr.asm
===================================================================
--- gcc/config/rs6000/e500crtres32gpr.asm	(revision 140940)
+++ gcc/config/rs6000/e500crtres32gpr.asm	(working copy)
@@ -42,24 +42,24 @@
 /* Routines for restoring 32-bit integer registers, called by the compiler.  */
 /* "Bare" versions that simply return to their caller.  */
 
-FUNC_START(_rest32gpr_14)	lwz 14,-72(11)
-FUNC_START(_rest32gpr_15)	lwz 15,-68(11)
-FUNC_START(_rest32gpr_16)	lwz 16,-64(11)
-FUNC_START(_rest32gpr_17)	lwz 17,-60(11)
-FUNC_START(_rest32gpr_18)	lwz 18,-56(11)
-FUNC_START(_rest32gpr_19)	lwz 19,-52(11)
-FUNC_START(_rest32gpr_20)	lwz 20,-48(11)
-FUNC_START(_rest32gpr_21)	lwz 21,-44(11)
-FUNC_START(_rest32gpr_22)	lwz 22,-40(11)
-FUNC_START(_rest32gpr_23)	lwz 23,-36(11)
-FUNC_START(_rest32gpr_24)	lwz 24,-32(11)
-FUNC_START(_rest32gpr_25)	lwz 25,-28(11)
-FUNC_START(_rest32gpr_26)	lwz 26,-24(11)
-FUNC_START(_rest32gpr_27)	lwz 27,-20(11)
-FUNC_START(_rest32gpr_28)	lwz 28,-16(11)
-FUNC_START(_rest32gpr_29)	lwz 29,-12(11)
-FUNC_START(_rest32gpr_30)	lwz 30,-8(11)
-FUNC_START(_rest32gpr_31)	lwz 31,-4(11)
+HIDDEN_FUNC(_rest32gpr_14)	lwz 14,-72(11)
+HIDDEN_FUNC(_rest32gpr_15)	lwz 15,-68(11)
+HIDDEN_FUNC(_rest32gpr_16)	lwz 16,-64(11)
+HIDDEN_FUNC(_rest32gpr_17)	lwz 17,-60(11)
+HIDDEN_FUNC(_rest32gpr_18)	lwz 18,-56(11)
+HIDDEN_FUNC(_rest32gpr_19)	lwz 19,-52(11)
+HIDDEN_FUNC(_rest32gpr_20)	lwz 20,-48(11)
+HIDDEN_FUNC(_rest32gpr_21)	lwz 21,-44(11)
+HIDDEN_FUNC(_rest32gpr_22)	lwz 22,-40(11)
+HIDDEN_FUNC(_rest32gpr_23)	lwz 23,-36(11)
+HIDDEN_FUNC(_rest32gpr_24)	lwz 24,-32(11)
+HIDDEN_FUNC(_rest32gpr_25)	lwz 25,-28(11)
+HIDDEN_FUNC(_rest32gpr_26)	lwz 26,-24(11)
+HIDDEN_FUNC(_rest32gpr_27)	lwz 27,-20(11)
+HIDDEN_FUNC(_rest32gpr_28)	lwz 28,-16(11)
+HIDDEN_FUNC(_rest32gpr_29)	lwz 29,-12(11)
+HIDDEN_FUNC(_rest32gpr_30)	lwz 30,-8(11)
+HIDDEN_FUNC(_rest32gpr_31)	lwz 31,-4(11)
 				blr
 FUNC_END(_rest32gpr_31)
 FUNC_END(_rest32gpr_30)
Index: gcc/config/rs6000/e500crtres64gpr.asm
===================================================================
--- gcc/config/rs6000/e500crtres64gpr.asm	(revision 140940)
+++ gcc/config/rs6000/e500crtres64gpr.asm	(working copy)
@@ -42,24 +42,24 @@
 /* Routines for restoring 64-bit integer registers, called by the compiler.  */
 /* "Bare" versions that return to their caller.  */
 
-FUNC_START(_rest64gpr_14)	evldd 14,0(11)
-FUNC_START(_rest64gpr_15)	evldd 15,8(11)
-FUNC_START(_rest64gpr_16)	evldd 16,16(11)
-FUNC_START(_rest64gpr_17)	evldd 17,24(11)
-FUNC_START(_rest64gpr_18)	evldd 18,32(11)
-FUNC_START(_rest64gpr_19)	evldd 19,40(11)
-FUNC_START(_rest64gpr_20)	evldd 20,48(11)
-FUNC_START(_rest64gpr_21)	evldd 21,56(11)
-FUNC_START(_rest64gpr_22)	evldd 22,64(11)
-FUNC_START(_rest64gpr_23)	evldd 23,72(11)
-FUNC_START(_rest64gpr_24)	evldd 24,80(11)
-FUNC_START(_rest64gpr_25)	evldd 25,88(11)
-FUNC_START(_rest64gpr_26)	evldd 26,96(11)
-FUNC_START(_rest64gpr_27)	evldd 27,104(11)
-FUNC_START(_rest64gpr_28)	evldd 28,112(11)
-FUNC_START(_rest64gpr_29)	evldd 29,120(11)
-FUNC_START(_rest64gpr_30)	evldd 30,128(11)
-FUNC_START(_rest64gpr_31)	evldd 31,136(11)
+HIDDEN_FUNC(_rest64gpr_14)	evldd 14,0(11)
+HIDDEN_FUNC(_rest64gpr_15)	evldd 15,8(11)
+HIDDEN_FUNC(_rest64gpr_16)	evldd 16,16(11)
+HIDDEN_FUNC(_rest64gpr_17)	evldd 17,24(11)
+HIDDEN_FUNC(_rest64gpr_18)	evldd 18,32(11)
+HIDDEN_FUNC(_rest64gpr_19)	evldd 19,40(11)
+HIDDEN_FUNC(_rest64gpr_20)	evldd 20,48(11)
+HIDDEN_FUNC(_rest64gpr_21)	evldd 21,56(11)
+HIDDEN_FUNC(_rest64gpr_22)	evldd 22,64(11)
+HIDDEN_FUNC(_rest64gpr_23)	evldd 23,72(11)
+HIDDEN_FUNC(_rest64gpr_24)	evldd 24,80(11)
+HIDDEN_FUNC(_rest64gpr_25)	evldd 25,88(11)
+HIDDEN_FUNC(_rest64gpr_26)	evldd 26,96(11)
+HIDDEN_FUNC(_rest64gpr_27)	evldd 27,104(11)
+HIDDEN_FUNC(_rest64gpr_28)	evldd 28,112(11)
+HIDDEN_FUNC(_rest64gpr_29)	evldd 29,120(11)
+HIDDEN_FUNC(_rest64gpr_30)	evldd 30,128(11)
+HIDDEN_FUNC(_rest64gpr_31)	evldd 31,136(11)
 				blr
 FUNC_END(_rest64gpr_31)
 FUNC_END(_rest64gpr_30)
Index: gcc/config/rs6000/e500crtres64gprctr.asm
===================================================================
--- gcc/config/rs6000/e500crtres64gprctr.asm	(revision 140940)
+++ gcc/config/rs6000/e500crtres64gprctr.asm	(working copy)
@@ -42,41 +42,41 @@
 /* Routines for restoring 64-bit integer registers where the number of
    registers to be restored is passed in CTR, called by the compiler.  */
 
-FUNC_START(_rest64gpr_ctr_14)	evldd 14,0(11)
+HIDDEN_FUNC(_rest64gpr_ctr_14)	evldd 14,0(11)
 				bdz _rest64_gpr_ctr_done
-FUNC_START(_rest64gpr_ctr_15)	evldd 15,8(11)
+HIDDEN_FUNC(_rest64gpr_ctr_15)	evldd 15,8(11)
 				bdz _rest64_gpr_ctr_done
-FUNC_START(_rest64gpr_ctr_16)	evldd 16,16(11)
+HIDDEN_FUNC(_rest64gpr_ctr_16)	evldd 16,16(11)
 				bdz _rest64_gpr_ctr_done
-FUNC_START(_rest64gpr_ctr_17)	evldd 17,24(11)
+HIDDEN_FUNC(_rest64gpr_ctr_17)	evldd 17,24(11)
 				bdz _rest64_gpr_ctr_done
-FUNC_START(_rest64gpr_ctr_18)	evldd 18,32(11)
+HIDDEN_FUNC(_rest64gpr_ctr_18)	evldd 18,32(11)
 				bdz _rest64_gpr_ctr_done
-FUNC_START(_rest64gpr_ctr_19)	evldd 19,40(11)
+HIDDEN_FUNC(_rest64gpr_ctr_19)	evldd 19,40(11)
 				bdz _rest64_gpr_ctr_done
-FUNC_START(_rest64gpr_ctr_20)	evldd 20,48(11)
+HIDDEN_FUNC(_rest64gpr_ctr_20)	evldd 20,48(11)
 				bdz _rest64_gpr_ctr_done
-FUNC_START(_rest64gpr_ctr_21)	evldd 21,56(11)
+HIDDEN_FUNC(_rest64gpr_ctr_21)	evldd 21,56(11)
 				bdz _rest64_gpr_ctr_done
-FUNC_START(_rest64gpr_ctr_22)	evldd 22,64(11)
+HIDDEN_FUNC(_rest64gpr_ctr_22)	evldd 22,64(11)
 				bdz _rest64_gpr_ctr_done
-FUNC_START(_rest64gpr_ctr_23)	evldd 23,72(11)
+HIDDEN_FUNC(_rest64gpr_ctr_23)	evldd 23,72(11)
 				bdz _rest64_gpr_ctr_done
-FUNC_START(_rest64gpr_ctr_24)	evldd 24,80(11)
+HIDDEN_FUNC(_rest64gpr_ctr_24)	evldd 24,80(11)
 				bdz _rest64_gpr_ctr_done
-FUNC_START(_rest64gpr_ctr_25)	evldd 25,88(11)
+HIDDEN_FUNC(_rest64gpr_ctr_25)	evldd 25,88(11)
 				bdz _rest64_gpr_ctr_done
-FUNC_START(_rest64gpr_ctr_26)	evldd 26,96(11)
+HIDDEN_FUNC(_rest64gpr_ctr_26)	evldd 26,96(11)
 				bdz _rest64_gpr_ctr_done
-FUNC_START(_rest64gpr_ctr_27)	evldd 27,104(11)
+HIDDEN_FUNC(_rest64gpr_ctr_27)	evldd 27,104(11)
 				bdz _rest64_gpr_ctr_done
-FUNC_START(_rest64gpr_ctr_28)	evldd 28,112(11)
+HIDDEN_FUNC(_rest64gpr_ctr_28)	evldd 28,112(11)
 				bdz _rest64_gpr_ctr_done
-FUNC_START(_rest64gpr_ctr_29)	evldd 29,120(11)
+HIDDEN_FUNC(_rest64gpr_ctr_29)	evldd 29,120(11)
 				bdz _rest64_gpr_ctr_done
-FUNC_START(_rest64gpr_ctr_30)	evldd 30,128(11)
+HIDDEN_FUNC(_rest64gpr_ctr_30)	evldd 30,128(11)
 				bdz _rest64_gpr_ctr_done
-FUNC_START(_rest64gpr_ctr_31)	evldd 31,136(11)
+HIDDEN_FUNC(_rest64gpr_ctr_31)	evldd 31,136(11)
 _rest64gpr_ctr_done:		blr
 
 #endif
Index: gcc/config/rs6000/e500crtrest32gpr.asm
===================================================================
--- gcc/config/rs6000/e500crtrest32gpr.asm	(revision 140940)
+++ gcc/config/rs6000/e500crtrest32gpr.asm	(working copy)
@@ -42,24 +42,24 @@
 /* Routines for restoring 32-bit integer registers, called by the compiler.  */
 /* "Tail" versions that perform a tail call.  */
 
-FUNC_START(_rest32gpr_14_t)	lwz 14,-72(11)
-FUNC_START(_rest32gpr_15_t)	lwz 15,-68(11)
-FUNC_START(_rest32gpr_16_t)	lwz 16,-64(11)
-FUNC_START(_rest32gpr_17_t)	lwz 17,-60(11)
-FUNC_START(_rest32gpr_18_t)	lwz 18,-56(11)
-FUNC_START(_rest32gpr_19_t)	lwz 19,-52(11)
-FUNC_START(_rest32gpr_20_t)	lwz 20,-48(11)
-FUNC_START(_rest32gpr_21_t)	lwz 21,-44(11)
-FUNC_START(_rest32gpr_22_t)	lwz 22,-40(11)
-FUNC_START(_rest32gpr_23_t)	lwz 23,-36(11)
-FUNC_START(_rest32gpr_24_t)	lwz 24,-32(11)
-FUNC_START(_rest32gpr_25_t)	lwz 25,-28(11)
-FUNC_START(_rest32gpr_26_t)	lwz 26,-24(11)
-FUNC_START(_rest32gpr_27_t)	lwz 27,-20(11)
-FUNC_START(_rest32gpr_28_t)	lwz 28,-16(11)
-FUNC_START(_rest32gpr_29_t)	lwz 29,-12(11)
-FUNC_START(_rest32gpr_30_t)	lwz 30,-8(11)
-FUNC_START(_rest32gpr_31_t)	lwz 31,-4(11)
+HIDDEN_FUNC(_rest32gpr_14_t)	lwz 14,-72(11)
+HIDDEN_FUNC(_rest32gpr_15_t)	lwz 15,-68(11)
+HIDDEN_FUNC(_rest32gpr_16_t)	lwz 16,-64(11)
+HIDDEN_FUNC(_rest32gpr_17_t)	lwz 17,-60(11)
+HIDDEN_FUNC(_rest32gpr_18_t)	lwz 18,-56(11)
+HIDDEN_FUNC(_rest32gpr_19_t)	lwz 19,-52(11)
+HIDDEN_FUNC(_rest32gpr_20_t)	lwz 20,-48(11)
+HIDDEN_FUNC(_rest32gpr_21_t)	lwz 21,-44(11)
+HIDDEN_FUNC(_rest32gpr_22_t)	lwz 22,-40(11)
+HIDDEN_FUNC(_rest32gpr_23_t)	lwz 23,-36(11)
+HIDDEN_FUNC(_rest32gpr_24_t)	lwz 24,-32(11)
+HIDDEN_FUNC(_rest32gpr_25_t)	lwz 25,-28(11)
+HIDDEN_FUNC(_rest32gpr_26_t)	lwz 26,-24(11)
+HIDDEN_FUNC(_rest32gpr_27_t)	lwz 27,-20(11)
+HIDDEN_FUNC(_rest32gpr_28_t)	lwz 28,-16(11)
+HIDDEN_FUNC(_rest32gpr_29_t)	lwz 29,-12(11)
+HIDDEN_FUNC(_rest32gpr_30_t)	lwz 30,-8(11)
+HIDDEN_FUNC(_rest32gpr_31_t)	lwz 31,-4(11)
 				lwz 0,4(11)
 				mr 1,11
 				blr
Index: gcc/config/rs6000/e500crtrest64gpr.asm
===================================================================
--- gcc/config/rs6000/e500crtrest64gpr.asm	(revision 140940)
+++ gcc/config/rs6000/e500crtrest64gpr.asm	(working copy)
@@ -41,24 +41,24 @@
 
 /* "Tail" versions that perform a tail call.  */
 
-FUNC_START(_rest64gpr_14_t)	evldd 14,0(11)
-FUNC_START(_rest64gpr_15_t)	evldd 15,8(11)
-FUNC_START(_rest64gpr_16_t)	evldd 16,16(11)
-FUNC_START(_rest64gpr_17_t)	evldd 17,24(11)
-FUNC_START(_rest64gpr_18_t)	evldd 18,32(11)
-FUNC_START(_rest64gpr_19_t)	evldd 19,40(11)
-FUNC_START(_rest64gpr_20_t)	evldd 20,48(11)
-FUNC_START(_rest64gpr_21_t)	evldd 21,56(11)
-FUNC_START(_rest64gpr_22_t)	evldd 22,64(11)
-FUNC_START(_rest64gpr_23_t)	evldd 23,72(11)
-FUNC_START(_rest64gpr_24_t)	evldd 24,80(11)
-FUNC_START(_rest64gpr_25_t)	evldd 25,88(11)
-FUNC_START(_rest64gpr_26_t)	evldd 26,96(11)
-FUNC_START(_rest64gpr_27_t)	evldd 27,104(11)
-FUNC_START(_rest64gpr_28_t)	evldd 28,112(11)
-FUNC_START(_rest64gpr_29_t)	evldd 29,120(11)
-FUNC_START(_rest64gpr_30_t)	evldd 30,128(11)
-FUNC_START(_rest64gpr_31_t)	lwz 0,148(11)
+HIDDEN_FUNC(_rest64gpr_14_t)	evldd 14,0(11)
+HIDDEN_FUNC(_rest64gpr_15_t)	evldd 15,8(11)
+HIDDEN_FUNC(_rest64gpr_16_t)	evldd 16,16(11)
+HIDDEN_FUNC(_rest64gpr_17_t)	evldd 17,24(11)
+HIDDEN_FUNC(_rest64gpr_18_t)	evldd 18,32(11)
+HIDDEN_FUNC(_rest64gpr_19_t)	evldd 19,40(11)
+HIDDEN_FUNC(_rest64gpr_20_t)	evldd 20,48(11)
+HIDDEN_FUNC(_rest64gpr_21_t)	evldd 21,56(11)
+HIDDEN_FUNC(_rest64gpr_22_t)	evldd 22,64(11)
+HIDDEN_FUNC(_rest64gpr_23_t)	evldd 23,72(11)
+HIDDEN_FUNC(_rest64gpr_24_t)	evldd 24,80(11)
+HIDDEN_FUNC(_rest64gpr_25_t)	evldd 25,88(11)
+HIDDEN_FUNC(_rest64gpr_26_t)	evldd 26,96(11)
+HIDDEN_FUNC(_rest64gpr_27_t)	evldd 27,104(11)
+HIDDEN_FUNC(_rest64gpr_28_t)	evldd 28,112(11)
+HIDDEN_FUNC(_rest64gpr_29_t)	evldd 29,120(11)
+HIDDEN_FUNC(_rest64gpr_30_t)	evldd 30,128(11)
+HIDDEN_FUNC(_rest64gpr_31_t)	lwz 0,148(11)
 				evldd 31,136(11)
 				addi 1,11,144
 				blr
Index: gcc/config/rs6000/e500crtresx32gpr.asm
===================================================================
--- gcc/config/rs6000/e500crtresx32gpr.asm	(revision 140940)
+++ gcc/config/rs6000/e500crtresx32gpr.asm	(working copy)
@@ -42,24 +42,24 @@
 /* Routines for restoring 32-bit integer registers, called by the compiler.  */
 /* "Exit" versions that return to the caller's caller.  */
 
-FUNC_START(_rest32gpr_14_x)	lwz 14,-72(11)
-FUNC_START(_rest32gpr_15_x)	lwz 15,-68(11)
-FUNC_START(_rest32gpr_16_x)	lwz 16,-64(11)
-FUNC_START(_rest32gpr_17_x)	lwz 17,-60(11)
-FUNC_START(_rest32gpr_18_x)	lwz 18,-56(11)
-FUNC_START(_rest32gpr_19_x)	lwz 19,-52(11)
-FUNC_START(_rest32gpr_20_x)	lwz 20,-48(11)
-FUNC_START(_rest32gpr_21_x)	lwz 21,-44(11)
-FUNC_START(_rest32gpr_22_x)	lwz 22,-40(11)
-FUNC_START(_rest32gpr_23_x)	lwz 23,-36(11)
-FUNC_START(_rest32gpr_24_x)	lwz 24,-32(11)
-FUNC_START(_rest32gpr_25_x)	lwz 25,-28(11)
-FUNC_START(_rest32gpr_26_x)	lwz 26,-24(11)
-FUNC_START(_rest32gpr_27_x)	lwz 27,-20(11)
-FUNC_START(_rest32gpr_28_x)	lwz 28,-16(11)
-FUNC_START(_rest32gpr_29_x)	lwz 29,-12(11)
-FUNC_START(_rest32gpr_30_x)	lwz 30,-8(11)
-FUNC_START(_rest32gpr_31_x)	lwz 0,4(11)
+HIDDEN_FUNC(_rest32gpr_14_x)	lwz 14,-72(11)
+HIDDEN_FUNC(_rest32gpr_15_x)	lwz 15,-68(11)
+HIDDEN_FUNC(_rest32gpr_16_x)	lwz 16,-64(11)
+HIDDEN_FUNC(_rest32gpr_17_x)	lwz 17,-60(11)
+HIDDEN_FUNC(_rest32gpr_18_x)	lwz 18,-56(11)
+HIDDEN_FUNC(_rest32gpr_19_x)	lwz 19,-52(11)
+HIDDEN_FUNC(_rest32gpr_20_x)	lwz 20,-48(11)
+HIDDEN_FUNC(_rest32gpr_21_x)	lwz 21,-44(11)
+HIDDEN_FUNC(_rest32gpr_22_x)	lwz 22,-40(11)
+HIDDEN_FUNC(_rest32gpr_23_x)	lwz 23,-36(11)
+HIDDEN_FUNC(_rest32gpr_24_x)	lwz 24,-32(11)
+HIDDEN_FUNC(_rest32gpr_25_x)	lwz 25,-28(11)
+HIDDEN_FUNC(_rest32gpr_26_x)	lwz 26,-24(11)
+HIDDEN_FUNC(_rest32gpr_27_x)	lwz 27,-20(11)
+HIDDEN_FUNC(_rest32gpr_28_x)	lwz 28,-16(11)
+HIDDEN_FUNC(_rest32gpr_29_x)	lwz 29,-12(11)
+HIDDEN_FUNC(_rest32gpr_30_x)	lwz 30,-8(11)
+HIDDEN_FUNC(_rest32gpr_31_x)	lwz 0,4(11)
 				lwz 31,-4(11)
 				mr 1,11
 				mtlr 0
Index: gcc/config/rs6000/e500crtresx64gpr.asm
===================================================================
--- gcc/config/rs6000/e500crtresx64gpr.asm	(revision 140940)
+++ gcc/config/rs6000/e500crtresx64gpr.asm	(working copy)
@@ -41,24 +41,24 @@
 
 /* "Exit" versions that return to their caller's caller.  */
 
-FUNC_START(_rest64gpr_14_x)	evldd 14,0(11)
-FUNC_START(_rest64gpr_15_x)	evldd 15,8(11)
-FUNC_START(_rest64gpr_16_x)	evldd 16,16(11)
-FUNC_START(_rest64gpr_17_x)	evldd 17,24(11)
-FUNC_START(_rest64gpr_18_x)	evldd 18,32(11)
-FUNC_START(_rest64gpr_19_x)	evldd 19,40(11)
-FUNC_START(_rest64gpr_20_x)	evldd 20,48(11)
-FUNC_START(_rest64gpr_21_x)	evldd 21,56(11)
-FUNC_START(_rest64gpr_22_x)	evldd 22,64(11)
-FUNC_START(_rest64gpr_23_x)	evldd 23,72(11)
-FUNC_START(_rest64gpr_24_x)	evldd 24,80(11)
-FUNC_START(_rest64gpr_25_x)	evldd 25,88(11)
-FUNC_START(_rest64gpr_26_x)	evldd 26,96(11)
-FUNC_START(_rest64gpr_27_x)	evldd 27,104(11)
-FUNC_START(_rest64gpr_28_x)	evldd 28,112(11)
-FUNC_START(_rest64gpr_29_x)	evldd 29,120(11)
-FUNC_START(_rest64gpr_30_x)	evldd 30,128(11)
-FUNC_START(_rest64gpr_31_x)	lwz 0,148(11)
+HIDDEN_FUNC(_rest64gpr_14_x)	evldd 14,0(11)
+HIDDEN_FUNC(_rest64gpr_15_x)	evldd 15,8(11)
+HIDDEN_FUNC(_rest64gpr_16_x)	evldd 16,16(11)
+HIDDEN_FUNC(_rest64gpr_17_x)	evldd 17,24(11)
+HIDDEN_FUNC(_rest64gpr_18_x)	evldd 18,32(11)
+HIDDEN_FUNC(_rest64gpr_19_x)	evldd 19,40(11)
+HIDDEN_FUNC(_rest64gpr_20_x)	evldd 20,48(11)
+HIDDEN_FUNC(_rest64gpr_21_x)	evldd 21,56(11)
+HIDDEN_FUNC(_rest64gpr_22_x)	evldd 22,64(11)
+HIDDEN_FUNC(_rest64gpr_23_x)	evldd 23,72(11)
+HIDDEN_FUNC(_rest64gpr_24_x)	evldd 24,80(11)
+HIDDEN_FUNC(_rest64gpr_25_x)	evldd 25,88(11)
+HIDDEN_FUNC(_rest64gpr_26_x)	evldd 26,96(11)
+HIDDEN_FUNC(_rest64gpr_27_x)	evldd 27,104(11)
+HIDDEN_FUNC(_rest64gpr_28_x)	evldd 28,112(11)
+HIDDEN_FUNC(_rest64gpr_29_x)	evldd 29,120(11)
+HIDDEN_FUNC(_rest64gpr_30_x)	evldd 30,128(11)
+HIDDEN_FUNC(_rest64gpr_31_x)	lwz 0,148(11)
 				evldd 31,136(11)
 				addi 1,11,144
 				mtlr 0
Index: gcc/config/rs6000/e500crtsav32gpr.asm
===================================================================
--- gcc/config/rs6000/e500crtsav32gpr.asm	(revision 140940)
+++ gcc/config/rs6000/e500crtsav32gpr.asm	(working copy)
@@ -42,24 +42,24 @@
 /* Routines for saving 32-bit integer registers, called by the compiler.  */
 /* "Bare" versions that simply return to their caller.  */
 
-FUNC_START(_save32gpr_14)	stw 14,-72(11)
-FUNC_START(_save32gpr_15)	stw 15,-68(11)
-FUNC_START(_save32gpr_16)	stw 16,-64(11)
-FUNC_START(_save32gpr_17)	stw 17,-60(11)
-FUNC_START(_save32gpr_18)	stw 18,-56(11)
-FUNC_START(_save32gpr_19)	stw 19,-52(11)
-FUNC_START(_save32gpr_20)	stw 20,-48(11)
-FUNC_START(_save32gpr_21)	stw 21,-44(11)
-FUNC_START(_save32gpr_22)	stw 22,-40(11)
-FUNC_START(_save32gpr_23)	stw 23,-36(11)
-FUNC_START(_save32gpr_24)	stw 24,-32(11)
-FUNC_START(_save32gpr_25)	stw 25,-28(11)
-FUNC_START(_save32gpr_26)	stw 26,-24(11)
-FUNC_START(_save32gpr_27)	stw 27,-20(11)
-FUNC_START(_save32gpr_28)	stw 28,-16(11)
-FUNC_START(_save32gpr_29)	stw 29,-12(11)
-FUNC_START(_save32gpr_30)	stw 30,-8(11)
-FUNC_START(_save32gpr_31)	stw 31,-4(11)
+HIDDEN_FUNC(_save32gpr_14)	stw 14,-72(11)
+HIDDEN_FUNC(_save32gpr_15)	stw 15,-68(11)
+HIDDEN_FUNC(_save32gpr_16)	stw 16,-64(11)
+HIDDEN_FUNC(_save32gpr_17)	stw 17,-60(11)
+HIDDEN_FUNC(_save32gpr_18)	stw 18,-56(11)
+HIDDEN_FUNC(_save32gpr_19)	stw 19,-52(11)
+HIDDEN_FUNC(_save32gpr_20)	stw 20,-48(11)
+HIDDEN_FUNC(_save32gpr_21)	stw 21,-44(11)
+HIDDEN_FUNC(_save32gpr_22)	stw 22,-40(11)
+HIDDEN_FUNC(_save32gpr_23)	stw 23,-36(11)
+HIDDEN_FUNC(_save32gpr_24)	stw 24,-32(11)
+HIDDEN_FUNC(_save32gpr_25)	stw 25,-28(11)
+HIDDEN_FUNC(_save32gpr_26)	stw 26,-24(11)
+HIDDEN_FUNC(_save32gpr_27)	stw 27,-20(11)
+HIDDEN_FUNC(_save32gpr_28)	stw 28,-16(11)
+HIDDEN_FUNC(_save32gpr_29)	stw 29,-12(11)
+HIDDEN_FUNC(_save32gpr_30)	stw 30,-8(11)
+HIDDEN_FUNC(_save32gpr_31)	stw 31,-4(11)
 				blr
 FUNC_END(_save32gpr_31)
 FUNC_END(_save32gpr_30)
Index: gcc/config/rs6000/e500crtsav64gpr.asm
===================================================================
--- gcc/config/rs6000/e500crtsav64gpr.asm	(revision 140940)
+++ gcc/config/rs6000/e500crtsav64gpr.asm	(working copy)
@@ -41,24 +41,24 @@
 
 /* Routines for saving 64-bit integer registers, called by the compiler.  */
 
-FUNC_START(_save64gpr_14)	evstdd 14,0(11)
-FUNC_START(_save64gpr_15)	evstdd 15,8(11)
-FUNC_START(_save64gpr_16)	evstdd 16,16(11)
-FUNC_START(_save64gpr_17)	evstdd 17,24(11)
-FUNC_START(_save64gpr_18)	evstdd 18,32(11)
-FUNC_START(_save64gpr_19)	evstdd 19,40(11)
-FUNC_START(_save64gpr_20)	evstdd 20,48(11)
-FUNC_START(_save64gpr_21)	evstdd 21,56(11)
-FUNC_START(_save64gpr_22)	evstdd 22,64(11)
-FUNC_START(_save64gpr_23)	evstdd 23,72(11)
-FUNC_START(_save64gpr_24)	evstdd 24,80(11)
-FUNC_START(_save64gpr_25)	evstdd 25,88(11)
-FUNC_START(_save64gpr_26)	evstdd 26,96(11)
-FUNC_START(_save64gpr_27)	evstdd 27,104(11)
-FUNC_START(_save64gpr_28)	evstdd 28,112(11)
-FUNC_START(_save64gpr_29)	evstdd 29,120(11)
-FUNC_START(_save64gpr_30)	evstdd 30,128(11)
-FUNC_START(_save64gpr_31)	evstdd 31,136(11)
+HIDDEN_FUNC(_save64gpr_14)	evstdd 14,0(11)
+HIDDEN_FUNC(_save64gpr_15)	evstdd 15,8(11)
+HIDDEN_FUNC(_save64gpr_16)	evstdd 16,16(11)
+HIDDEN_FUNC(_save64gpr_17)	evstdd 17,24(11)
+HIDDEN_FUNC(_save64gpr_18)	evstdd 18,32(11)
+HIDDEN_FUNC(_save64gpr_19)	evstdd 19,40(11)
+HIDDEN_FUNC(_save64gpr_20)	evstdd 20,48(11)
+HIDDEN_FUNC(_save64gpr_21)	evstdd 21,56(11)
+HIDDEN_FUNC(_save64gpr_22)	evstdd 22,64(11)
+HIDDEN_FUNC(_save64gpr_23)	evstdd 23,72(11)
+HIDDEN_FUNC(_save64gpr_24)	evstdd 24,80(11)
+HIDDEN_FUNC(_save64gpr_25)	evstdd 25,88(11)
+HIDDEN_FUNC(_save64gpr_26)	evstdd 26,96(11)
+HIDDEN_FUNC(_save64gpr_27)	evstdd 27,104(11)
+HIDDEN_FUNC(_save64gpr_28)	evstdd 28,112(11)
+HIDDEN_FUNC(_save64gpr_29)	evstdd 29,120(11)
+HIDDEN_FUNC(_save64gpr_30)	evstdd 30,128(11)
+HIDDEN_FUNC(_save64gpr_31)	evstdd 31,136(11)
 				blr
 FUNC_END(_save64gpr_31)
 FUNC_END(_save64gpr_30)
Index: gcc/config/rs6000/e500crtsav64gprctr.asm
===================================================================
--- gcc/config/rs6000/e500crtsav64gprctr.asm	(revision 140940)
+++ gcc/config/rs6000/e500crtsav64gprctr.asm	(working copy)
@@ -43,41 +43,41 @@
    registers to be saved is passed in CTR, called by the compiler.  */
 /* "Bare" versions that return to their caller.  */
 
-FUNC_START(_save64gpr_ctr_14)	evstdd 14,0(11)
+HIDDEN_FUNC(_save64gpr_ctr_14)	evstdd 14,0(11)
 				bdz _save64_gpr_ctr_done
-FUNC_START(_save64gpr_ctr_15)	evstdd 15,8(11)
+HIDDEN_FUNC(_save64gpr_ctr_15)	evstdd 15,8(11)
 				bdz _save64_gpr_ctr_done
-FUNC_START(_save64gpr_ctr_16)	evstdd 16,16(11)
+HIDDEN_FUNC(_save64gpr_ctr_16)	evstdd 16,16(11)
 				bdz _save64_gpr_ctr_done
-FUNC_START(_save64gpr_ctr_17)	evstdd 17,24(11)
+HIDDEN_FUNC(_save64gpr_ctr_17)	evstdd 17,24(11)
 				bdz _save64_gpr_ctr_done
-FUNC_START(_save64gpr_ctr_18)	evstdd 18,32(11)
+HIDDEN_FUNC(_save64gpr_ctr_18)	evstdd 18,32(11)
 				bdz _save64_gpr_ctr_done
-FUNC_START(_save64gpr_ctr_19)	evstdd 19,40(11)
+HIDDEN_FUNC(_save64gpr_ctr_19)	evstdd 19,40(11)
 				bdz _save64_gpr_ctr_done
-FUNC_START(_save64gpr_ctr_20)	evstdd 20,48(11)
+HIDDEN_FUNC(_save64gpr_ctr_20)	evstdd 20,48(11)
 				bdz _save64_gpr_ctr_done
-FUNC_START(_save64gpr_ctr_21)	evstdd 21,56(11)
+HIDDEN_FUNC(_save64gpr_ctr_21)	evstdd 21,56(11)
 				bdz _save64_gpr_ctr_done
-FUNC_START(_save64gpr_ctr_22)	evstdd 22,64(11)
+HIDDEN_FUNC(_save64gpr_ctr_22)	evstdd 22,64(11)
 				bdz _save64_gpr_ctr_done
-FUNC_START(_save64gpr_ctr_23)	evstdd 23,72(11)
+HIDDEN_FUNC(_save64gpr_ctr_23)	evstdd 23,72(11)
 				bdz _save64_gpr_ctr_done
-FUNC_START(_save64gpr_ctr_24)	evstdd 24,80(11)
+HIDDEN_FUNC(_save64gpr_ctr_24)	evstdd 24,80(11)
 				bdz _save64_gpr_ctr_done
-FUNC_START(_save64gpr_ctr_25)	evstdd 25,88(11)
+HIDDEN_FUNC(_save64gpr_ctr_25)	evstdd 25,88(11)
 				bdz _save64_gpr_ctr_done
-FUNC_START(_save64gpr_ctr_26)	evstdd 26,96(11)
+HIDDEN_FUNC(_save64gpr_ctr_26)	evstdd 26,96(11)
 				bdz _save64_gpr_ctr_done
-FUNC_START(_save64gpr_ctr_27)	evstdd 27,104(11)
+HIDDEN_FUNC(_save64gpr_ctr_27)	evstdd 27,104(11)
 				bdz _save64_gpr_ctr_done
-FUNC_START(_save64gpr_ctr_28)	evstdd 28,112(11)
+HIDDEN_FUNC(_save64gpr_ctr_28)	evstdd 28,112(11)
 				bdz _save64_gpr_ctr_done
-FUNC_START(_save64gpr_ctr_29)	evstdd 29,120(11)
+HIDDEN_FUNC(_save64gpr_ctr_29)	evstdd 29,120(11)
 				bdz _save64_gpr_ctr_done
-FUNC_START(_save64gpr_ctr_30)	evstdd 30,128(11)
+HIDDEN_FUNC(_save64gpr_ctr_30)	evstdd 30,128(11)
 				bdz _save64_gpr_ctr_done
-FUNC_START(_save64gpr_ctr_31)	evstdd 31,136(11)
+HIDDEN_FUNC(_save64gpr_ctr_31)	evstdd 31,136(11)
 _save64gpr_ctr_done:		blr
 FUNC_END(_save64gpr_ctr_31)
 FUNC_END(_save64gpr_ctr_30)
Index: gcc/config/rs6000/e500crtsavg32gpr.asm
===================================================================
--- gcc/config/rs6000/e500crtsavg32gpr.asm	(revision 140940)
+++ gcc/config/rs6000/e500crtsavg32gpr.asm	(working copy)
@@ -42,24 +42,24 @@
 /* Routines for saving 32-bit integer registers, called by the compiler.  */
 /* "GOT" versions that load the address of the GOT into lr before returning.  */
 
-FUNC_START(_save32gpr_14_g)	stw 14,-72(11)
-FUNC_START(_save32gpr_15_g)	stw 15,-68(11)
-FUNC_START(_save32gpr_16_g)	stw 16,-64(11)
-FUNC_START(_save32gpr_17_g)	stw 17,-60(11)
-FUNC_START(_save32gpr_18_g)	stw 18,-56(11)
-FUNC_START(_save32gpr_19_g)	stw 19,-52(11)
-FUNC_START(_save32gpr_20_g)	stw 20,-48(11)
-FUNC_START(_save32gpr_21_g)	stw 21,-44(11)
-FUNC_START(_save32gpr_22_g)	stw 22,-40(11)
-FUNC_START(_save32gpr_23_g)	stw 23,-36(11)
-FUNC_START(_save32gpr_24_g)	stw 24,-32(11)
-FUNC_START(_save32gpr_25_g)	stw 25,-28(11)
-FUNC_START(_save32gpr_26_g)	stw 26,-24(11)
-FUNC_START(_save32gpr_27_g)	stw 27,-20(11)
-FUNC_START(_save32gpr_28_g)	stw 28,-16(11)
-FUNC_START(_save32gpr_29_g)	stw 29,-12(11)
-FUNC_START(_save32gpr_30_g)	stw 30,-8(11)
-FUNC_START(_save32gpr_31_g)	stw 31,-4(11)
+HIDDEN_FUNC(_save32gpr_14_g)	stw 14,-72(11)
+HIDDEN_FUNC(_save32gpr_15_g)	stw 15,-68(11)
+HIDDEN_FUNC(_save32gpr_16_g)	stw 16,-64(11)
+HIDDEN_FUNC(_save32gpr_17_g)	stw 17,-60(11)
+HIDDEN_FUNC(_save32gpr_18_g)	stw 18,-56(11)
+HIDDEN_FUNC(_save32gpr_19_g)	stw 19,-52(11)
+HIDDEN_FUNC(_save32gpr_20_g)	stw 20,-48(11)
+HIDDEN_FUNC(_save32gpr_21_g)	stw 21,-44(11)
+HIDDEN_FUNC(_save32gpr_22_g)	stw 22,-40(11)
+HIDDEN_FUNC(_save32gpr_23_g)	stw 23,-36(11)
+HIDDEN_FUNC(_save32gpr_24_g)	stw 24,-32(11)
+HIDDEN_FUNC(_save32gpr_25_g)	stw 25,-28(11)
+HIDDEN_FUNC(_save32gpr_26_g)	stw 26,-24(11)
+HIDDEN_FUNC(_save32gpr_27_g)	stw 27,-20(11)
+HIDDEN_FUNC(_save32gpr_28_g)	stw 28,-16(11)
+HIDDEN_FUNC(_save32gpr_29_g)	stw 29,-12(11)
+HIDDEN_FUNC(_save32gpr_30_g)	stw 30,-8(11)
+HIDDEN_FUNC(_save32gpr_31_g)	stw 31,-4(11)
 				b _GLOBAL_OFFSET_TABLE_-4
 FUNC_END(_save32gpr_31_g)
 FUNC_END(_save32gpr_30_g)
Index: gcc/config/rs6000/e500crtsavg64gpr.asm
===================================================================
--- gcc/config/rs6000/e500crtsavg64gpr.asm	(revision 140940)
+++ gcc/config/rs6000/e500crtsavg64gpr.asm	(working copy)
@@ -42,24 +42,24 @@
 /* Routines for saving 64-bit integer registers, called by the compiler.  */
 /* "GOT" versions that load the address of the GOT into lr before returning.  */
 
-FUNC_START(_save64gpr_14_g)	evstdd 14,0(11)
-FUNC_START(_save64gpr_15_g)	evstdd 15,8(11)
-FUNC_START(_save64gpr_16_g)	evstdd 16,16(11)
-FUNC_START(_save64gpr_17_g)	evstdd 17,24(11)
-FUNC_START(_save64gpr_18_g)	evstdd 18,32(11)
-FUNC_START(_save64gpr_19_g)	evstdd 19,40(11)
-FUNC_START(_save64gpr_20_g)	evstdd 20,48(11)
-FUNC_START(_save64gpr_21_g)	evstdd 21,56(11)
-FUNC_START(_save64gpr_22_g)	evstdd 22,64(11)
-FUNC_START(_save64gpr_23_g)	evstdd 23,72(11)
-FUNC_START(_save64gpr_24_g)	evstdd 24,80(11)
-FUNC_START(_save64gpr_25_g)	evstdd 25,88(11)
-FUNC_START(_save64gpr_26_g)	evstdd 26,96(11)
-FUNC_START(_save64gpr_27_g)	evstdd 27,104(11)
-FUNC_START(_save64gpr_28_g)	evstdd 28,112(11)
-FUNC_START(_save64gpr_29_g)	evstdd 29,120(11)
-FUNC_START(_save64gpr_30_g)	evstdd 30,128(11)
-FUNC_START(_save64gpr_31_g)	evstdd 31,136(11)
+HIDDEN_FUNC(_save64gpr_14_g)	evstdd 14,0(11)
+HIDDEN_FUNC(_save64gpr_15_g)	evstdd 15,8(11)
+HIDDEN_FUNC(_save64gpr_16_g)	evstdd 16,16(11)
+HIDDEN_FUNC(_save64gpr_17_g)	evstdd 17,24(11)
+HIDDEN_FUNC(_save64gpr_18_g)	evstdd 18,32(11)
+HIDDEN_FUNC(_save64gpr_19_g)	evstdd 19,40(11)
+HIDDEN_FUNC(_save64gpr_20_g)	evstdd 20,48(11)
+HIDDEN_FUNC(_save64gpr_21_g)	evstdd 21,56(11)
+HIDDEN_FUNC(_save64gpr_22_g)	evstdd 22,64(11)
+HIDDEN_FUNC(_save64gpr_23_g)	evstdd 23,72(11)
+HIDDEN_FUNC(_save64gpr_24_g)	evstdd 24,80(11)
+HIDDEN_FUNC(_save64gpr_25_g)	evstdd 25,88(11)
+HIDDEN_FUNC(_save64gpr_26_g)	evstdd 26,96(11)
+HIDDEN_FUNC(_save64gpr_27_g)	evstdd 27,104(11)
+HIDDEN_FUNC(_save64gpr_28_g)	evstdd 28,112(11)
+HIDDEN_FUNC(_save64gpr_29_g)	evstdd 29,120(11)
+HIDDEN_FUNC(_save64gpr_30_g)	evstdd 30,128(11)
+HIDDEN_FUNC(_save64gpr_31_g)	evstdd 31,136(11)
 				b _GLOBAL_OFFSET_TABLE_-4
 FUNC_END(_save64gpr_31_g)
 FUNC_END(_save64gpr_30_g)
Index: gcc/config/rs6000/e500crtsavg64gprctr.asm
===================================================================
--- gcc/config/rs6000/e500crtsavg64gprctr.asm	(revision 140940)
+++ gcc/config/rs6000/e500crtsavg64gprctr.asm	(working copy)
@@ -42,41 +42,41 @@
 /* Routines for saving 64-bit integer registers, called by the compiler.  */
 /* "GOT" versions that load the address of the GOT into lr before returning.  */
 
-FUNC_START(_save64gpr_ctr_14_g)	evstdd 14,0(11)
+HIDDEN_FUNC(_save64gpr_ctr_14_g)	evstdd 14,0(11)
 				bdz _save64_gpr_ctr_g_done
-FUNC_START(_save64gpr_ctr_15_g)	evstdd 15,8(11)
+HIDDEN_FUNC(_save64gpr_ctr_15_g)	evstdd 15,8(11)
 				bdz _save64_gpr_ctr_g_done
-FUNC_START(_save64gpr_ctr_16_g)	evstdd 16,16(11)
+HIDDEN_FUNC(_save64gpr_ctr_16_g)	evstdd 16,16(11)
 				bdz _save64_gpr_ctr_g_done
-FUNC_START(_save64gpr_ctr_17_g)	evstdd 17,24(11)
+HIDDEN_FUNC(_save64gpr_ctr_17_g)	evstdd 17,24(11)
 				bdz _save64_gpr_ctr_g_done
-FUNC_START(_save64gpr_ctr_18_g)	evstdd 18,32(11)
+HIDDEN_FUNC(_save64gpr_ctr_18_g)	evstdd 18,32(11)
 				bdz _save64_gpr_ctr_g_done
-FUNC_START(_save64gpr_ctr_19_g)	evstdd 19,40(11)
+HIDDEN_FUNC(_save64gpr_ctr_19_g)	evstdd 19,40(11)
 				bdz _save64_gpr_ctr_g_done
-FUNC_START(_save64gpr_ctr_20_g)	evstdd 20,48(11)
+HIDDEN_FUNC(_save64gpr_ctr_20_g)	evstdd 20,48(11)
 				bdz _save64_gpr_ctr_g_done
-FUNC_START(_save64gpr_ctr_21_g)	evstdd 21,56(11)
+HIDDEN_FUNC(_save64gpr_ctr_21_g)	evstdd 21,56(11)
 				bdz _save64_gpr_ctr_g_done
-FUNC_START(_save64gpr_ctr_22_g)	evstdd 22,64(11)
+HIDDEN_FUNC(_save64gpr_ctr_22_g)	evstdd 22,64(11)
 				bdz _save64_gpr_ctr_g_done
-FUNC_START(_save64gpr_ctr_23_g)	evstdd 23,72(11)
+HIDDEN_FUNC(_save64gpr_ctr_23_g)	evstdd 23,72(11)
 				bdz _save64_gpr_ctr_g_done
-FUNC_START(_save64gpr_ctr_24_g)	evstdd 24,80(11)
+HIDDEN_FUNC(_save64gpr_ctr_24_g)	evstdd 24,80(11)
 				bdz _save64_gpr_ctr_g_done
-FUNC_START(_save64gpr_ctr_25_g)	evstdd 25,88(11)
+HIDDEN_FUNC(_save64gpr_ctr_25_g)	evstdd 25,88(11)
 				bdz _save64_gpr_ctr_g_done
-FUNC_START(_save64gpr_ctr_26_g)	evstdd 26,96(11)
+HIDDEN_FUNC(_save64gpr_ctr_26_g)	evstdd 26,96(11)
 				bdz _save64_gpr_ctr_g_done
-FUNC_START(_save64gpr_ctr_27_g)	evstdd 27,104(11)
+HIDDEN_FUNC(_save64gpr_ctr_27_g)	evstdd 27,104(11)
 				bdz _save64_gpr_ctr_g_done
-FUNC_START(_save64gpr_ctr_28_g)	evstdd 28,112(11)
+HIDDEN_FUNC(_save64gpr_ctr_28_g)	evstdd 28,112(11)
 				bdz _save64_gpr_ctr_g_done
-FUNC_START(_save64gpr_ctr_29_g)	evstdd 29,120(11)
+HIDDEN_FUNC(_save64gpr_ctr_29_g)	evstdd 29,120(11)
 				bdz _save64_gpr_ctr_g_done
-FUNC_START(_save64gpr_ctr_30_g)	evstdd 30,128(11)
+HIDDEN_FUNC(_save64gpr_ctr_30_g)	evstdd 30,128(11)
 				bdz _save64_gpr_ctr_g_done
-FUNC_START(_save64gpr_ctr_31_g)	evstdd 31,136(11)
+HIDDEN_FUNC(_save64gpr_ctr_31_g)	evstdd 31,136(11)
 _save64gpr_ctr_g_done:		b _GLOBAL_OFFSET_TABLE_-4
 FUNC_END(_save64gpr_ctr_31_g)
 FUNC_END(_save64gpr_ctr_30_g)
Index: gcc/config/rs6000/ppc-asm.h
===================================================================
--- gcc/config/rs6000/ppc-asm.h	(revision 140940)
+++ gcc/config/rs6000/ppc-asm.h	(working copy)
@@ -110,6 +110,11 @@ name: \
 	.globl GLUE(.,name); \
 GLUE(.,name):
 
+#define HIDDEN_FUNC(name) \
+  FUNC_START(name) \
+  .hidden name;	\
+  .hidden GLUE(.,name);
+
 #define FUNC_END(name) \
 GLUE(.L,name): \
 	.size GLUE(.,name),GLUE(.L,name)-GLUE(.,name)
@@ -136,6 +141,11 @@ name: \
 	.globl GLUE(.,name); \
 GLUE(.,name):
 
+#define HIDDEN_FUNC(name) \
+  FUNC_START(name) \
+  .hidden name; \
+  .hidden GLUE(.,name);
+
 #define FUNC_END(name) \
 GLUE(.L,name): \
 	.size GLUE(.,name),GLUE(.L,name)-GLUE(.,name)
@@ -153,6 +163,10 @@ GLUE(.L,name): \
 	.globl FUNC_NAME(name); \
 FUNC_NAME(name):
 
+#define HIDDEN_FUNC(name) \
+  FUNC_START(name) \
+  .hidden FUNC_NAME(name);
+
 #define FUNC_END(name) \
 GLUE(.L,name): \
 	.size FUNC_NAME(name),GLUE(.L,name)-FUNC_NAME(name)

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [PATCH, rs6000] fix visibility problems for out-of-line prologues/epilogues
  2008-10-07 17:51 [PATCH, rs6000] fix visibility problems for out-of-line prologues/epilogues Nathan Froyd
@ 2008-10-07 19:54 ` Andrew Pinski
  2008-10-07 20:07 ` Jakub Jelinek
  1 sibling, 0 replies; 11+ messages in thread
From: Andrew Pinski @ 2008-10-07 19:54 UTC (permalink / raw)
  To: gcc-patches, dje

On Tue, Oct 7, 2008 at 10:45 AM, Nathan Froyd <froydnj@codesourcery.com> wrote:
> The patch below solves a problem related to the visibility of the
> out-of-line prologue/epilogue functions.  These functions are called by
> the compiler at -Os; since they have non-standard calling conventions,
> they are placed into static libgcc.a.  However, they have default
> visibility on ELF systems, which leads to the following failure mode:
>
>  gcc -Os -c -o libcode.o libcode.c
>
> libcode.o now calls the out-of-line prologue/epilogue functions.
>
>  gcc -Os -shared -o libcode.so.1 -Wl,-soname,libcode.so.1

Shouldn't libcode.o be compiled with -fPIC?

Thanks,
Andrew Pinski

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [PATCH, rs6000] fix visibility problems for out-of-line  prologues/epilogues
  2008-10-07 17:51 [PATCH, rs6000] fix visibility problems for out-of-line prologues/epilogues Nathan Froyd
  2008-10-07 19:54 ` Andrew Pinski
@ 2008-10-07 20:07 ` Jakub Jelinek
  2008-10-07 20:13   ` Nathan Froyd
  1 sibling, 1 reply; 11+ messages in thread
From: Jakub Jelinek @ 2008-10-07 20:07 UTC (permalink / raw)
  To: gcc-patches, dje

On Tue, Oct 07, 2008 at 10:45:17AM -0700, Nathan Froyd wrote:
> The patch below solves a problem related to the visibility of the
> out-of-line prologue/epilogue functions.  These functions are called by
> the compiler at -Os; since they have non-standard calling conventions,
> they are placed into static libgcc.a.  However, they have default
> visibility on ELF systems, which leads to the following failure mode:

Many eons ago gas didn't support .hidden, do we still support such old
binutils and if yes, shouldn't you add .hidden only if HAVE_GAS_HIDDEN
is defined?

	Jakub

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [PATCH, rs6000] fix visibility problems for out-of-line  prologues/epilogues
  2008-10-07 20:07 ` Jakub Jelinek
@ 2008-10-07 20:13   ` Nathan Froyd
  2008-10-07 20:49     ` Jakub Jelinek
  0 siblings, 1 reply; 11+ messages in thread
From: Nathan Froyd @ 2008-10-07 20:13 UTC (permalink / raw)
  To: Jakub Jelinek; +Cc: gcc-patches, dje

On Tue, Oct 07, 2008 at 09:53:55PM +0200, Jakub Jelinek wrote:
> On Tue, Oct 07, 2008 at 10:45:17AM -0700, Nathan Froyd wrote:
> > The patch below solves a problem related to the visibility of the
> > out-of-line prologue/epilogue functions.  These functions are called by
> > the compiler at -Os; since they have non-standard calling conventions,
> > they are placed into static libgcc.a.  However, they have default
> > visibility on ELF systems, which leads to the following failure mode:
> 
> Many eons ago gas didn't support .hidden, do we still support such old
> binutils and if yes, shouldn't you add .hidden only if HAVE_GAS_HIDDEN
> is defined?

SH and Xtensa, at least, use .hidden unguarded by #if in some
configurations.  So I suppose it's David's call as to whether he wants
to continue support for old (non-.hidden) binutils in the rs6000
backend.  David?

-Nathan

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [PATCH, rs6000] fix visibility problems for out-of-line  prologues/epilogues
  2008-10-07 20:13   ` Nathan Froyd
@ 2008-10-07 20:49     ` Jakub Jelinek
  0 siblings, 0 replies; 11+ messages in thread
From: Jakub Jelinek @ 2008-10-07 20:49 UTC (permalink / raw)
  To: gcc-patches, dje

On Tue, Oct 07, 2008 at 01:07:07PM -0700, Nathan Froyd wrote:
> On Tue, Oct 07, 2008 at 09:53:55PM +0200, Jakub Jelinek wrote:
> > On Tue, Oct 07, 2008 at 10:45:17AM -0700, Nathan Froyd wrote:
> > > The patch below solves a problem related to the visibility of the
> > > out-of-line prologue/epilogue functions.  These functions are called by
> > > the compiler at -Os; since they have non-standard calling conventions,
> > > they are placed into static libgcc.a.  However, they have default
> > > visibility on ELF systems, which leads to the following failure mode:
> > 
> > Many eons ago gas didn't support .hidden, do we still support such old
> > binutils and if yes, shouldn't you add .hidden only if HAVE_GAS_HIDDEN
> > is defined?
> 
> SH and Xtensa, at least, use .hidden unguarded by #if in some
> configurations.  So I suppose it's David's call as to whether he wants
> to continue support for old (non-.hidden) binutils in the rs6000
> backend.  David?

In the Xtensa case that's understandable, as xtensa support has been added
to binutils more than 3 years after .hidden support (the latter 2000-01-03,
the former 2003-04-01).

	Jakub

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [PATCH, rs6000] fix visibility problems for out-of-line   prologues/epilogues
  2008-10-08 14:32   ` Nathan Froyd
  2008-10-08 19:02     ` David Edelsohn
@ 2008-10-13  5:25     ` Gerald Pfeifer
  1 sibling, 0 replies; 11+ messages in thread
From: Gerald Pfeifer @ 2008-10-13  5:25 UTC (permalink / raw)
  To: Nathan Froyd; +Cc: David Edelsohn, GCC Patches, amodra

On Wed, 8 Oct 2008, Nathan Froyd wrote:
> Gerald, is the patch OK?  David/Alan, OK to require 2.15 for all PowerPC 
> targets?

Yes, this looks fine.

> 	* doc/install.texi (powerpc-*-*): Require binutils 2.15.
> 	(powerpc*-*-linux-gnu*): Describe.

I had thought you'd commit this based on David's response, but it
doesn't seem to have made it to SVN, so I figured I'd confirm this. ;-)

Gerald

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [PATCH, rs6000] fix visibility problems for out-of-line prologues/epilogues
  2008-10-08 14:32   ` Nathan Froyd
@ 2008-10-08 19:02     ` David Edelsohn
  2008-10-13  5:25     ` Gerald Pfeifer
  1 sibling, 0 replies; 11+ messages in thread
From: David Edelsohn @ 2008-10-08 19:02 UTC (permalink / raw)
  To: David Edelsohn, GCC Patches, amodra, gerald

On Wed, Oct 8, 2008 at 10:02 AM, Nathan Froyd <froydnj@codesourcery.com> wrote:
> On Wed, Oct 08, 2008 at 02:43:19PM +1030, Alan Modra wrote:
>> On Tue, Oct 07, 2008 at 05:31:01PM -0400, David Edelsohn wrote:
>> > Alan, do you have any opinion about guarding the use of .hidden so that GCC
>> > can work with older versions of Binutils?
>>
>> I wouldn't even try.  Just add a note in doc/install.texi specifying
>> the minimum binutils version for targets affected by this change.
>
> Patch to doc/install.texi below, which I'll install as part of the
> patch.  It looks like Linux targets already required binutils 2.15,
> which includes .hidden support.  I just made it mandatory for all
> PowerPC targets; I'm happy to lower it for PowerPC targets generally (to
> pick up .hidden support) and still require 2.15 for Linux targets.
>
> Gerald, is the patch OK?  David/Alan, OK to require 2.15 for all PowerPC
> targets?

Fine with me.

Thanks, David

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [PATCH, rs6000] fix visibility problems for out-of-line  prologues/epilogues
  2008-10-08  5:09 ` Alan Modra
@ 2008-10-08 14:32   ` Nathan Froyd
  2008-10-08 19:02     ` David Edelsohn
  2008-10-13  5:25     ` Gerald Pfeifer
  0 siblings, 2 replies; 11+ messages in thread
From: Nathan Froyd @ 2008-10-08 14:32 UTC (permalink / raw)
  To: David Edelsohn, GCC Patches; +Cc: amodra, gerald

On Wed, Oct 08, 2008 at 02:43:19PM +1030, Alan Modra wrote:
> On Tue, Oct 07, 2008 at 05:31:01PM -0400, David Edelsohn wrote:
> > Alan, do you have any opinion about guarding the use of .hidden so that GCC
> > can work with older versions of Binutils?
> 
> I wouldn't even try.  Just add a note in doc/install.texi specifying
> the minimum binutils version for targets affected by this change.

Patch to doc/install.texi below, which I'll install as part of the
patch.  It looks like Linux targets already required binutils 2.15,
which includes .hidden support.  I just made it mandatory for all
PowerPC targets; I'm happy to lower it for PowerPC targets generally (to
pick up .hidden support) and still require 2.15 for Linux targets.

Gerald, is the patch OK?  David/Alan, OK to require 2.15 for all PowerPC
targets?

> Incidentally, why do we still have crtsavres.asm?  It looks like it should
> have disappeared here:
> 
> 2008-04-30  Nathan Froyd  <froydnj@codesourcery.com>

Yup, silly me.  I'll really delete it when I commit this patch.

-Nathan

	* doc/install.texi (powerpc-*-*): Require binutils 2.15.
	(powerpc*-*-linux-gnu*): Describe.

Index: gcc/doc/install.texi
===================================================================
--- gcc/doc/install.texi	(revision 140940)
+++ gcc/doc/install.texi	(working copy)
@@ -3653,6 +3653,10 @@ information about using GCC on IRIX plat
 You can specify a default version for the @option{-mcpu=@var{cpu_type}}
 switch by using the configure option @option{--with-cpu-@var{cpu_type}}.
 
+You will need
+@uref{ftp://ftp.kernel.org/pub/linux/devel/binutils,,binutils 2.15}
+or newer for a working GCC@.
+
 @html
 <hr />
 @end html
@@ -3681,9 +3685,7 @@ PowerPC system in big endian mode, runni
 @end html
 @heading @anchor{powerpc-x-linux-gnu}powerpc*-*-linux-gnu*
 
-You will need
-@uref{ftp://ftp.kernel.org/pub/linux/devel/binutils,,binutils 2.15}
-or newer for a working GCC@.
+PowerPC system in big endian mode running Linux.
 
 @html
 <hr />

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [PATCH, rs6000] fix visibility problems for out-of-line  prologues/epilogues
  2008-10-07 23:40 David Edelsohn
@ 2008-10-08  5:09 ` Alan Modra
  2008-10-08 14:32   ` Nathan Froyd
  0 siblings, 1 reply; 11+ messages in thread
From: Alan Modra @ 2008-10-08  5:09 UTC (permalink / raw)
  To: David Edelsohn; +Cc: Jakub Jelinek, GCC Patches

On Tue, Oct 07, 2008 at 05:31:01PM -0400, David Edelsohn wrote:
> Alan, do you have any opinion about guarding the use of .hidden so that GCC
> can work with older versions of Binutils?

I wouldn't even try.  Just add a note in doc/install.texi specifying
the minimum binutils version for targets affected by this change.

Incidentally, why do we still have crtsavres.asm?  It looks like it should
have disappeared here:

2008-04-30  Nathan Froyd  <froydnj@codesourcery.com>

        * config/rs6000/crtresgpr.asm, config/rs6000/crtresxgpr.asm,
        config/rs6000/crtsavgpr.asm, config/rs6000/crtresfpr.asm,
        config/rs6000/crtresxfpr.asm, config/rs6000/crtsavfpr.asm: Break out
        from...
        * config/rs6000/crtsavres.asm: ...here.  Remove unneeded file.

-- 
Alan Modra
Australia Development Lab, IBM

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [PATCH, rs6000] fix visibility problems for out-of-line prologues/epilogues
@ 2008-10-07 23:40 David Edelsohn
  2008-10-08  5:09 ` Alan Modra
  0 siblings, 1 reply; 11+ messages in thread
From: David Edelsohn @ 2008-10-07 23:40 UTC (permalink / raw)
  To: Jakub Jelinek, Alan Modra; +Cc: GCC Patches

>>>>> Jakub Jelinek writes:
> On Tue, Oct 07, 2008 at 01:07:07PM -0700, Nathan Froyd wrote:
> > On Tue, Oct 07, 2008 at 09:53:55PM +0200, Jakub Jelinek wrote:
> > > On Tue, Oct 07, 2008 at 10:45:17AM -0700, Nathan Froyd wrote:
> > > > The patch below solves a problem related to the visibility of the
> > > > out-of-line prologue/epilogue functions.  These functions are called by
> > > > the compiler at -Os; since they have non-standard calling conventions,
> > > > they are placed into static libgcc.a.  However, they have default
> > > > visibility on ELF systems, which leads to the following failure mode:
> > >
> > > Many eons ago gas didn't support .hidden, do we still support such old
> > > binutils and if yes, shouldn't you add .hidden only if HAVE_GAS_HIDDEN
> > > is defined?
> >
> > SH and Xtensa, at least, use .hidden unguarded by #if in some
> > configurations.  So I suppose it's David's call as to whether he wants
> > to continue support for old (non-.hidden) binutils in the rs6000
> > backend.  David?
>
> In the Xtensa case that's understandable, as xtensa support has been added
> to binutils more than 3 years after .hidden support (the latter 2000-01-03,
> the former 2003-04-01).

The patch is for GCC 4.4, not earlier releases.  There are plenty of features
in the rs6000 port that require newer versions of Binutils, but GCC probably
can work with older Binutils.

Alan, do you have any opinion about guarding the use of .hidden so that GCC
can work with older versions of Binutils?

Thanks, David

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [PATCH, rs6000] fix visibility problems for out-of-line prologues/epilogues
@ 2008-10-07 19:29 David Edelsohn
  0 siblings, 0 replies; 11+ messages in thread
From: David Edelsohn @ 2008-10-07 19:29 UTC (permalink / raw)
  To: Nathan Froyd; +Cc: GCC Patches

        * config/rs6000/ppc-asm.h (HIDDEN_FUNC): New macro.
        * config/rs6000/crtresfpr.asm, config/rs6000/crtresgpr.asm,
...

Okay.

> I realize that doing this potentially breaks applications that were
> using the symbol.  However, if you were using the symbol, then things
> were broken anyway.

Yep.

Thanks, David

^ permalink raw reply	[flat|nested] 11+ messages in thread

end of thread, other threads:[~2008-10-13  3:24 UTC | newest]

Thread overview: 11+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2008-10-07 17:51 [PATCH, rs6000] fix visibility problems for out-of-line prologues/epilogues Nathan Froyd
2008-10-07 19:54 ` Andrew Pinski
2008-10-07 20:07 ` Jakub Jelinek
2008-10-07 20:13   ` Nathan Froyd
2008-10-07 20:49     ` Jakub Jelinek
2008-10-07 19:29 David Edelsohn
2008-10-07 23:40 David Edelsohn
2008-10-08  5:09 ` Alan Modra
2008-10-08 14:32   ` Nathan Froyd
2008-10-08 19:02     ` David Edelsohn
2008-10-13  5:25     ` Gerald Pfeifer

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).