diff options
| author | Rafael Espindola <rafael.espindola@gmail.com> | 2016-09-29 18:50:34 +0000 |
|---|---|---|
| committer | Rafael Espindola <rafael.espindola@gmail.com> | 2016-09-29 18:50:34 +0000 |
| commit | 6d91fce526ee8e36fa24d95dfc0fc379d3662939 (patch) | |
| tree | 9f45e4109bb282547cc2bb790bc7ad15a1541a75 /lld/ELF/Writer.cpp | |
| parent | 6bb5498a4a6f86042089c90675657afa86f3948d (diff) | |
| download | bcm5719-llvm-6d91fce526ee8e36fa24d95dfc0fc379d3662939.tar.gz bcm5719-llvm-6d91fce526ee8e36fa24d95dfc0fc379d3662939.zip | |
Don't error if we can't put the header in a PT_LOAD.
If there is not sufficient address space, just give up and don't put
the header in the PT_LOAD.
This matches bfd behaviour and I found at least one script that
depends on having a section at address 0.
llvm-svn: 282750
Diffstat (limited to 'lld/ELF/Writer.cpp')
| -rw-r--r-- | lld/ELF/Writer.cpp | 8 |
1 files changed, 5 insertions, 3 deletions
diff --git a/lld/ELF/Writer.cpp b/lld/ELF/Writer.cpp index ac1d159219d..9f1346c090b 100644 --- a/lld/ELF/Writer.cpp +++ b/lld/ELF/Writer.cpp @@ -275,7 +275,7 @@ template <class ELFT> void Writer<ELFT>::run() { : createPhdrs(); fixHeaders(); if (ScriptConfig->HasSections) { - Script<ELFT>::X->assignAddresses(); + Script<ELFT>::X->assignAddresses(Phdrs); } else { fixSectionAlignments(); assignAddresses(); @@ -1047,8 +1047,10 @@ std::vector<PhdrEntry<ELFT>> Writer<ELFT>::createPhdrs() { // Add the first PT_LOAD segment for regular output sections. uintX_t Flags = computeFlags<ELFT>(PF_R); Phdr *Load = AddHdr(PT_LOAD, Flags); - Load->add(Out<ELFT>::ElfHeader); - Load->add(Out<ELFT>::ProgramHeaders); + if (!ScriptConfig->HasSections) { + Load->add(Out<ELFT>::ElfHeader); + Load->add(Out<ELFT>::ProgramHeaders); + } Phdr TlsHdr(PT_TLS, PF_R); Phdr RelRo(PT_GNU_RELRO, PF_R); |

