* ehframe.h (Post_fdes) Make it a vector of Post_fde rather than
authorAlan Modra <amodra@gmail.com>
Thu, 7 Mar 2013 23:27:53 +0000 (23:27 +0000)
committerAlan Modra <amodra@gmail.com>
Thu, 7 Mar 2013 23:27:53 +0000 (23:27 +0000)
pointer to Post_fde.
(struct Post_fde): Move definition to here..
* ehframe.cc (struct Post_fde): ..from here.
(Cie::write): Don't alloc Post_fde.
(Eh_frame::do_sized_write): Update.  Don't free Post_fde.

gold/ChangeLog
gold/ehframe.cc
gold/ehframe.h

index c3d1b5af1352d90674a3eeffcaf0f71e314739ff..0b5e99e06629d82e5430e96a3cdd0db7c8e238b3 100644 (file)
@@ -1,3 +1,12 @@
+2013-03-08  Alan Modra  <amodra@gmail.com>
+
+       * ehframe.h (Post_fdes) Make it a vector of Post_fde rather than
+       pointer to Post_fde.
+       (struct Post_fde): Move definition to here..
+       * ehframe.cc (struct Post_fde): ..from here.
+       (Cie::write): Don't alloc Post_fde.
+       (Eh_frame::do_sized_write): Update.  Don't free Post_fde.
+
 2013-03-07  Alan Modra  <amodra@gmail.com>
 
        * testsuite/discard_locals_relocatable_test.c: Add a powerpc
index 82a6d6e8986b01fd365e8335f42bc209d82d3795..08a9ec6bd17559b0c76b39e85939f2cd5a067453 100644 (file)
@@ -441,19 +441,6 @@ Cie::set_output_offset(section_offset_type output_offset,
   return output_offset + length;
 }
 
-// A FDE plus some info from a CIE to allow later writing of the FDE.
-
-struct Post_fde
-{
-  Post_fde(Fde* f, section_offset_type cie_off, unsigned char encoding)
-    : fde(f), cie_offset(cie_off), fde_encoding(encoding)
-  { }
-
-  Fde* fde;
-  section_offset_type cie_offset;
-  unsigned char fde_encoding;
-};
-
 // Write the CIE to OVIEW starting at OFFSET.  Round up the bytes to
 // ADDRALIGN.  ADDRESS is the virtual address of OVIEW.
 // EH_FRAME_HDR is the exception frame header for FDE recording.
@@ -499,7 +486,7 @@ Cie::write(unsigned char* oview, section_offset_type offset,
        ++p)
     {
       if ((*p)->post_map())
-       post_fdes->push_back(new Post_fde(*p, cie_offset, fde_encoding));
+       post_fdes->push_back(Post_fde(*p, cie_offset, fde_encoding));
       else
        offset = (*p)->write<size, big_endian>(oview, offset, address,
                                               addralign, cie_offset,
@@ -1211,13 +1198,10 @@ Eh_frame::do_sized_write(unsigned char* oview)
   for (Post_fdes::iterator p = post_fdes.begin();
        p != post_fdes.end();
        ++p)
-    {
-      o = (*p)->fde->write<size, big_endian>(oview, o, address, addralign,
-                                            (*p)->cie_offset,
-                                            (*p)->fde_encoding,
-                                            this->eh_frame_hdr_);
-      delete *p;
-    }
+    o = (*p).fde->write<size, big_endian>(oview, o, address, addralign,
+                                         (*p).cie_offset,
+                                         (*p).fde_encoding,
+                                         this->eh_frame_hdr_);
 }
 
 #ifdef HAVE_TARGET_32_LITTLE
index de7c1092ebc9d3ff12e26f66221fce5c67abe37c..8aab8b81684b58317dc11f21c25b9fe6c52ad4ba 100644 (file)
@@ -246,10 +246,20 @@ class Fde
   std::string contents_;
 };
 
-// FDEs stashed for later processing.
+// A FDE plus some info from a CIE to allow later writing of the FDE.
 
-struct Post_fde;
-typedef std::vector<Post_fde*> Post_fdes;
+struct Post_fde
+{
+  Post_fde(Fde* f, section_offset_type cie_off, unsigned char encoding)
+    : fde(f), cie_offset(cie_off), fde_encoding(encoding)
+  { }
+
+  Fde* fde;
+  section_offset_type cie_offset;
+  unsigned char fde_encoding;
+};
+
+typedef std::vector<Post_fde> Post_fdes;
 
 // This class holds a CIE.