mirror of
				https://github.com/c64scene-ar/llvm-6502.git
				synced 2025-10-31 08:16:47 +00:00 
			
		
		
		
	This allows the compiler/assembly programmer to switch back to a section. This in turn fixes the bootstrap failure on powerpc (tested on gcc110) without changing the ppc codegen at all. I will try to cleanup the various getELFSection overloads in a followup patch. Just using a default argument now would lead to ambiguities. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@234099 91177308-0d34-0410-b5e6-96231b3b80d8
		
			
				
	
	
		
			73 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			73 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| //===- MCSection.h - Machine Code Sections ----------------------*- C++ -*-===//
 | |
| //
 | |
| //                     The LLVM Compiler Infrastructure
 | |
| //
 | |
| // This file is distributed under the University of Illinois Open Source
 | |
| // License. See LICENSE.TXT for details.
 | |
| //
 | |
| //===----------------------------------------------------------------------===//
 | |
| //
 | |
| // This file declares the MCSection class.
 | |
| //
 | |
| //===----------------------------------------------------------------------===//
 | |
| 
 | |
| #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"
 | |
| 
 | |
| namespace llvm {
 | |
| class MCAsmInfo;
 | |
| class MCContext;
 | |
| class MCExpr;
 | |
| class MCSymbol;
 | |
| class raw_ostream;
 | |
| 
 | |
| /// Instances of this class represent a uniqued identifier for a section in the
 | |
| /// current translation unit.  The MCContext class uniques and creates these.
 | |
| class MCSection {
 | |
| public:
 | |
|   enum SectionVariant { SV_COFF = 0, SV_ELF, SV_MachO };
 | |
| 
 | |
| private:
 | |
|   MCSection(const MCSection &) = delete;
 | |
|   void operator=(const MCSection &) = delete;
 | |
| 
 | |
|   MCSymbol *Begin;
 | |
|   mutable MCSymbol *End;
 | |
| 
 | |
| protected:
 | |
|   MCSection(SectionVariant V, SectionKind K, MCSymbol *Begin)
 | |
|       : Begin(Begin), End(nullptr), Variant(V), Kind(K) {}
 | |
|   SectionVariant Variant;
 | |
|   SectionKind Kind;
 | |
| 
 | |
| public:
 | |
|   virtual ~MCSection();
 | |
| 
 | |
|   SectionKind getKind() const { return Kind; }
 | |
| 
 | |
|   SectionVariant getVariant() const { return Variant; }
 | |
| 
 | |
|   MCSymbol *getBeginSymbol() const { return Begin; }
 | |
|   MCSymbol *getEndSymbol(MCContext &Ctx) const;
 | |
|   bool hasEnded() const;
 | |
| 
 | |
|   virtual void PrintSwitchToSection(const MCAsmInfo &MAI, raw_ostream &OS,
 | |
|                                     const MCExpr *Subsection) const = 0;
 | |
| 
 | |
|   /// Return true if a .align directive should use "optimized nops" to fill
 | |
|   /// instead of 0s.
 | |
|   virtual bool UseCodeAlign() const = 0;
 | |
| 
 | |
|   /// Check whether this section is "virtual", that is has no actual object
 | |
|   /// file contents.
 | |
|   virtual bool isVirtualSection() const = 0;
 | |
| };
 | |
| 
 | |
| } // end namespace llvm
 | |
| 
 | |
| #endif
 |