summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Target/PIC16/PIC16TargetObjectFile.cpp
diff options
context:
space:
mode:
authorChris Lattner <sabre@nondot.org>2009-08-06 16:39:58 +0000
committerChris Lattner <sabre@nondot.org>2009-08-06 16:39:58 +0000
commit1ff90134a41a692e653580260db8ea6f3c93ee95 (patch)
tree42987db99c57a0c0b5240eeb909ee4aac372e5ec /llvm/lib/Target/PIC16/PIC16TargetObjectFile.cpp
parentbeb7ea293111e9ac8a57ba200b89c6d7e1533e2c (diff)
downloadbcm5719-llvm-1ff90134a41a692e653580260db8ea6f3c93ee95.tar.gz
bcm5719-llvm-1ff90134a41a692e653580260db8ea6f3c93ee95.zip
Fix several fixmes and clean up code by sinking *all* section
creation activity into the target-specific subclasses of TLOF. Before this, globals with explicit sections could be created by the base class. 1. make getOrCreateSection protected, add a new getExplicitSectionGlobal pure virtual method to assign sections to globals with a specified section. 2. eliminate getSpecialCasedSectionGlobals, which is now PIC specific. 3. eliminate the getKindForNamedSection virtual method, which is now just a static method for ELF. 4. Add implementions of getExplicitSectionGlobal for ELF/PECOFF/Darwin/PIC16. They are now all detangled and understandable, woo! :) llvm-svn: 78319
Diffstat (limited to 'llvm/lib/Target/PIC16/PIC16TargetObjectFile.cpp')
-rw-r--r--llvm/lib/Target/PIC16/PIC16TargetObjectFile.cpp36
1 files changed, 17 insertions, 19 deletions
diff --git a/llvm/lib/Target/PIC16/PIC16TargetObjectFile.cpp b/llvm/lib/Target/PIC16/PIC16TargetObjectFile.cpp
index f15f3321c7c..b09ad305c28 100644
--- a/llvm/lib/Target/PIC16/PIC16TargetObjectFile.cpp
+++ b/llvm/lib/Target/PIC16/PIC16TargetObjectFile.cpp
@@ -242,28 +242,26 @@ PIC16TargetObjectFile::~PIC16TargetObjectFile() {
/// getSpecialCasedSectionGlobals - Allow the target to completely override
/// section assignment of a global.
-const MCSection *
-PIC16TargetObjectFile::getSpecialCasedSectionGlobals(const GlobalValue *GV,
- Mangler *Mang,
- SectionKind Kind) const {
- // If GV has a sectin name or section address create that section now.
- if (GV->hasSection()) {
- if (const GlobalVariable *GVar = cast<GlobalVariable>(GV)) {
- std::string SectName = GVar->getSection();
- // If address for a variable is specified, get the address and create
- // section.
- std::string AddrStr = "Address=";
- if (SectName.compare(0, AddrStr.length(), AddrStr) == 0) {
- std::string SectAddr = SectName.substr(AddrStr.length());
- return CreateSectionForGlobal(GVar, Mang, SectAddr);
- }
-
- // Create the section specified with section attribute.
- return CreateSectionForGlobal(GVar, Mang);
+const MCSection *PIC16TargetObjectFile::
+getExplicitSectionGlobal(const GlobalValue *GV, SectionKind Kind,
+ Mangler *Mang, const TargetMachine &TM) const {
+ assert(GV->hasSection());
+
+ if (const GlobalVariable *GVar = cast<GlobalVariable>(GV)) {
+ std::string SectName = GVar->getSection();
+ // If address for a variable is specified, get the address and create
+ // section.
+ std::string AddrStr = "Address=";
+ if (SectName.compare(0, AddrStr.length(), AddrStr) == 0) {
+ std::string SectAddr = SectName.substr(AddrStr.length());
+ return CreateSectionForGlobal(GVar, Mang, SectAddr);
}
+
+ // Create the section specified with section attribute.
+ return CreateSectionForGlobal(GVar, Mang);
}
- return 0;
+ return getOrCreateSection(GV->getSection().c_str(), false, Kind);
}
// Create a new section for global variable. If Addr is given then create
OpenPOWER on IntegriCloud