Skip to content

Commit f9fecab

Browse files
authored
Add -mno-unaligned-access and -mbig-endian to ARM and AArch64 multilib flags (llvm#114782)
This adds -mno-unaligned-access and -mbig-endian command line options to the set of flags used by the multilib selection for ARM and AArch64 targets.
1 parent 1b01064 commit f9fecab

File tree

2 files changed

+36
-0
lines changed

2 files changed

+36
-0
lines changed

clang/lib/Driver/ToolChain.cpp

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -230,6 +230,20 @@ static void getAArch64MultilibFlags(const Driver &D,
230230
Result.push_back(BranchProtectionArg->getAsString(Args));
231231
}
232232

233+
if (Arg *AlignArg = Args.getLastArg(
234+
options::OPT_mstrict_align, options::OPT_mno_strict_align,
235+
options::OPT_mno_unaligned_access, options::OPT_munaligned_access)) {
236+
if (AlignArg->getOption().matches(options::OPT_mstrict_align) ||
237+
AlignArg->getOption().matches(options::OPT_mno_unaligned_access))
238+
Result.push_back(AlignArg->getAsString(Args));
239+
}
240+
241+
if (Arg *Endian = Args.getLastArg(options::OPT_mbig_endian,
242+
options::OPT_mlittle_endian)) {
243+
if (Endian->getOption().matches(options::OPT_mbig_endian))
244+
Result.push_back(Endian->getAsString(Args));
245+
}
246+
233247
const Arg *ABIArg = Args.getLastArgNoClaim(options::OPT_mabi_EQ);
234248
if (ABIArg) {
235249
Result.push_back(ABIArg->getAsString(Args));
@@ -287,6 +301,20 @@ static void getARMMultilibFlags(const Driver &D,
287301
if (BranchProtectionArg) {
288302
Result.push_back(BranchProtectionArg->getAsString(Args));
289303
}
304+
305+
if (Arg *AlignArg = Args.getLastArg(
306+
options::OPT_mstrict_align, options::OPT_mno_strict_align,
307+
options::OPT_mno_unaligned_access, options::OPT_munaligned_access)) {
308+
if (AlignArg->getOption().matches(options::OPT_mstrict_align) ||
309+
AlignArg->getOption().matches(options::OPT_mno_unaligned_access))
310+
Result.push_back(AlignArg->getAsString(Args));
311+
}
312+
313+
if (Arg *Endian = Args.getLastArg(options::OPT_mbig_endian,
314+
options::OPT_mlittle_endian)) {
315+
if (Endian->getOption().matches(options::OPT_mbig_endian))
316+
Result.push_back(Endian->getAsString(Args));
317+
}
290318
}
291319

292320
static void getRISCVMultilibFlags(const Driver &D, const llvm::Triple &Triple,

clang/test/Driver/print-multi-selection-flags.c

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,14 @@
6868
// RUN: %clang -multi-lib-config=%S/Inputs/multilib/empty.yaml -print-multi-flags-experimental --target=aarch64-none-elf -mbranch-protection=standard | FileCheck --check-prefix=CHECK-BRANCH-PROTECTION %s
6969
// CHECK-BRANCH-PROTECTION: -mbranch-protection=standard
7070

71+
// RUN: %clang -multi-lib-config=%S/Inputs/multilib/empty.yaml -print-multi-flags-experimental --target=arm-none-eabi -mno-unaligned-access | FileCheck --check-prefix=CHECK-NO-UNALIGNED-ACCESS %s
72+
// RUN: %clang -multi-lib-config=%S/Inputs/multilib/empty.yaml -print-multi-flags-experimental --target=aarch64-none-elf -mno-unaligned-access | FileCheck --check-prefix=CHECK-NO-UNALIGNED-ACCESS %s
73+
// CHECK-NO-UNALIGNED-ACCESS: -mno-unaligned-access
74+
75+
// RUN: %clang -multi-lib-config=%S/Inputs/multilib/empty.yaml -print-multi-flags-experimental --target=arm-none-eabi -mbig-endian | FileCheck --check-prefix=CHECK-BIG-ENDIAN %s
76+
// RUN: %clang -multi-lib-config=%S/Inputs/multilib/empty.yaml -print-multi-flags-experimental --target=aarch64-none-elf -mbig-endian | FileCheck --check-prefix=CHECK-BIG-ENDIAN %s
77+
// CHECK-BIG-ENDIAN: -mbig-endian
78+
7179
// RUN: %clang -multi-lib-config=%S/Inputs/multilib/empty.yaml -print-multi-flags-experimental --target=riscv32-none-elf -march=rv32g | FileCheck --check-prefix=CHECK-RV32 %s
7280
// CHECK-RV32: --target=riscv32-unknown-none-elf
7381
// CHECK-RV32: -mabi=ilp32d

0 commit comments

Comments
 (0)