[02/11,v5] Introduce common-types.h
Commit Message
This introduces common-types.h. This file defines various standard
types used by gdb and gdbserver.
Currently these types are conditionally defined based on GDBSERVER.
The long term goal is to remove all such tests; however, this is
difficult as currently gdb uses definitions from BFD. In the meantime
this is still a step in the right direction.
gdb/
2014-08-01 Tom Tromey <tromey@redhat.com>
Gary Benson <gbenson@redhat.com>
* common/common-types.h: New file.
* Makefile.in (HFILES_NO_SRCDIR): Add common/common-types.h.
* common/common-defs.h: Include common-types.h.
* defs.h (gdb_byte, CORE_ADDR, CORE_ADDR_MAX, LONGEST)
(ULONGEST): Remove.
gdb/gdbserver/
2014-08-01 Tom Tromey <tromey@redhat.com>
Gary Benson <gbenson@redhat.com>
* server.h: Add static assertion.
(gdb_byte, CORE_ADDR, LONGEST, ULONGEST): Remove.
---
gdb/ChangeLog | 9 ++++++
gdb/Makefile.in | 2 +-
gdb/common/common-defs.h | 1 +
gdb/common/common-types.h | 61 +++++++++++++++++++++++++++++++++++++++++++++
gdb/defs.h | 29 ---------------------
gdb/gdbserver/ChangeLog | 6 ++++
gdb/gdbserver/server.h | 13 +--------
7 files changed, 80 insertions(+), 41 deletions(-)
create mode 100644 gdb/common/common-types.h
Comments
Gary Benson writes:
> This introduces common-types.h. This file defines various standard
> types used by gdb and gdbserver.
Side discussion: It's a bit odd to see common-types.h and then see
errors.h spelled as errors.h and not common-errors.h.
[Or vice versa.]
Is consistency in the file names a goal?
I realize common-utils.h needs to be something other than utils.h
because gdb and gdbserver each still have their own.
And similarly for common-defs.h - gdb still has defs.h.
But nothing else in common/ is spelled common-foo,
and I wonder if less randomness would be useful.
I'd be happy with #include "common/errors.h", and so on.
That way when I see it used I know where to look without having to
rely on memory or ls.
> Currently these types are conditionally defined based on GDBSERVER.
> The long term goal is to remove all such tests; however, this is
> difficult as currently gdb uses definitions from BFD. In the meantime
> this is still a step in the right direction.
>
> gdb/
> 2014-08-01 Tom Tromey <tromey@redhat.com>
> Gary Benson <gbenson@redhat.com>
>
> * common/common-types.h: New file.
> * Makefile.in (HFILES_NO_SRCDIR): Add common/common-types.h.
> * common/common-defs.h: Include common-types.h.
> * defs.h (gdb_byte, CORE_ADDR, CORE_ADDR_MAX, LONGEST)
> (ULONGEST): Remove.
>
> gdb/gdbserver/
> 2014-08-01 Tom Tromey <tromey@redhat.com>
> Gary Benson <gbenson@redhat.com>
>
> * server.h: Add static assertion.
> (gdb_byte, CORE_ADDR, LONGEST, ULONGEST): Remove.
>[...]
> diff --git a/gdb/common/common-types.h b/gdb/common/common-types.h
> new file mode 100644
> index 0000000..9fa1c24
> --- /dev/null
> +++ b/gdb/common/common-types.h
> @@ -0,0 +1,61 @@
> +/* Declarations for common types.
> +
> + Copyright (C) 1986-2014 Free Software Foundation, Inc.
> +
> + This file is part of GDB.
> +
> + This program is free software; you can redistribute it and/or modify
> + it under the terms of the GNU General Public License as published by
> + the Free Software Foundation; either version 3 of the License, or
> + (at your option) any later version.
> +
> + This program is distributed in the hope that it will be useful,
> + but WITHOUT ANY WARRANTY; without even the implied warranty of
> + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
> + GNU General Public License for more details.
> +
> + You should have received a copy of the GNU General Public License
> + along with this program. If not, see <http://www.gnu.org/licenses/>. */
> +
> +#ifndef COMMON_TYPES_H
> +#define COMMON_TYPES_H
Nit, and I do mean nit :-): errors.h uses COMMON_ERRORS_H,
so should this be COMMON_COMMON_TYPES_H?
Doug Evans wrote:
> Gary Benson writes:
> > This introduces common-types.h. This file defines various standard
> > types used by gdb and gdbserver.
>
> Side discussion: It's a bit odd to see common-types.h and then see
> errors.h spelled as errors.h and not common-errors.h.
> [Or vice versa.]
>
> Is consistency in the file names a goal?
> I realize common-utils.h needs to be something other than utils.h
> because gdb and gdbserver each still have their own.
> And similarly for common-defs.h - gdb still has defs.h.
> But nothing else in common/ is spelled common-foo,
> and I wonder if less randomness would be useful.
> I'd be happy with #include "common/errors.h", and so on.
> That way when I see it used I know where to look without having to
> rely on memory or ls.
Less randomness would be useful. I would like to remove -Icommon
from the CFLAGS of both GDB and gdbserver and reference all headers
as:
#include "common/errors.h"
#include "common/types.h"
I have a script that automates the rewriting, including renaming all
files under common/ with "common-" and "gdb_" prefixes and "-common"
suffixes and modifying the Makefiles to suit. I intend to run it and
submit a patch once this series and the series it now depends on
(https://sourceware.org/ml/gdb-patches/2014-07/msg00736.html) are
approved and pushed.
> Nit, and I do mean nit :-): errors.h uses COMMON_ERRORS_H,
> so should this be COMMON_COMMON_TYPES_H?
No, because of the above :)
Cheers,
Gary
@@ -935,7 +935,7 @@ gdb_bfd.h sparc-ravenscar-thread.h ppc-ravenscar-thread.h nat/linux-btrace.h \
ctf.h nat/i386-cpuid.h nat/i386-gcc-cpuid.h target/resume.h \
target/wait.h target/waitstatus.h nat/linux-nat.h nat/linux-waitpid.h \
common/print-utils.h common/rsp-low.h nat/i386-dregs.h x86-linux-nat.h \
-i386-linux-nat.h common/common-defs.h common/errors.h
+i386-linux-nat.h common/common-defs.h common/errors.h common/common-types.h
# Header files that already have srcdir in them, or which are in objdir.
@@ -42,5 +42,6 @@
#include "common-utils.h"
#include "gdb_assert.h"
#include "errors.h"
+#include "common-types.h"
#endif /* COMMON_DEFS_H */
new file mode 100644
@@ -0,0 +1,61 @@
+/* Declarations for common types.
+
+ Copyright (C) 1986-2014 Free Software Foundation, Inc.
+
+ This file is part of GDB.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>. */
+
+#ifndef COMMON_TYPES_H
+#define COMMON_TYPES_H
+
+#ifdef GDBSERVER
+
+/* * A byte from the program being debugged. */
+typedef unsigned char gdb_byte;
+
+typedef unsigned long long CORE_ADDR;
+
+typedef long long LONGEST;
+typedef unsigned long long ULONGEST;
+
+#else /* GDBSERVER */
+
+#include "bfd.h"
+
+/* * A byte from the program being debugged. */
+typedef bfd_byte gdb_byte;
+
+/* * An address in the program being debugged. Host byte order. */
+typedef bfd_vma CORE_ADDR;
+
+/* This is to make sure that LONGEST is at least as big as CORE_ADDR. */
+
+#ifdef BFD64
+
+typedef BFD_HOST_64_BIT LONGEST;
+typedef BFD_HOST_U_64_BIT ULONGEST;
+
+#else /* No BFD64 */
+
+typedef long long LONGEST;
+typedef unsigned long long ULONGEST;
+
+#endif /* No BFD64 */
+#endif /* GDBSERVER */
+
+/* * The largest CORE_ADDR value. */
+#define CORE_ADDR_MAX (~ (CORE_ADDR) 0)
+
+#endif /* COMMON_TYPES_H */
@@ -76,35 +76,6 @@
#include "hashtab.h"
-/* Rather than duplicate all the logic in BFD for figuring out what
- types to use (which can be pretty complicated), symply define them
- in terms of the corresponding type from BFD. */
-
-#include "bfd.h"
-
-/* * A byte from the program being debugged. */
-typedef bfd_byte gdb_byte;
-
-/* * An address in the program being debugged. Host byte order. */
-typedef bfd_vma CORE_ADDR;
-
-/* * The largest CORE_ADDR value. */
-#define CORE_ADDR_MAX (~ (CORE_ADDR) 0)
-
-/* This is to make sure that LONGEST is at least as big as CORE_ADDR. */
-
-#ifdef BFD64
-
-#define LONGEST BFD_HOST_64_BIT
-#define ULONGEST BFD_HOST_U_64_BIT
-
-#else /* No BFD64 */
-
-#define LONGEST long long
-#define ULONGEST unsigned long long
-
-#endif /* No BFD64 */
-
#ifndef min
#define min(a, b) ((a) < (b) ? (a) : (b))
#endif
@@ -21,6 +21,8 @@
#include "common-defs.h"
+gdb_static_assert (sizeof (CORE_ADDR) >= sizeof (void *));
+
#ifdef __MINGW32CE__
#include "wincecompat.h"
#endif
@@ -63,19 +65,8 @@ int vsnprintf(char *str, size_t size, const char *format, va_list ap);
# define PROG "gdbserver"
#endif
-/* A type used for binary buffers. */
-typedef unsigned char gdb_byte;
-
#include "buffer.h"
#include "xml-utils.h"
-
-/* FIXME: This should probably be autoconf'd for. It's an integer type at
- least the size of a (void *). */
-typedef unsigned long long CORE_ADDR;
-
-typedef long long LONGEST;
-typedef unsigned long long ULONGEST;
-
#include "regcache.h"
#include "gdb_signals.h"
#include "target.h"