From b4ecf66bbe002c85155bb538a781b2b0b10d44fd Mon Sep 17 00:00:00 2001 From: Ian Lance Taylor Date: Sat, 28 Feb 2009 17:53:16 +0000 Subject: [PATCH] PR 6992 * symtab.cc (Symbol_table::sized_write_section_symbol): In a relocatable link set the value of the section symbol to zero. * object.cc (Sized_relobj::do_finalize_local_symbols): In a relocatable link don't include the section address in the local symbol value. --- gold/ChangeLog | 9 +++++++++ gold/object.cc | 3 ++- gold/symtab.cc | 5 ++++- 3 files changed, 15 insertions(+), 2 deletions(-) diff --git a/gold/ChangeLog b/gold/ChangeLog index 3f9d219fb07..de4597ec872 100644 --- a/gold/ChangeLog +++ b/gold/ChangeLog @@ -1,3 +1,12 @@ +2009-02-28 Ian Lance Taylor + + PR 6992 + * symtab.cc (Symbol_table::sized_write_section_symbol): In a + relocatable link set the value of the section symbol to zero. + * object.cc (Sized_relobj::do_finalize_local_symbols): In a + relocatable link don't include the section address in the local + symbol value. + 2009-02-27 Ian Lance Taylor PR 6811 diff --git a/gold/object.cc b/gold/object.cc index 0f618c1ce3e..c70fdce6061 100644 --- a/gold/object.cc +++ b/gold/object.cc @@ -1509,6 +1509,7 @@ Sized_relobj::do_finalize_local_symbols(unsigned int index, const unsigned int loccount = this->local_symbol_count_; this->local_symbol_offset_ = off; + const bool relocatable = parameters->options().relocatable(); const Output_sections& out_sections(this->output_sections()); const std::vector
& out_offsets(this->section_offsets_); unsigned int shnum = this->shnum(); @@ -1589,7 +1590,7 @@ Sized_relobj::do_finalize_local_symbols(unsigned int index, + out_offsets[shndx] + lv.input_value()); else - lv.set_output_value(os->address() + lv.set_output_value((relocatable ? 0 : os->address()) + out_offsets[shndx] + lv.input_value()); } diff --git a/gold/symtab.cc b/gold/symtab.cc index 46bed689211..d9bb37935da 100644 --- a/gold/symtab.cc +++ b/gold/symtab.cc @@ -2693,7 +2693,10 @@ Symbol_table::sized_write_section_symbol(const Output_section* os, elfcpp::Sym_write osym(pov); osym.put_st_name(0); - osym.put_st_value(os->address()); + if (parameters->options().relocatable()) + osym.put_st_value(0); + else + osym.put_st_value(os->address()); osym.put_st_size(0); osym.put_st_info(elfcpp::elf_st_info(elfcpp::STB_LOCAL, elfcpp::STT_SECTION)); -- 2.30.2