Index: layout.cc =================================================================== RCS file: /cvs/src/src/gold/layout.cc,v retrieving revision 1.207 diff -u -p -r1.207 layout.cc --- layout.cc 29 Jun 2011 00:39:54 -0000 1.207 +++ layout.cc 29 Jun 2011 21:24:49 -0000 @@ -4536,6 +4536,17 @@ Layout::symtab_section_offset() const return 0; } +// Return the section index of the normal symbol table. It may have +// been stripped by the -s/--strip-all option. + +unsigned int +Layout::symtab_section_shndx() const +{ + if (this->symtab_section_ != NULL) + return this->symtab_section_->out_shndx(); + return 0; +} + // Write out the Output_sections. Most won't have anything to write, // since most of the data will come from input sections which are // handled elsewhere. But some Output_sections do have Output_data. Index: layout.h =================================================================== RCS file: /cvs/src/src/gold/layout.h,v retrieving revision 1.95 diff -u -p -r1.95 layout.h --- layout.h 29 Jun 2011 00:39:54 -0000 1.95 +++ layout.h 29 Jun 2011 21:24:49 -0000 @@ -701,6 +701,10 @@ class Layout off_t symtab_section_offset() const; + // Return the section index of the normal symbol tabl.e + unsigned int + symtab_section_shndx() const; + // Return the dynamic symbol table. Output_section* dynsym_section() const Index: output.cc =================================================================== RCS file: /cvs/src/src/gold/output.cc,v retrieving revision 1.152 diff -u -p -r1.152 output.cc --- output.cc 23 Jun 2011 00:46:13 -0000 1.152 +++ output.cc 29 Jun 2011 21:24:49 -0000 @@ -3390,7 +3390,7 @@ Output_section::write_header(const Layou if (this->link_section_ != NULL) oshdr->put_sh_link(this->link_section_->out_shndx()); else if (this->should_link_to_symtab_) - oshdr->put_sh_link(layout->symtab_section()->out_shndx()); + oshdr->put_sh_link(layout->symtab_section_shndx()); else if (this->should_link_to_dynsym_) oshdr->put_sh_link(layout->dynsym_section()->out_shndx()); else