mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-23 19:23:23 +01:00
untangle a TargetAsmInfo hack where ELFTargetAsmInfo would create a
'unnamed' bss section, but some impls would want a named one. Since they don't have consistent behavior, just make each target do their own thing, instead of doing something "sortof common" then having targets change immutable objects later. llvm-svn: 77165
This commit is contained in:
parent
d555fec28c
commit
0f4d60ca90
@ -23,7 +23,7 @@ namespace llvm {
|
||||
class Type;
|
||||
|
||||
struct ELFTargetAsmInfo: public TargetAsmInfo {
|
||||
explicit ELFTargetAsmInfo(const TargetMachine &TM);
|
||||
ELFTargetAsmInfo(const TargetMachine &TM);
|
||||
|
||||
/// getSectionForMergeableConstant - Given a mergeable constant with the
|
||||
/// specified size and relocation information, return a section that it
|
||||
|
@ -254,7 +254,6 @@ namespace llvm {
|
||||
explicit Section(unsigned F = SectionFlags::Invalid) : Flags(F) { }
|
||||
|
||||
public:
|
||||
|
||||
unsigned getEntitySize() const { return (Flags >> 24) & 0xFF; }
|
||||
|
||||
const std::string &getName() const { return Name; }
|
||||
@ -679,11 +678,9 @@ namespace llvm {
|
||||
virtual ~TargetAsmInfo();
|
||||
|
||||
const Section* getNamedSection(const char *Name,
|
||||
unsigned Flags = SectionFlags::None,
|
||||
bool Override = false) const;
|
||||
unsigned Flags = SectionFlags::None) const;
|
||||
const Section* getUnnamedSection(const char *Directive,
|
||||
unsigned Flags = SectionFlags::None,
|
||||
bool Override = false) const;
|
||||
unsigned Flags = SectionFlags::None) const;
|
||||
|
||||
/// Measure the specified inline asm to determine an approximation of its
|
||||
/// length.
|
||||
|
@ -59,6 +59,9 @@ ARMELFTargetAsmInfo::ARMELFTargetAsmInfo(const ARMBaseTargetMachine &TM):
|
||||
ARMTargetAsmInfo<ELFTargetAsmInfo>(TM) {
|
||||
Subtarget = &TM.getSubtarget<ARMSubtarget>();
|
||||
|
||||
BSSSection_ = getUnnamedSection("\t.bss",
|
||||
SectionFlags::Writable | SectionFlags::BSS);
|
||||
|
||||
NeedsSet = false;
|
||||
HasLEB128 = true;
|
||||
AbsoluteDebugSectionOffsets = true;
|
||||
|
@ -36,8 +36,7 @@ SPULinuxTargetAsmInfo::SPULinuxTargetAsmInfo(const SPUTargetMachine &TM) :
|
||||
// BSS section needs to be emitted as ".section"
|
||||
BSSSection = "\t.section\t.bss";
|
||||
BSSSection_ = getUnnamedSection("\t.section\t.bss",
|
||||
SectionFlags::Writable | SectionFlags::BSS,
|
||||
true);
|
||||
SectionFlags::Writable | SectionFlags::BSS);
|
||||
|
||||
SupportsDebugInformation = true;
|
||||
NeedsSet = true;
|
||||
|
@ -22,14 +22,13 @@
|
||||
#include "llvm/Target/ELFTargetAsmInfo.h"
|
||||
#include "llvm/Target/TargetMachine.h"
|
||||
#include "llvm/Target/TargetData.h"
|
||||
|
||||
using namespace llvm;
|
||||
|
||||
ELFTargetAsmInfo::ELFTargetAsmInfo(const TargetMachine &TM)
|
||||
: TargetAsmInfo(TM) {
|
||||
|
||||
BSSSection_ = getUnnamedSection("\t.bss",
|
||||
SectionFlags::Writable | SectionFlags::BSS);
|
||||
BSSSection_ = getUnnamedSection("\t.bss",
|
||||
SectionFlags::Writable | SectionFlags::BSS);
|
||||
ReadOnlySection = getNamedSection("\t.rodata", SectionFlags::None);
|
||||
TLSDataSection = getNamedSection("\t.tdata",
|
||||
SectionFlags::Writable | SectionFlags::TLS);
|
||||
|
@ -12,11 +12,12 @@
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
#include "MSP430TargetAsmInfo.h"
|
||||
#include "MSP430TargetMachine.h"
|
||||
|
||||
using namespace llvm;
|
||||
|
||||
MSP430TargetAsmInfo::MSP430TargetAsmInfo(const MSP430TargetMachine &TM)
|
||||
MSP430TargetAsmInfo::MSP430TargetAsmInfo(const TargetMachine &TM)
|
||||
: ELFTargetAsmInfo(TM) {
|
||||
AlignmentIsInBytes = false;
|
||||
|
||||
BSSSection_ = getUnnamedSection("\t.bss",
|
||||
SectionFlags::Writable | SectionFlags::BSS);
|
||||
}
|
||||
|
@ -14,16 +14,11 @@
|
||||
#ifndef MSP430TARGETASMINFO_H
|
||||
#define MSP430TARGETASMINFO_H
|
||||
|
||||
#include "llvm/Target/TargetAsmInfo.h"
|
||||
#include "llvm/Target/ELFTargetAsmInfo.h"
|
||||
|
||||
namespace llvm {
|
||||
|
||||
// Forward declaration.
|
||||
class MSP430TargetMachine;
|
||||
|
||||
struct MSP430TargetAsmInfo : public ELFTargetAsmInfo {
|
||||
explicit MSP430TargetAsmInfo(const MSP430TargetMachine &TM);
|
||||
explicit MSP430TargetAsmInfo(const TargetMachine &TM);
|
||||
};
|
||||
|
||||
} // namespace llvm
|
||||
|
@ -13,8 +13,6 @@
|
||||
|
||||
#include "MipsTargetAsmInfo.h"
|
||||
#include "MipsTargetMachine.h"
|
||||
#include "llvm/GlobalVariable.h"
|
||||
|
||||
using namespace llvm;
|
||||
|
||||
MipsTargetAsmInfo::MipsTargetAsmInfo(const MipsTargetMachine &TM)
|
||||
@ -32,6 +30,9 @@ MipsTargetAsmInfo::MipsTargetAsmInfo(const MipsTargetMachine &TM)
|
||||
BSSSection = "\t.section\t.bss";
|
||||
CStringSection = ".rodata.str";
|
||||
|
||||
BSSSection_ = getUnnamedSection("\t.bss",
|
||||
SectionFlags::Writable | SectionFlags::BSS);
|
||||
|
||||
if (!TM.getSubtarget<MipsSubtarget>().hasABICall())
|
||||
JumpTableDirective = "\t.word\t";
|
||||
else
|
||||
|
@ -14,23 +14,14 @@
|
||||
#ifndef MIPSTARGETASMINFO_H
|
||||
#define MIPSTARGETASMINFO_H
|
||||
|
||||
#include "MipsSubtarget.h"
|
||||
#include "llvm/DerivedTypes.h"
|
||||
#include "llvm/Target/TargetAsmInfo.h"
|
||||
#include "llvm/Target/TargetOptions.h"
|
||||
#include "llvm/Target/ELFTargetAsmInfo.h"
|
||||
|
||||
namespace llvm {
|
||||
|
||||
// Forward declaration.
|
||||
class GlobalValue;
|
||||
class MipsTargetMachine;
|
||||
|
||||
struct MipsTargetAsmInfo : public ELFTargetAsmInfo {
|
||||
explicit MipsTargetAsmInfo(const MipsTargetMachine &TM);
|
||||
|
||||
private:
|
||||
const MipsSubtarget *Subtarget;
|
||||
};
|
||||
|
||||
} // namespace llvm
|
||||
|
@ -50,13 +50,11 @@ PPCDarwinTargetAsmInfo::PreferredEHDataFormat(DwarfEncoding::Target Reason,
|
||||
}
|
||||
|
||||
const char *
|
||||
PPCDarwinTargetAsmInfo::getEHGlobalPrefix() const
|
||||
{
|
||||
PPCDarwinTargetAsmInfo::getEHGlobalPrefix() const {
|
||||
const PPCSubtarget* Subtarget = &TM.getSubtarget<PPCSubtarget>();
|
||||
if (Subtarget->getDarwinVers() > 9)
|
||||
return PrivateGlobalPrefix;
|
||||
else
|
||||
return "";
|
||||
return "";
|
||||
}
|
||||
|
||||
PPCLinuxTargetAsmInfo::PPCLinuxTargetAsmInfo(const PPCTargetMachine &TM) :
|
||||
@ -74,9 +72,8 @@ PPCLinuxTargetAsmInfo::PPCLinuxTargetAsmInfo(const PPCTargetMachine &TM) :
|
||||
BSSSection = "\t.section\t\".sbss\",\"aw\",@nobits";
|
||||
|
||||
// PPC/Linux normally uses named section for BSS.
|
||||
BSSSection_ = getNamedSection("\t.bss",
|
||||
SectionFlags::Writable | SectionFlags::BSS,
|
||||
/* Override */ true);
|
||||
BSSSection_ = getNamedSection("\t.bss",
|
||||
SectionFlags::Writable | SectionFlags::BSS);
|
||||
|
||||
// Debug Information
|
||||
AbsoluteDebugSectionOffsets = true;
|
||||
|
@ -15,8 +15,8 @@
|
||||
#include "llvm/ADT/SmallVector.h"
|
||||
using namespace llvm;
|
||||
|
||||
SparcELFTargetAsmInfo::SparcELFTargetAsmInfo(const TargetMachine &TM):
|
||||
ELFTargetAsmInfo(TM) {
|
||||
SparcELFTargetAsmInfo::SparcELFTargetAsmInfo(const TargetMachine &TM)
|
||||
: ELFTargetAsmInfo(TM) {
|
||||
Data16bitsDirective = "\t.half\t";
|
||||
Data32bitsDirective = "\t.word\t";
|
||||
Data64bitsDirective = 0; // .xword is only supported by V9.
|
||||
@ -27,9 +27,8 @@ SparcELFTargetAsmInfo::SparcELFTargetAsmInfo(const TargetMachine &TM):
|
||||
CStringSection=".rodata.str";
|
||||
|
||||
// Sparc normally uses named section for BSS.
|
||||
BSSSection_ = getNamedSection("\t.bss",
|
||||
SectionFlags::Writable | SectionFlags::BSS,
|
||||
/* Override */ true);
|
||||
BSSSection_ = getNamedSection("\t.bss",
|
||||
SectionFlags::Writable | SectionFlags::BSS);
|
||||
}
|
||||
|
||||
|
||||
|
@ -14,7 +14,6 @@
|
||||
#ifndef SPARCTARGETASMINFO_H
|
||||
#define SPARCTARGETASMINFO_H
|
||||
|
||||
#include "llvm/Target/TargetAsmInfo.h"
|
||||
#include "llvm/Target/ELFTargetAsmInfo.h"
|
||||
|
||||
namespace llvm {
|
||||
|
@ -27,4 +27,7 @@ SystemZTargetAsmInfo::SystemZTargetAsmInfo(const SystemZTargetMachine &TM)
|
||||
PCSymbol = ".";
|
||||
|
||||
NonexecutableStackDirective = "\t.section\t.note.GNU-stack,\"\",@progbits";
|
||||
|
||||
BSSSection_ = getUnnamedSection("\t.bss",
|
||||
SectionFlags::Writable | SectionFlags::BSS);
|
||||
}
|
||||
|
@ -14,7 +14,6 @@
|
||||
#ifndef SystemZTARGETASMINFO_H
|
||||
#define SystemZTARGETASMINFO_H
|
||||
|
||||
#include "llvm/Target/TargetAsmInfo.h"
|
||||
#include "llvm/Target/ELFTargetAsmInfo.h"
|
||||
|
||||
namespace llvm {
|
||||
|
@ -389,12 +389,12 @@ TargetAsmInfo::getSectionForMergeableConstant(SectionKind Kind) const {
|
||||
}
|
||||
|
||||
|
||||
const Section *TargetAsmInfo::getNamedSection(const char *Name, unsigned Flags,
|
||||
bool Override) const {
|
||||
const Section *TargetAsmInfo::getNamedSection(const char *Name,
|
||||
unsigned Flags) const {
|
||||
Section &S = Sections[Name];
|
||||
|
||||
// This is newly-created section, set it up properly.
|
||||
if (S.Flags == SectionFlags::Invalid || Override) {
|
||||
if (S.Name.empty()) {
|
||||
S.Flags = Flags | SectionFlags::Named;
|
||||
S.Name = Name;
|
||||
}
|
||||
@ -403,12 +403,11 @@ const Section *TargetAsmInfo::getNamedSection(const char *Name, unsigned Flags,
|
||||
}
|
||||
|
||||
const Section*
|
||||
TargetAsmInfo::getUnnamedSection(const char *Directive, unsigned Flags,
|
||||
bool Override) const {
|
||||
TargetAsmInfo::getUnnamedSection(const char *Directive, unsigned Flags) const {
|
||||
Section& S = Sections[Directive];
|
||||
|
||||
// This is newly-created section, set it up properly.
|
||||
if (S.Flags == SectionFlags::Invalid || Override) {
|
||||
if (S.Name.empty()) {
|
||||
S.Flags = Flags & ~SectionFlags::Named;
|
||||
S.Name = Directive;
|
||||
}
|
||||
|
@ -128,6 +128,9 @@ X86ELFTargetAsmInfo::X86ELFTargetAsmInfo(const X86TargetMachine &TM):
|
||||
// Set up DWARF directives
|
||||
HasLEB128 = true; // Target asm supports leb128 directives (little-endian)
|
||||
|
||||
BSSSection_ = getUnnamedSection("\t.bss",
|
||||
SectionFlags::Writable | SectionFlags::BSS);
|
||||
|
||||
// Debug Information
|
||||
AbsoluteDebugSectionOffsets = true;
|
||||
SupportsDebugInformation = true;
|
||||
|
Loading…
Reference in New Issue
Block a user