determining whether page 0 (or low addresses in general) is executable

Daniel Jacobowitz drow@false.org
Wed Apr 16 22:25:00 GMT 2008


On Wed, Apr 16, 2008 at 12:20:47PM -0700, Doug Evans wrote:
> Hi.  We're trying to come up with a workaround for an apparent gcc/linker issue
> where debug info can be left behind that messes up backtraces.
> The erroneous debug info shouldn't be generated, but gdb could do a better
> job when faced with it.

Not much better; I would suggest effort be spent on the
linker/compiler limitations, instead.  For instance moving debug info
into comdat sections.

I thought GNU ld only had this problem for .debug_info and already
edited out discarded FDEs from .debug_frame / .eh_frame.  Are you
using GNU ld or gold?  Maybe the linker only edits .eh_frame.

> *************** dwarf2_frame_find_fde (CORE_ADDR *pc)
> @@ -1585,6 +1608,13 @@
> 
>      while (fde)
>        {
> +        if (fde->initial_location + offset == 0
> +            && !is_zero_page_executable ())
> +          {
> +            /* Ignore this FDE -- linker bug.  */
> +            fde = fde->next;
> +            continue;
> +          }
> 

See has_section_at_zero in dwarf2read.c.  It's just the same hack.

-- 
Daniel Jacobowitz
CodeSourcery



More information about the Gdb mailing list