PR binutils/1437
[deliverable/binutils-gdb.git] / gdb / value.c
index e6a14bb09b20ed2c7f823ffa870101b669812e30..097d94140185142f7630cd6e8e31443240174179 100644 (file)
@@ -165,7 +165,7 @@ struct value
      declared here.  */
   union
   {
-    bfd_byte contents[1];
+    gdb_byte contents[1];
     DOUBLEST force_doublest_align;
     LONGEST force_longest_align;
     CORE_ADDR force_core_addr_align;
@@ -306,13 +306,13 @@ set_value_bitsize (struct value *value, int bit)
   value->bitsize = bit;
 }
 
-bfd_byte *
+gdb_byte *
 value_contents_raw (struct value *value)
 {
   return value->aligner.contents + value->embedded_offset;
 }
 
-bfd_byte *
+gdb_byte *
 value_contents_all_raw (struct value *value)
 {
   return value->aligner.contents;
@@ -324,7 +324,7 @@ value_enclosing_type (struct value *value)
   return value->enclosing_type;
 }
 
-const bfd_byte *
+const gdb_byte *
 value_contents_all (struct value *value)
 {
   if (value->lazy)
@@ -344,18 +344,38 @@ set_value_lazy (struct value *value, int val)
   value->lazy = val;
 }
 
-const bfd_byte *
+const gdb_byte *
 value_contents (struct value *value)
 {
   return value_contents_writeable (value);
 }
 
-bfd_byte *
+gdb_byte *
 value_contents_writeable (struct value *value)
 {
   if (value->lazy)
     value_fetch_lazy (value);
-  return value->aligner.contents;
+  return value_contents_raw (value);
+}
+
+/* Return non-zero if VAL1 and VAL2 have the same contents.  Note that
+   this function is different from value_equal; in C the operator ==
+   can return 0 even if the two values being compared are equal.  */
+
+int
+value_contents_equal (struct value *val1, struct value *val2)
+{
+  struct type *type1;
+  struct type *type2;
+  int len;
+
+  type1 = check_typedef (value_type (val1));
+  type2 = check_typedef (value_type (val2));
+  len = TYPE_LENGTH (type1);
+  if (len != TYPE_LENGTH (type2))
+    return 0;
+
+  return (memcmp (value_contents (val1), value_contents (val2), len) == 0);
 }
 
 int
@@ -682,9 +702,9 @@ show_values (char *num_exp, int from_tty)
   for (i = num; i < num + 10 && i <= value_history_count; i++)
     {
       val = access_value_history (i);
-      printf_filtered ("$%d = ", i);
+      printf_filtered (("$%d = "), i);
       value_print (val, gdb_stdout, 0, Val_pretty_default);
-      printf_filtered ("\n");
+      printf_filtered (("\n"));
     }
 
   /* The next "info history +" should start after what we just printed.  */
@@ -723,7 +743,7 @@ lookup_internalvar (char *name)
       return var;
 
   var = (struct internalvar *) xmalloc (sizeof (struct internalvar));
-  var->name = concat (name, NULL);
+  var->name = concat (name, (char *)NULL);
   var->value = allocate_value (builtin_type_void);
   release_value (var->value);
   var->next = internalvars;
@@ -748,7 +768,7 @@ void
 set_internalvar_component (struct internalvar *var, int offset, int bitpos,
                           int bitsize, struct value *newval)
 {
-  bfd_byte *addr = value_contents_writeable (var->value) + offset;
+  gdb_byte *addr = value_contents_writeable (var->value) + offset;
 
   if (bitsize)
     modify_field (addr, value_as_long (newval),
@@ -819,14 +839,15 @@ show_convenience (char *ignore, int from_tty)
        {
          varseen = 1;
        }
-      printf_filtered ("$%s = ", var->name);
+      printf_filtered (("$%s = "), var->name);
       value_print (var->value, gdb_stdout, 0, Val_pretty_default);
-      printf_filtered ("\n");
+      printf_filtered (("\n"));
     }
   if (!varseen)
-    printf_unfiltered ("No debugger convenience variables now defined.\n\
+    printf_unfiltered (_("\
+No debugger convenience variables now defined.\n\
 Convenience variables have names starting with \"$\";\n\
-use \"set\" as in \"set $foo = 5\" to define them.\n");
+use \"set\" as in \"set $foo = 5\" to define them.\n"));
 }
 \f
 /* Extract a value as a C number (either long or double).
@@ -975,7 +996,7 @@ value_as_address (struct value *val)
    to an INT (or some size).  After all, it is only an offset.  */
 
 LONGEST
-unpack_long (struct type *type, const char *valaddr)
+unpack_long (struct type *type, const gdb_byte *valaddr)
 {
   enum type_code code = TYPE_CODE (type);
   int len = TYPE_LENGTH (type);
@@ -1024,7 +1045,7 @@ unpack_long (struct type *type, const char *valaddr)
    format, result is in host format.  */
 
 DOUBLEST
-unpack_double (struct type *type, const char *valaddr, int *invp)
+unpack_double (struct type *type, const gdb_byte *valaddr, int *invp)
 {
   enum type_code code;
   int len;
@@ -1088,7 +1109,7 @@ unpack_double (struct type *type, const char *valaddr, int *invp)
    to an INT (or some size).  After all, it is only an offset.  */
 
 CORE_ADDR
-unpack_pointer (struct type *type, const char *valaddr)
+unpack_pointer (struct type *type, const gdb_byte *valaddr)
 {
   /* Assume a CORE_ADDR can fit in a LONGEST (for now).  Not sure
      whether we want this to be true eventually.  */
@@ -1338,7 +1359,7 @@ value_fn_field (struct value **arg1p, struct fn_field *f, int j, struct type *ty
    If the field is signed, we also do sign extension. */
 
 LONGEST
-unpack_field_as_long (struct type *type, const char *valaddr, int fieldno)
+unpack_field_as_long (struct type *type, const gdb_byte *valaddr, int fieldno)
 {
   ULONGEST val;
   ULONGEST valmask;
@@ -1385,7 +1406,7 @@ unpack_field_as_long (struct type *type, const char *valaddr, int fieldno)
    0 <= BITPOS, where lbits is the size of a LONGEST in bits.  */
 
 void
-modify_field (char *addr, LONGEST fieldval, int bitpos, int bitsize)
+modify_field (gdb_byte *addr, LONGEST fieldval, int bitpos, int bitsize)
 {
   ULONGEST oword;
   ULONGEST mask = (ULONGEST) -1 >> (8 * sizeof (ULONGEST) - bitsize);
@@ -1605,16 +1626,17 @@ using_struct_return (struct type *value_type, int gcc_p)
 void
 _initialize_values (void)
 {
-  add_cmd ("convenience", no_class, show_convenience,
-          "Debugger convenience (\"$foo\") variables.\n\
+  add_cmd ("convenience", no_class, show_convenience, _("\
+Debugger convenience (\"$foo\") variables.\n\
 These variables are created when you assign them values;\n\
-thus, \"print $foo=1\" gives \"$foo\" the value 1.  Values may be any type.\n\n\
+thus, \"print $foo=1\" gives \"$foo\" the value 1.  Values may be any type.\n\
+\n\
 A few convenience variables are given values automatically:\n\
 \"$_\"holds the last address examined with \"x\" or \"info lines\",\n\
-\"$__\" holds the contents of the last address examined with \"x\".",
+\"$__\" holds the contents of the last address examined with \"x\"."),
           &showlist);
 
   add_cmd ("values", no_class, show_values,
-          "Elements of value history around item number IDX (or last ten).",
+          _("Elements of value history around item number IDX (or last ten)."),
           &showlist);
 }
This page took 0.025566 seconds and 4 git commands to generate.