aboutsummaryrefslogtreecommitdiff
path: root/gold
diff options
context:
space:
mode:
authorIan Lance Taylor <ian@airs.com>2012-03-15 16:32:22 +0000
committerIan Lance Taylor <ian@airs.com>2012-03-15 16:32:22 +0000
commit14dc9ef7d17b555efe65bb40ff358696c4f038ad (patch)
tree0348e734e9e82ec38b8acd80f9cc977915abdd66 /gold
parent57651221de401ff77b3c43e2b678190e574f9baa (diff)
downloadbinutils-14dc9ef7d17b555efe65bb40ff358696c4f038ad.zip
binutils-14dc9ef7d17b555efe65bb40ff358696c4f038ad.tar.gz
binutils-14dc9ef7d17b555efe65bb40ff358696c4f038ad.tar.bz2
PR gold/13850
* layout.cc (Layout::make_output_section): Correctly mark SHT_INIT_ARRAY, et. al., as relro.
Diffstat (limited to 'gold')
-rw-r--r--gold/ChangeLog6
-rw-r--r--gold/layout.cc22
2 files changed, 18 insertions, 10 deletions
diff --git a/gold/ChangeLog b/gold/ChangeLog
index 5bdda03..0c1a7e1 100644
--- a/gold/ChangeLog
+++ b/gold/ChangeLog
@@ -1,3 +1,9 @@
+2012-03-15 Ian Lance Taylor <iant@google.com>
+
+ PR gold/13850
+ * layout.cc (Layout::make_output_section): Correctly mark
+ SHT_INIT_ARRAY, et. al., as relro.
+
2012-03-14 Doug Kwan <dougkwan@google.com>
* gold/arm.cc (Target_arm::Scan::global): Generate R_ARM_GLOB_DAT
diff --git a/gold/layout.cc b/gold/layout.cc
index a4ef31a..c120376 100644
--- a/gold/layout.cc
+++ b/gold/layout.cc
@@ -1379,25 +1379,27 @@ Layout::make_output_section(const char* name, elfcpp::Elf_Word type,
bool is_relro_local = false;
if (!this->script_options_->saw_sections_clause()
&& parameters->options().relro()
- && type == elfcpp::SHT_PROGBITS
&& (flags & elfcpp::SHF_ALLOC) != 0
&& (flags & elfcpp::SHF_WRITE) != 0)
{
- if (strcmp(name, ".data.rel.ro") == 0)
- is_relro = true;
- else if (strcmp(name, ".data.rel.ro.local") == 0)
+ if (type == elfcpp::SHT_PROGBITS)
{
- is_relro = true;
- is_relro_local = true;
+ if (strcmp(name, ".data.rel.ro") == 0)
+ is_relro = true;
+ else if (strcmp(name, ".data.rel.ro.local") == 0)
+ {
+ is_relro = true;
+ is_relro_local = true;
+ }
+ else if (strcmp(name, ".ctors") == 0
+ || strcmp(name, ".dtors") == 0
+ || strcmp(name, ".jcr") == 0)
+ is_relro = true;
}
else if (type == elfcpp::SHT_INIT_ARRAY
|| type == elfcpp::SHT_FINI_ARRAY
|| type == elfcpp::SHT_PREINIT_ARRAY)
is_relro = true;
- else if (strcmp(name, ".ctors") == 0
- || strcmp(name, ".dtors") == 0
- || strcmp(name, ".jcr") == 0)
- is_relro = true;
}
if (is_relro)