This patch adds a flag in MCAsmInfo that indicates whether dwarf register
authorAkira Hatanaka <ahatanak@gmail.com>
Thu, 7 Jul 2011 20:30:33 +0000 (20:30 +0000)
committerAkira Hatanaka <ahatanak@gmail.com>
Thu, 7 Jul 2011 20:30:33 +0000 (20:30 +0000)
numbers should be printed instead of symbolic register names in
MCAsmStreamer::EmitRegisterName. This is necessary because some versions of
GNU assembler won't accept code in which symbolic register names are used in
cfi directives. There is no change in behavior unless the flag is explicitly
set to true by a backend.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@134635 91177308-0d34-0410-b5e6-96231b3b80d8

include/llvm/MC/MCAsmInfo.h
lib/MC/MCAsmInfo.cpp
lib/MC/MCAsmStreamer.cpp

index 775d22bea42f19f5c9b097b564aa8c34ab160e34..15b6aa1342194da8493b386420522b0ba4d22d47 100644 (file)
@@ -284,6 +284,10 @@ namespace llvm {
     // use EmitLabelOffsetDifference.
     bool DwarfUsesLabelOffsetForRanges;
 
+    /// DwarfRegNumForCFI - True if dwarf register numbers are printed
+    /// instead of symbolic register names in .cfi_* directives.
+    bool DwarfRegNumForCFI;  // Defaults to false;
+
     //===--- CBE Asm Translation Table -----------------------------------===//
 
     const char *const *AsmTransCBE;          // Defaults to empty
@@ -475,6 +479,9 @@ namespace llvm {
     bool doesDwarfUsesLabelOffsetForRanges() const {
       return DwarfUsesLabelOffsetForRanges;
     }
+    bool useDwarfRegNumForCFI() const {
+      return DwarfRegNumForCFI;
+    }
     const char *const *getAsmCBE() const {
       return AsmTransCBE;
     }
index 73b259eaa0fe51f1cfdf5177a4eac307c1f93a6d..b8ce24b78f4ca8d18434cf7dbf85662dfc9c3628 100644 (file)
@@ -78,6 +78,7 @@ MCAsmInfo::MCAsmInfo() {
   DwarfRequiresRelocationForSectionOffset = true;
   DwarfSectionOffsetDirective = 0;
   DwarfUsesLabelOffsetForRanges = true;
+  DwarfRegNumForCFI = false;
   HasMicrosoftFastStdCallMangling = false;
 
   AsmTransCBE = 0;
index acf77558c33219acac47024995c014907f2f859a..4ea1c9fb842efebe54185d773abba661a96716d7 100644 (file)
@@ -825,7 +825,7 @@ void MCAsmStreamer::EmitCFIEndProc() {
 }
 
 void MCAsmStreamer::EmitRegisterName(int64_t Register) {
-  if (InstPrinter) {
+  if (InstPrinter && !MAI.useDwarfRegNumForCFI()) {
     const TargetAsmInfo &asmInfo = getContext().getTargetAsmInfo();
     unsigned LLVMRegister = asmInfo.getLLVMRegNum(Register, true);
     InstPrinter->printRegName(OS, LLVMRegister);