MC/ObjectWriter: Add a new IsSymbolRefDifferenceFullyResolved target format specific hook.

- Currently just has stub implementations for Mach-O, ELF, and COFF.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@122037 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Daniel Dunbar 2010-12-17 04:54:54 +00:00
parent ff2e9b4225
commit 1f3662abba
4 changed files with 36 additions and 2 deletions

View File

@ -20,6 +20,7 @@ class MCAsmLayout;
class MCAssembler;
class MCFixup;
class MCFragment;
class MCSymbolRefExpr;
class MCValue;
class raw_ostream;
@ -77,6 +78,16 @@ public:
const MCFixup &Fixup, MCValue Target,
uint64_t &FixedValue) = 0;
/// \brief Check whether the difference (A - B) between two symbol
/// references is fully resolved.
///
/// Clients are not required to answer precisely and may conservatively return
/// false, even when a difference is fully resolved.
virtual bool
IsSymbolRefDifferenceFullyResolved(const MCAssembler &Asm,
const MCSymbolRefExpr *A,
const MCSymbolRefExpr *B) const = 0;
/// Check if a fixup is fully resolved.
///
/// This routine is used by the assembler to let the file format decide

View File

@ -333,8 +333,17 @@ namespace {
uint64_t Size, uint32_t Link, uint32_t Info,
uint64_t Alignment, uint64_t EntrySize);
virtual void WriteRelocationsFragment(const MCAssembler &Asm, MCDataFragment *F,
const MCSectionData *SD);
virtual void WriteRelocationsFragment(const MCAssembler &Asm,
MCDataFragment *F,
const MCSectionData *SD);
virtual bool
IsSymbolRefDifferenceFullyResolved(const MCAssembler &Asm,
const MCSymbolRefExpr *A,
const MCSymbolRefExpr *B) const {
// FIXME: Implement this!
return false;
}
virtual bool IsFixupFullyResolved(const MCAssembler &Asm,
const MCValue Target,

View File

@ -1123,6 +1123,12 @@ public:
UndefinedSymbolData);
}
bool IsSymbolRefDifferenceFullyResolved(const MCAssembler &Asm,
const MCSymbolRefExpr *A,
const MCSymbolRefExpr *B) const {
return false;
}
bool IsFixupFullyResolved(const MCAssembler &Asm,
const MCValue Target,
bool IsPCRel,

View File

@ -179,6 +179,14 @@ public:
MCValue Target,
uint64_t &FixedValue);
virtual bool
IsSymbolRefDifferenceFullyResolved(const MCAssembler &Asm,
const MCSymbolRefExpr *A,
const MCSymbolRefExpr *B) const {
// FIXME: Implement this!
return false;
}
virtual bool IsFixupFullyResolved(const MCAssembler &Asm,
const MCValue Target,
bool IsPCRel,