summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--lld/ELF/Writer.cpp13
1 files changed, 6 insertions, 7 deletions
diff --git a/lld/ELF/Writer.cpp b/lld/ELF/Writer.cpp
index 3eb345b2ba2..759ac3de20b 100644
--- a/lld/ELF/Writer.cpp
+++ b/lld/ELF/Writer.cpp
@@ -701,7 +701,7 @@ enum RankFlags {
RF_WRITE = 1 << 15,
RF_EXEC_WRITE = 1 << 14,
RF_EXEC = 1 << 13,
- RF_PROGBITS_NOT_EXEC_OR_WRITE = 1 << 12,
+ RF_RODATA = 1 << 12,
RF_NON_TLS_BSS = 1 << 11,
RF_NON_TLS_BSS_RO = 1 << 10,
RF_NOT_TLS = 1 << 9,
@@ -755,15 +755,14 @@ static unsigned getSectionRank(const OutputSection *Sec) {
Rank |= RF_EXEC_WRITE;
else
Rank |= RF_EXEC;
- } else {
- if (IsWrite)
- Rank |= RF_WRITE;
+ } else if (IsWrite) {
+ Rank |= RF_WRITE;
+ } else if (Sec->Type == SHT_PROGBITS) {
// Make non-executable and non-writable PROGBITS sections (e.g .rodata
- // .eh_frame) closer to .text . They likely contain PC or GOT relative
+ // .eh_frame) closer to .text. They likely contain PC or GOT relative
// relocations and there could be relocation overflow if other huge sections
// (.dynstr .dynsym) were placed in between.
- else if (Sec->Type == SHT_PROGBITS)
- Rank |= RF_PROGBITS_NOT_EXEC_OR_WRITE;
+ Rank |= RF_RODATA;
}
// If we got here we know that both A and B are in the same PT_LOAD.
OpenPOWER on IntegriCloud