* gdbarch.sh (TARGET_CHAR_SIGNED): New macro.
authorJim Blandy <jimb@codesourcery.com>
Thu, 20 Dec 2001 03:26:08 +0000 (03:26 +0000)
committerJim Blandy <jimb@codesourcery.com>
Thu, 20 Dec 2001 03:26:08 +0000 (03:26 +0000)
* gdbarch.c, gdbarch.h: Regenerated.
* gdbtypes.c (build_gdbtypes): If TARGET_CHAR_SIGNED is zero,
set the TYPE_FLAG_UNSIGNED bit on the type.
* s390-tdep.c (s390_gdbarch_init): On the S/390, characters
are unsigned by default.
* rs6000-tdep.c (rs6000_gdbarch_init): Same for PowerPC and
RS6000.

gdb/gdbarch.c
gdb/gdbarch.h
gdb/gdbarch.sh
gdb/gdbtypes.c
gdb/rs6000-tdep.c
gdb/s390-tdep.c

index 6a1b61be70a8879637a00ec8881feb4945d20f05..2de3360e1c105272cdb1f058e0e48032a7cde5bb 100644 (file)
@@ -144,6 +144,7 @@ struct gdbarch
   int ptr_bit;
   int addr_bit;
   int bfd_vma_bit;
+  int char_signed;
   int ieee_float;
   gdbarch_read_pc_ftype *read_pc;
   gdbarch_write_pc_ftype *write_pc;
@@ -285,6 +286,7 @@ struct gdbarch startup_gdbarch =
   8 * sizeof (void*),
   8 * sizeof (void*),
   8 * sizeof (void*),
+  1,
   0,
   0,
   0,
@@ -446,6 +448,7 @@ gdbarch_alloc (const struct gdbarch_info *info,
   current_gdbarch->long_double_bit = 2*TARGET_DOUBLE_BIT;
   current_gdbarch->ptr_bit = TARGET_INT_BIT;
   current_gdbarch->bfd_vma_bit = TARGET_ARCHITECTURE->bits_per_address;
+  current_gdbarch->char_signed = -1;
   current_gdbarch->read_pc = generic_target_read_pc;
   current_gdbarch->write_pc = generic_target_write_pc;
   current_gdbarch->read_fp = generic_target_read_fp;
@@ -561,6 +564,8 @@ verify_gdbarch (struct gdbarch *gdbarch)
   if (gdbarch->addr_bit == 0)
     gdbarch->addr_bit = TARGET_PTR_BIT;
   /* Skip verify of bfd_vma_bit, invalid_p == 0 */
+  if (gdbarch->char_signed == -1)
+    gdbarch->char_signed = 1;
   /* Skip verify of ieee_float, invalid_p == 0 */
   /* Skip verify of read_pc, invalid_p == 0 */
   /* Skip verify of write_pc, invalid_p == 0 */
@@ -1867,6 +1872,14 @@ gdbarch_dump (struct gdbarch *gdbarch, struct ui_file *file)
                       "gdbarch_dump: TARGET_BYTE_ORDER = %ld\n",
                       (long) TARGET_BYTE_ORDER);
 #endif
+#ifdef TARGET_CHAR_SIGNED
+  fprintf_unfiltered (file,
+                      "gdbarch_dump: TARGET_CHAR_SIGNED # %s\n",
+                      XSTRING (TARGET_CHAR_SIGNED));
+  fprintf_unfiltered (file,
+                      "gdbarch_dump: TARGET_CHAR_SIGNED = %d\n",
+                      (long) TARGET_CHAR_SIGNED);
+#endif
 #ifdef TARGET_DOUBLE_BIT
   fprintf_unfiltered (file,
                       "gdbarch_dump: TARGET_DOUBLE_BIT # %s\n",
@@ -2265,6 +2278,24 @@ set_gdbarch_bfd_vma_bit (struct gdbarch *gdbarch,
   gdbarch->bfd_vma_bit = bfd_vma_bit;
 }
 
+int
+gdbarch_char_signed (struct gdbarch *gdbarch)
+{
+  if (gdbarch->char_signed == -1)
+    internal_error (__FILE__, __LINE__,
+                    "gdbarch: gdbarch_char_signed invalid");
+  if (gdbarch_debug >= 2)
+    fprintf_unfiltered (gdb_stdlog, "gdbarch_char_signed called\n");
+  return gdbarch->char_signed;
+}
+
+void
+set_gdbarch_char_signed (struct gdbarch *gdbarch,
+                         int char_signed)
+{
+  gdbarch->char_signed = char_signed;
+}
+
 int
 gdbarch_ieee_float (struct gdbarch *gdbarch)
 {
index 21e531755fc36e88f8c9e75728e5de524ed1fcab..84e5c167a7dc5bdcf3679847a1925c14d863b464 100644 (file)
@@ -287,6 +287,24 @@ extern void set_gdbarch_bfd_vma_bit (struct gdbarch *gdbarch, int bfd_vma_bit);
 #endif
 #endif
 
+/* One if `char' acts like `signed char', zero if `unsigned char'. */
+
+/* Default (value) for non- multi-arch platforms. */
+#if (!GDB_MULTI_ARCH) && !defined (TARGET_CHAR_SIGNED)
+#define TARGET_CHAR_SIGNED (1)
+#endif
+
+extern int gdbarch_char_signed (struct gdbarch *gdbarch);
+extern void set_gdbarch_char_signed (struct gdbarch *gdbarch, int char_signed);
+#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (TARGET_CHAR_SIGNED)
+#error "Non multi-arch definition of TARGET_CHAR_SIGNED"
+#endif
+#if GDB_MULTI_ARCH
+#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (TARGET_CHAR_SIGNED)
+#define TARGET_CHAR_SIGNED (gdbarch_char_signed (current_gdbarch))
+#endif
+#endif
+
 /* Default (value) for non- multi-arch platforms. */
 #if (!GDB_MULTI_ARCH) && !defined (IEEE_FLOAT)
 #define IEEE_FLOAT (0)
index c474232790ec88ea49ed7d2f6bafa36c98c6f7ea..e263e45acf0af1e3194073e462734ebef8234a1c 100755 (executable)
@@ -384,6 +384,9 @@ 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
 #
+# One if \`char' acts like \`signed char', zero if \`unsigned char'.
+v::TARGET_CHAR_SIGNED:int:char_signed::::1:-1:1::%d::
+#
 v::IEEE_FLOAT:int:ieee_float::::0:0::0:::
 #
 f::TARGET_READ_PC:CORE_ADDR:read_pc:ptid_t ptid:ptid::0:generic_target_read_pc::0
index 4a4ff1edf1ea902ff70e3c4180320e1057aaaa54..1204a0c3abb9021ca78b536e745e3e575d18ba34 100644 (file)
@@ -3029,7 +3029,8 @@ build_gdbtypes (void)
               "void", (struct objfile *) NULL);
   builtin_type_char =
     init_type (TYPE_CODE_INT, TARGET_CHAR_BIT / TARGET_CHAR_BIT,
-              TYPE_FLAG_NOSIGN,
+              (TYPE_FLAG_NOSIGN
+                | (TARGET_CHAR_SIGNED ? 0 : TYPE_FLAG_UNSIGNED)),
               "char", (struct objfile *) NULL);
   builtin_type_true_char =
     init_type (TYPE_CODE_CHAR, TARGET_CHAR_BIT / TARGET_CHAR_BIT,
index 70facb42cc4b5f96249c32e90c0a1b7a8bf7a4d6..081eccba3f782459bd6e311fb3ae024a2f1c3b77 100644 (file)
@@ -2298,6 +2298,7 @@ rs6000_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
   set_gdbarch_float_bit (gdbarch, 4 * TARGET_CHAR_BIT);
   set_gdbarch_double_bit (gdbarch, 8 * TARGET_CHAR_BIT);
   set_gdbarch_long_double_bit (gdbarch, 8 * TARGET_CHAR_BIT);
+  set_gdbarch_char_signed (gdbarch, 0);
 
   set_gdbarch_use_generic_dummy_frames (gdbarch, 1);
   set_gdbarch_call_dummy_length (gdbarch, 0);
index 7bab1a8347a7c0fbc4d231c27f7c732d5e832f31..02786ece5e3d36dfbeb659757613ae42b63a7142 100644 (file)
@@ -1763,6 +1763,7 @@ s390_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
   gdbarch = gdbarch_alloc (&info, NULL);
 
   set_gdbarch_believe_pcc_promotion (gdbarch, 0);
+  set_gdbarch_char_signed (gdbarch, 0);
 
   set_gdbarch_frame_args_skip (gdbarch, 0);
   set_gdbarch_frame_args_address (gdbarch, s390_frame_args_address);