aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIan Lance Taylor <ian@airs.com>2009-02-28 17:53:16 +0000
committerIan Lance Taylor <ian@airs.com>2009-02-28 17:53:16 +0000
commitb4ecf66bbe002c85155bb538a781b2b0b10d44fd (patch)
tree0da70850f5c5dfe9a4dcae2c7b75e3b7cb11b486
parentfd9d194f0467de25e3d6e6131d641f179d7eb289 (diff)
downloadgdb-b4ecf66bbe002c85155bb538a781b2b0b10d44fd.zip
gdb-b4ecf66bbe002c85155bb538a781b2b0b10d44fd.tar.gz
gdb-b4ecf66bbe002c85155bb538a781b2b0b10d44fd.tar.bz2
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.
-rw-r--r--gold/ChangeLog9
-rw-r--r--gold/object.cc3
-rw-r--r--gold/symtab.cc5
3 files changed, 15 insertions, 2 deletions
diff --git a/gold/ChangeLog b/gold/ChangeLog
index 3f9d219..de4597e 100644
--- a/gold/ChangeLog
+++ b/gold/ChangeLog
@@ -1,3 +1,12 @@
+2009-02-28 Ian Lance Taylor <iant@google.com>
+
+ 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 <iant@google.com>
PR 6811
diff --git a/gold/object.cc b/gold/object.cc
index 0f618c1..c70fdce 100644
--- a/gold/object.cc
+++ b/gold/object.cc
@@ -1509,6 +1509,7 @@ Sized_relobj<size, big_endian>::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<Address>& out_offsets(this->section_offsets_);
unsigned int shnum = this->shnum();
@@ -1589,7 +1590,7 @@ Sized_relobj<size, big_endian>::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 46bed68..d9bb379 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<size, big_endian> 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));