diff options
author | Roland McGrath <roland@gnu.org> | 2012-06-22 18:02:24 +0000 |
---|---|---|
committer | Roland McGrath <roland@gnu.org> | 2012-06-22 18:02:24 +0000 |
commit | eabc84f4848311a68f65df04e428c8b53a92f1c0 (patch) | |
tree | 6f8497a3c7969776c00d35bdff94f50e8b500049 /gold/layout.cc | |
parent | b4a58790dbc901ffa61059886667b31ed34d0148 (diff) | |
download | gdb-eabc84f4848311a68f65df04e428c8b53a92f1c0.zip gdb-eabc84f4848311a68f65df04e428c8b53a92f1c0.tar.gz gdb-eabc84f4848311a68f65df04e428c8b53a92f1c0.tar.bz2 |
gold/
* layout.cc (finalize): Define __ehdr_start symbol if applicable.
Diffstat (limited to 'gold/layout.cc')
-rw-r--r-- | gold/layout.cc | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/gold/layout.cc b/gold/layout.cc index 154be88..ad667ab 100644 --- a/gold/layout.cc +++ b/gold/layout.cc @@ -2509,6 +2509,16 @@ Layout::finalize(const Input_objects* input_objects, Symbol_table* symtab, while (target->may_relax() && target->relax(pass, input_objects, symtab, this, task)); + // If there is a load segment that contains the file and program headers, + // provide a symbol __ehdr_start pointing there. + // A program can use this to examine itself robustly. + if (load_seg != NULL) + symtab->define_in_output_segment("__ehdr_start", NULL, + Symbol_table::PREDEFINED, load_seg, 0, 0, + elfcpp::STT_NOTYPE, elfcpp::STB_GLOBAL, + elfcpp::STV_DEFAULT, 0, + Symbol::SEGMENT_START, true); + // Set the file offsets of all the non-data sections we've seen so // far which don't have to wait for the input sections. We need // this in order to finalize local symbols in non-allocated |