From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 4422 invoked by alias); 10 Jan 2009 14:04:20 -0000 Received: (qmail 4413 invoked by uid 22791); 10 Jan 2009 14:04:19 -0000 X-SWARE-Spam-Status: No, hits=-2.5 required=5.0 tests=AWL,BAYES_00 X-Spam-Check-By: sourceware.org Received: from sibelius.xs4all.nl (HELO sibelius.xs4all.nl) (82.92.89.47) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Sat, 10 Jan 2009 14:03:41 +0000 Received: from brahms.sibelius.xs4all.nl (kettenis@localhost.sibelius.xs4all.nl [127.0.0.1]) by brahms.sibelius.xs4all.nl (8.14.3/8.14.3) with ESMTP id n0AE3QR7004492; Sat, 10 Jan 2009 15:03:26 +0100 (CET) Received: (from kettenis@localhost) by brahms.sibelius.xs4all.nl (8.14.3/8.14.3/Submit) id n0AE3PYP005895; Sat, 10 Jan 2009 15:03:26 +0100 (CET) Date: Sat, 10 Jan 2009 14:04:00 -0000 Message-Id: <200901101403.n0AE3PYP005895@brahms.sibelius.xs4all.nl> From: Mark Kettenis To: ktietz70@googlemail.com CC: brobecker@adacore.com, Kai.Tietz@onevision.com, gdb-patches@sourceware.org In-reply-to: <90baa01f0901100530t6590599bucfaa12aea8898c57@mail.gmail.com> (ktietz70@googlemail.com) Subject: Re: [RFC] convert a host address to a string References: <20090109131227.GL24105@adacore.com> <20090110071137.GN24105@adacore.com> <90baa01f0901100530t6590599bucfaa12aea8898c57@mail.gmail.com> 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-01/txt/msg00228.txt.bz2 > Date: Sat, 10 Jan 2009 14:30:29 +0100 > From: "Kai Tietz" > > ok, so I sugget the following patch instead. It is able to generate > addresses for XP64 without the use of any vendor specific printf > formatters, and uses for targets where sizeof(long) == sizeof(void*) > the long variant. +#if defined(PRINTF_HAS_LONG_LONG) && BITSIZEOF_SIZE_T == 64 && \ + SIZEOF_LONG == 4 + sprintf (str, "0x%llx", (unsigned long long) (uintptr_t) addr); +#elif BITSIZEOF_SIZE_T == 64 && SIZEOF_LONG == 4 + unsigned long long val = (unsigned long) (uintptr_t) addr; + if ((val & ~0xffffffffull) != 0) + sprintf (str, "0x%lx%08lx", + (unsigned long) (val >> 32), (unsigned long) val); + else + sprintf (str, "0x%lx", (unsigned long) (uintptr_t) val); +#else + sprintf (str, "0x%lx", (unsigned long) (uintptr_t) addr); +#endif return str; + BITSIZEOF_SIZE_T SIZEOF_LONG This is madness. If you go this route please do a simple const char * host_address_to_string (const void *addr) { return phex_nz ((uintptr_t)addr, sizeof(addr)); }