diff options
author | Alan Modra <amodra@gmail.com> | 2013-03-07 23:27:53 +0000 |
---|---|---|
committer | Alan Modra <amodra@gmail.com> | 2013-03-07 23:27:53 +0000 |
commit | 4bead2d512271ca2a0dee6172042558795b134cc (patch) | |
tree | c29484fc1a526bea0515641c2080b2e7c45de507 | |
parent | 457f4f60b673ff816b75ee69fc5a1f667335d7bb (diff) | |
download | fsf-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/ChangeLog | 9 | ||||
-rw-r--r-- | gold/ehframe.cc | 26 | ||||
-rw-r--r-- | gold/ehframe.h | 16 |
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. |