vsk created this revision. Herald added subscribers: kristof.beyls, aemerson.
We make the same decision when compiling the kernel or kexts -- we should do this in -ffreestanding mode as well to avoid size regressions in a potentially large set of firmware projects. It's still possible to get uwtable information in -ffreestanding mode by compiling with -funwind-tables (I expect this to be a rare case: I certainly haven't seen any projects like that). Context: -munwind-tables was enabled by default for some arm targets in r310006. Testing: check-clang rdar://problem/33934446 https://reviews.llvm.org/D37777 Files: lib/Driver/ToolChains/Clang.cpp test/Driver/clang-translation.c Index: test/Driver/clang-translation.c =================================================================== --- test/Driver/clang-translation.c +++ test/Driver/clang-translation.c @@ -73,6 +73,22 @@ // RUN: FileCheck -check-prefix=ARM64-APPLE %s // ARM64-APPLE: -munwind-table +// RUN: %clang -target arm64-apple-ios10 -### -ffreestanding -S %s -arch arm64 2>&1 | \ +// RUN: FileCheck -check-prefix=ARM64-FREESTANDING-APPLE %s +// +// RUN: %clang -target arm64-apple-ios10 -### -fno-unwind-tables -ffreestanding -S %s -arch arm64 2>&1 | \ +// RUN: FileCheck -check-prefix=ARM64-FREESTANDING-APPLE %s +// +// ARM64-FREESTANDING-APPLE-NOT: -munwind-table + +// RUN: %clang -target arm64-apple-ios10 -### -funwind-tables -S %s -arch arm64 2>&1 | \ +// RUN: FileCheck -check-prefix=ARM64-EXPLICIT-UWTABLE-APPLE %s +// +// RUN: %clang -target arm64-apple-ios10 -### -ffreestanding -funwind-tables -S %s -arch arm64 2>&1 | \ +// RUN: FileCheck -check-prefix=ARM64-EXPLICIT-UWTABLE-APPLE %s +// +// ARM64-EXPLICIT-UWTABLE-APPLE: -munwind-table + // RUN: %clang -target arm64-apple-ios10 -fno-exceptions -### -S %s -arch arm64 2>&1 | \ // RUN: FileCheck -check-prefix=ARM64-APPLE-EXCEP %s // ARM64-APPLE-EXCEP-NOT: -munwind-table Index: lib/Driver/ToolChains/Clang.cpp =================================================================== --- lib/Driver/ToolChains/Clang.cpp +++ lib/Driver/ToolChains/Clang.cpp @@ -3394,15 +3394,24 @@ CmdArgs.push_back("-mpie-copy-relocations"); } + // -fhosted is default. + // TODO: Audit uses of KernelOrKext and see where it'd be more appropriate to + // use Freestanding. + bool Freestanding = + Args.hasFlag(options::OPT_ffreestanding, options::OPT_fhosted, false) || + KernelOrKext; + if (Freestanding) + CmdArgs.push_back("-ffreestanding"); + // This is a coarse approximation of what llvm-gcc actually does, both // -fasynchronous-unwind-tables and -fnon-call-exceptions interact in more // complicated ways. bool AsynchronousUnwindTables = Args.hasFlag(options::OPT_fasynchronous_unwind_tables, options::OPT_fno_asynchronous_unwind_tables, (getToolChain().IsUnwindTablesDefault(Args) || getToolChain().getSanitizerArgs().needsUnwindTables()) && - !KernelOrKext); + !Freestanding); if (Args.hasFlag(options::OPT_funwind_tables, options::OPT_fno_unwind_tables, AsynchronousUnwindTables)) CmdArgs.push_back("-munwind-tables"); @@ -3792,11 +3801,6 @@ Args.AddLastArg(CmdArgs, options::OPT_ftlsmodel_EQ); - // -fhosted is default. - if (Args.hasFlag(options::OPT_ffreestanding, options::OPT_fhosted, false) || - KernelOrKext) - CmdArgs.push_back("-ffreestanding"); - // Forward -f (flag) options which we can pass directly. Args.AddLastArg(CmdArgs, options::OPT_femit_all_decls); Args.AddLastArg(CmdArgs, options::OPT_fheinous_gnu_extensions);
Index: test/Driver/clang-translation.c =================================================================== --- test/Driver/clang-translation.c +++ test/Driver/clang-translation.c @@ -73,6 +73,22 @@ // RUN: FileCheck -check-prefix=ARM64-APPLE %s // ARM64-APPLE: -munwind-table +// RUN: %clang -target arm64-apple-ios10 -### -ffreestanding -S %s -arch arm64 2>&1 | \ +// RUN: FileCheck -check-prefix=ARM64-FREESTANDING-APPLE %s +// +// RUN: %clang -target arm64-apple-ios10 -### -fno-unwind-tables -ffreestanding -S %s -arch arm64 2>&1 | \ +// RUN: FileCheck -check-prefix=ARM64-FREESTANDING-APPLE %s +// +// ARM64-FREESTANDING-APPLE-NOT: -munwind-table + +// RUN: %clang -target arm64-apple-ios10 -### -funwind-tables -S %s -arch arm64 2>&1 | \ +// RUN: FileCheck -check-prefix=ARM64-EXPLICIT-UWTABLE-APPLE %s +// +// RUN: %clang -target arm64-apple-ios10 -### -ffreestanding -funwind-tables -S %s -arch arm64 2>&1 | \ +// RUN: FileCheck -check-prefix=ARM64-EXPLICIT-UWTABLE-APPLE %s +// +// ARM64-EXPLICIT-UWTABLE-APPLE: -munwind-table + // RUN: %clang -target arm64-apple-ios10 -fno-exceptions -### -S %s -arch arm64 2>&1 | \ // RUN: FileCheck -check-prefix=ARM64-APPLE-EXCEP %s // ARM64-APPLE-EXCEP-NOT: -munwind-table Index: lib/Driver/ToolChains/Clang.cpp =================================================================== --- lib/Driver/ToolChains/Clang.cpp +++ lib/Driver/ToolChains/Clang.cpp @@ -3394,15 +3394,24 @@ CmdArgs.push_back("-mpie-copy-relocations"); } + // -fhosted is default. + // TODO: Audit uses of KernelOrKext and see where it'd be more appropriate to + // use Freestanding. + bool Freestanding = + Args.hasFlag(options::OPT_ffreestanding, options::OPT_fhosted, false) || + KernelOrKext; + if (Freestanding) + CmdArgs.push_back("-ffreestanding"); + // This is a coarse approximation of what llvm-gcc actually does, both // -fasynchronous-unwind-tables and -fnon-call-exceptions interact in more // complicated ways. bool AsynchronousUnwindTables = Args.hasFlag(options::OPT_fasynchronous_unwind_tables, options::OPT_fno_asynchronous_unwind_tables, (getToolChain().IsUnwindTablesDefault(Args) || getToolChain().getSanitizerArgs().needsUnwindTables()) && - !KernelOrKext); + !Freestanding); if (Args.hasFlag(options::OPT_funwind_tables, options::OPT_fno_unwind_tables, AsynchronousUnwindTables)) CmdArgs.push_back("-munwind-tables"); @@ -3792,11 +3801,6 @@ Args.AddLastArg(CmdArgs, options::OPT_ftlsmodel_EQ); - // -fhosted is default. - if (Args.hasFlag(options::OPT_ffreestanding, options::OPT_fhosted, false) || - KernelOrKext) - CmdArgs.push_back("-ffreestanding"); - // Forward -f (flag) options which we can pass directly. Args.AddLastArg(CmdArgs, options::OPT_femit_all_decls); Args.AddLastArg(CmdArgs, options::OPT_fheinous_gnu_extensions);
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits