1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
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> &);
|