From patchwork Wed Sep 30 14:53:52 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Simon Marchi X-Patchwork-Id: 8887 Received: (qmail 115771 invoked by alias); 30 Sep 2015 14:53:58 -0000 Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org Delivered-To: mailing list gdb-patches@sourceware.org Received: (qmail 115758 invoked by uid 89); 30 Sep 2015 14:53:57 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-1.8 required=5.0 tests=AWL, BAYES_00, SPF_PASS autolearn=ham version=3.3.2 X-HELO: usevmg21.ericsson.net Received: from usevmg21.ericsson.net (HELO usevmg21.ericsson.net) (198.24.6.65) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with (AES256-SHA encrypted) ESMTPS; Wed, 30 Sep 2015 14:53:55 +0000 Received: from EUSAAHC005.ericsson.se (Unknown_Domain [147.117.188.87]) by usevmg21.ericsson.net (Symantec Mail Security) with SMTP id 52.A5.26730.CDB8B065; Wed, 30 Sep 2015 09:14:37 +0200 (CEST) Received: from [142.133.110.144] (147.117.188.8) by smtp-am.internal.ericsson.com (147.117.188.89) with Microsoft SMTP Server id 14.3.248.2; Wed, 30 Sep 2015 10:53:52 -0400 Subject: Re: [PATCH 3/2] Add some more casts (2/2) To: Ulrich Weigand References: <20150928154518.474FC2210@oc7340732750.ibm.com> <5609756F.9030903@ericsson.com> CC: Yao Qi , From: Simon Marchi Message-ID: <560BF780.30004@ericsson.com> Date: Wed, 30 Sep 2015 10:53:52 -0400 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:38.0) Gecko/20100101 Thunderbird/38.2.0 MIME-Version: 1.0 In-Reply-To: <5609756F.9030903@ericsson.com> X-IsSubscribed: yes On 15-09-28 01:14 PM, Simon Marchi wrote: > On 15-09-28 11:45 AM, Ulrich Weigand wrote: >> Simon Marchi wrote: >> >>> @@ -1350,7 +1352,7 @@ ppu2spu_sniffer (const struct frame_unwind *self, >>> info.bfd_arch_info = bfd_lookup_arch (bfd_arch_spu, bfd_mach_spu); >>> info.byte_order = BFD_ENDIAN_BIG; >>> info.osabi = GDB_OSABI_LINUX; >>> - info.tdep_info = (void *) &data.id; >>> + info.tdep_info = (struct gdbarch_tdep_info *) &data.id; >>> data.gdbarch = gdbarch_find_by_info (info); >>> if (!data.gdbarch) >>> return 0; >> >> This causes compilation to fail (with the RHEL5 system compiler): >> >> gdb/ppc-linux-tdep.c: In function 'ppu2spu_sniffer': >> gdb/ppc-linux-tdep.c:1355: warning: type-punning to incomplete type might break strict-aliasing rules >> >> The problem seems to be that "struct gdbarch_tdep_info" actually >> does not exist and is not defined anywhere. The info.tdep_info >> field is used as a generic pointer; different architectures use >> it for diffferent purposes. >> >> Maybe in this case the correct fix would be to leave the (void *) >> casts in place and actually change the type of the field to void * ... >> >> Bye, >> Ulrich > > Thanks for pointing this out. I was able to reproduce it using a Centos 5 > docker container. > > Changing the field and the cast to void* is ok to me. I don't see any real > value in casting to a pointer to a type that doesn't exist. Any other > opinions? Here is the proposed fix. Ok to push? From 6878d6f114544cc58f5065b66026a706108debc5 Mon Sep 17 00:00:00 2001 From: Simon Marchi Date: Wed, 30 Sep 2015 10:14:09 -0400 Subject: [PATCH] gdbarch.h: Change gdbarch_info::tdep_info's type to void * As reported by Ulrich here: https://sourceware.org/ml/gdb-patches/2015-09/msg00604.html The system compiler (gcc 4.1) in Centos 5 doesn't like that we cast to a pointer to a type that doesn't exist. I see no real value in using this kind iof construct over just using void *. So this patch changes the tdep_info field to void * and removes the casts. Even in C++, we should not need an explicit cast when assigning to a void *. gdb/ChangeLog: * gdbarch.sh (struct gdbarch_info): Change tdep_info's type to void *. * gdbarch.h: Regenerate. * i386-tdep.c (i386_gdbarch_init): Remove cast to struct gdbarch_tdep_info *. * mips-tdep.c (mips_gdbarch_init): Likewise. * ppc-linux-tdep (ppu2spu_sniffer): Likewise. * rs6000-tdep.c (rs6000_gdbarch_init): Likewise. * spu-multiarch.c (spu_gdbarch): Likewise. --- gdb/gdbarch.h | 2 +- gdb/gdbarch.sh | 2 +- gdb/i386-tdep.c | 2 +- gdb/mips-tdep.c | 2 +- gdb/ppc-linux-tdep.c | 2 +- gdb/rs6000-tdep.c | 2 +- gdb/spu-multiarch.c | 2 +- 7 files changed, 7 insertions(+), 7 deletions(-) diff --git a/gdb/gdbarch.h b/gdb/gdbarch.h index 82e0259..2e4ed3e 100644 --- a/gdb/gdbarch.h +++ b/gdb/gdbarch.h @@ -1561,7 +1561,7 @@ struct gdbarch_info bfd *abfd; /* Use default: NULL (ZERO). */ - struct gdbarch_tdep_info *tdep_info; + void *tdep_info; /* Use default: GDB_OSABI_UNINITIALIZED (-1). */ enum gdb_osabi osabi; diff --git a/gdb/gdbarch.sh b/gdb/gdbarch.sh index 388920f..a13d9b9 100755 --- a/gdb/gdbarch.sh +++ b/gdb/gdbarch.sh @@ -1429,7 +1429,7 @@ struct gdbarch_info bfd *abfd; /* Use default: NULL (ZERO). */ - struct gdbarch_tdep_info *tdep_info; + void *tdep_info; /* Use default: GDB_OSABI_UNINITIALIZED (-1). */ enum gdb_osabi osabi; diff --git a/gdb/i386-tdep.c b/gdb/i386-tdep.c index 2ac2f15..92f60fd 100644 --- a/gdb/i386-tdep.c +++ b/gdb/i386-tdep.c @@ -8478,7 +8478,7 @@ i386_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches) set_gdbarch_insn_is_jump (gdbarch, i386_insn_is_jump); /* Hook in ABI-specific overrides, if they have been registered. */ - info.tdep_info = (struct gdbarch_tdep_info *) tdesc_data; + info.tdep_info = tdesc_data; gdbarch_init_osabi (info, gdbarch); if (!i386_validate_tdesc_p (tdep, tdesc_data)) diff --git a/gdb/mips-tdep.c b/gdb/mips-tdep.c index 388513e..2275138 100644 --- a/gdb/mips-tdep.c +++ b/gdb/mips-tdep.c @@ -8898,7 +8898,7 @@ mips_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches) mips_register_g_packet_guesses (gdbarch); /* Hook in OS ABI-specific overrides, if they have been registered. */ - info.tdep_info = (struct gdbarch_tdep_info *) tdesc_data; + info.tdep_info = tdesc_data; gdbarch_init_osabi (info, gdbarch); /* The hook may have adjusted num_regs, fetch the final value and diff --git a/gdb/ppc-linux-tdep.c b/gdb/ppc-linux-tdep.c index ae5edc2..460c503 100644 --- a/gdb/ppc-linux-tdep.c +++ b/gdb/ppc-linux-tdep.c @@ -1352,7 +1352,7 @@ ppu2spu_sniffer (const struct frame_unwind *self, info.bfd_arch_info = bfd_lookup_arch (bfd_arch_spu, bfd_mach_spu); info.byte_order = BFD_ENDIAN_BIG; info.osabi = GDB_OSABI_LINUX; - info.tdep_info = (struct gdbarch_tdep_info *) &data.id; + info.tdep_info = &data.id; data.gdbarch = gdbarch_find_by_info (info); if (!data.gdbarch) return 0; diff --git a/gdb/rs6000-tdep.c b/gdb/rs6000-tdep.c index b37e862..baf6b67 100644 --- a/gdb/rs6000-tdep.c +++ b/gdb/rs6000-tdep.c @@ -5993,7 +5993,7 @@ rs6000_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches) /* Hook in ABI-specific overrides, if they have been registered. */ info.target_desc = tdesc; - info.tdep_info = (struct gdbarch_tdep_info *) tdesc_data; + info.tdep_info = tdesc_data; gdbarch_init_osabi (info, gdbarch); switch (info.osabi) diff --git a/gdb/spu-multiarch.c b/gdb/spu-multiarch.c index c61b271..73acdae 100644 --- a/gdb/spu-multiarch.c +++ b/gdb/spu-multiarch.c @@ -107,7 +107,7 @@ spu_gdbarch (int spufs_fd) info.bfd_arch_info = bfd_lookup_arch (bfd_arch_spu, bfd_mach_spu); info.byte_order = BFD_ENDIAN_BIG; info.osabi = GDB_OSABI_LINUX; - info.tdep_info = (struct gdbarch_tdep_info *) &spufs_fd; + info.tdep_info = &spufs_fd; return gdbarch_find_by_info (info); }