aboutsummaryrefslogtreecommitdiff
path: root/repos/extra/mold
diff options
context:
space:
mode:
Diffstat (limited to 'repos/extra/mold')
-rw-r--r--repos/extra/mold/.checksum3
-rw-r--r--repos/extra/mold/abuild5
-rw-r--r--repos/extra/mold/amd64_only.patch131
3 files changed, 136 insertions, 3 deletions
diff --git a/repos/extra/mold/.checksum b/repos/extra/mold/.checksum
index 8bf7a8df..c407e2ed 100644
--- a/repos/extra/mold/.checksum
+++ b/repos/extra/mold/.checksum
@@ -1 +1,2 @@
-552592b83b5a1d56e1de1b68cb11be7aaf685691ce1530fc9d61a2cd35033ee9 mold-v2.39.1.tar.gz
+cee8642743d6b954c2c50ff671c11d806802e57005b74bf9e2676e06218d3628 amd64_only.patch
+1b3c3986b9bc145ed8e7920efa9c12de94857b5a25bbdab0a94feb1c9be6209d mold-v2.40.0.tar.gz
diff --git a/repos/extra/mold/abuild b/repos/extra/mold/abuild
index fcc57c3c..25c20514 100644
--- a/repos/extra/mold/abuild
+++ b/repos/extra/mold/abuild
@@ -1,4 +1,5 @@
name=mold
-version=2.39.1
+version=2.40.0
release=1
-source="https://github.com/rui314/${name}/archive/v${version}/${name}-v${version}.tar.gz"
+source="https://github.com/rui314/${name}/archive/v${version}/${name}-v${version}.tar.gz
+ amd64_only.patch"
diff --git a/repos/extra/mold/amd64_only.patch b/repos/extra/mold/amd64_only.patch
new file mode 100644
index 00000000..1a1574a2
--- /dev/null
+++ b/repos/extra/mold/amd64_only.patch
@@ -0,0 +1,131 @@
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index bb88c8d..4f0e084 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -314,16 +314,9 @@ include_directories(${CMAKE_CURRENT_BINARY_DIR})
+ # compiler instances. This is hacky but greatly reduces compile time
+ # on a multicore machine.
+ list(APPEND MOLD_ELF_TARGETS
+- X86_64 I386 ARM64LE ARM64BE ARM32LE ARM32BE RV32LE RV32BE RV64LE
+- RV64BE PPC32 PPC64V1 PPC64V2 S390X SPARC64 M68K SH4LE SH4BE
+- LOONGARCH32 LOONGARCH64)
++ X86_64)
+
+ list(APPEND MOLD_ELF_TEMPLATE_FILES
+- src/arch-arm32.cc
+- src/arch-arm64.cc
+- src/arch-loongarch.cc
+- src/arch-riscv.cc
+- src/arch-sh4.cc
+ src/cmdline.cc
+ src/filetype.cc
+ src/gc-sections.cc
+@@ -390,13 +383,6 @@ target_sources(mold PRIVATE
+ lib/perf.cc
+ lib/random.cc
+ lib/tar.cc
+- src/arch-i386.cc
+- src/arch-m68k.cc
+- src/arch-ppc32.cc
+- src/arch-ppc64v1.cc
+- src/arch-ppc64v2.cc
+- src/arch-s390x.cc
+- src/arch-sparc64.cc
+ src/arch-x86-64.cc
+ src/elf.cc
+ src/entry.cc
+diff --git a/src/main.cc b/src/main.cc
+index c2faf27..0ea5d4c 100644
+--- a/src/main.cc
++++ b/src/main.cc
+@@ -279,11 +279,6 @@ int mold_main(int argc, char **argv) {
+ if (ctx.arg.emulation.empty())
+ ctx.arg.emulation = detect_machine_type(ctx, file_args);
+
+- // Redo if -m is not x86-64.
+- if constexpr (is_x86_64<E>)
+- if (ctx.arg.emulation != X86_64::name)
+- return redo_main(ctx, argc, argv);
+-
+ Timer t_all(ctx, "all");
+
+ install_signal_handler();
+diff --git a/src/mold.h b/src/mold.h
+index 237af93..8bf58bd 100644
+--- a/src/mold.h
++++ b/src/mold.h
+@@ -1665,7 +1665,6 @@ std::vector<std::string> parse_nonpositional_args(Context<E> &ctx);
+ // passes.cc
+ //
+
+-template <typename E> int redo_main(Context<E> &, int argc, char **argv);
+ template <typename E> void create_internal_file(Context<E> &);
+ template <typename E> void apply_exclude_libs(Context<E> &);
+ template <typename E> void create_synthetic_sections(Context<E> &);
+diff --git a/src/passes.cc b/src/passes.cc
+index 4e8ba24..3ebc333 100644
+--- a/src/passes.cc
++++ b/src/passes.cc
+@@ -13,54 +13,6 @@
+
+ namespace mold {
+
+-// Since mold_main is a template, we can't run it without a type parameter.
+-// We speculatively run mold_main with X86_64, and if the speculation was
+-// wrong, re-run it with an actual machine type.
+-template <typename E>
+-int redo_main(Context<E> &ctx, int argc, char **argv) {
+- std::string_view target = ctx.arg.emulation;
+-
+- if (target == I386::name)
+- return mold_main<I386>(argc, argv);
+- if (target == ARM64LE::name)
+- return mold_main<ARM64LE>(argc, argv);
+- if (target == ARM64BE::name)
+- return mold_main<ARM64BE>(argc, argv);
+- if (target == ARM32LE::name)
+- return mold_main<ARM32LE>(argc, argv);
+- if (target == ARM32BE::name)
+- return mold_main<ARM32BE>(argc, argv);
+- if (target == RV64LE::name)
+- return mold_main<RV64LE>(argc, argv);
+- if (target == RV64BE::name)
+- return mold_main<RV64BE>(argc, argv);
+- if (target == RV32LE::name)
+- return mold_main<RV32LE>(argc, argv);
+- if (target == RV32BE::name)
+- return mold_main<RV32BE>(argc, argv);
+- if (target == PPC32::name)
+- return mold_main<PPC32>(argc, argv);
+- if (target == PPC64V1::name)
+- return mold_main<PPC64V1>(argc, argv);
+- if (target == PPC64V2::name)
+- return mold_main<PPC64V2>(argc, argv);
+- if (target == S390X::name)
+- return mold_main<S390X>(argc, argv);
+- if (target == SPARC64::name)
+- return mold_main<SPARC64>(argc, argv);
+- if (target == M68K::name)
+- return mold_main<M68K>(argc, argv);
+- if (target == SH4LE::name)
+- return mold_main<SH4LE>(argc, argv);
+- if (target == SH4BE::name)
+- return mold_main<SH4BE>(argc, argv);
+- if (target == LOONGARCH32::name)
+- return mold_main<LOONGARCH32>(argc, argv);
+- if (target == LOONGARCH64::name)
+- return mold_main<LOONGARCH64>(argc, argv);
+- abort();
+-}
+-
+ template <typename E>
+ void apply_exclude_libs(Context<E> &ctx) {
+ Timer t(ctx, "apply_exclude_libs");
+@@ -3513,7 +3465,6 @@ void show_stats(Context<E> &ctx) {
+
+ using E = MOLD_TARGET;
+
+-template int redo_main(Context<E> &, int, char **);
+ template void create_internal_file(Context<E> &);
+ template void apply_exclude_libs(Context<E> &);
+ template void create_synthetic_sections(Context<E> &);