This is the mail archive of the
binutils@sourceware.org
mailing list for the binutils project.
Re: [gold patch] Fix internal error with -s
- From: Cary Coutant <ccoutant at google dot com>
- To: Ian Lance Taylor <iant at google dot com>, Binutils <binutils at sourceware dot org>
- Date: Thu, 14 Apr 2011 15:45:06 -0700
- Subject: Re: [gold patch] Fix internal error with -s
- References: <BANLkTi=+5s7JPQHTcy5Q=AyZWtxH=Zp68Q@mail.gmail.com>
Sorry, I jumped the gun -- didn't mean to hit send until I tested it.
Try this one instead...
-cary
2011-04-14 Cary Coutant <ccoutant@google.com>
* gold/layout.cc (Layout::symtab_section_offset): New function.
* gold/layout.h (Layout::symtab_section_offset): New function.
* gold/reloc.cc (Sized_relobj::do_relocate): Call it.
diff --git a/gold/layout.cc b/gold/layout.cc
index 26ac130..7afb21f 100644
--- a/gold/layout.cc
+++ b/gold/layout.cc
@@ -4371,6 +4371,16 @@ Layout::make_output_segment(elfcpp::Elf_Word
type, elfcpp::Elf_Word flags)
return oseg;
}
+// Return the file offset of the normal symbol table.
+
+off_t
+Layout::symtab_section_offset() const
+{
+ if (this->symtab_section_ != NULL)
+ return this->symtab_section_->offset();
+ 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.
diff --git a/gold/layout.h b/gold/layout.h
index 917856e..907181f 100644
--- a/gold/layout.h
+++ b/gold/layout.h
@@ -685,6 +685,10 @@ class Layout
return this->symtab_section_;
}
+ // Return the file offset of the normal symbol table.
+ off_t
+ symtab_section_offset() const;
+
// Return the dynamic symbol table.
Output_section*
dynsym_section() const
diff --git a/gold/reloc.cc b/gold/reloc.cc
index 7103572..c58e42b 100644
--- a/gold/reloc.cc
+++ b/gold/reloc.cc
@@ -691,7 +691,7 @@ Sized_relobj<size, big_endian>::do_relocate(const
Symbol_table* symtab,
// Write out the local symbols.
this->write_local_symbols(of, layout->sympool(), layout->dynpool(),
layout->symtab_xindex(), layout->dynsym_xindex(),
- layout->symtab_section()->offset());
+ layout->symtab_section_offset());
}
// Sort a Read_multiple vector by file offset.