This is the mail archive of the
mailing list for the GDB project.
Avoid potential crashes with --gc-sections and low addresses
- From: Jonathan Larmour <jifl at eCosCentric dot com>
- To: gdb-patches at sourceware dot org
- Date: Fri, 27 Jun 2008 16:36:57 +0100
- Subject: Avoid potential crashes with --gc-sections and low addresses
- Openpgp: id=A5FB74E6
The attached patch deals with a problem that occurs with some embedded
targets when the linker garbage collection feature of GNU ld
(--gc-sections) is used.
Linker gc can cause DWARF2 debug info for eliminated functions and frames
to be retained in the binary, but with the location set to 0. This works
most of the time. The problem occurs when there is retained valid code with
a location close to 0, as can happen on an embedded target.
In dwarf2_frame_find_fde we have:
if (*pc >= fde->initial_location + offset
&& *pc < fde->initial_location + offset + fde->address_range)
*pc = fde->initial_location + offset;
fde = fde->next;
In most executables on other targets, eliminated code would not match this,
but when there is code close to 0, the pc comparison test can succeed and
match the debug information for the eliminated code because that code is
within the address range.
The simplest solution is to prevent these sorts of FDEs being loaded in the
first place, by only incorporating FDEs with non-NULL initial locations,
as per the attached patch. This also avoids using up memory and processing
time for debug info we'll never use.
The patch was in fact written by a colleague, but since it's a one-liner, I
assume copyright assignments are superfluous under the "simple changes"
rule. I do have check-in perms (it's been a while I know) if that helps.
2008-07-27 Bart Veer <bartv@eCosCentric.com>
* dwarf2-frame.c (decode_frame_entry_1): Only add FDE if it has
a valid location.
eCosCentric Limited http://www.eCosCentric.com/ The eCos experts
Barnwell House, Barnwell Drive, Cambridge, UK. Tel: +44 1223 245571
Registered in England and Wales: Reg No 4422071.
------["Si fractum non sit, noli id reficere"]------ Opinions==mine