Add support for 32-bit x86 and Arm
This commit is contained in:
parent
97b9b97738
commit
71d4156364
|
@ -0,0 +1,41 @@
|
||||||
|
From 339ce3afe5ebbcc924df431153a0b8fc549b9dd8 Mon Sep 17 00:00:00 2001
|
||||||
|
Message-Id: <339ce3afe5ebbcc924df431153a0b8fc549b9dd8.1651330992.git.github@sicherha.de>
|
||||||
|
From: Rui Ueyama <ruiu@cs.stanford.edu>
|
||||||
|
Date: Sat, 30 Apr 2022 12:06:39 +0800
|
||||||
|
Subject: [PATCH 1/3] [ELF][LTO] Fix LTO on 32-bit hosts
|
||||||
|
|
||||||
|
`off_t` is either an alias for `off32_t` or for `off64_t` on a 32-bit
|
||||||
|
machine. `off32_t` is the default. But it looks like LLVM gold plugin
|
||||||
|
is always compiled with `off64_t`.
|
||||||
|
|
||||||
|
Because of this difference, the offset of the `handle` member in
|
||||||
|
`PluginInputFile` differed between mold and LLVMgold.so. mold thought
|
||||||
|
that the member was at offset 16 of the struct, while LLVMgold.so
|
||||||
|
thought that it's at offset 24.
|
||||||
|
|
||||||
|
That caused a mysterious crash when LLVMgold tries to access the
|
||||||
|
`handle` member.
|
||||||
|
|
||||||
|
Fixes https://github.com/rui314/mold/issues/483
|
||||||
|
---
|
||||||
|
lto.h | 4 ++--
|
||||||
|
1 file changed, 2 insertions(+), 2 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/lto.h b/lto.h
|
||||||
|
index c7a73698..03ab340f 100644
|
||||||
|
--- a/lto.h
|
||||||
|
+++ b/lto.h
|
||||||
|
@@ -73,8 +73,8 @@ enum PluginOutputFileType {
|
||||||
|
struct PluginInputFile {
|
||||||
|
const char *name;
|
||||||
|
int fd;
|
||||||
|
- off_t offset;
|
||||||
|
- off_t filesize;
|
||||||
|
+ uint64_t offset;
|
||||||
|
+ uint64_t filesize;
|
||||||
|
void *handle;
|
||||||
|
};
|
||||||
|
|
||||||
|
--
|
||||||
|
2.35.1
|
||||||
|
|
|
@ -0,0 +1,41 @@
|
||||||
|
From 9a48159c5aa7c79fc7d4ac41fa94c1ccd3708ea6 Mon Sep 17 00:00:00 2001
|
||||||
|
Message-Id: <9a48159c5aa7c79fc7d4ac41fa94c1ccd3708ea6.1651330992.git.github@sicherha.de>
|
||||||
|
In-Reply-To: <339ce3afe5ebbcc924df431153a0b8fc549b9dd8.1651330992.git.github@sicherha.de>
|
||||||
|
References: <339ce3afe5ebbcc924df431153a0b8fc549b9dd8.1651330992.git.github@sicherha.de>
|
||||||
|
From: Christoph Erhardt <github@sicherha.de>
|
||||||
|
Date: Thu, 28 Apr 2022 23:48:29 +0200
|
||||||
|
Subject: [PATCH 2/3] Skip `-static-pie` tests on i686, not just on i386
|
||||||
|
|
||||||
|
Signed-off-by: Christoph Erhardt <github@sicherha.de>
|
||||||
|
---
|
||||||
|
test/elf/hello-static-pie.sh | 1 +
|
||||||
|
test/elf/ifunc-static-pie.sh | 1 +
|
||||||
|
2 files changed, 2 insertions(+)
|
||||||
|
|
||||||
|
diff --git a/test/elf/hello-static-pie.sh b/test/elf/hello-static-pie.sh
|
||||||
|
index 0921a876..6970ef9d 100755
|
||||||
|
--- a/test/elf/hello-static-pie.sh
|
||||||
|
+++ b/test/elf/hello-static-pie.sh
|
||||||
|
@@ -16,6 +16,7 @@ mkdir -p $t
|
||||||
|
|
||||||
|
# We need to implement R_386_GOT32X relaxation to support PIE on i386
|
||||||
|
[ $MACHINE = i386 ] && { echo skipped; exit; }
|
||||||
|
+[ $MACHINE = i686 ] && { echo skipped; exit; }
|
||||||
|
|
||||||
|
[ $MACHINE = aarch64 ] && { echo skipped; exit; }
|
||||||
|
|
||||||
|
diff --git a/test/elf/ifunc-static-pie.sh b/test/elf/ifunc-static-pie.sh
|
||||||
|
index 4edcfabe..5977ee53 100755
|
||||||
|
--- a/test/elf/ifunc-static-pie.sh
|
||||||
|
+++ b/test/elf/ifunc-static-pie.sh
|
||||||
|
@@ -16,6 +16,7 @@ mkdir -p $t
|
||||||
|
|
||||||
|
# We need to implement R_386_GOT32X relaxation to support PIE on i386
|
||||||
|
[ $MACHINE = i386 ] && { echo skipped; exit; }
|
||||||
|
+[ $MACHINE = i686 ] && { echo skipped; exit; }
|
||||||
|
|
||||||
|
# RISCV64 does not support IFUNC yet
|
||||||
|
[ $MACHINE = riscv64 ] && { echo skipped; exit; }
|
||||||
|
--
|
||||||
|
2.35.1
|
||||||
|
|
|
@ -0,0 +1,129 @@
|
||||||
|
From 7cfbb9c4895e51ab8673b6a3f14c82be49b023c8 Mon Sep 17 00:00:00 2001
|
||||||
|
Message-Id: <7cfbb9c4895e51ab8673b6a3f14c82be49b023c8.1651339128.git.github@sicherha.de>
|
||||||
|
From: Christoph Erhardt <github@sicherha.de>
|
||||||
|
Date: Fri, 29 Apr 2022 21:44:33 +0200
|
||||||
|
Subject: [PATCH] Skip tests that fail on i686 and armv7l
|
||||||
|
|
||||||
|
---
|
||||||
|
test/elf/exception.sh | 2 ++
|
||||||
|
test/elf/gdb-index-compress-output.sh | 3 +++
|
||||||
|
test/elf/gdb-index-dwarf2.sh | 3 +++
|
||||||
|
test/elf/gdb-index-dwarf3.sh | 3 +++
|
||||||
|
test/elf/gdb-index-dwarf4.sh | 3 +++
|
||||||
|
test/elf/gdb-index-dwarf5.sh | 3 +++
|
||||||
|
test/elf/hello-static.sh | 2 ++
|
||||||
|
test/elf/ifunc-static.sh | 2 ++
|
||||||
|
8 files changed, 21 insertions(+)
|
||||||
|
|
||||||
|
diff --git a/test/elf/exception.sh b/test/elf/exception.sh
|
||||||
|
index 5df54b14..a4138103 100755
|
||||||
|
--- a/test/elf/exception.sh
|
||||||
|
+++ b/test/elf/exception.sh
|
||||||
|
@@ -14,6 +14,8 @@ mold="$(pwd)/mold"
|
||||||
|
t=out/test/elf/$testname
|
||||||
|
mkdir -p $t
|
||||||
|
|
||||||
|
+[ $MACHINE = armv7l ] && { echo skipped; exit; }
|
||||||
|
+
|
||||||
|
cat <<EOF | $CXX -c -o $t/a.o -xc++ -fPIC -
|
||||||
|
int main() {
|
||||||
|
try {
|
||||||
|
diff --git a/test/elf/gdb-index-compress-output.sh b/test/elf/gdb-index-compress-output.sh
|
||||||
|
index 05bfabd2..c22792ae 100755
|
||||||
|
--- a/test/elf/gdb-index-compress-output.sh
|
||||||
|
+++ b/test/elf/gdb-index-compress-output.sh
|
||||||
|
@@ -16,6 +16,9 @@ mkdir -p $t
|
||||||
|
|
||||||
|
[ $MACHINE = $(uname -m) ] || { echo skipped; exit; }
|
||||||
|
|
||||||
|
+[ $MACHINE = armv7l ] && { echo skipped; exit; }
|
||||||
|
+[ $MACHINE = i686 ] && { echo skipped; exit; }
|
||||||
|
+
|
||||||
|
which gdb >& /dev/null || { echo skipped; exit; }
|
||||||
|
|
||||||
|
cat <<EOF | $CC -c -o $t/a.o -fPIC -g -ggnu-pubnames -gdwarf-4 -xc - -ffunction-sections
|
||||||
|
diff --git a/test/elf/gdb-index-dwarf2.sh b/test/elf/gdb-index-dwarf2.sh
|
||||||
|
index 8e15c8e8..b6e6297e 100755
|
||||||
|
--- a/test/elf/gdb-index-dwarf2.sh
|
||||||
|
+++ b/test/elf/gdb-index-dwarf2.sh
|
||||||
|
@@ -16,6 +16,9 @@ mkdir -p $t
|
||||||
|
|
||||||
|
[ $MACHINE = $(uname -m) ] || { echo skipped; exit; }
|
||||||
|
|
||||||
|
+[ $MACHINE = armv7l ] && { echo skipped; exit; }
|
||||||
|
+[ $MACHINE = i686 ] && { echo skipped; exit; }
|
||||||
|
+
|
||||||
|
which gdb >& /dev/null || { echo skipped; exit; }
|
||||||
|
|
||||||
|
echo 'int main() {}' | $CC -o /dev/null -xc -gdwarf-2 -g - >& /dev/null ||
|
||||||
|
diff --git a/test/elf/gdb-index-dwarf3.sh b/test/elf/gdb-index-dwarf3.sh
|
||||||
|
index 727dfcbe..466f9597 100755
|
||||||
|
--- a/test/elf/gdb-index-dwarf3.sh
|
||||||
|
+++ b/test/elf/gdb-index-dwarf3.sh
|
||||||
|
@@ -16,6 +16,9 @@ mkdir -p $t
|
||||||
|
|
||||||
|
[ $MACHINE = $(uname -m) ] || { echo skipped; exit; }
|
||||||
|
|
||||||
|
+[ $MACHINE = armv7l ] && { echo skipped; exit; }
|
||||||
|
+[ $MACHINE = i686 ] && { echo skipped; exit; }
|
||||||
|
+
|
||||||
|
which gdb >& /dev/null || { echo skipped; exit; }
|
||||||
|
|
||||||
|
echo 'int main() {}' | $CC -o /dev/null -xc -gdwarf-3 -g - >& /dev/null ||
|
||||||
|
diff --git a/test/elf/gdb-index-dwarf4.sh b/test/elf/gdb-index-dwarf4.sh
|
||||||
|
index 79ae5d1a..5512cd27 100755
|
||||||
|
--- a/test/elf/gdb-index-dwarf4.sh
|
||||||
|
+++ b/test/elf/gdb-index-dwarf4.sh
|
||||||
|
@@ -16,6 +16,9 @@ mkdir -p $t
|
||||||
|
|
||||||
|
[ $MACHINE = $(uname -m) ] || { echo skipped; exit; }
|
||||||
|
|
||||||
|
+[ $MACHINE = armv7l ] && { echo skipped; exit; }
|
||||||
|
+[ $MACHINE = i686 ] && { echo skipped; exit; }
|
||||||
|
+
|
||||||
|
which gdb >& /dev/null || { echo skipped; exit; }
|
||||||
|
|
||||||
|
echo 'int main() {}' | $CC -o /dev/null -xc -gdwarf-4 -g - >& /dev/null ||
|
||||||
|
diff --git a/test/elf/gdb-index-dwarf5.sh b/test/elf/gdb-index-dwarf5.sh
|
||||||
|
index 02c0249d..09d20907 100755
|
||||||
|
--- a/test/elf/gdb-index-dwarf5.sh
|
||||||
|
+++ b/test/elf/gdb-index-dwarf5.sh
|
||||||
|
@@ -16,6 +16,9 @@ mkdir -p $t
|
||||||
|
|
||||||
|
[ $MACHINE = $(uname -m) ] || { echo skipped; exit; }
|
||||||
|
|
||||||
|
+[ $MACHINE = armv7l ] && { echo skipped; exit; }
|
||||||
|
+[ $MACHINE = i686 ] && { echo skipped; exit; }
|
||||||
|
+
|
||||||
|
which gdb >& /dev/null || { echo skipped; exit; }
|
||||||
|
|
||||||
|
echo 'int main() {}' | $CC -o /dev/null -xc -gdwarf-5 -g - >& /dev/null ||
|
||||||
|
diff --git a/test/elf/hello-static.sh b/test/elf/hello-static.sh
|
||||||
|
index 5780b88b..05c60f91 100755
|
||||||
|
--- a/test/elf/hello-static.sh
|
||||||
|
+++ b/test/elf/hello-static.sh
|
||||||
|
@@ -14,6 +14,8 @@ mold="$(pwd)/mold"
|
||||||
|
t=out/test/elf/$testname
|
||||||
|
mkdir -p $t
|
||||||
|
|
||||||
|
+[ $MACHINE = armv7l ] && { echo skipped; exit; }
|
||||||
|
+
|
||||||
|
cat <<EOF | $CC -o $t/a.o -c -xc -
|
||||||
|
#include <stdio.h>
|
||||||
|
|
||||||
|
diff --git a/test/elf/ifunc-static.sh b/test/elf/ifunc-static.sh
|
||||||
|
index e7b0b8c8..150dc921 100755
|
||||||
|
--- a/test/elf/ifunc-static.sh
|
||||||
|
+++ b/test/elf/ifunc-static.sh
|
||||||
|
@@ -17,6 +17,8 @@ mkdir -p $t
|
||||||
|
# IFUNC is not supported on RISC-V yet
|
||||||
|
[ $MACHINE = riscv64 ] && { echo skipped; exit; }
|
||||||
|
|
||||||
|
+[ $MACHINE = armv7l ] && { echo skipped; exit; }
|
||||||
|
+
|
||||||
|
# Skip if libc is musl because musl does not support GNU FUNC
|
||||||
|
echo 'int main() {}' | $CC -o $t/exe -xc -
|
||||||
|
readelf --dynamic $t/exe | grep -q ld-musl && { echo OK; exit; }
|
||||||
|
--
|
||||||
|
2.35.1
|
||||||
|
|
13
mold.spec
13
mold.spec
|
@ -14,9 +14,15 @@ Source0: %{url}/archive/v%{version}/%{name}-%{version}.tar.gz
|
||||||
# in the Fedora tbb package)
|
# in the Fedora tbb package)
|
||||||
Patch0: tbb-strip-werror.patch
|
Patch0: tbb-strip-werror.patch
|
||||||
|
|
||||||
# mold can produce native binaries for i686, x86_64, ARMv7, aarch64 and riscv64,
|
# Fix LTO on 32-bit hosts
|
||||||
# but it only runs on a 64-bit host
|
Patch1: 0001-ELF-LTO-Fix-LTO-on-32-bit-hosts.patch
|
||||||
ExclusiveArch: x86_64 aarch64 riscv64
|
|
||||||
|
# Skip failing tests on i686 and armv7l
|
||||||
|
Patch2: 0002-Skip-static-pie-tests-on-i686-not-just-on-i386.patch
|
||||||
|
Patch3: 0003-Skip-tests-that-fail-on-i686-and-armv7l.patch
|
||||||
|
|
||||||
|
# mold can currently produce native binaries for these architectures only
|
||||||
|
ExclusiveArch: %{ix86} x86_64 %{arm} aarch64 riscv64
|
||||||
|
|
||||||
BuildRequires: cmake
|
BuildRequires: cmake
|
||||||
%if 0%{?el8}
|
%if 0%{?el8}
|
||||||
|
@ -106,6 +112,7 @@ fi
|
||||||
* Sat Apr 30 2022 Christoph Erhardt <fedora@sicherha.de> - 1.2.1-1
|
* Sat Apr 30 2022 Christoph Erhardt <fedora@sicherha.de> - 1.2.1-1
|
||||||
- Bump version to 1.2.1
|
- Bump version to 1.2.1
|
||||||
- Drop upstreamed patch
|
- Drop upstreamed patch
|
||||||
|
- Add support for 32-bit x86 and Arm
|
||||||
|
|
||||||
* Sat Apr 16 2022 Christoph Erhardt <fedora@sicherha.de> - 1.2-1
|
* Sat Apr 16 2022 Christoph Erhardt <fedora@sicherha.de> - 1.2-1
|
||||||
- Bump version to 1.2
|
- Bump version to 1.2
|
||||||
|
|
Loading…
Reference in New Issue