mirror of
https://github.com/espressif/binutils-gdb.git
synced 2025-09-17 23:01:53 +08:00
* gdbarch.sh (gdbarch_skip_main_prologue): New.
* gdbarch.h, gdbarch.c: Regenerate. * i386-tdep.h (i386_skip_main_prologue): Declare. * i386-tdep.c (i386_skip_main_prologue): New. * i386-cygwin-tdep.c (i386_cygwin_init_abi): Register i386_skip_main_prologue as gdbarch_skip_main_prologue gdbarch callback. * symtab.c (find_function_start_sal): When pc points at the "main" function, call gdbarch_skip_main_prologue.
This commit is contained in:
15
gdb/symtab.c
15
gdb/symtab.c
@ -2617,6 +2617,21 @@ find_function_start_sal (struct symbol *sym, int funfirstline)
|
||||
/* Recalculate the line number (might not be N+1). */
|
||||
sal = find_pc_sect_line (pc, SYMBOL_BFD_SECTION (sym), 0);
|
||||
}
|
||||
|
||||
/* On targets with executable formats that don't have a concept of
|
||||
constructors (ELF with .init has, PE doesn't), gcc emits a call
|
||||
to `__main' in `main' between the prologue and before user
|
||||
code. */
|
||||
if (funfirstline
|
||||
&& gdbarch_skip_main_prologue_p (current_gdbarch)
|
||||
&& SYMBOL_LINKAGE_NAME (sym)
|
||||
&& strcmp (SYMBOL_LINKAGE_NAME (sym), "main") == 0)
|
||||
{
|
||||
pc = gdbarch_skip_main_prologue (current_gdbarch, pc);
|
||||
/* Recalculate the line number (might not be N+1). */
|
||||
sal = find_pc_sect_line (pc, SYMBOL_BFD_SECTION (sym), 0);
|
||||
}
|
||||
|
||||
sal.pc = pc;
|
||||
|
||||
return sal;
|
||||
|
Reference in New Issue
Block a user