This is the mail archive of the gdb-patches@sourceware.org mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

RE: [RFC-v5] Fix .text section offset for windows DLL (was Calling __stdcall functions in the inferior)


  Hi Yuanhui,
thanks for trying to debug this...

  First, concerning the optimized out problems,
it would be easier if you would recompile
GDB without optimization:

make clean all CFLAGS="-gdwarf-2 -O0"

After that, you should get optimized out variables...


> Program received signal SIGSEGV, Segmentation fault.
> 0x77c47740 in strcmp () from C:\WINDOWS\system32\msvcrt.dll
> (gdb) bt
> #0  0x77c47740 in strcmp () from C:\WINDOWS\system32\msvcrt.dll
> #1  0x00535669 in get_pe_section_index (nb_sections=5,
>      sections=<optimized out>, section_name=0x576b410 ".data")
>      at ../../gdb/gdb/coff-pe-read.c:112
> #2  get_section_vmas (abfd=0x30543d0, sectp=0x576c4c0, context=0x2a7f894)
>      at ../../gdb/gdb/coff-pe-read.c:133
> #3  0x005f9672 in bfd_map_over_sections (abfd=0x30543d0,
>      operation=0x535630 <get_section_vmas>, user_storage=0x2a7f894)
>      at ../../gdb/bfd/section.c:1329
> #4  0x00536066 in read_pe_exported_syms (objfile=0x5834090)
>      at ../../gdb/gdb/coff-pe-read.c:524
> #5  0x00535408 in coff_symtab_read (objfile=0x5834090, nsyms=0,
>      symtab_offset=<optimized out>) at ../../gdb/gdb/coffread.c:1127
> #6  coff_symfile_read (objfile=0x5834090, symfile_flags=8)
>      at ../../gdb/gdb/coffread.c:610
> #7  0x004d3967 in read_symbols (objfile=0x5834090, add_flags=8)
>      at ../../gdb/gdb/symfile.c:885
> #8  0x004d340e in syms_from_objfile (objfile=0x5834090,
>      addrs=<optimized out>, offsets=0x0, num_offsets=0, add_flags=8)
>      at ../../gdb/gdb/symfile.c:1020
> #9  0x004d36f0 in symbol_file_add_with_addrs_or_offsets (
>      abfd=<optimized out>, add_flags=8, addrs=0x4d9d640,
>      flags=<optimized out>, parent=0x0, num_offsets=0, offsets=0x0)
>      at ../../gdb/gdb/symfile.c:1123
> #10 0x005c2df7 in solib_read_symbols (so=0x2ff7ff8, flags=8)
>      at ../../gdb/gdb/solib.c:608
> #11 0x005c322a in solib_add (pattern=0x0, from_tty=0,
>      target=0x96efa0 <current_target>, readsyms=1) at
> ../../gdb/gdb/solib.c:919
> #12 0x004dfcce in post_create_inferior (target=0x96efa0 <current_target>,
>      from_tty=0) at ../../gdb/gdb/infcmd.c:477
> #13 0x004dfe7c in run_command_1 (args=0x0, from_tty=<optimized out>,
>      tbreak_at_main=<optimized out>) at ../../gdb/gdb/infcmd.c:631
> #14 0x005ada85 in execute_command (p=0x4cfa1b9 "", from_tty=1)
>      at ../../gdb/gdb/top.c:491
> #15 0x004fda16 in command_handler (command=0x4cfa1b8 "")
>      at ../../gdb/gdb/event-top.c:429
> #16 0x004fe1c3 in command_line_handler (rl=0x292888 " ")
>      at ../../gdb/gdb/event-top.c:630
> #17 0x005df1c1 in rl_callback_read_char ()
>      at ../../gdb/readline/callback.c:220
> #18 0x004fda88 in rl_callback_read_char_wrapper (client_data=0x0)
>      at ../../gdb/gdb/event-top.c:163
> #19 0x004fcd84 in handle_file_event (data=...)
>      at ../../gdb/gdb/event-loop.c:827
> #20 0x004fcd13 in process_event () at ../../gdb/gdb/event-loop.c:401
> #21 process_event () at ../../gdb/gdb/event-loop.c:351
> #22 0x004fd095 in gdb_do_one_event () at ../../gdb/gdb/event-loop.c:465
> #23 0x004fd1ec in start_event_loop () at ../../gdb/gdb/event-loop.c:490
> #24 0x004f79c2 in captured_command_loop (data=0x0) at
> ../../gdb/gdb/main.c:256
> #25 0x004f66eb in catch_errors (func=0x4f79b0 <captured_command_loop>,
>      func_args=0x0, errstring=0x736c0d <__PRETTY_FUNCTION__.12471+203> "",
>      mask=6) at ../../gdb/gdb/exceptions.c:546
> #26 0x004f84c6 in captured_main (data=0x2a7fee0) at
> ../../gdb/gdb/main.c:1032
> #27 0x004f66eb in catch_errors (func=0x4f7b70 <captured_main>,
>      func_args=0x2a7fee0,
>      errstring=0x736c0d <__PRETTY_FUNCTION__.12471+203> "", mask=6)
>      at ../../gdb/gdb/exceptions.c:546
> #28 0x004f8ab0 in gdb_main (args=0x2a7fee0) at ../../gdb/gdb/main.c:1041
> #29 0x006d0878 in main (argc=1, argv=0x293fe0) at ../../gdb/gdb/gdb.c:34
> (gdb) frame 1
> #1  0x00535669 in get_pe_section_index (nb_sections=5,
>      sections=<optimized out>, section_name=0x576b410 ".data")
>      at ../../gdb/gdb/coff-pe-read.c:112
> 112         if (strcmp (sections[i].section_name, section_name) == 0)
> (gdb) p i
> $1 = <optimized out>
> (gdb) p sections[i]
> value has been optimized out
> (gdb) p section_name
> $2 = 0x576b410 ".data"
> (gdb) p sections[i].section_name
> value has been optimized out
> (gdb) p nb_sections
> $3 = 5
> (gdb) p sections
> $4 = <optimized out>
> (gdb)
> 
> ---------------------------------------------------
> But it looks like a lot of variables were optimized out.
> 
> But it looks like the crash happens here:
> 
> static int
> get_pe_section_index (const char *section_name,
>                struct read_pe_section_data *sections,
>                int nb_sections)
> {
>    int i;
>    for (i = 0; i < nb_sections; i++)
>      if (strcmp (sections[i].section_name, section_name) == 0)
>        return i;
>    return PE_SECTION_INDEX_INVALID;
> }

  I also installed CodeBlocks to test if I can reproduce your crash,
but I never got any ...

  Could it be that some weird DLL's have unnamed
sections?
  Could you try to insert
    if (sections[i] && section[i].name)
before	
>      if (strcmp (sections[i].section_name, section_name) == 0)
>        return i;
to confirm that the problem originates here?

Thanks again,

Pierre


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]