* [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).