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] |
Thanks, Tom... it really seems that this is the culprit: I was freeing again already freed memory, which of course created random crashes later. I send here rapidly a new patch version. I really tested the allocation problems by adding allocation + free'ing of each of the first parameters used in prim_record_minimal_symbol and it does seem that freeing of char array doesn't lead to any problem. So the only trouble was related to the reallocation of section_data and seems to be fixed thanks to Tom's proposal. Yuanhui Zhang, could you please check if the new patch suppresses the crash you had when you tried the previous version? Thanks to everyone... Pierre Muller 2012-11-25 Pierre Muller <muller@sourceware.org> * 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. > -----Message d'origine----- > De?: gdb-patches-owner@sourceware.org [mailto:gdb-patches- > owner@sourceware.org] De la part de Tom Tromey > Envoyé?: lundi 26 novembre 2012 17:54 > À?: Pierre Muller > Cc?: 'Joel Brobecker'; 'Pedro Alves'; 'Eli Zaretskii'; gdb- > patches@sourceware.org > Objet?: Re: [RFC-v4] Fix .text section offset for windows DLL (was Calling > __stdcall functions in the inferior) > > >>>>> "Pierre" == Pierre Muller <pierre.muller@ics-cnrs.unistra.fr> writes: > > Joel> Are we missing a cleanup/xfree? > > Pierre> I added some, please check that part, as I have > Pierre> no experience at all with using make_cleanup > Pierre> related functions... > Pierre> In particular, I didn't really get if it is OK to call > Pierre> do_cleanups with a possibly NULL argument... > > The simplest way to approach cleanups, which I recommend in nearly all > cases, is to treat them as block-scoped and to always pass the result of > a make_cleanup call to do_cleanups. Try to avoid tricks with conditions > and possibly-NULL cleanup pointers, this usually leads to trouble. > > Pierre> + struct cleanup *section_cleanup = 0; > > I think there's no need to initialize this, since you re-set it later. > > Pierre> + section_data = xzalloc (PE_SECTION_TABLE_SIZE > Pierre> + * sizeof (struct read_pe_section_data)); > Pierre> + > Pierre> + section_cleanup = make_cleanup (xfree, section_data); > > Ok so far, but... > > Pierre> + section_data = xrealloc (section_data, otherix > Pierre> + * sizeof (struct read_pe_section_data)); > > ... this can free the original pointer. > > What you want is: > > section_cleanup = make_cleanup (free_current_contents, §ion_data); > > This will free the current value of the pointer, instead of capturing > the value when the cleanup is made. > > Pierre> /* Discard expdata. */ > Pierre> do_cleanups (back_to); > Pierre> + /* Discard section_data. */ > Pierre> + do_cleanups (section_cleanup); > > Cleanups are a stack, so you can just invoke do_cleanups on the > outermost one. Just delete the local variable 'back_to'. > > Tom
Attachment:
fix-dll-offset-v7.patch
Description: Binary data
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |