This is the mail archive of the gdb@sources.redhat.com mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: A case for `void *' for pointers to arbitrary (byte) buffers


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


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]