Message ID | 20120706170940.e3457b04a58ddd18d963c14a@canb.auug.org.au (mailing list archive) |
---|---|
State | Accepted, archived |
Commit | 1d5a436d2ce9d1b65c905f69a33e78d69245993e |
Delegated to: | Benjamin Herrenschmidt |
Headers | show |
On Fri, 2012-07-06 at 17:09 +1000, Stephen Rothwell wrote: > This allows the linker to know that calls to them do not need to switch > TOC and stop errors like the following when linking large configurations: > arch/powerpc/lib/crtsavres.S | 5 ++++- You didn't make any change to the linker script? How does this section get in there? I don't see a .text* anywhere? > diff --git a/arch/powerpc/lib/crtsavres.S b/arch/powerpc/lib/crtsavres.S > index 1c893f0..b2c68ce 100644 > --- a/arch/powerpc/lib/crtsavres.S > +++ b/arch/powerpc/lib/crtsavres.S > @@ -41,12 +41,13 @@ > #include <asm/ppc_asm.h> > > .file "crtsavres.S" > - .section ".text" > > #ifdef CONFIG_CC_OPTIMIZE_FOR_SIZE > > #ifndef CONFIG_PPC64 > > + .section ".text" > + > /* Routines for saving integer registers, called by the compiler. */ > /* Called with r11 pointing to the stack header word of the caller of the */ > /* function, just beyond the end of the integer save area. */ > @@ -232,6 +233,8 @@ _GLOBAL(_rest32gpr_31_x) > > #else /* CONFIG_PPC64 */ > > + .section ".text.save.restore","ax",@progbits > + > .globl _savegpr0_14 > _savegpr0_14: > std r14,-144(r1) Any reason to not put the 32-bit versions in the same section? AFAICS nothing in that file uses the TOC. cheers
Hi Michael, On Sat, 07 Jul 2012 16:55:21 +1000 Michael Ellerman <michael@ellerman.id.au> wrote: > > On Fri, 2012-07-06 at 17:09 +1000, Stephen Rothwell wrote: > > This allows the linker to know that calls to them do not need to switch > > TOC and stop errors like the following when linking large configurations: > > > arch/powerpc/lib/crtsavres.S | 5 ++++- > > You didn't make any change to the linker script? How does this section > get in there? I don't see a .text* anywhere? Yeah. ld just seems to figure it out (I note that we also have sections called .text.unlikely and .text.startup). > > diff --git a/arch/powerpc/lib/crtsavres.S b/arch/powerpc/lib/crtsavres.S > > index 1c893f0..b2c68ce 100644 > > --- a/arch/powerpc/lib/crtsavres.S > > +++ b/arch/powerpc/lib/crtsavres.S > > @@ -41,12 +41,13 @@ > > #include <asm/ppc_asm.h> > > > > .file "crtsavres.S" > > - .section ".text" > > > > #ifdef CONFIG_CC_OPTIMIZE_FOR_SIZE > > > > #ifndef CONFIG_PPC64 > > > > + .section ".text" > > + > > /* Routines for saving integer registers, called by the compiler. */ > > /* Called with r11 pointing to the stack header word of the caller of the */ > > /* function, just beyond the end of the integer save area. */ > > @@ -232,6 +233,8 @@ _GLOBAL(_rest32gpr_31_x) > > > > #else /* CONFIG_PPC64 */ > > > > + .section ".text.save.restore","ax",@progbits > > + > > .globl _savegpr0_14 > > _savegpr0_14: > > std r14,-144(r1) > > Any reason to not put the 32-bit versions in the same section? AFAICS > nothing in that file uses the TOC. 32 bit does not use a toc (apparently). And I figured to make the minimal change to the output.
diff --git a/arch/powerpc/lib/crtsavres.S b/arch/powerpc/lib/crtsavres.S index 1c893f0..b2c68ce 100644 --- a/arch/powerpc/lib/crtsavres.S +++ b/arch/powerpc/lib/crtsavres.S @@ -41,12 +41,13 @@ #include <asm/ppc_asm.h> .file "crtsavres.S" - .section ".text" #ifdef CONFIG_CC_OPTIMIZE_FOR_SIZE #ifndef CONFIG_PPC64 + .section ".text" + /* Routines for saving integer registers, called by the compiler. */ /* Called with r11 pointing to the stack header word of the caller of the */ /* function, just beyond the end of the integer save area. */ @@ -232,6 +233,8 @@ _GLOBAL(_rest32gpr_31_x) #else /* CONFIG_PPC64 */ + .section ".text.save.restore","ax",@progbits + .globl _savegpr0_14 _savegpr0_14: std r14,-144(r1)
This allows the linker to know that calls to them do not need to switch TOC and stop errors like the following when linking large configurations: powerpc64-linux-ld: drivers/built-in.o: In function `.gpiochip_is_requested': (.text+0x4): sibling call optimization to `_savegpr0_29' does not allow automatic multiple TOCs; recompile with -mminimal-toc or -fno-optimize-sibling-calls, or make `_savegpr0_29' extern Signed-off-by: Stephen Rothwell <sfr@canb.auug.org.au> --- arch/powerpc/lib/crtsavres.S | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-)