Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1160)

Unified Diff: gdb/f-valprint.c

Issue 11969036: Merge GDB 7.5.1 (Closed) Base URL: http://git.chromium.org/native_client/nacl-gdb.git@master
Patch Set: Created 7 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « gdb/f-lang.c ('k') | gdb/fbsd-nat.c » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: gdb/f-valprint.c
diff --git a/gdb/f-valprint.c b/gdb/f-valprint.c
index 87b2ed1a1abb4003e56d5a14d265603cac14e764..4359f6f62e9b4a45325f054e888a50aaeebbeea8 100644
--- a/gdb/f-valprint.c
+++ b/gdb/f-valprint.c
@@ -41,7 +41,7 @@ static int there_is_a_visible_common_named (char *);
extern void _initialize_f_valprint (void);
static void info_common_command (char *, int);
-static void list_all_visible_commons (char *);
+static void list_all_visible_commons (const char *);
static void f77_create_arrayprint_offset_tbl (struct type *,
struct ui_file *);
static void f77_get_dynamic_length_of_aggregate (struct type *);
@@ -242,11 +242,22 @@ Type node corrupt! F77 arrays cannot have %d subscripts (%d Max)"),
}
+/* Decorations for Fortran. */
+
+static const struct generic_val_print_decorations f_decorations =
+{
+ "(",
+ ",",
+ ")",
+ ".TRUE.",
+ ".FALSE.",
+ "VOID",
+};
+
/* See val_print for a description of the various parameters of this
- function; they are identical. The semantics of the return value is
- also identical to val_print. */
+ function; they are identical. */
-int
+void
f_val_print (struct type *type, const gdb_byte *valaddr, int embedded_offset,
CORE_ADDR address, struct ui_file *stream, int recurse,
const struct value *original_value,
@@ -256,7 +267,6 @@ f_val_print (struct type *type, const gdb_byte *valaddr, int embedded_offset,
enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
unsigned int i = 0; /* Number of characters printed. */
struct type *elttype;
- LONGEST val;
CORE_ADDR addr;
int index;
@@ -299,19 +309,26 @@ f_val_print (struct type *type, const gdb_byte *valaddr, int embedded_offset,
}
else
{
+ int want_space = 0;
+
addr = unpack_pointer (type, valaddr + embedded_offset);
elttype = check_typedef (TYPE_TARGET_TYPE (type));
if (TYPE_CODE (elttype) == TYPE_CODE_FUNC)
{
/* Try to print what function it points to. */
- print_address_demangle (gdbarch, addr, stream, demangle);
- /* Return value is irrelevant except for string pointers. */
- return 0;
+ print_function_pointer_address (options, gdbarch, addr, stream);
+ return;
}
- if (options->addressprint && options->format != 's')
- fputs_filtered (paddress (gdbarch, addr), stream);
+ if (options->symbol_print)
+ want_space = print_address_demangle (options, gdbarch, addr,
+ stream, demangle);
+ else if (options->addressprint && options->format != 's')
+ {
+ fputs_filtered (paddress (gdbarch, addr), stream);
+ want_space = 1;
+ }
/* For a pointer to char or unsigned char, also print the string
pointed to, unless pointer is null. */
@@ -319,73 +336,17 @@ f_val_print (struct type *type, const gdb_byte *valaddr, int embedded_offset,
&& TYPE_CODE (elttype) == TYPE_CODE_INT
&& (options->format == 0 || options->format == 's')
&& addr != 0)
- i = val_print_string (TYPE_TARGET_TYPE (type), NULL, addr, -1,
- stream, options);
-
- /* Return number of characters printed, including the terminating
- '\0' if we reached the end. val_print_string takes care including
- the terminating '\0' if necessary. */
- return i;
- }
- break;
-
- case TYPE_CODE_REF:
- elttype = check_typedef (TYPE_TARGET_TYPE (type));
- if (options->addressprint)
- {
- CORE_ADDR addr
- = extract_typed_address (valaddr + embedded_offset, type);
-
- fprintf_filtered (stream, "@");
- fputs_filtered (paddress (gdbarch, addr), stream);
- if (options->deref_ref)
- fputs_filtered (": ", stream);
- }
- /* De-reference the reference. */
- if (options->deref_ref)
- {
- if (TYPE_CODE (elttype) != TYPE_CODE_UNDEF)
{
- struct value *deref_val;
-
- deref_val = coerce_ref_if_computed (original_value);
- if (deref_val != NULL)
- {
- /* More complicated computed references are not supported. */
- gdb_assert (embedded_offset == 0);
- }
- else
- deref_val = value_at (TYPE_TARGET_TYPE (type),
- unpack_pointer (type,
- (valaddr
- + embedded_offset)));
-
- common_val_print (deref_val, stream, recurse,
- options, current_language);
+ if (want_space)
+ fputs_filtered (" ", stream);
+ i = val_print_string (TYPE_TARGET_TYPE (type), NULL, addr, -1,
+ stream, options);
}
- else
- fputs_filtered ("???", stream);
- }
- break;
-
- case TYPE_CODE_FUNC:
- if (options->format)
- {
- val_print_scalar_formatted (type, valaddr, embedded_offset,
- original_value, options, 0, stream);
- break;
+ return;
}
- /* FIXME, we should consider, at least for ANSI C language, eliminating
- the distinction made between FUNCs and POINTERs to FUNCs. */
- fprintf_filtered (stream, "{");
- type_print (type, "", stream, -1);
- fprintf_filtered (stream, "} ");
- /* Try to print what function it points to, and its address. */
- print_address_demangle (gdbarch, address, stream, demangle);
break;
case TYPE_CODE_INT:
- case TYPE_CODE_CHAR:
if (options->format || options->output_format)
{
struct value_print_options opts = *options;
@@ -402,7 +363,7 @@ f_val_print (struct type *type, const gdb_byte *valaddr, int embedded_offset,
Since we don't know whether the value is really intended to
be used as an integer or a character, print the character
equivalent as well. */
- if (TYPE_LENGTH (type) == 1 || TYPE_CODE (type) == TYPE_CODE_CHAR)
+ if (TYPE_LENGTH (type) == 1)
{
LONGEST c;
@@ -413,84 +374,6 @@ f_val_print (struct type *type, const gdb_byte *valaddr, int embedded_offset,
}
break;
- case TYPE_CODE_FLAGS:
- if (options->format)
- val_print_scalar_formatted (type, valaddr, embedded_offset,
- original_value, options, 0, stream);
- else
- val_print_type_code_flags (type, valaddr + embedded_offset, stream);
- break;
-
- case TYPE_CODE_FLT:
- if (options->format)
- val_print_scalar_formatted (type, valaddr, embedded_offset,
- original_value, options, 0, stream);
- else
- print_floating (valaddr + embedded_offset, type, stream);
- break;
-
- case TYPE_CODE_VOID:
- fprintf_filtered (stream, "VOID");
- break;
-
- case TYPE_CODE_ERROR:
- fprintf_filtered (stream, "%s", TYPE_ERROR_NAME (type));
- break;
-
- case TYPE_CODE_RANGE:
- /* FIXME, we should not ever have to print one of these yet. */
- fprintf_filtered (stream, "<range type>");
- break;
-
- case TYPE_CODE_BOOL:
- if (options->format || options->output_format)
- {
- struct value_print_options opts = *options;
-
- opts.format = (options->format ? options->format
- : options->output_format);
- val_print_scalar_formatted (type, valaddr, embedded_offset,
- original_value, &opts, 0, stream);
- }
- else
- {
- val = extract_unsigned_integer (valaddr + embedded_offset,
- TYPE_LENGTH (type), byte_order);
- if (val == 0)
- fprintf_filtered (stream, ".FALSE.");
- else if (val == 1)
- fprintf_filtered (stream, ".TRUE.");
- else
- /* Not a legitimate logical type, print as an integer. */
- {
- /* Bash the type code temporarily. */
- TYPE_CODE (type) = TYPE_CODE_INT;
- val_print (type, valaddr, embedded_offset,
- address, stream, recurse,
- original_value, options, current_language);
- /* Restore the type code so later uses work as intended. */
- TYPE_CODE (type) = TYPE_CODE_BOOL;
- }
- }
- break;
-
- case TYPE_CODE_COMPLEX:
- type = TYPE_TARGET_TYPE (type);
- fputs_filtered ("(", stream);
- print_floating (valaddr + embedded_offset, type, stream);
- fputs_filtered (",", stream);
- print_floating (valaddr + embedded_offset + TYPE_LENGTH (type),
- type, stream);
- fputs_filtered (")", stream);
- break;
-
- case TYPE_CODE_UNDEF:
- /* This happens (without TYPE_FLAG_STUB set) on systems which don't use
- dbx xrefs (NO_DBX_XREFS in gcc) if a file has a "struct foo *bar"
- and no complete type for struct foo in that file. */
- fprintf_filtered (stream, "<incomplete type>");
- break;
-
case TYPE_CODE_STRUCT:
case TYPE_CODE_UNION:
/* Starting from the Fortran 90 standard, Fortran supports derived
@@ -510,15 +393,28 @@ f_val_print (struct type *type, const gdb_byte *valaddr, int embedded_offset,
fprintf_filtered (stream, " )");
break;
+ case TYPE_CODE_REF:
+ case TYPE_CODE_FUNC:
+ case TYPE_CODE_FLAGS:
+ case TYPE_CODE_FLT:
+ case TYPE_CODE_VOID:
+ case TYPE_CODE_ERROR:
+ case TYPE_CODE_RANGE:
+ case TYPE_CODE_UNDEF:
+ case TYPE_CODE_COMPLEX:
+ case TYPE_CODE_BOOL:
+ case TYPE_CODE_CHAR:
default:
- error (_("Invalid F77 type code %d in symbol table."), TYPE_CODE (type));
+ generic_val_print (type, valaddr, embedded_offset, address,
+ stream, recurse, original_value, options,
+ &f_decorations);
+ break;
}
gdb_flush (stream);
- return 0;
}
static void
-list_all_visible_commons (char *funname)
+list_all_visible_commons (const char *funname)
{
SAVED_F77_COMMON_PTR tmp;
@@ -545,7 +441,7 @@ info_common_command (char *comname, int from_tty)
SAVED_F77_COMMON_PTR the_common;
COMMON_ENTRY_PTR entry;
struct frame_info *fi;
- char *funname = 0;
+ const char *funname = 0;
struct symbol *func;
/* We have been told to display the contents of F77 COMMON
@@ -609,6 +505,8 @@ info_common_command (char *comname, int from_tty)
if (the_common)
{
+ struct frame_id frame_id = get_frame_id (fi);
+
if (strcmp (comname, BLANK_COMMON_NAME_LOCAL) == 0)
printf_filtered (_("Contents of blank COMMON block:\n"));
else
@@ -619,7 +517,18 @@ info_common_command (char *comname, int from_tty)
while (entry != NULL)
{
+ fi = frame_find_by_id (frame_id);
+ if (fi == NULL)
+ {
+ warning (_("Unable to restore previously selected frame."));
+ break;
+ }
+
print_variable_and_value (NULL, entry->symbol, fi, gdb_stdout, 0);
+
+ /* print_variable_and_value invalidates FI. */
+ fi = NULL;
+
entry = entry->next;
}
}
« no previous file with comments | « gdb/f-lang.c ('k') | gdb/fbsd-nat.c » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698