Remove incredibly confusing isBaseAddressKnownZero.
authorRafael Espindola <rafael.espindola@gmail.com>
Tue, 10 Mar 2015 04:11:52 +0000 (04:11 +0000)
committerRafael Espindola <rafael.espindola@gmail.com>
Tue, 10 Mar 2015 04:11:52 +0000 (04:11 +0000)
When referring to a symbol in a dwarf section on ELF we should use

.long foo

instead of

.long foo - .debug_something

because ELF is unaware of the content of the sections and therefore needs
relocations. This has nothing to do with optimizing a -0.

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

include/llvm/MC/MCSection.h
include/llvm/MC/MCSectionELF.h
lib/CodeGen/AsmPrinter/AsmPrinterDwarf.cpp
lib/Target/NVPTX/NVPTXSection.h

index e2bfe90c9ed0364aba0cf90ada01b8dbc20762df..3a8985952483bbf0302266d57287b3605547bffb 100644 (file)
@@ -52,14 +52,6 @@ namespace llvm {
                                       raw_ostream &OS,
                                       const MCExpr *Subsection) const = 0;
 
-    /// isBaseAddressKnownZero - Return true if we know that this section will
-    /// get a base address of zero.  In cases where we know that this is true we
-    /// can emit section offsets as direct references to avoid a subtraction
-    /// from the base of the section, saving a relocation.
-    virtual bool isBaseAddressKnownZero() const {
-      return false;
-    }
-
     // UseCodeAlign - Return true if a .align directive should use
     // "optimized nops" to fill instead of 0s.
     virtual bool UseCodeAlign() const = 0;
index 5fc64a693a8fb6adf0737c0c458ae9c2937b4ca7..deb95f8d949d259eefcf0c8966584f4e211c52d1 100644 (file)
@@ -75,12 +75,6 @@ public:
   bool UseCodeAlign() const override;
   bool isVirtualSection() const override;
 
-  /// isBaseAddressKnownZero - We know that non-allocatable sections (like
-  /// debug info) have a base of zero.
-  bool isBaseAddressKnownZero() const override {
-    return (getFlags() & ELF::SHF_ALLOC) == 0;
-  }
-
   static bool classof(const MCSection *S) {
     return S->getVariant() == SV_ELF;
   }
index 37434312555e715311d158fcc7e52fc99464fba4..50047c1ab7127606c4c32cd261b913102da301ec 100644 (file)
@@ -179,9 +179,8 @@ void AsmPrinter::EmitSectionOffset(const MCSymbol *Label,
   assert((!Label->isInSection() || &Label->getSection() == &Section) &&
          "Section offset using wrong section base for label");
 
-  // If the section in question will end up with an address of 0 anyway, we can
-  // just emit an absolute reference to save a relocation.
-  if (Section.isBaseAddressKnownZero()) {
+  // If the format uses relocations with dwarf, refer to the symbol directly.
+  if (MAI->doesDwarfUseRelocationsAcrossSections()) {
     OutStreamer.EmitSymbolValue(Label, 4);
     return;
   }
index 6bb1e3dbb27dc50286c03f2cdc7fc52f89ad590c..6b412b4a4c91c1e83dd544ad98a80f9313c9a95e 100644 (file)
@@ -36,7 +36,6 @@ public:
                             const MCExpr *Subsection) const override {}
 
   /// Base address of PTX sections is zero.
-  bool isBaseAddressKnownZero() const override { return true; }
   bool UseCodeAlign() const override { return false; }
   bool isVirtualSection() const override { return false; }
 };