This is only available for x86_64 and I've been running it for some hours already. Feel free to update `archs` when the target <arch>-dotconfig file is there. ENOTIME to handle other archs.
86 lines
3.1 KiB
Diff
86 lines
3.1 KiB
Diff
This makes the Linux kernel build as ELFv2 on big endian ppc64. The upstream
|
|
doesn't seem to be interested in this but it's a small patch that is unlikely
|
|
to break/easy to remake and in worst case can always be ditched.
|
|
|
|
Using ELFv2 has some potential performance benefits and is already always used
|
|
on little endian. It requires a relatively modern toolchain, which we already
|
|
have.
|
|
|
|
Ping q66 if it does not apply.
|
|
|
|
--- a/arch/powerpc/Makefile 2020-01-05 14:40:50.395763093 +0100
|
|
+++ b/arch/powerpc/Makefile 2020-01-05 14:48:39.025251092 +0100
|
|
@@ -92,10 +92,8 @@
|
|
|
|
ifdef CONFIG_PPC64
|
|
ifndef CONFIG_CC_IS_CLANG
|
|
-cflags-$(CONFIG_CPU_BIG_ENDIAN) += $(call cc-option,-mabi=elfv1)
|
|
-cflags-$(CONFIG_CPU_BIG_ENDIAN) += $(call cc-option,-mcall-aixdesc)
|
|
-aflags-$(CONFIG_CPU_BIG_ENDIAN) += $(call cc-option,-mabi=elfv1)
|
|
-aflags-$(CONFIG_CPU_LITTLE_ENDIAN) += -mabi=elfv2
|
|
+cflags-y += $(call cc-option,-mabi=elfv2,$(call cc-option,-mcall-aixdesc))
|
|
+aflags-y += $(call cc-option,-mabi=elfv2,$(call cc-option,-mabi=elfv1))
|
|
endif
|
|
endif
|
|
|
|
@@ -144,14 +142,8 @@
|
|
|
|
CFLAGS-$(CONFIG_PPC64) := $(call cc-option,-mtraceback=no)
|
|
ifndef CONFIG_CC_IS_CLANG
|
|
-ifdef CONFIG_CPU_LITTLE_ENDIAN
|
|
CFLAGS-$(CONFIG_PPC64) += $(call cc-option,-mabi=elfv2,$(call cc-option,-mcall-aixdesc))
|
|
-AFLAGS-$(CONFIG_PPC64) += $(call cc-option,-mabi=elfv2)
|
|
-else
|
|
-CFLAGS-$(CONFIG_PPC64) += $(call cc-option,-mabi=elfv1)
|
|
-CFLAGS-$(CONFIG_PPC64) += $(call cc-option,-mcall-aixdesc)
|
|
-AFLAGS-$(CONFIG_PPC64) += $(call cc-option,-mabi=elfv1)
|
|
-endif
|
|
+AFLAGS-$(CONFIG_PPC64) += $(call cc-option,-mabi=elfv2,$(call cc-option,-mabi=elfv1))
|
|
endif
|
|
CFLAGS-$(CONFIG_PPC64) += $(call cc-option,-mcmodel=medium,$(call cc-option,-mminimal-toc))
|
|
CFLAGS-$(CONFIG_PPC64) += $(call cc-option,-mno-pointers-to-nested-functions)
|
|
|
|
--- a/arch/powerpc/boot/Makefile
|
|
+++ b/arch/powerpc/boot/Makefile
|
|
@@ -48,8 +48,8 @@ ifdef CONFIG_CPU_BIG_ENDIAN
|
|
BOOTCFLAGS += -mbig-endian
|
|
else
|
|
BOOTCFLAGS += -mlittle-endian
|
|
-BOOTCFLAGS += $(call cc-option,-mabi=elfv2)
|
|
endif
|
|
+BOOTCFLAGS += $(call cc-option,-mabi=elfv2)
|
|
|
|
BOOTAFLAGS := -D__ASSEMBLY__ $(BOOTCFLAGS) -traditional -nostdinc
|
|
|
|
--- a/drivers/crypto/vmx/Makefile 2020-01-01 10:56:10.560965046 +0100
|
|
+++ b/drivers/crypto/vmx/Makefile 2020-01-01 10:57:05.189968856 +0100
|
|
@@ -5,7 +5,7 @@
|
|
ifeq ($(CONFIG_CPU_LITTLE_ENDIAN),y)
|
|
override flavour := linux-ppc64le
|
|
else
|
|
-override flavour := linux-ppc64
|
|
+override flavour := linux-ppc64v2
|
|
endif
|
|
|
|
quiet_cmd_perl = PERL $@
|
|
|
|
--- a/drivers/crypto/vmx/ppc-xlate.pl
|
|
+++ b/drivers/crypto/vmx/ppc-xlate.pl
|
|
@@ -40,7 +40,7 @@ my $globl = sub {
|
|
};
|
|
my $text = sub {
|
|
my $ret = ($flavour =~ /aix/) ? ".csect\t.text[PR],7" : ".text";
|
|
- $ret = ".abiversion 2\n".$ret if ($flavour =~ /linux.*64le/);
|
|
+ $ret = ".abiversion 2\n".$ret if ($flavour =~ /linux.*64(le|v2)/);
|
|
$ret;
|
|
};
|
|
my $machine = sub {
|
|
@@ -142,7 +142,7 @@ my $vmr = sub {
|
|
|
|
# Some ABIs specify vrsave, special-purpose register #256, as reserved
|
|
# for system use.
|
|
-my $no_vrsave = ($flavour =~ /linux-ppc64le/);
|
|
+my $no_vrsave = ($flavour =~ /linux-ppc64(le|v2)/);
|
|
my $mtspr = sub {
|
|
my ($f,$idx,$ra) = @_;
|
|
if ($idx == 256 && $no_vrsave) {
|