TargetAsmBackend();
unsigned HasReliableSymbolDifference : 1;
- unsigned HasScatteredSymbols : 1;
public:
virtual ~TargetAsmBackend();
return HasReliableSymbolDifference;
}
- /// hasScatteredSymbols - Check whether this target supports scattered
- /// symbols. If so, the assembler should assume that atoms can be scattered by
- /// the linker. In particular, this means that the offsets between symbols
- /// which are in distinct atoms is not known at link time, and the assembler
- /// must generate fixups and relocations appropriately.
- ///
- /// Note that the assembler currently does not reason about atoms, instead it
- /// assumes all temporary symbols reside in the "current atom".
- bool hasScatteredSymbols() const { return HasScatteredSymbols; }
-
/// doesSectionRequireSymbols - Check whether the given section requires that
/// all symbols (even temporaries) have symbol table entries.
virtual bool doesSectionRequireSymbols(const MCSection &Section) const {
UndefinedSymbolData);
}
-
bool IsFixupFullyResolved(const MCAssembler &Asm,
const MCValue Target,
bool IsPCRel,
const MCFragment *DF) const {
- // If we aren't using scattered symbols, the fixup is fully resolved.
- if (!Asm.getBackend().hasScatteredSymbols())
- return true;
-
// Otherwise, determine whether this value is actually resolved; scattering
// may cause atoms to move.
using namespace llvm;
TargetAsmBackend::TargetAsmBackend()
- : HasReliableSymbolDifference(false),
- HasScatteredSymbols(false)
+ : HasReliableSymbolDifference(false)
{
}
public:
Triple::OSType OSType;
ELFARMAsmBackend(const Target &T, Triple::OSType _OSType)
- : ARMAsmBackend(T), OSType(_OSType) {
- HasScatteredSymbols = true;
- }
+ : ARMAsmBackend(T), OSType(_OSType) { }
virtual const MCObjectFormat &getObjectFormat() const {
return Format;
class DarwinARMAsmBackend : public ARMAsmBackend {
MCMachOObjectFormat Format;
public:
- DarwinARMAsmBackend(const Target &T) : ARMAsmBackend(T) {
- HasScatteredSymbols = true;
- }
+ DarwinARMAsmBackend(const Target &T) : ARMAsmBackend(T) { }
virtual const MCObjectFormat &getObjectFormat() const {
return Format;
public:
Triple::OSType OSType;
ELFMBlazeAsmBackend(const Target &T, Triple::OSType _OSType)
- : MBlazeAsmBackend(T), OSType(_OSType) {
- HasScatteredSymbols = true;
- }
+ : MBlazeAsmBackend(T), OSType(_OSType) { }
virtual const MCObjectFormat &getObjectFormat() const {
return Format;
class DarwinPPCAsmBackend : public PPCAsmBackend {
MCMachOObjectFormat Format;
public:
- DarwinPPCAsmBackend(const Target &T) : PPCAsmBackend(T) {
- HasScatteredSymbols = true;
- }
+ DarwinPPCAsmBackend(const Target &T) : PPCAsmBackend(T) { }
virtual const MCObjectFormat &getObjectFormat() const {
return Format;
Triple::OSType OSType;
ELFX86AsmBackend(const Target &T, Triple::OSType _OSType)
: X86AsmBackend(T), OSType(_OSType) {
- HasScatteredSymbols = true;
HasReliableSymbolDifference = true;
}
WindowsX86AsmBackend(const Target &T, bool is64Bit)
: X86AsmBackend(T)
, Is64Bit(is64Bit) {
- HasScatteredSymbols = true;
}
virtual const MCObjectFormat &getObjectFormat() const {
public:
DarwinX86AsmBackend(const Target &T)
- : X86AsmBackend(T) {
- HasScatteredSymbols = true;
- }
+ : X86AsmBackend(T) { }
virtual const MCObjectFormat &getObjectFormat() const {
return Format;