Rafael Espindola | beee25e | 2015-08-14 14:12:54 +0000 | [diff] [blame] | 1 | //===- Writer.h -------------------------------------------------*- C++ -*-===// |
Michael J. Spencer | 84487f1 | 2015-07-24 21:03:07 +0000 | [diff] [blame] | 2 | // |
| 3 | // The LLVM Linker |
| 4 | // |
| 5 | // This file is distributed under the University of Illinois Open Source |
| 6 | // License. See LICENSE.TXT for details. |
| 7 | // |
| 8 | //===----------------------------------------------------------------------===// |
| 9 | |
| 10 | #ifndef LLD_ELF_WRITER_H |
| 11 | #define LLD_ELF_WRITER_H |
| 12 | |
Eugene Leviant | bbe3860 | 2016-07-19 09:25:43 +0000 | [diff] [blame] | 13 | #include <cstdint> |
George Rimar | 5d53d1f | 2016-07-12 08:50:42 +0000 | [diff] [blame] | 14 | #include <memory> |
| 15 | |
| 16 | namespace llvm { |
| 17 | class StringRef; |
| 18 | } |
| 19 | |
Michael J. Spencer | 84487f1 | 2015-07-24 21:03:07 +0000 | [diff] [blame] | 20 | namespace lld { |
Rafael Espindola | e0df00b | 2016-02-28 00:25:54 +0000 | [diff] [blame] | 21 | namespace elf { |
Eugene Leviant | bbe3860 | 2016-07-19 09:25:43 +0000 | [diff] [blame] | 22 | template <class ELFT> class OutputSectionBase; |
George Rimar | 5d53d1f | 2016-07-12 08:50:42 +0000 | [diff] [blame] | 23 | template <class ELFT> class InputSectionBase; |
| 24 | template <class ELFT> class ObjectFile; |
Rui Ueyama | 3ce825e | 2015-10-09 21:07:25 +0000 | [diff] [blame] | 25 | template <class ELFT> class SymbolTable; |
Rui Ueyama | 84907c5 | 2016-08-09 03:38:23 +0000 | [diff] [blame] | 26 | template <class ELFT> void writeResult(); |
Rui Ueyama | 4f8d21f | 2016-05-02 19:30:42 +0000 | [diff] [blame] | 27 | template <class ELFT> void markLive(); |
Eugene Leviant | bbe3860 | 2016-07-19 09:25:43 +0000 | [diff] [blame] | 28 | template <class ELFT> bool isRelroSection(OutputSectionBase<ELFT> *Sec); |
Eugene Leviant | bbe3860 | 2016-07-19 09:25:43 +0000 | [diff] [blame] | 29 | |
| 30 | // This describes a program header entry. |
| 31 | // Each contains type, access flags and range of output sections that will be |
| 32 | // placed in it. |
| 33 | template<class ELFT> |
Rafael Espindola | 74df5c7 | 2016-07-19 12:33:46 +0000 | [diff] [blame] | 34 | struct PhdrEntry { |
| 35 | PhdrEntry(unsigned Type, unsigned Flags); |
Rui Ueyama | 18f084f | 2016-07-20 19:36:41 +0000 | [diff] [blame] | 36 | void add(OutputSectionBase<ELFT> *Sec); |
Eugene Leviant | bbe3860 | 2016-07-19 09:25:43 +0000 | [diff] [blame] | 37 | |
| 38 | typename ELFT::Phdr H = {}; |
| 39 | OutputSectionBase<ELFT> *First = nullptr; |
| 40 | OutputSectionBase<ELFT> *Last = nullptr; |
| 41 | }; |
George Rimar | 5d53d1f | 2016-07-12 08:50:42 +0000 | [diff] [blame] | 42 | |
| 43 | template <class ELFT> |
| 44 | llvm::StringRef getOutputSectionName(InputSectionBase<ELFT> *S); |
| 45 | |
Rui Ueyama | 96bdd5b | 2016-07-25 22:26:28 +0000 | [diff] [blame] | 46 | template <class ELFT> void reportDiscarded(InputSectionBase<ELFT> *IS); |
Rui Ueyama | 31f32fa | 2016-08-08 19:39:45 +0000 | [diff] [blame] | 47 | |
| 48 | template <class ELFT> uint32_t getMipsEFlags(); |
Simon Atanasyan | 85c6b44 | 2016-08-12 06:28:49 +0000 | [diff] [blame] | 49 | |
| 50 | uint8_t getMipsFpAbiFlag(uint8_t OldFlag, uint8_t NewFlag, |
| 51 | llvm::StringRef FileName); |
Rui Ueyama | afff74e2 | 2015-08-05 23:24:46 +0000 | [diff] [blame] | 52 | } |
| 53 | } |
Michael J. Spencer | 84487f1 | 2015-07-24 21:03:07 +0000 | [diff] [blame] | 54 | |
| 55 | #endif |