* 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.
This commit is contained in:
parent
457f4f60b6
commit
4bead2d512
@ -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
|
||||
|
@ -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
|
||||
|
@ -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.
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user