From Craig Silverstein: Clean up DWARF line reader code.
authorIan Lance Taylor <iant@google.com>
Wed, 14 Nov 2007 18:33:47 +0000 (18:33 +0000)
committerIan Lance Taylor <iant@google.com>
Wed, 14 Nov 2007 18:33:47 +0000 (18:33 +0000)
gold/dwarf_reader.cc
gold/dwarf_reader.h

index d07e3e731ff265fef85e634d7115d0f9e57ec297..e3e1963bedcce6bef8abe244639a6567d59389dc 100644 (file)
@@ -630,7 +630,7 @@ Sized_dwarf_line_info<size, big_endian>::do_addr2line(unsigned int shndx,
 
   // If we found an exact match, great, otherwise find the last entry
   // before the passed-in offset.
-  if (it->offset > offset)
+  if (it == offsets->end() || it->offset > offset)
     {
       if (it == offsets->begin())
         return "";
@@ -673,10 +673,6 @@ Sized_dwarf_line_info<size, big_endian>::do_addr2line(unsigned int shndx,
 
 // Dwarf_line_info routines.
 
-// Note: this routine instantiates the appropriate
-// Sized_dwarf_line_info templates for this config, so we don't have
-// to have a separte instantiation section for them.
-
 std::string
 Dwarf_line_info::one_addr2line(Object* object,
                                unsigned int shndx, off_t offset)
index cefc0270c3a829bdc71854b2c34385fe453a349c..4ce65b054b4c7777cccb9d87cec0be60cf09fd04 100644 (file)
@@ -72,16 +72,12 @@ class Dwarf_line_info
 };
 
 template<int size, bool big_endian>
-class Sized_dwarf_line_info
+class Sized_dwarf_line_info : public Dwarf_line_info
 {
  public:
   // Initializes a .debug_line reader for a given object file.
   Sized_dwarf_line_info(Object* object);
 
-  std::string
-  addr2line(unsigned int shndx, off_t offset)
-  { return do_addr2line(shndx, offset); }
-
  private:
   std::string
   do_addr2line(unsigned int shndx, off_t offset);