This is the mail archive of the
gdb@sources.redhat.com
mailing list for the GDB project.
Re: A case for `void *' for pointers to arbitrary (byte) buffers
- From: Daniel Jacobowitz <drow at false dot org>
- To: Mark Kettenis <mark dot kettenis at xs4all dot nl>
- Cc: gdb at sourceware dot org, cagney at gnu dot org, eliz at gnu dot org
- Date: Tue, 3 May 2005 16:23:52 -0400
- Subject: Re: A case for `void *' for pointers to arbitrary (byte) buffers
- References: <42710E90.3030300@gnu.org> <200504281919.j3SJJKF1011501@elgar.sibelius.xs4all.nl> <42715EE8.5070704@gnu.org> <01c54c8a$Blat.v2.4$ffbe8140@zahav.net.il> <42753958.70109@gnu.org> <01c54e92$Blat.v2.4$5cf24460@zahav.net.il> <42755FD4.8000009@gnu.org> <01c54f4a$Blat.v2.4$a9fc8500@zahav.net.il> <42778DE6.1080106@gnu.org> <200505032013.j43KD1dD005239@elgar.sibelius.xs4all.nl>
On Tue, May 03, 2005 at 10:13:01PM +0200, Mark Kettenis wrote:
> Do we need a `bfd_byte *' or `gdb_byte *'?
> ------------------------------------------
>
> We might. Many implementations will need to cast to some sort of byte
> type to do arithmetic or look at individual bytes. As we have seen,
> using can be `char *' is problematic. In most (problematic) cases we
> really mean `unsigned char', only a few will warrant `signed char'.
> And `bfd_byte *' is a nice abbreviation. Personally I'm perfectly
> happy with writing `unsigned char'. IMHO it has the benefit that it
> is perfectly clear that this type is unsigned, even to someone who has
> never been exposed to the GDB codebase.
I think that using gdb_byte has a consistency advantage over typing
"unsigned char" everywhere. We will know that we are dealing with
opaque blobs of (usually) target memory, but retain the ability
to do arithmetic on them.
> Why not use `xxx_byte *' instead of `void *'?
> ---------------------------------------------
>
> * It's nonstandard. Why do we need a nonstandard type if a perfectly
> god standard type is available?
>
> * It doesn't really solve the issue. It only propagates the problem
> one level up or down. Since `xxx_byte *' is nothing but a typedef
> for `unsigned char *', someone calling a functions with `xxx_byte *'
> as one of its arguments with a `char *' argument will suffer from
> the warning that raised this entire issue; `void *' breaks the chain
> immediately.
I think that's a bad thing! For the same reason that we use -Werror:
where possible, we can let GCC enforce consistency within our source
base. Use of gdb_byte (as unsigned char) buys you the advantage that
any other pointer type won't silently convert to it.
If you want to use a standard type, play the necessary autoconf games
to acquire stdint.h. Use uint8_t *.
--
Daniel Jacobowitz
CodeSourcery, LLC