[Bug c++/53380] New: .ehframe could be smaller
msharov at users dot sourceforge.net
gcc-bugzilla@gcc.gnu.org
Wed May 16 17:57:00 GMT 2012
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=53380
Bug #: 53380
Summary: .ehframe could be smaller
Classification: Unclassified
Product: gcc
Version: 4.7.0
Status: UNCONFIRMED
Severity: enhancement
Priority: P3
Component: c++
AssignedTo: unassigned@gcc.gnu.org
ReportedBy: msharov@users.sourceforge.net
The unwinding information can take up a significant (10%+) chunk of a C++
executable, and reducing its size can help make executables smaller. On x86_64
in particular, the need to include .ehframe erases code size reductions
acquired when porting 32bit code, and gives the incorrect impression that 64
bit code is larger. Fortunately, it is possible to make the unwinding table
smaller.
The entries for functions without local variables are basically empty, the
information contained being largely the offset and size of the function body.
If this type of entry was made the default action, all of them could be
removed. Then any function not found in the table would be assumed to have the
return address on top of the stack. Validity checking can still be performed by
verifying that the return address is in .text. Another optimization is to
remove entries for functions that do not throw; i.e. declared as noexcept or
not calling any other functions that are not noexcept.
Just doing these two things should remove more than half the table in a typical
executable. Of course, unwinding information is also used by the debugger and
backtrace, so the table should be left alone by default. It would be nice to
have the option to turn them on explicitly.
More information about the Gcc-bugs
mailing list