linux4.14: add ppc64 and ppc support
This commit is contained in:
parent
3b42f1a798
commit
a60bfaccce
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,85 @@
|
||||||
|
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
|
||||||
|
@@ -86,10 +86,8 @@ MULTIPLEWORD := -mmultiple
|
||||||
|
endif
|
||||||
|
|
||||||
|
ifdef CONFIG_PPC64
|
||||||
|
-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
|
||||||
|
|
||||||
|
cflags-$(CONFIG_CPU_LITTLE_ENDIAN) += -mlittle-endian
|
||||||
|
@@ -130,14 +128,8 @@ endif
|
||||||
|
endif
|
||||||
|
|
||||||
|
CFLAGS-$(CONFIG_PPC64) := $(call cc-option,-mtraceback=no)
|
||||||
|
-ifeq ($(CONFIG_CPU_LITTLE_ENDIAN),y)
|
||||||
|
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))
|
||||||
|
CFLAGS-$(CONFIG_PPC64) += $(call cc-option,-mcmodel=medium,$(call cc-option,-mminimal-toc))
|
||||||
|
CFLAGS-$(CONFIG_PPC64) += $(call cc-option,-mno-pointers-to-nested-functions)
|
||||||
|
CFLAGS-$(CONFIG_PPC32) := -ffixed-r2 $(MULTIPLEWORD)
|
||||||
|
--- a/arch/powerpc/boot/Makefile
|
||||||
|
+++ b/arch/powerpc/boot/Makefile
|
||||||
|
@@ -44,8 +44,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) {
|
|
@ -17,9 +17,13 @@ noverifyrdeps=yes
|
||||||
noshlibprovides=yes
|
noshlibprovides=yes
|
||||||
preserve=yes
|
preserve=yes
|
||||||
|
|
||||||
archs="i686* x86_64* armv5tel* armv7l* aarch64*"
|
archs="i686* x86_64* armv5tel* armv7l* aarch64* ppc*"
|
||||||
hostmakedepends="bc elfutils-devel kmod libressl-devel perl uboot-mkimage gmp-devel libmpc-devel"
|
hostmakedepends="bc elfutils-devel kmod libressl-devel perl uboot-mkimage gmp-devel libmpc-devel"
|
||||||
|
|
||||||
|
case "$XBPS_TARGET_MACHINE" in
|
||||||
|
ppc64le*) broken="No ppc64le support";;
|
||||||
|
esac
|
||||||
|
|
||||||
_kernver="${version}_${revision}"
|
_kernver="${version}_${revision}"
|
||||||
triggers="kernel-hooks"
|
triggers="kernel-hooks"
|
||||||
kernel_hooks_version="${_kernver}"
|
kernel_hooks_version="${_kernver}"
|
||||||
|
@ -43,26 +47,28 @@ do_configure() {
|
||||||
# If there's a file called <arch>-dotconfig, use it to
|
# If there's a file called <arch>-dotconfig, use it to
|
||||||
# configure the kernel; otherwise use arch defaults and all stuff
|
# configure the kernel; otherwise use arch defaults and all stuff
|
||||||
# as modules (defconfig+allmodconfig).
|
# as modules (defconfig+allmodconfig).
|
||||||
local arch _args
|
local arch subarch _args
|
||||||
|
|
||||||
case "$XBPS_TARGET_MACHINE" in
|
case "$XBPS_TARGET_MACHINE" in
|
||||||
i686*) arch=i386;;
|
i686*) arch=i386;;
|
||||||
x86_64*) arch=x86_64;;
|
x86_64*) arch=x86_64;;
|
||||||
armv5*|armv7*) arch=arm;;
|
armv5*|armv7*) arch=arm;;
|
||||||
aarch64*) arch=arm64;;
|
aarch64*) arch=arm64;;
|
||||||
|
ppc64*) arch=powerpc; subarch=ppc64;;
|
||||||
|
ppc*) arch=powerpc;;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
if [ "$CROSS_BUILD" ]; then
|
if [ "$CROSS_BUILD" ]; then
|
||||||
_args="CROSS_COMPILE=${XBPS_CROSS_TRIPLET}-"
|
_args="CROSS_COMPILE=${XBPS_CROSS_TRIPLET}-"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ -f ${FILESDIR}/${arch}-dotconfig-custom ]; then
|
if [ -f ${FILESDIR}/${subarch:-$arch}-dotconfig-custom ]; then
|
||||||
msg_normal "Detected a custom .config file for your arch, using it.\n"
|
msg_normal "Detected a custom .config file for your arch, using it.\n"
|
||||||
cp -f ${FILESDIR}/${arch}-dotconfig-custom .config
|
cp -f ${FILESDIR}/${subarch:-$arch}-dotconfig-custom .config
|
||||||
make ${makejobs} ARCH=$arch ${_args} oldconfig
|
make ${makejobs} ARCH=$arch ${_args} oldconfig
|
||||||
elif [ -f ${FILESDIR}/${arch}-dotconfig ]; then
|
elif [ -f ${FILESDIR}/${subarch:-$arch}-dotconfig ]; then
|
||||||
msg_normal "Detected a .config file for your arch, using it.\n"
|
msg_normal "Detected a .config file for your arch, using it.\n"
|
||||||
cp -f ${FILESDIR}/${arch}-dotconfig .config
|
cp -f ${FILESDIR}/${subarch:-$arch}-dotconfig .config
|
||||||
make ${makejobs} ARCH=$arch ${_args} oldconfig
|
make ${makejobs} ARCH=$arch ${_args} oldconfig
|
||||||
elif [ -f ${FILESDIR}/${XBPS_TARGET_MACHINE%%-musl}-dotconfig ]; then
|
elif [ -f ${FILESDIR}/${XBPS_TARGET_MACHINE%%-musl}-dotconfig ]; then
|
||||||
msg_normal "Detected a .config file for your cpu family, using it.\n"
|
msg_normal "Detected a .config file for your cpu family, using it.\n"
|
||||||
|
@ -84,6 +90,7 @@ do_build() {
|
||||||
x86_64*) _args="bzImage modules"; arch=x86_64;;
|
x86_64*) _args="bzImage modules"; arch=x86_64;;
|
||||||
armv5*|armv7*) _args="zImage modules dtbs"; arch=arm;;
|
armv5*|armv7*) _args="zImage modules dtbs"; arch=arm;;
|
||||||
aarch64*) _args="Image modules dtbs"; arch=arm64;;
|
aarch64*) _args="Image modules dtbs"; arch=arm64;;
|
||||||
|
ppc*) _args="zImage modules"; arch=powerpc;;
|
||||||
esac
|
esac
|
||||||
if [ "$CROSS_BUILD" ]; then
|
if [ "$CROSS_BUILD" ]; then
|
||||||
_cross="CROSS_COMPILE=${XBPS_CROSS_TRIPLET}-"
|
_cross="CROSS_COMPILE=${XBPS_CROSS_TRIPLET}-"
|
||||||
|
@ -103,6 +110,7 @@ do_install() {
|
||||||
x86_64*) arch=x86; subarch=x86_64;;
|
x86_64*) arch=x86; subarch=x86_64;;
|
||||||
armv5*|armv7*) arch=arm;;
|
armv5*|armv7*) arch=arm;;
|
||||||
aarch64*) arch=arm64;;
|
aarch64*) arch=arm64;;
|
||||||
|
ppc*) arch=powerpc;;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
# Run depmod after compressing modules.
|
# Run depmod after compressing modules.
|
||||||
|
@ -130,6 +138,12 @@ do_install() {
|
||||||
vmkdir boot/dtbs
|
vmkdir boot/dtbs
|
||||||
cp arch/arm64/boot/dts/*/*.dtb ${DESTDIR}/boot/dtbs
|
cp arch/arm64/boot/dts/*/*.dtb ${DESTDIR}/boot/dtbs
|
||||||
;;
|
;;
|
||||||
|
powerpc)
|
||||||
|
# zImage on powerpc is useless as it won't load initramfs
|
||||||
|
# raw vmlinux is huge, and this is nostrip, so do it manually
|
||||||
|
vinstall vmlinux 644 boot vmlinux-${_kernver}
|
||||||
|
/usr/bin/$STRIP ${DESTDIR}/boot/vmlinux-${_kernver}
|
||||||
|
;;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
# Switch to /usr.
|
# Switch to /usr.
|
||||||
|
@ -251,11 +265,12 @@ do_install() {
|
||||||
|
|
||||||
# Remove unneeded architectures
|
# Remove unneeded architectures
|
||||||
case "$arch" in
|
case "$arch" in
|
||||||
i386|x86_64) _args="arm*";;
|
i386|x86_64) _args="arm* p*";;
|
||||||
arm|arm64) _args="x86*";;
|
arm|arm64) _args="x86* p*";;
|
||||||
|
powerpc) _args="arm* x86* parisc";;
|
||||||
esac
|
esac
|
||||||
for arch in alpha avr32 blackfin cris frv h8300 \
|
for arch in alpha avr32 blackfin cris frv h8300 \
|
||||||
ia64 m* p* s* um v850 xtensa ${_args}; do
|
ia64 m* s* um v850 xtensa ${_args}; do
|
||||||
rm -rf ${hdrdest}/arch/${arch}
|
rm -rf ${hdrdest}/arch/${arch}
|
||||||
done
|
done
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue