diff options
author | Ian Lance Taylor <ian@airs.com> | 2012-03-15 16:32:22 +0000 |
---|---|---|
committer | Ian Lance Taylor <ian@airs.com> | 2012-03-15 16:32:22 +0000 |
commit | 14dc9ef7d17b555efe65bb40ff358696c4f038ad (patch) | |
tree | 0348e734e9e82ec38b8acd80f9cc977915abdd66 | |
parent | 57651221de401ff77b3c43e2b678190e574f9baa (diff) | |
download | gdb-14dc9ef7d17b555efe65bb40ff358696c4f038ad.zip gdb-14dc9ef7d17b555efe65bb40ff358696c4f038ad.tar.gz gdb-14dc9ef7d17b555efe65bb40ff358696c4f038ad.tar.bz2 |
PR gold/13850
* layout.cc (Layout::make_output_section): Correctly mark
SHT_INIT_ARRAY, et. al., as relro.
-rw-r--r-- | gold/ChangeLog | 6 | ||||
-rw-r--r-- | gold/layout.cc | 22 |
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) |