From 80882db88f82d78df5ddebe626b59c569749e789 Mon Sep 17 00:00:00 2001 From: Eric Christopher Date: Thu, 13 Dec 2012 03:00:35 +0000 Subject: [PATCH] Add a way of printing out an arbitrary label name for a section given the section. llvm-svn: 170087 --- llvm/include/llvm/MC/MCSection.h | 6 ++++++ llvm/include/llvm/MC/MCSectionCOFF.h | 6 ++++++ llvm/include/llvm/MC/MCSectionELF.h | 9 +++++++++ llvm/include/llvm/MC/MCSectionMachO.h | 8 ++++++++ llvm/lib/Target/NVPTX/NVPTXSection.h | 2 ++ 5 files changed, 31 insertions(+) diff --git a/llvm/include/llvm/MC/MCSection.h b/llvm/include/llvm/MC/MCSection.h index 21fdb6b..e575424 100644 --- a/llvm/include/llvm/MC/MCSection.h +++ b/llvm/include/llvm/MC/MCSection.h @@ -14,6 +14,7 @@ #ifndef LLVM_MC_MCSECTION_H #define LLVM_MC_MCSECTION_H +#include "llvm/ADT/StringRef.h" #include "llvm/MC/SectionKind.h" #include "llvm/Support/Compiler.h" @@ -49,6 +50,11 @@ namespace llvm { virtual void PrintSwitchToSection(const MCAsmInfo &MAI, raw_ostream &OS) const = 0; + // Convenience routines to get label names for the beginning/end of a + // section. + virtual std::string getLabelBeginName() const = 0; + virtual std::string getLabelEndName() 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 diff --git a/llvm/include/llvm/MC/MCSectionCOFF.h b/llvm/include/llvm/MC/MCSectionCOFF.h index 83bc63e..07c4714 100644 --- a/llvm/include/llvm/MC/MCSectionCOFF.h +++ b/llvm/include/llvm/MC/MCSectionCOFF.h @@ -50,6 +50,12 @@ namespace llvm { bool ShouldOmitSectionDirective(StringRef Name, const MCAsmInfo &MAI) const; StringRef getSectionName() const { return SectionName; } + virtual std::string getLabelBeginName() const { + return SectionName.str() + "_begin"; + } + virtual std::string getLabelEndName() const { + return SectionName.str() + "_end"; + } unsigned getCharacteristics() const { return Characteristics; } int getSelection () const { return Selection; } diff --git a/llvm/include/llvm/MC/MCSectionELF.h b/llvm/include/llvm/MC/MCSectionELF.h index 329c75c..8c31d04 100644 --- a/llvm/include/llvm/MC/MCSectionELF.h +++ b/llvm/include/llvm/MC/MCSectionELF.h @@ -17,6 +17,8 @@ #include "llvm/ADT/StringRef.h" #include "llvm/MC/MCSection.h" #include "llvm/Support/ELF.h" +#include "llvm/Support/raw_ostream.h" +#include "llvm/Support/Debug.h" namespace llvm { @@ -57,6 +59,13 @@ public: bool ShouldOmitSectionDirective(StringRef Name, const MCAsmInfo &MAI) const; StringRef getSectionName() const { return SectionName; } + virtual std::string getLabelBeginName() const { + dbgs() << SectionName.data(); + dbgs() << "_begin" << "\n"; + return SectionName.str() + "_begin"; } + virtual std::string getLabelEndName() const { + return SectionName.str() + "_end"; + } unsigned getType() const { return Type; } unsigned getFlags() const { return Flags; } unsigned getEntrySize() const { return EntrySize; } diff --git a/llvm/include/llvm/MC/MCSectionMachO.h b/llvm/include/llvm/MC/MCSectionMachO.h index 65ad796..898f571 100644 --- a/llvm/include/llvm/MC/MCSectionMachO.h +++ b/llvm/include/llvm/MC/MCSectionMachO.h @@ -145,6 +145,14 @@ public: return StringRef(SectionName); } + virtual std::string getLabelBeginName() const { + return StringRef(getSegmentName().str() + getSectionName().str() + "_begin"); + } + + virtual std::string getLabelEndName() const { + return StringRef(getSegmentName().str() + getSectionName().str() + "_end"); + } + unsigned getTypeAndAttributes() const { return TypeAndAttributes; } unsigned getStubSize() const { return Reserved2; } diff --git a/llvm/lib/Target/NVPTX/NVPTXSection.h b/llvm/lib/Target/NVPTX/NVPTXSection.h index 9c832e1..04c2da8 100644 --- a/llvm/lib/Target/NVPTX/NVPTXSection.h +++ b/llvm/lib/Target/NVPTX/NVPTXSection.h @@ -38,6 +38,8 @@ public: virtual bool isBaseAddressKnownZero() const { return true; } virtual bool UseCodeAlign() const { return false; } virtual bool isVirtualSection() const { return false; } + virtual std::string getLabelBeginName() const { return ""; } + virtual std::string getLabelEndName() const { return ""; } }; } // end namespace llvm -- 2.7.4