diff options
Diffstat (limited to 'ELF/Writer.h')
-rw-r--r-- | ELF/Writer.h | 48 |
1 files changed, 38 insertions, 10 deletions
diff --git a/ELF/Writer.h b/ELF/Writer.h index df25d8e404c2..718e3139a809 100644 --- a/ELF/Writer.h +++ b/ELF/Writer.h @@ -10,28 +10,56 @@ #ifndef LLD_ELF_WRITER_H #define LLD_ELF_WRITER_H +#include "llvm/ADT/ArrayRef.h" +#include "llvm/ADT/StringRef.h" +#include <cstdint> #include <memory> -namespace llvm { - class StringRef; -} - namespace lld { namespace elf { +class InputFile; +class OutputSectionBase; template <class ELFT> class InputSectionBase; template <class ELFT> class ObjectFile; template <class ELFT> class SymbolTable; +template <class ELFT> void writeResult(); +template <class ELFT> void markLive(); +template <class ELFT> bool isRelroSection(const OutputSectionBase *Sec); -template <class ELFT> void writeResult(SymbolTable<ELFT> *Symtab); +// This describes a program header entry. +// Each contains type, access flags and range of output sections that will be +// placed in it. +struct PhdrEntry { + PhdrEntry(unsigned Type, unsigned Flags); + void add(OutputSectionBase *Sec); -template <class ELFT> void markLive(); + uint64_t p_paddr = 0; + uint64_t p_vaddr = 0; + uint64_t p_align = 0; + uint64_t p_memsz = 0; + uint64_t p_filesz = 0; + uint64_t p_offset = 0; + uint32_t p_type = 0; + uint32_t p_flags = 0; -template <class ELFT> -llvm::StringRef getOutputSectionName(InputSectionBase<ELFT> *S); + OutputSectionBase *First = nullptr; + OutputSectionBase *Last = nullptr; + bool HasLMA = false; +}; + +llvm::StringRef getOutputSectionName(llvm::StringRef Name); template <class ELFT> -void reportDiscarded(InputSectionBase<ELFT> *IS, - const std::unique_ptr<elf::ObjectFile<ELFT>> &File); +void allocateHeaders(llvm::MutableArrayRef<PhdrEntry>, + llvm::ArrayRef<OutputSectionBase *>); +template <class ELFT> void reportDiscarded(InputSectionBase<ELFT> *IS); + +template <class ELFT> uint32_t getMipsEFlags(); + +uint8_t getMipsFpAbiFlag(uint8_t OldFlag, uint8_t NewFlag, + llvm::StringRef FileName); + +bool isMipsN32Abi(const InputFile *F); } } |