diff options
author | Daniel Dunbar <daniel@zuster.org> | 2009-10-15 15:02:14 +0000 |
---|---|---|
committer | Daniel Dunbar <daniel@zuster.org> | 2009-10-15 15:02:14 +0000 |
commit | 1ead150c92d07aceca9f139376cb647feb8ff355 (patch) | |
tree | bab63bcd10539b25ada12979d52cb24dbfe0d02b /lib/Target/PIC16/PIC16TargetObjectFile.h | |
parent | 8da373cf62d8dfdbf5e8a7c226d8a67153fe0013 (diff) | |
download | external_llvm-1ead150c92d07aceca9f139376cb647feb8ff355.zip external_llvm-1ead150c92d07aceca9f139376cb647feb8ff355.tar.gz external_llvm-1ead150c92d07aceca9f139376cb647feb8ff355.tar.bz2 |
Revert "Complete Rewrite of AsmPrinter, TargetObjectFile based on new
PIC16Section class", it breaks globals.ll.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@84184 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Target/PIC16/PIC16TargetObjectFile.h')
-rw-r--r-- | lib/Target/PIC16/PIC16TargetObjectFile.h | 159 |
1 files changed, 62 insertions, 97 deletions
diff --git a/lib/Target/PIC16/PIC16TargetObjectFile.h b/lib/Target/PIC16/PIC16TargetObjectFile.h index 6ec5512..75f6cce 100644 --- a/lib/Target/PIC16/PIC16TargetObjectFile.h +++ b/lib/Target/PIC16/PIC16TargetObjectFile.h @@ -10,8 +10,6 @@ #ifndef LLVM_TARGET_PIC16_TARGETOBJECTFILE_H #define LLVM_TARGET_PIC16_TARGETOBJECTFILE_H -#include "PIC16.h" -#include "PIC16ABINames.h" #include "llvm/Target/TargetLoweringObjectFile.h" #include "llvm/ADT/StringMap.h" #include <vector> @@ -21,7 +19,7 @@ namespace llvm { class GlobalVariable; class Module; class PIC16TargetMachine; - class PIC16Section; + class MCSectionPIC16; enum { DataBankSize = 80 }; @@ -31,124 +29,91 @@ namespace llvm { /// again and printing only those that match the current section. /// Keeping values inside the sections make printing a section much easier. /// - /// FIXME: MOVE ALL THIS STUFF TO PIC16Section. + /// FIXME: MOVE ALL THIS STUFF TO MCSectionPIC16. /// - - /// PIC16TargetObjectFile - PIC16 Object file. Contains data and code - /// sections. - // PIC16 Object File has two types of sections. - // 1. Standard Sections - // 1.1 un-initialized global data - // 1.2 initialized global data - // 1.3 program memory data - // 1.4 local variables of functions. - // 2. User defined sections - // 2.1 Objects placed in a specific section. (By _Section() macro) - // 2.2 Objects placed at a specific address. (By _Address() macro) + struct PIC16Section { + const MCSectionPIC16 *S_; // Connection to actual Section. + unsigned Size; // Total size of the objects contained. + bool SectionPrinted; + std::vector<const GlobalVariable*> Items; + + PIC16Section(const MCSectionPIC16 *s) { + S_ = s; + Size = 0; + SectionPrinted = false; + } + bool isPrinted() const { return SectionPrinted; } + void setPrintedStatus(bool status) { SectionPrinted = status; } + }; + class PIC16TargetObjectFile : public TargetLoweringObjectFile { /// SectionsByName - Bindings of names to allocated sections. - mutable StringMap<PIC16Section*> SectionsByName; + mutable StringMap<MCSectionPIC16*> SectionsByName; const TargetMachine *TM; - /// Lists of sections. - /// Standard Data Sections. - mutable std::vector<PIC16Section *> UDATASections_; - mutable std::vector<PIC16Section *> IDATASections_; - mutable PIC16Section * ROMDATASection_; - - /// Standard Auto Sections. - mutable std::vector<PIC16Section *> AUTOSections_; - - /// User specified sections. - mutable std::vector<PIC16Section *> USERSections_; - - - /// Find or Create a PIC16 Section, without adding it to any - /// section list. - PIC16Section *getPIC16Section(const std::string &Name, - PIC16SectionType Ty, - const std::string &Address = "", - int Color = -1) const; - - /// Convenience functions. These wrappers also take care of adding - /// the newly created section to the appropriate sections list. - - /// Find or Create PIC16 Standard Data Section. - PIC16Section *getPIC16DataSection(const std::string &Name, - PIC16SectionType Ty, - const std::string &Address = "", - int Color = -1) const; - - /// Find or Create PIC16 Standard Auto Section. - PIC16Section *getPIC16AutoSection(const std::string &Name, - PIC16SectionType Ty = UDATA_OVR, - const std::string &Address = "", - int Color = -1) const; - - /// Find or Create PIC16 Standard Auto Section. - PIC16Section *getPIC16UserSection(const std::string &Name, - PIC16SectionType Ty, - const std::string &Address = "", - int Color = -1) const; - - /// Allocate Un-initialized data to a standard UDATA section. - const MCSection *allocateUDATA(const GlobalVariable *GV) const; + const MCSectionPIC16 *getPIC16Section(const char *Name, + SectionKind K, + int Address = -1, + int Color = -1) const; + public: + mutable std::vector<PIC16Section*> BSSSections; + mutable std::vector<PIC16Section*> IDATASections; + mutable std::vector<PIC16Section*> AutosSections; + mutable std::vector<PIC16Section*> ROSections; + mutable PIC16Section *ExternalVarDecls; + mutable PIC16Section *ExternalVarDefs; - /// Allocate Initialized data to a standard IDATA section. - const MCSection *allocateIDATA(const GlobalVariable *GV) const; - - /// Allocate ROM data to the standard ROMDATA section. - const MCSection *allocateROMDATA(const GlobalVariable *GV) const; - - /// Allocate an AUTO variable to an AUTO section. - const MCSection *allocateAUTO(const GlobalVariable *GV) const; - - /// Allocate DATA in user specified section. - const MCSection *allocateInGivenSection(const GlobalVariable *GV) const; - - /// Allocate DATA at user specified address. - const MCSection *allocateAtGivenAddress(const GlobalVariable *GV, - const std::string &Addr) const; - - public: PIC16TargetObjectFile(); ~PIC16TargetObjectFile(); + void Initialize(MCContext &Ctx, const TargetMachine &TM); - /// Override section allocations for user specified sections. + virtual const MCSection * getExplicitSectionGlobal(const GlobalValue *GV, SectionKind Kind, Mangler *Mang, const TargetMachine &TM) const; - /// Select sections for Data and Auto variables(globals). virtual const MCSection *SelectSectionForGlobal(const GlobalValue *GV, SectionKind Kind, Mangler *Mang, const TargetMachine&) const; - /// Return a code section for a function. - const PIC16Section *SectionForCode (const std::string &FnName) const; - - /// Return a frame section for a function. - const PIC16Section *SectionForFrame (const std::string &FnName) const; - - /// Accessors for various section lists. - const std::vector<PIC16Section *> &UDATASections() const { - return UDATASections_; - } - const std::vector<PIC16Section *> &IDATASections() const { - return IDATASections_; + const MCSection *getSectionForFunction(const std::string &FnName) const; + const MCSection *getSectionForFunctionFrame(const std::string &FnName)const; + + + private: + std::string getSectionNameForSym(const std::string &Sym) const; + + const MCSection *getBSSSectionForGlobal(const GlobalVariable *GV) const; + const MCSection *getIDATASectionForGlobal(const GlobalVariable *GV) const; + const MCSection *getSectionForAuto(const GlobalVariable *GV) const; + const MCSection *CreateBSSSectionForGlobal(const GlobalVariable *GV, + std::string Addr = "") const; + const MCSection *CreateIDATASectionForGlobal(const GlobalVariable *GV, + std::string Addr = "") const; + const MCSection *getROSectionForGlobal(const GlobalVariable *GV) const; + const MCSection *CreateROSectionForGlobal(const GlobalVariable *GV, + std::string Addr = "") const; + const MCSection *CreateSectionForGlobal(const GlobalVariable *GV, + Mangler *Mang, + const std::string &Addr = "") const; + public: + void SetSectionForGVs(Module &M); + const std::vector<PIC16Section*> &getBSSSections() const { + return BSSSections; } - const PIC16Section *ROMDATASection() const { - return ROMDATASection_; + const std::vector<PIC16Section*> &getIDATASections() const { + return IDATASections; } - const std::vector<PIC16Section *> &AUTOSections() const { - return AUTOSections_; + const std::vector<PIC16Section*> &getAutosSections() const { + return AutosSections; } - const std::vector<PIC16Section *> &USERSections() const { - return USERSections_; + const std::vector<PIC16Section*> &getROSections() const { + return ROSections; } + }; } // end namespace llvm |