From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 30248 invoked by alias); 7 May 2009 01:21:32 -0000 Received: (qmail 30236 invoked by uid 22791); 7 May 2009 01:21:31 -0000 X-SWARE-Spam-Status: No, hits=-2.3 required=5.0 tests=AWL,BAYES_00,J_CHICKENPOX_55,RCVD_IN_DNSWL_LOW,SPF_PASS X-Spam-Check-By: sourceware.org Received: from eir.is.scarlet.be (HELO eir.is.scarlet.be) (193.74.71.27) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Thu, 07 May 2009 01:21:24 +0000 Received: from [172.17.1.2] (ip-62-235-147-185.dsl.scarlet.be [62.235.147.185] (may be forged)) by eir.is.scarlet.be (8.14.2/8.14.2) with ESMTP id n471L5Yk022620; Thu, 7 May 2009 03:21:05 +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: <200905062148.03196.pedro@codesourcery.com> References: <1240929901.29047.110.camel@dannypc> <200905061535.07698.pedro@codesourcery.com> <1241640256.4083.253.camel@dannypc> <200905062148.03196.pedro@codesourcery.com> Content-Type: text/plain Date: Thu, 07 May 2009 01:21:00 -0000 Message-Id: <1241659264.4083.268.camel@dannypc> Mime-Version: 1.0 Content-Transfer-Encoding: 7bit X-DCC-scarlet.be-Metrics: eir 20001; Body=3 Fuz1=3 Fuz2=3 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/msg00143.txt.bz2 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 ? 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. Danny 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); tcs = bfd_malloc(sz); nread = bfd_bread (tcs, (bfd_size_type) sz, abfd); if (nread != sz) { if (bfd_get_error () != bfd_error_system_call) bfd_set_error (bfd_error_wrong_format); return; } -- Danny Backx ; danny.backx - at - scarlet.be ; http://danny.backx.info