summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--clang/include/clang/Basic/DiagnosticFrontendKinds.td1
-rw-r--r--clang/include/clang/Basic/TargetInfo.h7
-rw-r--r--clang/tools/clang-cc/clang-cc.cpp13
3 files changed, 21 insertions, 0 deletions
diff --git a/clang/include/clang/Basic/DiagnosticFrontendKinds.td b/clang/include/clang/Basic/DiagnosticFrontendKinds.td
index a06042ed4b1..432b63a8b07 100644
--- a/clang/include/clang/Basic/DiagnosticFrontendKinds.td
+++ b/clang/include/clang/Basic/DiagnosticFrontendKinds.td
@@ -11,6 +11,7 @@ let Component = "Frontend" in {
def err_fe_unknown_triple : Error<
"unknown target triple '%0', please use -triple or -arch">;
+def err_fe_unknown_target_abi : Error<"unknown target ABI '%0'">;
def err_fe_error_reading : Error<"error reading '%0'">;
def err_fe_error_reading_stdin : Error<"error reading stdin">;
def err_fe_error_backend : Error<"error in backend: %0">, DefaultFatal;
diff --git a/clang/include/clang/Basic/TargetInfo.h b/clang/include/clang/Basic/TargetInfo.h
index f8dca87a260..ee742aafe37 100644
--- a/clang/include/clang/Basic/TargetInfo.h
+++ b/clang/include/clang/Basic/TargetInfo.h
@@ -352,6 +352,13 @@ public:
llvm::StringMap<bool> &Features) const {
}
+ /// setABI - Use the specific ABI.
+ ///
+ /// \return - False on error (invalid ABI name).
+ virtual bool setABI(const std::string &Name) {
+ return false;
+ }
+
/// setFeatureEnabled - Enable or disable a specific target feature,
/// the feature name must be valid.
///
diff --git a/clang/tools/clang-cc/clang-cc.cpp b/clang/tools/clang-cc/clang-cc.cpp
index 30aef0b98d0..179fb334f1a 100644
--- a/clang/tools/clang-cc/clang-cc.cpp
+++ b/clang/tools/clang-cc/clang-cc.cpp
@@ -663,6 +663,10 @@ static llvm::cl::opt<bool>
NoElideConstructors("fno-elide-constructors",
llvm::cl::desc("Disable C++ copy constructor elision"));
+static llvm::cl::opt<std::string>
+TargetABI("target-abi",
+ llvm::cl::desc("Target a particular ABI type"));
+
// It might be nice to add bounds to the CommandLine library directly.
struct OptLevelParser : public llvm::cl::parser<unsigned> {
@@ -2242,6 +2246,15 @@ int main(int argc, char **argv) {
return 1;
}
+ // Set the target ABI if specified.
+ if (!TargetABI.empty()) {
+ if (!Target->setABI(TargetABI)) {
+ Diags.Report(FullSourceLoc(), diag::err_fe_unknown_target_abi)
+ << TargetABI;
+ return 1;
+ }
+ }
+
if (!InheritanceViewCls.empty()) // C++ visualization?
ProgAction = InheritanceView;
OpenPOWER on IntegriCloud