summaryrefslogtreecommitdiffstats
path: root/lld/ELF/Writer.cpp
diff options
context:
space:
mode:
authorRafael Espindola <rafael.espindola@gmail.com>2016-09-29 18:50:34 +0000
committerRafael Espindola <rafael.espindola@gmail.com>2016-09-29 18:50:34 +0000
commit6d91fce526ee8e36fa24d95dfc0fc379d3662939 (patch)
tree9f45e4109bb282547cc2bb790bc7ad15a1541a75 /lld/ELF/Writer.cpp
parent6bb5498a4a6f86042089c90675657afa86f3948d (diff)
downloadbcm5719-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.cpp8
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);
OpenPOWER on IntegriCloud