From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 25088 invoked by alias); 7 Dec 2012 15:23:11 -0000 Received: (qmail 25080 invoked by uid 22791); 7 Dec 2012 15:23:09 -0000 X-SWARE-Spam-Status: No, hits=-5.3 required=5.0 tests=AWL,BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FROM,KHOP_RCVD_TRUST,KHOP_THREADED,RCVD_IN_DNSWL_LOW,RCVD_IN_HOSTKARMA_YE,TW_FC,TW_YM X-Spam-Check-By: sourceware.org Received: from mail-da0-f41.google.com (HELO mail-da0-f41.google.com) (209.85.210.41) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Fri, 07 Dec 2012 15:23:02 +0000 Received: by mail-da0-f41.google.com with SMTP id e20so254289dak.0 for ; Fri, 07 Dec 2012 07:23:02 -0800 (PST) Received: by 10.68.225.201 with SMTP id rm9mr16764381pbc.124.1354893782012; Fri, 07 Dec 2012 07:23:02 -0800 (PST) Received: from [192.168.1.128] ([115.193.12.169]) by mx.google.com with ESMTPS id ix9sm6850018pbc.7.2012.12.07.07.22.57 (version=SSLv3 cipher=OTHER); Fri, 07 Dec 2012 07:23:00 -0800 (PST) Message-ID: <50C20A66.70002@gmail.com> Date: Fri, 07 Dec 2012 15:23:00 -0000 From: asmwarrior User-Agent: Mozilla/5.0 (Windows NT 5.1; rv:17.0) Gecko/17.0 Thunderbird/17.0a1 MIME-Version: 1.0 To: Joel Brobecker CC: Pierre Muller , 'Eli Zaretskii' , gdb-patches@sourceware.org Subject: Re: [RFC-v5] Fix .text section offset for windows DLL (was Calling __stdcall functions in the inferior) References: <20121024194517.GK3555@adacore.com> <011901cdb2ab$48076b90$d81642b0$@muller@ics-cnrs.unistra.fr> <20121105171121.GA2972@adacore.com> <50991f5f.8382440a.1100.ffff82abSMTPIN_ADDED@mx.google.com> <509ABA17.30507@redhat.com> <000301cdbd96$f5cd9f10$e168dd30$@muller@ics-cnrs.unistra.fr> <20121122173019.GF9964@adacore.com> <15690.5992342674$1353883881@news.gmane.org> <87624si9ur.fsf@fleche.redhat.com> <001501cdccaf$ad85e9b0$0891bd10$@muller@ics-cnrs.unistra.fr> <20121207071035.GG31477@adacore.com> In-Reply-To: <20121207071035.GG31477@adacore.com> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org X-SW-Source: 2012-12/txt/msg00177.txt.bz2 On 2012-12-7 15:10, Joel Brobecker wrote: >> 2012-11-25 Pierre Muller >> > >> > * coff-pe-read.h (pe_text_section_offset): Declare new function. >> > * coff-pe-read.c (debug_coff_pe_read): New static variable. >> > (struct read_pe_section_data): Add section_name field. >> > (IMAGE_SCN_CNT_CODE): New macro, if not already defined. >> > (IMAGE_SCN_CNT_INITIALIZED_DATA): Ditto. >> > (IMAGE_SCN_CNT_UNINITIALIZED_DATA): Ditto. >> > (get_pe_section_index): New function. >> > (struct pe_sections_info): New type. >> > (get_section_vmas): Use new struct pe_sections_info. >> > (add_pe_exported_sym): Handle unnamed exported function. >> > (add_pe_forwarded_sym): New function. >> > (read_pe_truncate_name): Truncate at last dot. >> > (pe_as16): New function. >> > (read_pe_exported_syms): Use ordinal of function to >> > retrieve correct RVA address of function and handle >> > forwarded symbol. >> > (pe_text_section_offset): New function. >> > (show_debug_coff_pe_read): New function. >> > (_initialize_coff_pe_read): New function adding >> > 'set/show debug coff_pe_read' commands. >> > >> > * windows-tdep.c (windows_xfer_shared_library): Use >> > pe_text_section_offset function instead of possibly wrong >> > 0x1000 constant for .text sextion offset. > Looks good I still has crashes, see the debug log and crash bt. I use an un-patched gdb to debug the patched gdb. The debugee gdb crashes when try to run a exe file(codeblocks.exe) E:\code\cb\CB_NIGHTLY>gdb_stable gdb.exe GNU gdb (GDB) 7.5.50.20121126-cvs Copyright (C) 2012 Free Software Foundation, Inc. License GPLv3+: GNU GPL version 3 or later This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. Type "show copying" and "show warranty" for details. This GDB was configured as "mingw32". For bug reporting instructions, please see: ... Reading symbols from E:\code\gcc\PCXMinGW463\bin\gdb.exe...done. (gdb) r Starting program: E:\code\gcc\PCXMinGW463\bin\gdb.exe [New Thread 38480.0x95a0] GNU gdb (GDB) 7.5.50.20121207-cvs Copyright (C) 2012 Free Software Foundation, Inc. License GPLv3+: GNU GPL version 3 or later This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. Type "show copying" and "show warranty" for details. This GDB was configured as "mingw32". For bug reporting instructions, please see: . (gdb) [New Thread 38480.0x9620] [New Thread 38480.0x9028] file e:/code/cb/cleantrunk/src/devel/codeblocks.exe Reading symbols from e:\code\cb\cleantrunk\src\devel\codeblocks.exe...done. , 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 , 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=) 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=, 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=, add_flags=8, addrs=0x4d9d640, flags=, 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 , readsyms=1) at ../../gdb/gdb/solib.c:919 #12 0x004dfcce in post_create_inferior (target=0x96efa0 , from_tty=0) at ../../gdb/gdb/infcmd.c:477 #13 0x004dfe7c in run_command_1 (args=0x0, from_tty=, tbreak_at_main=) 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 , 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 , 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=, 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 = (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 = (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; } In the "strcmp" function call. Yuanhui Zhang