summaryrefslogtreecommitdiff
path: root/gold/script-sections.cc
diff options
context:
space:
mode:
Diffstat (limited to 'gold/script-sections.cc')
-rw-r--r--gold/script-sections.cc15
1 files changed, 15 insertions, 0 deletions
diff --git a/gold/script-sections.cc b/gold/script-sections.cc
index 3bcc9e6ada..67e3d65db7 100644
--- a/gold/script-sections.cc
+++ b/gold/script-sections.cc
@@ -3936,6 +3936,21 @@ Script_sections::create_note_and_tls_segments(
saw_tls = true;
}
+
+ // If we are making a shared library, and we see a section named
+ // .interp, and the -dynamic-linker option was not used, then
+ // put the .interp section in a PT_INTERP segment. This is for
+ // GNU ld compatibility.
+ if (strcmp((*p)->name(), ".interp") == 0
+ && parameters->options().shared()
+ && parameters->options().dynamic_linker() == NULL)
+ {
+ elfcpp::Elf_Word seg_flags =
+ Layout::section_flags_to_segment((*p)->flags());
+ Output_segment* oseg = layout->make_output_segment(elfcpp::PT_INTERP,
+ seg_flags);
+ oseg->add_output_section_to_nonload(*p, seg_flags);
+ }
}
}