Add a MCObjectFormat class so that code common to all targets that use a

single object format can be shared.

This also adds support for

mov zed+(bar-foo), %eax

on ELF and COFF targets.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@116675 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Rafael Espindola
2010-10-16 18:23:53 +00:00
parent cb2caf7380
commit f230df9af4
12 changed files with 194 additions and 63 deletions

View File

@@ -16,6 +16,7 @@ namespace llvm {
class MCDataFragment;
class MCFixup;
class MCInst;
class MCObjectFormat;
class MCObjectWriter;
class MCSection;
template<typename T>
@@ -33,7 +34,6 @@ protected: // Can only create subclasses.
/// TheTarget - The Target that this machine was created for.
const Target &TheTarget;
unsigned HasAbsolutizedSet : 1;
unsigned HasReliableSymbolDifference : 1;
unsigned HasScatteredSymbols : 1;
@@ -42,23 +42,12 @@ public:
const Target &getTarget() const { return TheTarget; }
virtual const MCObjectFormat &getObjectFormat() const = 0;
/// createObjectWriter - Create a new MCObjectWriter instance for use by the
/// assembler backend to emit the final object file.
virtual MCObjectWriter *createObjectWriter(raw_ostream &OS) const = 0;
/// hasAbsolutizedSet - Check whether this target "absolutizes"
/// assignments. That is, given code like:
/// a:
/// ...
/// b:
/// tmp = a - b
/// .long tmp
/// will the value of 'tmp' be a relocatable expression, or the assembly time
/// value of L0 - L1. This distinction is only relevant for platforms that
/// support scattered symbols, since in the absence of scattered symbols (a -
/// b) cannot change after assembly.
bool hasAbsolutizedSet() const { return HasAbsolutizedSet; }
/// hasReliableSymbolDifference - Check whether this target implements
/// accurate relocations for differences between symbols. If not, differences
/// between symbols will always be relocatable expressions and any references
@@ -68,7 +57,7 @@ public:
/// This should always be true (since it results in fewer relocations with no
/// loss of functionality), but is currently supported as a way to maintain
/// exact object compatibility with Darwin 'as' (on non-x86_64). It should
/// eventually should be eliminated. See also \see hasAbsolutizedSet.
/// eventually should be eliminated.
bool hasReliableSymbolDifference() const {
return HasReliableSymbolDifference;
}