aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlan Modra <amodra@gmail.com>2013-03-07 23:27:53 +0000
committerAlan Modra <amodra@gmail.com>2013-03-07 23:27:53 +0000
commit4bead2d512271ca2a0dee6172042558795b134cc (patch)
treec29484fc1a526bea0515641c2080b2e7c45de507
parent457f4f60b673ff816b75ee69fc5a1f667335d7bb (diff)
downloadfsf-binutils-gdb-4bead2d512271ca2a0dee6172042558795b134cc.zip
fsf-binutils-gdb-4bead2d512271ca2a0dee6172042558795b134cc.tar.gz
fsf-binutils-gdb-4bead2d512271ca2a0dee6172042558795b134cc.tar.bz2
* 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.
-rw-r--r--gold/ChangeLog9
-rw-r--r--gold/ehframe.cc26
-rw-r--r--gold/ehframe.h16
3 files changed, 27 insertions, 24 deletions
diff --git a/gold/ChangeLog b/gold/ChangeLog
index c3d1b5a..0b5e99e 100644
--- a/gold/ChangeLog
+++ b/gold/ChangeLog
@@ -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
diff --git a/gold/ehframe.cc b/gold/ehframe.cc
index 82a6d6e..08a9ec6 100644
--- a/gold/ehframe.cc
+++ b/gold/ehframe.cc
@@ -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
diff --git a/gold/ehframe.h b/gold/ehframe.h
index de7c109..8aab8b8 100644
--- a/gold/ehframe.h
+++ b/gold/ehframe.h
@@ -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.