This is the mail archive of the
gdb-patches@sourceware.org
mailing list for the GDB project.
Re: Build failure with probe patch
- From: jose dot marchesi at oracle dot com (Jose E. Marchesi)
- To: Steve Ellcey <sellcey at imgtec dot com>
- Cc: Sergio Durigan Junior <sergiodj at redhat dot com>, <gdb-patches at sourceware dot org>
- Date: Thu, 19 Feb 2015 17:01:00 +0100
- Subject: Re: Build failure with probe patch
- Authentication-results: sourceware.org; auth=none
- References: <bac100bc-73de-4bf6-86b5-912ad6887c5a at BAMAIL02 dot ba dot imgtec dot org> <87wq3ercw0 dot fsf at redhat dot com> <1424306916 dot 27855 dot 115 dot camel at ubuntu-sellcey>
Hi Steve.
> According to:
>
> <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=41874>
>
> This warning has been removed from GCC. And by looking at the code
> referenced by it, I don't see anything wrong there. So I'd say you can
> ignore this (and probably update your GCC).
>
I would like to avoid updating GCC if possible. I build on old systems
because some of our customers use old systems. I don't know if gdb has
a 'minimal GCC' that it can be compiled with like GCC and some other
projects have. I tried changing the definition of 'dof' to be '
bfd_byte *' instead of 'struct dtrace_dof_hdr *' and then casting it on
the call to dtrace_process_dof instead of the call to
bfd_malloc_and_get_section.
I think that version would still break the strict aliasing rules, since
`struct dtrace_dof_hdr' does not alias bfd_byte, even if the latter is a
character type.
As nothing guarantees that some future GCC version will not be bitching
about it, what about using something like this instead?
if (elf_section_data (sect)->this_hdr.sh_type == SHT_SUNW_dof)
{
/* Read the contents of the DOF section and then process it to
extract the information of any probe defined into it. */
bfd_size_type size;
const void *buf = gdb_bfd_map_section (sect, &size);
dtrace_process_dof (sect, objfile, probesp, (struct dtrace_dof_hdr *) buf);
}
AFAIU anything can alias a void pointer, as void pointers can't be
dereferenced...