* [PATCH] powerpc: fpr save/restore function cleanups
@ 2016-11-01 4:22 Nicholas Piggin
2016-11-01 4:41 ` Nicholas Piggin
` (2 more replies)
0 siblings, 3 replies; 6+ messages in thread
From: Nicholas Piggin @ 2016-11-01 4:22 UTC (permalink / raw)
To: linuxppc-dev; +Cc: Nicholas Piggin, Stephen Rothwell, Alan Modra
The powerpc64 linker generates fpr save/restore functions on-demand,
placing them in the .sfpr section. So remove the explicitly coded ones
from the 64 build.
Have 32-bit put save/restore functions into .sfpr section rather than
.text, to match 64-bit.
And explicitly have the linker script place the section rather than
leaving it as orphan.
Signed-off-by: Nicholas Piggin <npiggin@gmail.com>
---
I tested this with 64-bit optimize-for-size build with modules,
and that works okay. 32-bit optimize-for-size builds.
This should go ahead of the linker-orphan-sections patch, and
that patch should no longer add .sfpr section.
Thanks,
Nick
arch/powerpc/Makefile | 2 +
arch/powerpc/boot/Makefile | 3 +-
arch/powerpc/boot/crtsavres.S | 3 +-
arch/powerpc/kernel/vmlinux.lds.S | 6 +
arch/powerpc/lib/Makefile | 5 +-
arch/powerpc/lib/crtsavres.S | 238 +-------------------------------------
6 files changed, 16 insertions(+), 241 deletions(-)
diff --git a/arch/powerpc/Makefile b/arch/powerpc/Makefile
index fe76cfe..c506f1e 100644
--- a/arch/powerpc/Makefile
+++ b/arch/powerpc/Makefile
@@ -179,7 +179,9 @@ else
CHECKFLAGS += -D__LITTLE_ENDIAN__
endif
+ifeq ($(CONFIG_PPC32),y)
KBUILD_LDFLAGS_MODULE += arch/powerpc/lib/crtsavres.o
+endif
ifeq ($(CONFIG_476FPE_ERR46),y)
KBUILD_LDFLAGS_MODULE += --ppc476-workaround \
diff --git a/arch/powerpc/boot/Makefile b/arch/powerpc/boot/Makefile
index eae2dc8..6abee93 100644
--- a/arch/powerpc/boot/Makefile
+++ b/arch/powerpc/boot/Makefile
@@ -95,12 +95,13 @@ libfdtheader := fdt.h libfdt.h libfdt_internal.h
$(addprefix $(obj)/,$(libfdt) libfdt-wrapper.o simpleboot.o epapr.o opal.o): \
$(addprefix $(obj)/,$(libfdtheader))
-src-wlib-y := string.S crt0.S crtsavres.S stdio.c decompress.c main.c \
+src-wlib-y := string.S crt0.S stdio.c decompress.c main.c \
$(libfdt) libfdt-wrapper.c \
ns16550.c serial.c simple_alloc.c div64.S util.S \
elf_util.c $(zlib-y) devtree.c stdlib.c \
oflib.c ofconsole.c cuboot.c mpsc.c cpm-serial.c \
uartlite.c mpc52xx-psc.c opal.c opal-calls.S
+src-wlib-$(CONFIG_PPC32) += crtsavres.S
src-wlib-$(CONFIG_40x) += 4xx.c planetcore.c
src-wlib-$(CONFIG_44x) += 4xx.c ebony.c bamboo.c
src-wlib-$(CONFIG_8xx) += mpc8xx.c planetcore.c fsl-soc.c
diff --git a/arch/powerpc/boot/crtsavres.S b/arch/powerpc/boot/crtsavres.S
index f3d9b35..8c77437 100644
--- a/arch/powerpc/boot/crtsavres.S
+++ b/arch/powerpc/boot/crtsavres.S
@@ -38,10 +38,9 @@
*/
.file "crtsavres.S"
- .section ".text"
+ .section ".sfpr","ax",@progbits
/* On PowerPC64 Linux, these functions are provided by the linker. */
-#ifndef __powerpc64__
#define _GLOBAL(name) \
.type name,@function; \
diff --git a/arch/powerpc/kernel/vmlinux.lds.S b/arch/powerpc/kernel/vmlinux.lds.S
index a09c666..63775d9 100644
--- a/arch/powerpc/kernel/vmlinux.lds.S
+++ b/arch/powerpc/kernel/vmlinux.lds.S
@@ -84,6 +84,12 @@ SECTIONS
KPROBES_TEXT
IRQENTRY_TEXT
SOFTIRQENTRY_TEXT
+ /*
+ * Linker puts .sfpr at the beginning of a group of input
+ * sections, which can break start-of-text offset if it is
+ * included with the main text sections.
+ */
+ *(.sfpr);
MEM_KEEP(init.text)
MEM_KEEP(exit.text)
diff --git a/arch/powerpc/lib/Makefile b/arch/powerpc/lib/Makefile
index 309361e8..b1304113 100644
--- a/arch/powerpc/lib/Makefile
+++ b/arch/powerpc/lib/Makefile
@@ -9,10 +9,9 @@ ccflags-$(CONFIG_PPC64) := $(NO_MINIMAL_TOC)
CFLAGS_REMOVE_code-patching.o = $(CC_FLAGS_FTRACE)
CFLAGS_REMOVE_feature-fixups.o = $(CC_FLAGS_FTRACE)
-obj-y += string.o alloc.o crtsavres.o code-patching.o \
- feature-fixups.o
+obj-y += string.o alloc.o code-patching.o feature-fixups.o
-obj-$(CONFIG_PPC32) += div64.o copy_32.o
+obj-$(CONFIG_PPC32) += div64.o copy_32.o crtsavres.o
obj64-y += copypage_64.o copyuser_64.o usercopy_64.o mem_64.o hweight_64.o \
copyuser_power7.o string_64.o copypage_power7.o memcpy_power7.o \
diff --git a/arch/powerpc/lib/crtsavres.S b/arch/powerpc/lib/crtsavres.S
index 18af0b3..0c6ea3b 100644
--- a/arch/powerpc/lib/crtsavres.S
+++ b/arch/powerpc/lib/crtsavres.S
@@ -42,11 +42,11 @@
.file "crtsavres.S"
-#ifdef CONFIG_CC_OPTIMIZE_FOR_SIZE
+/* On PowerPC64 Linux, these functions are provided by the linker. */
-#ifndef CONFIG_PPC64
+#ifdef CONFIG_CC_OPTIMIZE_FOR_SIZE
- .section ".text"
+ .section ".sfpr","ax",@progbits
/* Routines for saving integer registers, called by the compiler. */
/* Called with r11 pointing to the stack header word of the caller of the */
@@ -312,236 +312,4 @@ _GLOBAL(_restvr_31)
#endif /* CONFIG_ALTIVEC */
-#else /* CONFIG_PPC64 */
-
- .section ".text.save.restore","ax",@progbits
-
-.globl _savegpr0_14
-_savegpr0_14:
- std r14,-144(r1)
-.globl _savegpr0_15
-_savegpr0_15:
- std r15,-136(r1)
-.globl _savegpr0_16
-_savegpr0_16:
- std r16,-128(r1)
-.globl _savegpr0_17
-_savegpr0_17:
- std r17,-120(r1)
-.globl _savegpr0_18
-_savegpr0_18:
- std r18,-112(r1)
-.globl _savegpr0_19
-_savegpr0_19:
- std r19,-104(r1)
-.globl _savegpr0_20
-_savegpr0_20:
- std r20,-96(r1)
-.globl _savegpr0_21
-_savegpr0_21:
- std r21,-88(r1)
-.globl _savegpr0_22
-_savegpr0_22:
- std r22,-80(r1)
-.globl _savegpr0_23
-_savegpr0_23:
- std r23,-72(r1)
-.globl _savegpr0_24
-_savegpr0_24:
- std r24,-64(r1)
-.globl _savegpr0_25
-_savegpr0_25:
- std r25,-56(r1)
-.globl _savegpr0_26
-_savegpr0_26:
- std r26,-48(r1)
-.globl _savegpr0_27
-_savegpr0_27:
- std r27,-40(r1)
-.globl _savegpr0_28
-_savegpr0_28:
- std r28,-32(r1)
-.globl _savegpr0_29
-_savegpr0_29:
- std r29,-24(r1)
-.globl _savegpr0_30
-_savegpr0_30:
- std r30,-16(r1)
-.globl _savegpr0_31
-_savegpr0_31:
- std r31,-8(r1)
- std r0,16(r1)
- blr
-
-.globl _restgpr0_14
-_restgpr0_14:
- ld r14,-144(r1)
-.globl _restgpr0_15
-_restgpr0_15:
- ld r15,-136(r1)
-.globl _restgpr0_16
-_restgpr0_16:
- ld r16,-128(r1)
-.globl _restgpr0_17
-_restgpr0_17:
- ld r17,-120(r1)
-.globl _restgpr0_18
-_restgpr0_18:
- ld r18,-112(r1)
-.globl _restgpr0_19
-_restgpr0_19:
- ld r19,-104(r1)
-.globl _restgpr0_20
-_restgpr0_20:
- ld r20,-96(r1)
-.globl _restgpr0_21
-_restgpr0_21:
- ld r21,-88(r1)
-.globl _restgpr0_22
-_restgpr0_22:
- ld r22,-80(r1)
-.globl _restgpr0_23
-_restgpr0_23:
- ld r23,-72(r1)
-.globl _restgpr0_24
-_restgpr0_24:
- ld r24,-64(r1)
-.globl _restgpr0_25
-_restgpr0_25:
- ld r25,-56(r1)
-.globl _restgpr0_26
-_restgpr0_26:
- ld r26,-48(r1)
-.globl _restgpr0_27
-_restgpr0_27:
- ld r27,-40(r1)
-.globl _restgpr0_28
-_restgpr0_28:
- ld r28,-32(r1)
-.globl _restgpr0_29
-_restgpr0_29:
- ld r0,16(r1)
- ld r29,-24(r1)
- mtlr r0
- ld r30,-16(r1)
- ld r31,-8(r1)
- blr
-
-.globl _restgpr0_30
-_restgpr0_30:
- ld r30,-16(r1)
-.globl _restgpr0_31
-_restgpr0_31:
- ld r0,16(r1)
- ld r31,-8(r1)
- mtlr r0
- blr
-
-#ifdef CONFIG_ALTIVEC
-/* Called with r0 pointing just beyond the end of the vector save area. */
-
-.globl _savevr_20
-_savevr_20:
- li r12,-192
- stvx v20,r12,r0
-.globl _savevr_21
-_savevr_21:
- li r12,-176
- stvx v21,r12,r0
-.globl _savevr_22
-_savevr_22:
- li r12,-160
- stvx v22,r12,r0
-.globl _savevr_23
-_savevr_23:
- li r12,-144
- stvx v23,r12,r0
-.globl _savevr_24
-_savevr_24:
- li r12,-128
- stvx v24,r12,r0
-.globl _savevr_25
-_savevr_25:
- li r12,-112
- stvx v25,r12,r0
-.globl _savevr_26
-_savevr_26:
- li r12,-96
- stvx v26,r12,r0
-.globl _savevr_27
-_savevr_27:
- li r12,-80
- stvx v27,r12,r0
-.globl _savevr_28
-_savevr_28:
- li r12,-64
- stvx v28,r12,r0
-.globl _savevr_29
-_savevr_29:
- li r12,-48
- stvx v29,r12,r0
-.globl _savevr_30
-_savevr_30:
- li r12,-32
- stvx v30,r12,r0
-.globl _savevr_31
-_savevr_31:
- li r12,-16
- stvx v31,r12,r0
- blr
-
-.globl _restvr_20
-_restvr_20:
- li r12,-192
- lvx v20,r12,r0
-.globl _restvr_21
-_restvr_21:
- li r12,-176
- lvx v21,r12,r0
-.globl _restvr_22
-_restvr_22:
- li r12,-160
- lvx v22,r12,r0
-.globl _restvr_23
-_restvr_23:
- li r12,-144
- lvx v23,r12,r0
-.globl _restvr_24
-_restvr_24:
- li r12,-128
- lvx v24,r12,r0
-.globl _restvr_25
-_restvr_25:
- li r12,-112
- lvx v25,r12,r0
-.globl _restvr_26
-_restvr_26:
- li r12,-96
- lvx v26,r12,r0
-.globl _restvr_27
-_restvr_27:
- li r12,-80
- lvx v27,r12,r0
-.globl _restvr_28
-_restvr_28:
- li r12,-64
- lvx v28,r12,r0
-.globl _restvr_29
-_restvr_29:
- li r12,-48
- lvx v29,r12,r0
-.globl _restvr_30
-_restvr_30:
- li r12,-32
- lvx v30,r12,r0
-.globl _restvr_31
-_restvr_31:
- li r12,-16
- lvx v31,r12,r0
- blr
-
-#endif /* CONFIG_ALTIVEC */
-
-#endif /* CONFIG_PPC64 */
-
#endif
--
2.9.3
^ permalink raw reply related [flat|nested] 6+ messages in thread
* Re: [PATCH] powerpc: fpr save/restore function cleanups
2016-11-01 4:22 [PATCH] powerpc: fpr save/restore function cleanups Nicholas Piggin
@ 2016-11-01 4:41 ` Nicholas Piggin
2016-11-01 5:18 ` Nicholas Piggin
2016-11-01 6:04 ` kbuild test robot
2016-11-01 6:17 ` kbuild test robot
2 siblings, 1 reply; 6+ messages in thread
From: Nicholas Piggin @ 2016-11-01 4:41 UTC (permalink / raw)
To: linuxppc-dev; +Cc: Stephen Rothwell, Alan Modra
On Tue, 1 Nov 2016 15:22:19 +1100
Nicholas Piggin <npiggin@gmail.com> wrote:
> The powerpc64 linker generates fpr save/restore functions on-demand,
> placing them in the .sfpr section. So remove the explicitly coded ones
> from the 64 build.
>
> Have 32-bit put save/restore functions into .sfpr section rather than
> .text, to match 64-bit.
>
> And explicitly have the linker script place the section rather than
> leaving it as orphan.
>
> Signed-off-by: Nicholas Piggin <npiggin@gmail.com>
> ---
>
> I tested this with 64-bit optimize-for-size build with modules,
> and that works okay.
No I didn't, it's broken. I'll send an update shortly.
Thanks,
Nick
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH] powerpc: fpr save/restore function cleanups
2016-11-01 4:41 ` Nicholas Piggin
@ 2016-11-01 5:18 ` Nicholas Piggin
2016-11-14 12:44 ` Michael Ellerman
0 siblings, 1 reply; 6+ messages in thread
From: Nicholas Piggin @ 2016-11-01 5:18 UTC (permalink / raw)
To: linuxppc-dev; +Cc: Stephen Rothwell, Alan Modra
On Tue, 1 Nov 2016 15:41:12 +1100
Nicholas Piggin <npiggin@gmail.com> wrote:
> On Tue, 1 Nov 2016 15:22:19 +1100
> Nicholas Piggin <npiggin@gmail.com> wrote:
>
> > The powerpc64 linker generates fpr save/restore functions on-demand,
> > placing them in the .sfpr section. So remove the explicitly coded ones
> > from the 64 build.
> >
> > Have 32-bit put save/restore functions into .sfpr section rather than
> > .text, to match 64-bit.
> >
> > And explicitly have the linker script place the section rather than
> > leaving it as orphan.
> >
> > Signed-off-by: Nicholas Piggin <npiggin@gmail.com>
> > ---
> >
> > I tested this with 64-bit optimize-for-size build with modules,
> > and that works okay.
>
> No I didn't, it's broken. I'll send an update shortly.
Working (hopefully) patch this time. I also removed the 32-bit changes
which aren't really necessary:
The powerpc64 linker generates fpr save/restore functions on-demand,
placing them in the .sfpr section. Module linking (because it's a
"non-final" link) requires --save-restore-funcs for this.
Remove the explicitly coded save/restore functions from the 64 build.
And explicitly have the linker script place the section rather than
leaving it as orphan.
Signed-off-by: Nicholas Piggin <npiggin@gmail.com>
---
arch/powerpc/Makefile | 4 +
arch/powerpc/boot/Makefile | 3 +-
arch/powerpc/boot/crtsavres.S | 8 +-
arch/powerpc/kernel/vmlinux.lds.S | 6 +
arch/powerpc/lib/Makefile | 5 +-
arch/powerpc/lib/crtsavres.S | 238 +-------------------------------------
6 files changed, 22 insertions(+), 242 deletions(-)
diff --git a/arch/powerpc/Makefile b/arch/powerpc/Makefile
index fe76cfe..8ea7c9e 100644
--- a/arch/powerpc/Makefile
+++ b/arch/powerpc/Makefile
@@ -179,7 +179,11 @@ else
CHECKFLAGS += -D__LITTLE_ENDIAN__
endif
+ifeq ($(CONFIG_PPC32),y)
KBUILD_LDFLAGS_MODULE += arch/powerpc/lib/crtsavres.o
+else
+KBUILD_LDFLAGS_MODULE += --save-restore-funcs
+endif
ifeq ($(CONFIG_476FPE_ERR46),y)
KBUILD_LDFLAGS_MODULE += --ppc476-workaround \
diff --git a/arch/powerpc/boot/Makefile b/arch/powerpc/boot/Makefile
index eae2dc8..6abee93 100644
--- a/arch/powerpc/boot/Makefile
+++ b/arch/powerpc/boot/Makefile
@@ -95,12 +95,13 @@ libfdtheader := fdt.h libfdt.h libfdt_internal.h
$(addprefix $(obj)/,$(libfdt) libfdt-wrapper.o simpleboot.o epapr.o opal.o): \
$(addprefix $(obj)/,$(libfdtheader))
-src-wlib-y := string.S crt0.S crtsavres.S stdio.c decompress.c main.c \
+src-wlib-y := string.S crt0.S stdio.c decompress.c main.c \
$(libfdt) libfdt-wrapper.c \
ns16550.c serial.c simple_alloc.c div64.S util.S \
elf_util.c $(zlib-y) devtree.c stdlib.c \
oflib.c ofconsole.c cuboot.c mpsc.c cpm-serial.c \
uartlite.c mpc52xx-psc.c opal.c opal-calls.S
+src-wlib-$(CONFIG_PPC32) += crtsavres.S
src-wlib-$(CONFIG_40x) += 4xx.c planetcore.c
src-wlib-$(CONFIG_44x) += 4xx.c ebony.c bamboo.c
src-wlib-$(CONFIG_8xx) += mpc8xx.c planetcore.c fsl-soc.c
diff --git a/arch/powerpc/boot/crtsavres.S b/arch/powerpc/boot/crtsavres.S
index f3d9b35..085fb2b 100644
--- a/arch/powerpc/boot/crtsavres.S
+++ b/arch/powerpc/boot/crtsavres.S
@@ -37,12 +37,13 @@
* the executable file might be covered by the GNU General Public License.
*/
+#ifdef __powerpc64__
+#error "On PPC64, FPR save/restore functions are provided by the linker."
+#endif
+
.file "crtsavres.S"
.section ".text"
-/* On PowerPC64 Linux, these functions are provided by the linker. */
-#ifndef __powerpc64__
-
#define _GLOBAL(name) \
.type name,@function; \
.globl name; \
@@ -230,4 +231,3 @@ _GLOBAL(_rest32gpr_31_x)
mtlr 0
mr 1,11
blr
-#endif
diff --git a/arch/powerpc/kernel/vmlinux.lds.S b/arch/powerpc/kernel/vmlinux.lds.S
index a09c666..63775d9 100644
--- a/arch/powerpc/kernel/vmlinux.lds.S
+++ b/arch/powerpc/kernel/vmlinux.lds.S
@@ -84,6 +84,12 @@ SECTIONS
KPROBES_TEXT
IRQENTRY_TEXT
SOFTIRQENTRY_TEXT
+ /*
+ * Linker puts .sfpr at the beginning of a group of input
+ * sections, which can break start-of-text offset if it is
+ * included with the main text sections.
+ */
+ *(.sfpr);
MEM_KEEP(init.text)
MEM_KEEP(exit.text)
diff --git a/arch/powerpc/lib/Makefile b/arch/powerpc/lib/Makefile
index 309361e8..b1304113 100644
--- a/arch/powerpc/lib/Makefile
+++ b/arch/powerpc/lib/Makefile
@@ -9,10 +9,9 @@ ccflags-$(CONFIG_PPC64) := $(NO_MINIMAL_TOC)
CFLAGS_REMOVE_code-patching.o = $(CC_FLAGS_FTRACE)
CFLAGS_REMOVE_feature-fixups.o = $(CC_FLAGS_FTRACE)
-obj-y += string.o alloc.o crtsavres.o code-patching.o \
- feature-fixups.o
+obj-y += string.o alloc.o code-patching.o feature-fixups.o
-obj-$(CONFIG_PPC32) += div64.o copy_32.o
+obj-$(CONFIG_PPC32) += div64.o copy_32.o crtsavres.o
obj64-y += copypage_64.o copyuser_64.o usercopy_64.o mem_64.o hweight_64.o \
copyuser_power7.o string_64.o copypage_power7.o memcpy_power7.o \
diff --git a/arch/powerpc/lib/crtsavres.S b/arch/powerpc/lib/crtsavres.S
index 18af0b3..b311607 100644
--- a/arch/powerpc/lib/crtsavres.S
+++ b/arch/powerpc/lib/crtsavres.S
@@ -40,12 +40,14 @@
#include <asm/ppc_asm.h>
+#ifdef __powerpc64__
+#error "On PPC64, FPR save/restore functions are provided by the linker."
+#endif
+
.file "crtsavres.S"
#ifdef CONFIG_CC_OPTIMIZE_FOR_SIZE
-#ifndef CONFIG_PPC64
-
.section ".text"
/* Routines for saving integer registers, called by the compiler. */
@@ -312,236 +314,4 @@ _GLOBAL(_restvr_31)
#endif /* CONFIG_ALTIVEC */
-#else /* CONFIG_PPC64 */
-
- .section ".text.save.restore","ax",@progbits
-
-.globl _savegpr0_14
-_savegpr0_14:
- std r14,-144(r1)
-.globl _savegpr0_15
-_savegpr0_15:
- std r15,-136(r1)
-.globl _savegpr0_16
-_savegpr0_16:
- std r16,-128(r1)
-.globl _savegpr0_17
-_savegpr0_17:
- std r17,-120(r1)
-.globl _savegpr0_18
-_savegpr0_18:
- std r18,-112(r1)
-.globl _savegpr0_19
-_savegpr0_19:
- std r19,-104(r1)
-.globl _savegpr0_20
-_savegpr0_20:
- std r20,-96(r1)
-.globl _savegpr0_21
-_savegpr0_21:
- std r21,-88(r1)
-.globl _savegpr0_22
-_savegpr0_22:
- std r22,-80(r1)
-.globl _savegpr0_23
-_savegpr0_23:
- std r23,-72(r1)
-.globl _savegpr0_24
-_savegpr0_24:
- std r24,-64(r1)
-.globl _savegpr0_25
-_savegpr0_25:
- std r25,-56(r1)
-.globl _savegpr0_26
-_savegpr0_26:
- std r26,-48(r1)
-.globl _savegpr0_27
-_savegpr0_27:
- std r27,-40(r1)
-.globl _savegpr0_28
-_savegpr0_28:
- std r28,-32(r1)
-.globl _savegpr0_29
-_savegpr0_29:
- std r29,-24(r1)
-.globl _savegpr0_30
-_savegpr0_30:
- std r30,-16(r1)
-.globl _savegpr0_31
-_savegpr0_31:
- std r31,-8(r1)
- std r0,16(r1)
- blr
-
-.globl _restgpr0_14
-_restgpr0_14:
- ld r14,-144(r1)
-.globl _restgpr0_15
-_restgpr0_15:
- ld r15,-136(r1)
-.globl _restgpr0_16
-_restgpr0_16:
- ld r16,-128(r1)
-.globl _restgpr0_17
-_restgpr0_17:
- ld r17,-120(r1)
-.globl _restgpr0_18
-_restgpr0_18:
- ld r18,-112(r1)
-.globl _restgpr0_19
-_restgpr0_19:
- ld r19,-104(r1)
-.globl _restgpr0_20
-_restgpr0_20:
- ld r20,-96(r1)
-.globl _restgpr0_21
-_restgpr0_21:
- ld r21,-88(r1)
-.globl _restgpr0_22
-_restgpr0_22:
- ld r22,-80(r1)
-.globl _restgpr0_23
-_restgpr0_23:
- ld r23,-72(r1)
-.globl _restgpr0_24
-_restgpr0_24:
- ld r24,-64(r1)
-.globl _restgpr0_25
-_restgpr0_25:
- ld r25,-56(r1)
-.globl _restgpr0_26
-_restgpr0_26:
- ld r26,-48(r1)
-.globl _restgpr0_27
-_restgpr0_27:
- ld r27,-40(r1)
-.globl _restgpr0_28
-_restgpr0_28:
- ld r28,-32(r1)
-.globl _restgpr0_29
-_restgpr0_29:
- ld r0,16(r1)
- ld r29,-24(r1)
- mtlr r0
- ld r30,-16(r1)
- ld r31,-8(r1)
- blr
-
-.globl _restgpr0_30
-_restgpr0_30:
- ld r30,-16(r1)
-.globl _restgpr0_31
-_restgpr0_31:
- ld r0,16(r1)
- ld r31,-8(r1)
- mtlr r0
- blr
-
-#ifdef CONFIG_ALTIVEC
-/* Called with r0 pointing just beyond the end of the vector save area. */
-
-.globl _savevr_20
-_savevr_20:
- li r12,-192
- stvx v20,r12,r0
-.globl _savevr_21
-_savevr_21:
- li r12,-176
- stvx v21,r12,r0
-.globl _savevr_22
-_savevr_22:
- li r12,-160
- stvx v22,r12,r0
-.globl _savevr_23
-_savevr_23:
- li r12,-144
- stvx v23,r12,r0
-.globl _savevr_24
-_savevr_24:
- li r12,-128
- stvx v24,r12,r0
-.globl _savevr_25
-_savevr_25:
- li r12,-112
- stvx v25,r12,r0
-.globl _savevr_26
-_savevr_26:
- li r12,-96
- stvx v26,r12,r0
-.globl _savevr_27
-_savevr_27:
- li r12,-80
- stvx v27,r12,r0
-.globl _savevr_28
-_savevr_28:
- li r12,-64
- stvx v28,r12,r0
-.globl _savevr_29
-_savevr_29:
- li r12,-48
- stvx v29,r12,r0
-.globl _savevr_30
-_savevr_30:
- li r12,-32
- stvx v30,r12,r0
-.globl _savevr_31
-_savevr_31:
- li r12,-16
- stvx v31,r12,r0
- blr
-
-.globl _restvr_20
-_restvr_20:
- li r12,-192
- lvx v20,r12,r0
-.globl _restvr_21
-_restvr_21:
- li r12,-176
- lvx v21,r12,r0
-.globl _restvr_22
-_restvr_22:
- li r12,-160
- lvx v22,r12,r0
-.globl _restvr_23
-_restvr_23:
- li r12,-144
- lvx v23,r12,r0
-.globl _restvr_24
-_restvr_24:
- li r12,-128
- lvx v24,r12,r0
-.globl _restvr_25
-_restvr_25:
- li r12,-112
- lvx v25,r12,r0
-.globl _restvr_26
-_restvr_26:
- li r12,-96
- lvx v26,r12,r0
-.globl _restvr_27
-_restvr_27:
- li r12,-80
- lvx v27,r12,r0
-.globl _restvr_28
-_restvr_28:
- li r12,-64
- lvx v28,r12,r0
-.globl _restvr_29
-_restvr_29:
- li r12,-48
- lvx v29,r12,r0
-.globl _restvr_30
-_restvr_30:
- li r12,-32
- lvx v30,r12,r0
-.globl _restvr_31
-_restvr_31:
- li r12,-16
- lvx v31,r12,r0
- blr
-
-#endif /* CONFIG_ALTIVEC */
-
-#endif /* CONFIG_PPC64 */
-
#endif
--
2.9.3
^ permalink raw reply related [flat|nested] 6+ messages in thread
* Re: [PATCH] powerpc: fpr save/restore function cleanups
2016-11-01 4:22 [PATCH] powerpc: fpr save/restore function cleanups Nicholas Piggin
2016-11-01 4:41 ` Nicholas Piggin
@ 2016-11-01 6:04 ` kbuild test robot
2016-11-01 6:17 ` kbuild test robot
2 siblings, 0 replies; 6+ messages in thread
From: kbuild test robot @ 2016-11-01 6:04 UTC (permalink / raw)
To: Nicholas Piggin
Cc: kbuild-all, linuxppc-dev, Stephen Rothwell, Nicholas Piggin, Alan Modra
[-- Attachment #1: Type: text/plain, Size: 1882 bytes --]
Hi Nicholas,
[auto build test ERROR on v4.9-rc3]
[also build test ERROR on next-20161028]
[cannot apply to powerpc/next]
[if your patch is applied to the wrong git tree, please drop us a note to help improve the system]
[Suggest to use git(>=2.9.0) format-patch --base=<commit> (or --base=auto for convenience) to record what (public, well-known) commit your patch series was built on]
[Check https://git-scm.com/docs/git-format-patch for more information]
url: https://github.com/0day-ci/linux/commits/Nicholas-Piggin/powerpc-fpr-save-restore-function-cleanups/20161101-122547
config: powerpc-mvme5100_defconfig (attached as .config)
compiler: powerpc-linux-gnu-gcc (Debian 6.1.1-9) 6.1.1 20160705
reproduce:
wget https://git.kernel.org/cgit/linux/kernel/git/wfg/lkp-tests.git/plain/sbin/make.cross -O ~/bin/make.cross
chmod +x ~/bin/make.cross
# save the attached .config to linux build tree
make.cross ARCH=powerpc
All errors (new ones prefixed by >>):
>> arch/powerpc/boot/crtsavres.S:232:0: error: #endif without #if
#endif
vim +232 arch/powerpc/boot/crtsavres.S
143580ec Kumar Gala 2008-06-13 226 _GLOBAL(_rest32gpr_31_x)
143580ec Kumar Gala 2008-06-13 227 lwz 0,4(11)
143580ec Kumar Gala 2008-06-13 228 lwz 31,-4(11)
143580ec Kumar Gala 2008-06-13 229 mtlr 0
143580ec Kumar Gala 2008-06-13 230 mr 1,11
143580ec Kumar Gala 2008-06-13 231 blr
143580ec Kumar Gala 2008-06-13 @232 #endif
:::::: The code at line 232 was first introduced by commit
:::::: 143580ecfb7999147e546cc3814023e233e95fa5 [POWERPC] Fix bootwrapper builds with newer gcc versions
:::::: TO: Kumar Gala <galak@kernel.crashing.org>
:::::: CC: Paul Mackerras <paulus@samba.org>
---
0-DAY kernel test infrastructure Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all Intel Corporation
[-- Attachment #2: .config.gz --]
[-- Type: application/gzip, Size: 12870 bytes --]
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH] powerpc: fpr save/restore function cleanups
2016-11-01 4:22 [PATCH] powerpc: fpr save/restore function cleanups Nicholas Piggin
2016-11-01 4:41 ` Nicholas Piggin
2016-11-01 6:04 ` kbuild test robot
@ 2016-11-01 6:17 ` kbuild test robot
2 siblings, 0 replies; 6+ messages in thread
From: kbuild test robot @ 2016-11-01 6:17 UTC (permalink / raw)
To: Nicholas Piggin
Cc: kbuild-all, linuxppc-dev, Stephen Rothwell, Nicholas Piggin, Alan Modra
[-- Attachment #1: Type: text/plain, Size: 25656 bytes --]
Hi Nicholas,
[auto build test ERROR on v4.9-rc3]
[also build test ERROR on next-20161028]
[cannot apply to powerpc/next]
[if your patch is applied to the wrong git tree, please drop us a note to help improve the system]
[Suggest to use git(>=2.9.0) format-patch --base=<commit> (or --base=auto for convenience) to record what (public, well-known) commit your patch series was built on]
[Check https://git-scm.com/docs/git-format-patch for more information]
url: https://github.com/0day-ci/linux/commits/Nicholas-Piggin/powerpc-fpr-save-restore-function-cleanups/20161101-122547
config: powerpc-defconfig (attached as .config)
compiler: powerpc64-linux-gnu-gcc (Debian 6.1.1-9) 6.1.1 20160705
reproduce:
wget https://git.kernel.org/cgit/linux/kernel/git/wfg/lkp-tests.git/plain/sbin/make.cross -O ~/bin/make.cross
chmod +x ~/bin/make.cross
# save the attached .config to linux build tree
make.cross ARCH=powerpc
All errors (new ones prefixed by >>):
arch/powerpc/boot/of.o: In function `of_try_claim':
>> of.c:(.text+0x88): undefined reference to `_restgpr_28_x'
arch/powerpc/boot/of.o: In function `of_image_hdr':
>> of.c:(.text+0x104): undefined reference to `_restgpr_30_x'
arch/powerpc/boot/of.o: In function `platform_init':
of.c:(.text+0x1b4): undefined reference to `_restgpr_28_x'
arch/powerpc/boot/epapr.o: In function `platform_fixups':
>> epapr.c:(.text+0xb0): undefined reference to `_restgpr_30_x'
arch/powerpc/boot/epapr.o: In function `epapr_platform_init':
epapr.c:(.text+0x114): undefined reference to `_restgpr_30_x'
arch/powerpc/boot/wrapper.a(libfdt-wrapper.o): In function `expand_buf':
>> libfdt-wrapper.c:(.text+0xa0): undefined reference to `_restgpr_29_x'
arch/powerpc/boot/wrapper.a(libfdt-wrapper.o): In function `fdt_wrapper_finalize':
>> libfdt-wrapper.c:(.text+0xf4): undefined reference to `_restgpr_30_x'
arch/powerpc/boot/wrapper.a(libfdt-wrapper.o): In function `fdt_wrapper_get_path':
libfdt-wrapper.c:(.text+0x180): undefined reference to `_restgpr_30_x'
arch/powerpc/boot/wrapper.a(libfdt-wrapper.o): In function `fdt_wrapper_del_node':
libfdt-wrapper.c:(.text+0x1c4): undefined reference to `_restgpr_30_x'
arch/powerpc/boot/wrapper.a(libfdt-wrapper.o): In function `fdt_wrapper_find_node_by_compatible':
libfdt-wrapper.c:(.text+0x20c): undefined reference to `_restgpr_30_x'
arch/powerpc/boot/wrapper.a(libfdt-wrapper.o): In function `fdt_wrapper_find_node_by_prop_value':
libfdt-wrapper.c:(.text+0x254): undefined reference to `_restgpr_30_x'
arch/powerpc/boot/wrapper.a(libfdt-wrapper.o): In function `fdt_wrapper_create_node':
>> libfdt-wrapper.c:(.text+0x2d0): undefined reference to `_restgpr_28_x'
arch/powerpc/boot/wrapper.a(libfdt-wrapper.o): In function `fdt_wrapper_get_parent':
libfdt-wrapper.c:(.text+0x320): undefined reference to `_restgpr_30_x'
arch/powerpc/boot/wrapper.a(libfdt-wrapper.o): In function `fdt_wrapper_setprop':
>> libfdt-wrapper.c:(.text+0x3e4): undefined reference to `_restgpr_26_x'
arch/powerpc/boot/wrapper.a(libfdt-wrapper.o): In function `fdt_wrapper_getprop':
libfdt-wrapper.c:(.text+0x4a4): undefined reference to `_restgpr_29_x'
arch/powerpc/boot/wrapper.a(libfdt-wrapper.o): In function `fdt_wrapper_finddevice':
libfdt-wrapper.c:(.text+0x4e0): undefined reference to `_restgpr_30_x'
arch/powerpc/boot/wrapper.a(libfdt-wrapper.o): In function `fdt_init':
libfdt-wrapper.c:(.text+0x5d8): undefined reference to `_restgpr_29_x'
arch/powerpc/boot/wrapper.a(main.o): In function `prep_kernel':
>> main.c:(.text+0x174): undefined reference to `_restgpr_24_x'
arch/powerpc/boot/wrapper.a(ofconsole.o): In function `of_console_write':
>> ofconsole.c:(.text+0x44): undefined reference to `_restgpr_30_x'
arch/powerpc/boot/wrapper.a(ofconsole.o): In function `of_console_open':
ofconsole.c:(.text+0xa0): undefined reference to `_restgpr_30_x'
arch/powerpc/boot/wrapper.a(ofconsole.o): In function `of_console_init':
ofconsole.c:(.text+0xdc): undefined reference to `_restgpr_30_x'
arch/powerpc/boot/wrapper.a(oflib.o): In function `of_call_prom_ret.constprop.1':
>> oflib.c:(.text+0x104): undefined reference to `_restgpr_30_x'
arch/powerpc/boot/wrapper.a(oflib.o): In function `of_init':
oflib.c:(.text+0x144): undefined reference to `_restgpr_30_x'
arch/powerpc/boot/wrapper.a(oflib.o): In function `of_call_prom':
>> oflib.c:(.text+0x240): undefined reference to `_restgpr_28_x'
arch/powerpc/boot/wrapper.a(oflib.o): In function `of_exit':
oflib.c:(.text+0x2d0): undefined reference to `_restgpr_30_x'
arch/powerpc/boot/wrapper.a(oflib.o): In function `of_finddevice':
oflib.c:(.text+0x30c): undefined reference to `_restgpr_30_x'
arch/powerpc/boot/wrapper.a(oflib.o): In function `of_getprop':
oflib.c:(.text+0x354): undefined reference to `_restgpr_30_x'
arch/powerpc/boot/wrapper.a(oflib.o): In function `of_claim':
>> oflib.c:(.text+0x3e8): undefined reference to `_restgpr_26_x'
arch/powerpc/boot/wrapper.a(oflib.o): In function `of_vmlinux_alloc':
>> oflib.c:(.text+0x654): undefined reference to `_restgpr_27_x'
arch/powerpc/boot/wrapper.a(oflib.o): In function `of_setprop':
oflib.c:(.text+0x6a8): undefined reference to `_restgpr_30_x'
arch/powerpc/boot/wrapper.a(serial.o): In function `serial_open':
>> serial.c:(.text+0x38): undefined reference to `_restgpr_30_x'
arch/powerpc/boot/wrapper.a(serial.o): In function `serial_write':
>> serial.c:(.text+0x78): undefined reference to `_restgpr_29_x'
arch/powerpc/boot/wrapper.a(serial.o): In function `serial_close':
serial.c:(.text+0xcc): undefined reference to `_restgpr_30_x'
arch/powerpc/boot/wrapper.a(serial.o): In function `serial_edit_cmdline':
>> serial.c:(.text+0x158): undefined reference to `_restgpr_24_x'
arch/powerpc/boot/wrapper.a(serial.o): In function `serial_get_stdout_devp':
serial.c:(.text+0x2e4): undefined reference to `_restgpr_29_x'
arch/powerpc/boot/wrapper.a(serial.o): In function `serial_console_init':
serial.c:(.text+0x31c): undefined reference to `_restgpr_30_x'
arch/powerpc/boot/wrapper.a(simple_alloc.o): In function `simple_malloc':
>> simple_alloc.c:(.text+0xa0): undefined reference to `_restgpr_30_x'
arch/powerpc/boot/wrapper.a(simple_alloc.o): In function `simple_find_entry':
simple_alloc.c:(.text+0x114): undefined reference to `_restgpr_30_x'
arch/powerpc/boot/wrapper.a(simple_alloc.o): In function `simple_free':
simple_alloc.c:(.text+0x16c): undefined reference to `_restgpr_30_x'
arch/powerpc/boot/wrapper.a(simple_alloc.o): In function `simple_realloc':
>> simple_alloc.c:(.text+0x20c): undefined reference to `_restgpr_28_x'
arch/powerpc/boot/wrapper.a(simple_alloc.o): In function `simple_alloc_init':
simple_alloc.c:(.text+0x2b0): undefined reference to `_restgpr_28_x'
arch/powerpc/boot/wrapper.a(stdio.o): In function `number':
>> stdio.c:(.text+0x2ec): undefined reference to `_restgpr_20_x'
arch/powerpc/boot/wrapper.a(stdio.o): In function `vsprintf':
>> stdio.c:(.text+0x3e4): undefined reference to `_restgpr_23_x'
arch/powerpc/boot/wrapper.a(stdio.o): In function `sprintf':
--
arch/powerpc/boot/ps3.o: In function `ps3_copy_vectors':
>> ps3.c:(.text+0x90): undefined reference to `_restgpr_30_x'
arch/powerpc/boot/wrapper.a(devtree.o): In function `finddevice':
>> devtree.c:(.text+0x3c): undefined reference to `_restgpr_30_x'
arch/powerpc/boot/wrapper.a(devtree.o): In function `getprop':
devtree.c:(.text+0x84): undefined reference to `_restgpr_30_x'
arch/powerpc/boot/wrapper.a(devtree.o): In function `setprop':
devtree.c:(.text+0xcc): undefined reference to `_restgpr_30_x'
arch/powerpc/boot/wrapper.a(devtree.o): In function `copy_val':
>> devtree.c:(.text+0x12c): undefined reference to `_restgpr_27_x'
arch/powerpc/boot/wrapper.a(devtree.o): In function `dt_fixup_memory':
>> devtree.c:(.text+0x2dc): undefined reference to `_restgpr_26_x'
arch/powerpc/boot/wrapper.a(devtree.o): In function `dt_fixup_cpu_clocks':
devtree.c:(.text+0x3c8): undefined reference to `_restgpr_26_x'
arch/powerpc/boot/wrapper.a(devtree.o): In function `dt_fixup_clock':
>> devtree.c:(.text+0x4a8): undefined reference to `_restgpr_28_x'
arch/powerpc/boot/wrapper.a(devtree.o): In function `dt_fixup_mac_address_by_alias':
devtree.c:(.text+0x54c): undefined reference to `_restgpr_28_x'
arch/powerpc/boot/wrapper.a(devtree.o): In function `dt_fixup_mac_address':
>> devtree.c:(.text+0x5e4): undefined reference to `_restgpr_29_x'
arch/powerpc/boot/wrapper.a(devtree.o): In function `__dt_fixup_mac_addresses':
devtree.c:(.text+0x66c): undefined reference to `_restgpr_30_x'
arch/powerpc/boot/wrapper.a(devtree.o): In function `dt_get_reg_format':
devtree.c:(.text+0x704): undefined reference to `_restgpr_28_x'
arch/powerpc/boot/wrapper.a(devtree.o): In function `dt_xlate':
>> devtree.c:(.text+0x740): undefined reference to `_restgpr_14_x'
arch/powerpc/boot/wrapper.a(devtree.o): In function `dt_is_compatible':
devtree.c:(.text+0xba8): undefined reference to `_restgpr_26_x'
arch/powerpc/boot/wrapper.a(devtree.o): In function `dt_get_virtual_reg':
devtree.c:(.text+0xc7c): undefined reference to `_restgpr_26_x'
arch/powerpc/boot/wrapper.a(libfdt-wrapper.o): In function `expand_buf':
>> libfdt-wrapper.c:(.text+0xa0): undefined reference to `_restgpr_29_x'
arch/powerpc/boot/wrapper.a(libfdt-wrapper.o): In function `fdt_wrapper_finalize':
>> libfdt-wrapper.c:(.text+0xf4): undefined reference to `_restgpr_30_x'
arch/powerpc/boot/wrapper.a(libfdt-wrapper.o): In function `fdt_wrapper_get_path':
libfdt-wrapper.c:(.text+0x180): undefined reference to `_restgpr_30_x'
arch/powerpc/boot/wrapper.a(libfdt-wrapper.o): In function `fdt_wrapper_del_node':
libfdt-wrapper.c:(.text+0x1c4): undefined reference to `_restgpr_30_x'
arch/powerpc/boot/wrapper.a(libfdt-wrapper.o): In function `fdt_wrapper_find_node_by_compatible':
libfdt-wrapper.c:(.text+0x20c): undefined reference to `_restgpr_30_x'
arch/powerpc/boot/wrapper.a(libfdt-wrapper.o): In function `fdt_wrapper_find_node_by_prop_value':
libfdt-wrapper.c:(.text+0x254): undefined reference to `_restgpr_30_x'
arch/powerpc/boot/wrapper.a(libfdt-wrapper.o): In function `fdt_wrapper_create_node':
>> libfdt-wrapper.c:(.text+0x2d0): undefined reference to `_restgpr_28_x'
arch/powerpc/boot/wrapper.a(libfdt-wrapper.o): In function `fdt_wrapper_get_parent':
libfdt-wrapper.c:(.text+0x320): undefined reference to `_restgpr_30_x'
arch/powerpc/boot/wrapper.a(libfdt-wrapper.o): In function `fdt_wrapper_setprop':
>> libfdt-wrapper.c:(.text+0x3e4): undefined reference to `_restgpr_26_x'
arch/powerpc/boot/wrapper.a(libfdt-wrapper.o): In function `fdt_wrapper_getprop':
libfdt-wrapper.c:(.text+0x4a4): undefined reference to `_restgpr_29_x'
arch/powerpc/boot/wrapper.a(libfdt-wrapper.o): In function `fdt_wrapper_finddevice':
libfdt-wrapper.c:(.text+0x4e0): undefined reference to `_restgpr_30_x'
arch/powerpc/boot/wrapper.a(libfdt-wrapper.o): In function `fdt_init':
libfdt-wrapper.c:(.text+0x5d8): undefined reference to `_restgpr_29_x'
arch/powerpc/boot/wrapper.a(main.o): In function `prep_kernel':
>> main.c:(.text+0x174): undefined reference to `_restgpr_24_x'
arch/powerpc/boot/wrapper.a(simple_alloc.o): In function `simple_malloc':
>> simple_alloc.c:(.text+0xa0): undefined reference to `_restgpr_30_x'
arch/powerpc/boot/wrapper.a(simple_alloc.o): In function `simple_find_entry':
simple_alloc.c:(.text+0x114): undefined reference to `_restgpr_30_x'
arch/powerpc/boot/wrapper.a(simple_alloc.o): In function `simple_free':
simple_alloc.c:(.text+0x16c): undefined reference to `_restgpr_30_x'
arch/powerpc/boot/wrapper.a(simple_alloc.o): In function `simple_realloc':
>> simple_alloc.c:(.text+0x20c): undefined reference to `_restgpr_28_x'
arch/powerpc/boot/wrapper.a(simple_alloc.o): In function `simple_alloc_init':
simple_alloc.c:(.text+0x2b0): undefined reference to `_restgpr_28_x'
arch/powerpc/boot/wrapper.a(stdio.o): In function `number':
>> stdio.c:(.text+0x2ec): undefined reference to `_restgpr_20_x'
arch/powerpc/boot/wrapper.a(stdio.o): In function `vsprintf':
>> stdio.c:(.text+0x3e4): undefined reference to `_restgpr_23_x'
arch/powerpc/boot/wrapper.a(stdio.o): In function `sprintf':
>> stdio.c:(.text+0xae4): undefined reference to `_restgpr_30_x'
arch/powerpc/boot/wrapper.a(stdio.o): In function `printf':
stdio.c:(.text+0xb80): undefined reference to `_restgpr_30_x'
arch/powerpc/boot/wrapper.a(decompress.o): In function `malloc':
>> decompress.c:(.text+0x3c): undefined reference to `_restgpr_30_x'
arch/powerpc/boot/wrapper.a(decompress.o): In function `free':
decompress.c:(.text+0x84): undefined reference to `_restgpr_30_x'
arch/powerpc/boot/wrapper.a(decompress.o): In function `zlib_adler32':
decompress.c:(.text+0xc4): undefined reference to `_restgpr_30_x'
arch/powerpc/boot/wrapper.a(decompress.o): In function `zlib_updatewindow':
>> decompress.c:(.text+0x290): undefined reference to `_restgpr_26_x'
arch/powerpc/boot/wrapper.a(decompress.o): In function `flush':
>> decompress.c:(.text+0x364): undefined reference to `_restgpr_28_x'
arch/powerpc/boot/wrapper.a(decompress.o): In function `print_err':
decompress.c:(.text+0x41c): undefined reference to `_restgpr_30_x'
arch/powerpc/boot/wrapper.a(decompress.o): In function `zlib_inflate_table':
--
arch/powerpc/boot/epapr.o: In function `platform_fixups':
>> epapr.c:(.text+0xb0): undefined reference to `_restgpr_30_x'
powerpc64-linux-gnu-ld: BFD (GNU Binutils for Debian) 2.27 assertion fail ../../bfd/elf32-ppc.c:8813
arch/powerpc/boot/epapr.o: In function `epapr_platform_init':
epapr.c:(.text+0x114): undefined reference to `_restgpr_30_x'
powerpc64-linux-gnu-ld: BFD (GNU Binutils for Debian) 2.27 assertion fail ../../bfd/elf32-ppc.c:8813
arch/powerpc/boot/epapr-wrapper.o: In function `platform_init':
>> epapr-wrapper.c:(.text+0x28): undefined reference to `_restgpr_30_x'
powerpc64-linux-gnu-ld: BFD (GNU Binutils for Debian) 2.27 assertion fail ../../bfd/elf32-ppc.c:8813
arch/powerpc/boot/wrapper.a(libfdt-wrapper.o): In function `expand_buf':
>> libfdt-wrapper.c:(.text+0xa0): undefined reference to `_restgpr_29_x'
powerpc64-linux-gnu-ld: BFD (GNU Binutils for Debian) 2.27 assertion fail ../../bfd/elf32-ppc.c:8813
arch/powerpc/boot/wrapper.a(libfdt-wrapper.o): In function `fdt_wrapper_finalize':
>> libfdt-wrapper.c:(.text+0xf4): undefined reference to `_restgpr_30_x'
powerpc64-linux-gnu-ld: BFD (GNU Binutils for Debian) 2.27 assertion fail ../../bfd/elf32-ppc.c:8813
arch/powerpc/boot/wrapper.a(libfdt-wrapper.o): In function `fdt_wrapper_get_path':
libfdt-wrapper.c:(.text+0x180): undefined reference to `_restgpr_30_x'
powerpc64-linux-gnu-ld: BFD (GNU Binutils for Debian) 2.27 assertion fail ../../bfd/elf32-ppc.c:8813
arch/powerpc/boot/wrapper.a(libfdt-wrapper.o): In function `fdt_wrapper_del_node':
libfdt-wrapper.c:(.text+0x1c4): undefined reference to `_restgpr_30_x'
powerpc64-linux-gnu-ld: BFD (GNU Binutils for Debian) 2.27 assertion fail ../../bfd/elf32-ppc.c:8813
arch/powerpc/boot/wrapper.a(libfdt-wrapper.o): In function `fdt_wrapper_find_node_by_compatible':
libfdt-wrapper.c:(.text+0x20c): undefined reference to `_restgpr_30_x'
powerpc64-linux-gnu-ld: BFD (GNU Binutils for Debian) 2.27 assertion fail ../../bfd/elf32-ppc.c:8813
arch/powerpc/boot/wrapper.a(libfdt-wrapper.o): In function `fdt_wrapper_find_node_by_prop_value':
libfdt-wrapper.c:(.text+0x254): undefined reference to `_restgpr_30_x'
powerpc64-linux-gnu-ld: BFD (GNU Binutils for Debian) 2.27 assertion fail ../../bfd/elf32-ppc.c:8813
arch/powerpc/boot/wrapper.a(libfdt-wrapper.o): In function `fdt_wrapper_create_node':
>> libfdt-wrapper.c:(.text+0x2d0): undefined reference to `_restgpr_28_x'
powerpc64-linux-gnu-ld: BFD (GNU Binutils for Debian) 2.27 assertion fail ../../bfd/elf32-ppc.c:8813
arch/powerpc/boot/wrapper.a(libfdt-wrapper.o): In function `fdt_wrapper_get_parent':
libfdt-wrapper.c:(.text+0x320): undefined reference to `_restgpr_30_x'
powerpc64-linux-gnu-ld: BFD (GNU Binutils for Debian) 2.27 assertion fail ../../bfd/elf32-ppc.c:8813
arch/powerpc/boot/wrapper.a(libfdt-wrapper.o): In function `fdt_wrapper_setprop':
>> libfdt-wrapper.c:(.text+0x3e4): undefined reference to `_restgpr_26_x'
powerpc64-linux-gnu-ld: BFD (GNU Binutils for Debian) 2.27 assertion fail ../../bfd/elf32-ppc.c:8813
arch/powerpc/boot/wrapper.a(libfdt-wrapper.o): In function `fdt_wrapper_getprop':
libfdt-wrapper.c:(.text+0x4a4): undefined reference to `_restgpr_29_x'
powerpc64-linux-gnu-ld: BFD (GNU Binutils for Debian) 2.27 assertion fail ../../bfd/elf32-ppc.c:8813
arch/powerpc/boot/wrapper.a(libfdt-wrapper.o): In function `fdt_wrapper_finddevice':
libfdt-wrapper.c:(.text+0x4e0): undefined reference to `_restgpr_30_x'
powerpc64-linux-gnu-ld: BFD (GNU Binutils for Debian) 2.27 assertion fail ../../bfd/elf32-ppc.c:8813
arch/powerpc/boot/wrapper.a(libfdt-wrapper.o): In function `fdt_init':
libfdt-wrapper.c:(.text+0x5d8): undefined reference to `_restgpr_29_x'
powerpc64-linux-gnu-ld: BFD (GNU Binutils for Debian) 2.27 assertion fail ../../bfd/elf32-ppc.c:8813
arch/powerpc/boot/wrapper.a(main.o): In function `prep_kernel':
>> main.c:(.text+0x174): undefined reference to `_restgpr_24_x'
powerpc64-linux-gnu-ld: BFD (GNU Binutils for Debian) 2.27 assertion fail ../../bfd/elf32-ppc.c:8813
arch/powerpc/boot/wrapper.a(serial.o): In function `serial_open':
>> serial.c:(.text+0x38): undefined reference to `_restgpr_30_x'
powerpc64-linux-gnu-ld: BFD (GNU Binutils for Debian) 2.27 assertion fail ../../bfd/elf32-ppc.c:8813
arch/powerpc/boot/wrapper.a(serial.o): In function `serial_write':
>> serial.c:(.text+0x78): undefined reference to `_restgpr_29_x'
powerpc64-linux-gnu-ld: BFD (GNU Binutils for Debian) 2.27 assertion fail ../../bfd/elf32-ppc.c:8813
arch/powerpc/boot/wrapper.a(serial.o): In function `serial_close':
serial.c:(.text+0xcc): undefined reference to `_restgpr_30_x'
powerpc64-linux-gnu-ld: BFD (GNU Binutils for Debian) 2.27 assertion fail ../../bfd/elf32-ppc.c:8813
arch/powerpc/boot/wrapper.a(serial.o): In function `serial_edit_cmdline':
>> serial.c:(.text+0x158): undefined reference to `_restgpr_24_x'
powerpc64-linux-gnu-ld: BFD (GNU Binutils for Debian) 2.27 assertion fail ../../bfd/elf32-ppc.c:8813
arch/powerpc/boot/wrapper.a(serial.o): In function `serial_get_stdout_devp':
serial.c:(.text+0x2e4): undefined reference to `_restgpr_29_x'
powerpc64-linux-gnu-ld: BFD (GNU Binutils for Debian) 2.27 assertion fail ../../bfd/elf32-ppc.c:8813
arch/powerpc/boot/wrapper.a(serial.o): In function `serial_console_init':
serial.c:(.text+0x31c): undefined reference to `_restgpr_30_x'
powerpc64-linux-gnu-ld: BFD (GNU Binutils for Debian) 2.27 assertion fail ../../bfd/elf32-ppc.c:8813
arch/powerpc/boot/wrapper.a(simple_alloc.o): In function `simple_malloc':
>> simple_alloc.c:(.text+0xa0): undefined reference to `_restgpr_30_x'
powerpc64-linux-gnu-ld: BFD (GNU Binutils for Debian) 2.27 assertion fail ../../bfd/elf32-ppc.c:8813
arch/powerpc/boot/wrapper.a(simple_alloc.o): In function `simple_find_entry':
simple_alloc.c:(.text+0x114): undefined reference to `_restgpr_30_x'
powerpc64-linux-gnu-ld: BFD (GNU Binutils for Debian) 2.27 assertion fail ../../bfd/elf32-ppc.c:8813
arch/powerpc/boot/wrapper.a(simple_alloc.o): In function `simple_free':
simple_alloc.c:(.text+0x16c): undefined reference to `_restgpr_30_x'
powerpc64-linux-gnu-ld: BFD (GNU Binutils for Debian) 2.27 assertion fail ../../bfd/elf32-ppc.c:8813
arch/powerpc/boot/wrapper.a(simple_alloc.o): In function `simple_realloc':
>> simple_alloc.c:(.text+0x20c): undefined reference to `_restgpr_28_x'
powerpc64-linux-gnu-ld: BFD (GNU Binutils for Debian) 2.27 assertion fail ../../bfd/elf32-ppc.c:8813
arch/powerpc/boot/wrapper.a(simple_alloc.o): In function `simple_alloc_init':
simple_alloc.c:(.text+0x2b0): undefined reference to `_restgpr_28_x'
powerpc64-linux-gnu-ld: BFD (GNU Binutils for Debian) 2.27 assertion fail ../../bfd/elf32-ppc.c:8813
arch/powerpc/boot/wrapper.a(stdio.o): In function `number':
>> stdio.c:(.text+0x2ec): undefined reference to `_restgpr_20_x'
powerpc64-linux-gnu-ld: BFD (GNU Binutils for Debian) 2.27 assertion fail ../../bfd/elf32-ppc.c:8813
arch/powerpc/boot/wrapper.a(stdio.o): In function `vsprintf':
>> stdio.c:(.text+0x3e4): undefined reference to `_restgpr_23_x'
powerpc64-linux-gnu-ld: BFD (GNU Binutils for Debian) 2.27 assertion fail ../../bfd/elf32-ppc.c:8813
arch/powerpc/boot/wrapper.a(stdio.o): In function `sprintf':
>> stdio.c:(.text+0xae4): undefined reference to `_restgpr_30_x'
powerpc64-linux-gnu-ld: BFD (GNU Binutils for Debian) 2.27 assertion fail ../../bfd/elf32-ppc.c:8813
arch/powerpc/boot/wrapper.a(stdio.o): In function `printf':
stdio.c:(.text+0xb80): undefined reference to `_restgpr_30_x'
powerpc64-linux-gnu-ld: BFD (GNU Binutils for Debian) 2.27 assertion fail ../../bfd/elf32-ppc.c:8813
arch/powerpc/boot/wrapper.a(uartlite.o): In function `uartlite_open':
>> uartlite.c:(.text+0x3c): undefined reference to `_restgpr_30_x'
powerpc64-linux-gnu-ld: BFD (GNU Binutils for Debian) 2.27 assertion fail ../../bfd/elf32-ppc.c:8813
arch/powerpc/boot/wrapper.a(uartlite.o): In function `uartlite_putc':
uartlite.c:(.text+0x84): undefined reference to `_restgpr_30_x'
powerpc64-linux-gnu-ld: BFD (GNU Binutils for Debian) 2.27 assertion fail ../../bfd/elf32-ppc.c:8813
arch/powerpc/boot/wrapper.a(uartlite.o): In function `uartlite_getc':
uartlite.c:(.text+0xe4): undefined reference to `_restgpr_30_x'
powerpc64-linux-gnu-ld: BFD (GNU Binutils for Debian) 2.27 assertion fail ../../bfd/elf32-ppc.c:8813
arch/powerpc/boot/wrapper.a(uartlite.o):uartlite.c:(.text+0x134): more undefined references to `_restgpr_30_x' follow
powerpc64-linux-gnu-ld: BFD (GNU Binutils for Debian) 2.27 assertion fail ../../bfd/elf32-ppc.c:8813
arch/powerpc/boot/wrapper.a(uartlite.o): In function `uartlite_console_init':
>> uartlite.c:(.text+0x198): undefined reference to `_restgpr_29_x'
powerpc64-linux-gnu-ld: BFD (GNU Binutils for Debian) 2.27 assertion fail ../../bfd/elf32-ppc.c:8813
arch/powerpc/boot/wrapper.a(cpm-serial.o): In function `cpm1_cmd':
>> cpm-serial.c:(.text+0x70): undefined reference to `_restgpr_30_x'
powerpc64-linux-gnu-ld: BFD (GNU Binutils for Debian) 2.27 assertion fail ../../bfd/elf32-ppc.c:8813
arch/powerpc/boot/wrapper.a(cpm-serial.o): In function `cpm2_cmd':
cpm-serial.c:(.text+0xe0): undefined reference to `_restgpr_30_x'
powerpc64-linux-gnu-ld: BFD (GNU Binutils for Debian) 2.27 assertion fail ../../bfd/elf32-ppc.c:8813
arch/powerpc/boot/wrapper.a(cpm-serial.o): In function `smc_disable_port':
cpm-serial.c:(.text+0x138): undefined reference to `_restgpr_30_x'
powerpc64-linux-gnu-ld: BFD (GNU Binutils for Debian) 2.27 assertion fail ../../bfd/elf32-ppc.c:8813
arch/powerpc/boot/wrapper.a(cpm-serial.o): In function `scc_disable_port':
cpm-serial.c:(.text+0x190): undefined reference to `_restgpr_30_x'
powerpc64-linux-gnu-ld: BFD (GNU Binutils for Debian) 2.27 assertion fail ../../bfd/elf32-ppc.c:8813
arch/powerpc/boot/wrapper.a(cpm-serial.o): In function `smc_enable_port':
cpm-serial.c:(.text+0x1e8): undefined reference to `_restgpr_30_x'
powerpc64-linux-gnu-ld: BFD (GNU Binutils for Debian) 2.27 assertion fail ../../bfd/elf32-ppc.c:8813
arch/powerpc/boot/wrapper.a(cpm-serial.o):cpm-serial.c:(.text+0x240): more undefined references to `_restgpr_30_x' follow
powerpc64-linux-gnu-ld: BFD (GNU Binutils for Debian) 2.27 assertion fail ../../bfd/elf32-ppc.c:8813
powerpc64-linux-gnu-ld: BFD (GNU Binutils for Debian) 2.27 assertion fail ../../bfd/elf32-ppc.c:8813
powerpc64-linux-gnu-ld: BFD (GNU Binutils for Debian) 2.27 assertion fail ../../bfd/elf32-ppc.c:8813
powerpc64-linux-gnu-ld: BFD (GNU Binutils for Debian) 2.27 assertion fail ../../bfd/elf32-ppc.c:8813
powerpc64-linux-gnu-ld: BFD (GNU Binutils for Debian) 2.27 assertion fail ../../bfd/elf32-ppc.c:8813
arch/powerpc/boot/wrapper.a(cpm-serial.o): In function `cpm_console_init':
>> cpm-serial.c:(.text+0x68c): undefined reference to `_restgpr_26_x'
powerpc64-linux-gnu-ld: BFD (GNU Binutils for Debian) 2.27 assertion fail ../../bfd/elf32-ppc.c:8813
arch/powerpc/boot/wrapper.a(decompress.o): In function `malloc':
>> decompress.c:(.text+0x3c): undefined reference to `_restgpr_30_x'
powerpc64-linux-gnu-ld: BFD (GNU Binutils for Debian) 2.27 assertion fail ../../bfd/elf32-ppc.c:8813
arch/powerpc/boot/wrapper.a(decompress.o): In function `free':
decompress.c:(.text+0x84): undefined reference to `_restgpr_30_x'
powerpc64-linux-gnu-ld: BFD (GNU Binutils for Debian) 2.27 assertion fail ../../bfd/elf32-ppc.c:8813
arch/powerpc/boot/wrapper.a(decompress.o): In function `zlib_adler32':
decompress.c:(.text+0xc4): undefined reference to `_restgpr_30_x'
powerpc64-linux-gnu-ld: BFD (GNU Binutils for Debian) 2.27 assertion fail ../../bfd/elf32-ppc.c:8813
arch/powerpc/boot/wrapper.a(decompress.o): In function `zlib_updatewindow':
---
0-DAY kernel test infrastructure Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all Intel Corporation
[-- Attachment #2: .config.gz --]
[-- Type: application/gzip, Size: 22609 bytes --]
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH] powerpc: fpr save/restore function cleanups
2016-11-01 5:18 ` Nicholas Piggin
@ 2016-11-14 12:44 ` Michael Ellerman
0 siblings, 0 replies; 6+ messages in thread
From: Michael Ellerman @ 2016-11-14 12:44 UTC (permalink / raw)
To: Nicholas Piggin, linuxppc-dev; +Cc: Stephen Rothwell, Alan Modra
Nicholas Piggin <npiggin@gmail.com> writes:
> On Tue, 1 Nov 2016 15:41:12 +1100
> Nicholas Piggin <npiggin@gmail.com> wrote:
>
>> On Tue, 1 Nov 2016 15:22:19 +1100
>> Nicholas Piggin <npiggin@gmail.com> wrote:
>>
>> > The powerpc64 linker generates fpr save/restore functions on-demand,
>> > placing them in the .sfpr section. So remove the explicitly coded ones
>> > from the 64 build.
>> >
>> > Have 32-bit put save/restore functions into .sfpr section rather than
>> > .text, to match 64-bit.
>> >
>> > And explicitly have the linker script place the section rather than
>> > leaving it as orphan.
>> >
>> > Signed-off-by: Nicholas Piggin <npiggin@gmail.com>
>> > ---
>> >
>> > I tested this with 64-bit optimize-for-size build with modules,
>> > and that works okay.
>>
>> No I didn't, it's broken. I'll send an update shortly.
>
> Working (hopefully) patch this time. I also removed the 32-bit changes
> which aren't really necessary:
>
> The powerpc64 linker generates fpr save/restore functions on-demand,
> placing them in the .sfpr section. Module linking (because it's a
> "non-final" link) requires --save-restore-funcs for this.
>
> Remove the explicitly coded save/restore functions from the 64 build.
>
> And explicitly have the linker script place the section rather than
> leaving it as orphan.
>
> Signed-off-by: Nicholas Piggin <npiggin@gmail.com>
> ---
> arch/powerpc/Makefile | 4 +
> arch/powerpc/boot/Makefile | 3 +-
> arch/powerpc/boot/crtsavres.S | 8 +-
> arch/powerpc/kernel/vmlinux.lds.S | 6 +
> arch/powerpc/lib/Makefile | 5 +-
> arch/powerpc/lib/crtsavres.S | 238 +-------------------------------------
> 6 files changed, 22 insertions(+), 242 deletions(-)
>
> diff --git a/arch/powerpc/Makefile b/arch/powerpc/Makefile
> index fe76cfe..8ea7c9e 100644
> --- a/arch/powerpc/Makefile
> +++ b/arch/powerpc/Makefile
> @@ -179,7 +179,11 @@ else
> CHECKFLAGS += -D__LITTLE_ENDIAN__
> endif
>
> +ifeq ($(CONFIG_PPC32),y)
> KBUILD_LDFLAGS_MODULE += arch/powerpc/lib/crtsavres.o
> +else
> +KBUILD_LDFLAGS_MODULE += --save-restore-funcs
As discussed offline, this option is reasonably new, added in 2014 and
appearing in binutils 2.25.
So it's too new to require, we can use it if it's there, but we still
need a fallback for when it's not.
cheers
^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2016-11-14 12:44 UTC | newest]
Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2016-11-01 4:22 [PATCH] powerpc: fpr save/restore function cleanups Nicholas Piggin
2016-11-01 4:41 ` Nicholas Piggin
2016-11-01 5:18 ` Nicholas Piggin
2016-11-14 12:44 ` Michael Ellerman
2016-11-01 6:04 ` kbuild test robot
2016-11-01 6:17 ` kbuild test robot
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.