diff options
| author | Daniel Dunbar <daniel@zuster.org> | 2010-12-17 04:54:54 +0000 |
|---|---|---|
| committer | Daniel Dunbar <daniel@zuster.org> | 2010-12-17 04:54:54 +0000 |
| commit | f2adf782abb1f50b210d4ff182981140787c81af (patch) | |
| tree | 92131746805e809dbfbd2c11aa4838de511b8096 | |
| parent | edb1cdff77a4ee34dc1abe9d1b5b125d74dc4b2a (diff) | |
| download | bcm5719-llvm-f2adf782abb1f50b210d4ff182981140787c81af.tar.gz bcm5719-llvm-f2adf782abb1f50b210d4ff182981140787c81af.zip | |
MC/ObjectWriter: Add a new IsSymbolRefDifferenceFullyResolved target format specific hook.
- Currently just has stub implementations for Mach-O, ELF, and COFF.
llvm-svn: 122037
| -rw-r--r-- | llvm/include/llvm/MC/MCObjectWriter.h | 11 | ||||
| -rw-r--r-- | llvm/lib/MC/ELFObjectWriter.cpp | 13 | ||||
| -rw-r--r-- | llvm/lib/MC/MachObjectWriter.cpp | 6 | ||||
| -rw-r--r-- | llvm/lib/MC/WinCOFFObjectWriter.cpp | 8 |
4 files changed, 36 insertions, 2 deletions
diff --git a/llvm/include/llvm/MC/MCObjectWriter.h b/llvm/include/llvm/MC/MCObjectWriter.h index bae3368f969..60625b4b536 100644 --- a/llvm/include/llvm/MC/MCObjectWriter.h +++ b/llvm/include/llvm/MC/MCObjectWriter.h @@ -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 diff --git a/llvm/lib/MC/ELFObjectWriter.cpp b/llvm/lib/MC/ELFObjectWriter.cpp index 1369d827b14..b9804d474b3 100644 --- a/llvm/lib/MC/ELFObjectWriter.cpp +++ b/llvm/lib/MC/ELFObjectWriter.cpp @@ -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, diff --git a/llvm/lib/MC/MachObjectWriter.cpp b/llvm/lib/MC/MachObjectWriter.cpp index d050ef0bd49..e12daa708bc 100644 --- a/llvm/lib/MC/MachObjectWriter.cpp +++ b/llvm/lib/MC/MachObjectWriter.cpp @@ -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, diff --git a/llvm/lib/MC/WinCOFFObjectWriter.cpp b/llvm/lib/MC/WinCOFFObjectWriter.cpp index 3a88a03f8bd..0ad086cbee0 100644 --- a/llvm/lib/MC/WinCOFFObjectWriter.cpp +++ b/llvm/lib/MC/WinCOFFObjectWriter.cpp @@ -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, |

