From: David Taylor Date: Fri, 25 Aug 2000 20:51:19 +0000 (+0000) Subject: Fri Aug 25 12:11:21 2000 David Taylor X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=52204a0b3a4dda13a5c13c31cafff75bbad077de;p=binutils-gdb.git Fri Aug 25 12:11:21 2000 David Taylor * symtab.c (search_symbols): Fix off by one error in index for initializing variables ourtype, ourtype2, ourtype3, and ourtype4. (symtab_symbol_info): fix similar off by one error. Fri Aug 25 12:03:15 2000 David Taylor * gdbarch.sh (TARGET_ADDR_BIT): New macro for the number of bits in gdb's representation of a target address. * gdbarch.c, gdbarch.h: Regenerated. * gdbtypes.c (build_gdbtypes): Use TARGET_ADDR_BIT instead of TARGET_PTR_BIT when initializing builtin_type_CORE_ADDR. * printcmd.c (print_address_numeric): Use TARGET_ADDR_BIT instead of TARGET_PTR_BIT, because we're printing an address, not a pointer. --- diff --git a/gdb/ChangeLog b/gdb/ChangeLog index ea26d611312..e8a0a5d25a8 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,19 @@ +Fri Aug 25 12:11:21 2000 David Taylor + + * symtab.c (search_symbols): Fix off by one error in index for + initializing variables ourtype, ourtype2, ourtype3, and ourtype4. + (symtab_symbol_info): fix similar off by one error. + +Fri Aug 25 12:03:15 2000 David Taylor + + * gdbarch.sh (TARGET_ADDR_BIT): New macro for the number + of bits in gdb's representation of a target address. + * gdbarch.c, gdbarch.h: Regenerated. + * gdbtypes.c (build_gdbtypes): Use TARGET_ADDR_BIT instead of + TARGET_PTR_BIT when initializing builtin_type_CORE_ADDR. + * printcmd.c (print_address_numeric): Use TARGET_ADDR_BIT instead + of TARGET_PTR_BIT, because we're printing an address, not a pointer. + 2000-08-25 Pierre Muller * Makefile.in: add rules to compile and link pascal specific files. diff --git a/gdb/gdbarch.c b/gdb/gdbarch.c index aa62d1302eb..6bf83bb0121 100644 --- a/gdb/gdbarch.c +++ b/gdb/gdbarch.c @@ -22,13 +22,13 @@ /* This file was created with the aid of ``gdbarch.sh''. - The bourn shell script ``gdbarch.sh'' creates the files + The Bourne shell script ``gdbarch.sh'' creates the files ``new-gdbarch.c'' and ``new-gdbarch.h and then compares them against the existing ``gdbarch.[hc]''. Any differences found being reported. If editing this file, please also run gdbarch.sh and merge any - changes into that script. Conversely, when makeing sweeping changes + changes into that script. Conversely, when making sweeping changes to this file, modifying gdbarch.sh and using its output may prove easier. */ @@ -136,6 +136,7 @@ struct gdbarch int double_bit; int long_double_bit; int ptr_bit; + int addr_bit; int bfd_vma_bit; int ieee_float; gdbarch_read_pc_ftype *read_pc; @@ -258,6 +259,7 @@ struct gdbarch startup_gdbarch = 8 * sizeof (long double), 8 * sizeof (void*), 8 * sizeof (void*), + 8 * sizeof (void*), 0, 0, 0, @@ -469,6 +471,8 @@ verify_gdbarch (struct gdbarch *gdbarch) /* Skip verify of double_bit, invalid_p == 0 */ /* Skip verify of long_double_bit, invalid_p == 0 */ /* Skip verify of ptr_bit, invalid_p == 0 */ + if (gdbarch->addr_bit == 0) + gdbarch->addr_bit = TARGET_PTR_BIT; /* Skip verify of bfd_vma_bit, invalid_p == 0 */ /* Skip verify of ieee_float, invalid_p == 0 */ /* Skip verify of read_pc, invalid_p == 0 */ @@ -728,6 +732,11 @@ gdbarch_dump (struct gdbarch *gdbarch, struct ui_file *file) "gdbarch_dump: TARGET_PTR_BIT # %s\n", XSTRING (TARGET_PTR_BIT)); #endif +#ifdef TARGET_ADDR_BIT + fprintf_unfiltered (file, + "gdbarch_dump: TARGET_ADDR_BIT # %s\n", + XSTRING (TARGET_ADDR_BIT)); +#endif #ifdef TARGET_BFD_VMA_BIT fprintf_unfiltered (file, "gdbarch_dump: TARGET_BFD_VMA_BIT # %s\n", @@ -1335,6 +1344,11 @@ gdbarch_dump (struct gdbarch *gdbarch, struct ui_file *file) "gdbarch_dump: TARGET_PTR_BIT = %ld\n", (long) TARGET_PTR_BIT); #endif +#ifdef TARGET_ADDR_BIT + fprintf_unfiltered (file, + "gdbarch_dump: TARGET_ADDR_BIT = %ld\n", + (long) TARGET_ADDR_BIT); +#endif #ifdef TARGET_BFD_VMA_BIT fprintf_unfiltered (file, "gdbarch_dump: TARGET_BFD_VMA_BIT = %ld\n", @@ -2092,6 +2106,23 @@ set_gdbarch_ptr_bit (struct gdbarch *gdbarch, gdbarch->ptr_bit = ptr_bit; } +int +gdbarch_addr_bit (struct gdbarch *gdbarch) +{ + if (gdbarch->addr_bit == 0) + internal_error ("gdbarch: gdbarch_addr_bit invalid"); + if (gdbarch_debug >= 2) + fprintf_unfiltered (gdb_stdlog, "gdbarch_addr_bit called\n"); + return gdbarch->addr_bit; +} + +void +set_gdbarch_addr_bit (struct gdbarch *gdbarch, + int addr_bit) +{ + gdbarch->addr_bit = addr_bit; +} + int gdbarch_bfd_vma_bit (struct gdbarch *gdbarch) { diff --git a/gdb/gdbarch.h b/gdb/gdbarch.h index 0b8b64143a5..2fa2f6e51f6 100644 --- a/gdb/gdbarch.h +++ b/gdb/gdbarch.h @@ -22,13 +22,13 @@ /* This file was created with the aid of ``gdbarch.sh''. - The bourn shell script ``gdbarch.sh'' creates the files + The Bourne shell script ``gdbarch.sh'' creates the files ``new-gdbarch.c'' and ``new-gdbarch.h and then compares them against the existing ``gdbarch.[hc]''. Any differences found being reported. If editing this file, please also run gdbarch.sh and merge any - changes into that script. Conversely, when makeing sweeping changes + changes into that script. Conversely, when making sweeping changes to this file, modifying gdbarch.sh and using its output may prove easier. */ @@ -189,7 +189,15 @@ extern void set_gdbarch_long_double_bit (struct gdbarch *gdbarch, int long_doubl #endif #endif -/* Number of bits in a pointer for the target machine */ +/* For most targets, a pointer on the target and its representation as an + address in GDB have the same size and "look the same". For such a + target, you need only set TARGET_PTR_BIT / ptr_bit and TARGET_ADDR_BIT + / addr_bit will be set from it. + + If TARGET_PTR_BIT and TARGET_ADDR_BIT are different, you'll probably + also need to set POINTER_TO_ADDRESS and ADDRESS_TO_POINTER as well. + + ptr_bit is the size of a pointer on the target */ /* Default (value) for non- multi-arch platforms. */ #if (!GDB_MULTI_ARCH) && !defined (TARGET_PTR_BIT) @@ -204,6 +212,21 @@ extern void set_gdbarch_ptr_bit (struct gdbarch *gdbarch, int ptr_bit); #endif #endif +/* addr_bit is the size of a target address as represented in gdb */ + +/* Default (value) for non- multi-arch platforms. */ +#if (!GDB_MULTI_ARCH) && !defined (TARGET_ADDR_BIT) +#define TARGET_ADDR_BIT (TARGET_PTR_BIT) +#endif + +extern int gdbarch_addr_bit (struct gdbarch *gdbarch); +extern void set_gdbarch_addr_bit (struct gdbarch *gdbarch, int addr_bit); +#if GDB_MULTI_ARCH +#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (TARGET_ADDR_BIT) +#define TARGET_ADDR_BIT (gdbarch_addr_bit (current_gdbarch)) +#endif +#endif + /* Number of bits in a BFD_VMA for the target object file format. */ /* Default (value) for non- multi-arch platforms. */ diff --git a/gdb/gdbarch.sh b/gdb/gdbarch.sh index 2cffe3e220c..069d2771592 100755 --- a/gdb/gdbarch.sh +++ b/gdb/gdbarch.sh @@ -319,8 +319,18 @@ v::TARGET_FLOAT_BIT:int:float_bit::::8 * sizeof (float):4*TARGET_CHAR_BIT::0 v::TARGET_DOUBLE_BIT:int:double_bit::::8 * sizeof (double):8*TARGET_CHAR_BIT::0 # Number of bits in a long double for the target machine. v::TARGET_LONG_DOUBLE_BIT:int:long_double_bit::::8 * sizeof (long double):2*TARGET_DOUBLE_BIT::0 -# Number of bits in a pointer for the target machine +# For most targets, a pointer on the target and its representation as an +# address in GDB have the same size and "look the same". For such a +# target, you need only set TARGET_PTR_BIT / ptr_bit and TARGET_ADDR_BIT +# / addr_bit will be set from it. +# +# If TARGET_PTR_BIT and TARGET_ADDR_BIT are different, you'll probably +# also need to set POINTER_TO_ADDRESS and ADDRESS_TO_POINTER as well. +# +# ptr_bit is the size of a pointer on the target v::TARGET_PTR_BIT:int:ptr_bit::::8 * sizeof (void*):TARGET_INT_BIT::0 +# addr_bit is the size of a target address as represented in gdb +v::TARGET_ADDR_BIT:int:addr_bit::::8 * sizeof (void*):0:TARGET_PTR_BIT: # Number of bits in a BFD_VMA for the target object file format. v::TARGET_BFD_VMA_BIT:int:bfd_vma_bit::::8 * sizeof (void*):TARGET_ARCHITECTURE->bits_per_address::0 # @@ -515,13 +525,13 @@ cat <next) {