From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 20181 invoked by alias); 11 May 2009 14:03:42 -0000 Received: (qmail 20001 invoked by uid 22791); 11 May 2009 14:03:41 -0000 X-SWARE-Spam-Status: No, hits=-2.6 required=5.0 tests=AWL,BAYES_00,MIME_BASE64_BLANKS,RCVD_IN_DNSWL_LOW,SPF_PASS X-Spam-Check-By: sourceware.org Received: from hel.is.scarlet.be (HELO hel.is.scarlet.be) (193.74.71.26) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Mon, 11 May 2009 14:03:34 +0000 Received: from [172.17.1.10] (ip-62-235-147-185.dsl.scarlet.be [62.235.147.185] (may be forged)) by hel.is.scarlet.be (8.14.2/8.14.2) with ESMTP id n4BE3GH2019820; Mon, 11 May 2009 16:03:17 +0200 Subject: Re: Post mortem debugging for Windows CE From: Danny Backx Reply-To: danny.backx@scarlet.be To: Pedro Alves Cc: gdb-patches@sourceware.org In-Reply-To: <200905102021.31156.pedro@codesourcery.com> References: <1240929901.29047.110.camel@dannypc> <200905062148.03196.pedro@codesourcery.com> <1241659264.4083.268.camel@dannypc> <200905102021.31156.pedro@codesourcery.com> Content-Type: multipart/mixed; boundary="=-hSEVrAmV0yqQjsF8WLU/" Date: Mon, 11 May 2009 14:03:00 -0000 Message-Id: <1242050601.29437.5.camel@pavilion> Mime-Version: 1.0 X-DCC-scarlet.be-Metrics: hel 20001; Body=2 Fuz1=2 Fuz2=2 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: 2009-05/txt/msg00214.txt.bz2 --=-hSEVrAmV0yqQjsF8WLU/ Content-Type: text/plain Content-Transfer-Encoding: 7bit Content-length: 3048 Here is a first cut of my work. Please comment. Danny On Sun, 2009-05-10 at 20:21 +0100, Pedro Alves wrote: > On Thursday 07 May 2009 02:21:04, Danny Backx wrote: > > On Wed, 2009-05-06 at 21:48 +0100, Pedro Alves wrote: > > > A few suggestions: > > > > > > - Please forgive me if you know this already. > > > Your minidump bfd code should work on all hosts, 64-bit, 32-bit, > > > big endian or little endian. This means that code like: > > [..] > > > ... is unacceptable. You need to use the bfd_get_32 and friends > > > to parse the data on the file. > > > > I'll start doing all that. I didn't know about avoiding structs so > > this'll be some work. > > > > Should they be avoided completely ? I wrote code like the snippet below. > > Should the sizeof (CEDUMP_THREAD_CALL_STACK_LIST) be replaced ? Should > > the struct definitions be gone completely, or still be there in > > comment ? > > Take a look at src/include/coff/external.h and > src/include/coff/internal.h, or grep for Internal and External > in src/include/elf/, or grep for "swap" in bfd. The external variants > are the ones that are read out of file. The internal variants > are the ones used internally. Presumably, you won't have that much > code, so you may chose to always use "external" types, and extract > the fields with bfd_get_foo. > > > Also this'll work for CE based minidumps now, not the ones from desktop > > Windows. This may be as simple as getting the code to handle not only > > the > > ceStreamThreadCallStackList = 0x8007 > > but also the desktop value. But life is usually not that simple. > > If this is not useful to you, then you don't have to implement it. > I'm sure someone else having an interest in desktop Windows will > take of adding such functionality. > > > rva = minidump_core_locate_stream(abfd, ceStreamThreadCallStackList); > > if (bfd_seek (abfd, (file_ptr) rva, SEEK_SET) != 0) > > return; > > nread = bfd_bread (&tcsl, (bfd_size_type) sizeof > > (CEDUMP_THREAD_CALL_STACK_LIST), abfd); > > if (nread != sizeof (CEDUMP_THREAD_CALL_STACK_LIST)) > > { > > if (bfd_get_error () != bfd_error_system_call) > > bfd_set_error (bfd_error_wrong_format); > > return; > > } > > > > /* > > * Need to read all the CEDUMP_THREAD_CALL_STACK entries, > > * they're just after the CEDUMP_THREAD_CALL_STACK_LIST. > > * The CEDUMP_THREAD_CALL_STACK_FRAME fields are in potentially other > > places though. > > * So allocate space for enough CEDUMP_THREAD_CALL_STACK_LIST entries. > > */ > > sz = tcsl.NumberOfEntries * sizeof(CEDUMP_THREAD_CALL_STACK); > > Right, this is exactly what you should *not* do. That > 'tcsl.NumberOfEntries' field will return garbage if e.g., the > host machine running gdb is big endian, while the minidump data > is supposedly stored in little endian (ARM). Same for hidden > padding the compiler may insert in the structure, influencing > the tcsl fields offsets, and the size of the structure in the > view of the host. > --=-hSEVrAmV0yqQjsF8WLU/ Content-Disposition: attachment; filename="diffs-v1.gz" Content-Type: application/x-gzip; name="diffs-v1.gz" Content-Transfer-Encoding: base64 Content-length: 19858 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 J19Wejl9+5ctGuE//I3/F4dzhsme5AAA --=-hSEVrAmV0yqQjsF8WLU/--