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

Daniel Jacobowitz
2008-04-16T19:34:17Z

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