aboutsummaryrefslogtreecommitdiff
path: root/gdb
diff options
context:
space:
mode:
Diffstat (limited to 'gdb')
-rw-r--r--gdb/ChangeLog21
-rw-r--r--gdb/c-typeprint.c11
-rw-r--r--gdb/cp-valprint.c38
-rw-r--r--gdb/f-exp.y4
-rw-r--r--gdb/f-valprint.c4
5 files changed, 72 insertions, 6 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index d3e3b0c..1542eb3 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,3 +1,24 @@
+Sat Sep 17 02:26:58 1994 Peter Schauer (pes@regent.e-technik.tu-muenchen.de)
+
+ * cp-valprint.c (static_field_print): New variable, controls
+ printing of static members.
+ (_initialize_cp_valprint): New print set subcommand
+ "static-members". Turn on printing of static members by default.
+ (cp_print_value_fields): Print static members if necessary.
+
+ * solib.c: Remove inclusion of libelf.h and elf/mips.h.
+ (elf_locate_base): Use only standard BFD functions to collect
+ information about the .dynamic section. Check for DT_MIPS_RLD_MAP
+ tag only if it got defined via the inclusion of <link.h>.
+
+ * f-exp.y: Write block for OP_VAR_VALUE.
+ * f-valprint.c (info_common_command): Handle `info common'
+ without an argument correctly.
+
+ * c-typeprint.c (c_type_print_base): Handle template constructors.
+ * symtab.c (gdb_mangle_name): Handle template method mangling,
+ get rid of GCC_MANGLE_BUG code, which only applied to gcc-2.2.2.
+
Fri Sep 16 16:06:08 1994 Per Bothner (bothner@kalessin.cygnus.com)
* gdbtypes.h (TYPE_INDEX_TYPE): New macro.
diff --git a/gdb/c-typeprint.c b/gdb/c-typeprint.c
index 6d5a85a..ff768ee 100644
--- a/gdb/c-typeprint.c
+++ b/gdb/c-typeprint.c
@@ -35,6 +35,7 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
#include <string.h>
#include <errno.h>
+#include <ctype.h>
static void
c_type_print_args PARAMS ((struct type *, GDB_FILE *));
@@ -641,6 +642,14 @@ c_type_print_base (type, stream, show, level)
int is_constructor = name && STREQ(method_name, name);
for (j = 0; j < len2; j++)
{
+ char *physname = TYPE_FN_FIELD_PHYSNAME (f, j);
+ int is_full_physname_constructor =
+ ((physname[0]=='_' && physname[1]=='_' &&
+ (isdigit(physname[2])
+ || physname[2]=='Q'
+ || physname[2]=='t'))
+ || (strncmp(physname, "__ct__", 6) == 0));
+
QUIT;
if (TYPE_FN_FIELD_PROTECTED (f, j))
{
@@ -680,7 +689,7 @@ c_type_print_base (type, stream, show, level)
TYPE_FN_FIELD_PHYSNAME (f, j));
break;
}
- else if (!is_constructor)
+ else if (!is_constructor && !is_full_physname_constructor)
{
type_print (TYPE_TARGET_TYPE (TYPE_FN_FIELD_TYPE (f, j)),
"", stream, 0);
diff --git a/gdb/cp-valprint.c b/gdb/cp-valprint.c
index af8d767..594ed0f 100644
--- a/gdb/cp-valprint.c
+++ b/gdb/cp-valprint.c
@@ -31,6 +31,7 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
int vtblprint; /* Controls printing of vtbl's */
int objectprint; /* Controls looking up an object's derived type
using what we find in its vtables. */
+static int static_field_print; /* Controls printing of static fields. */
struct obstack dont_print_obstack;
static void
@@ -240,8 +241,8 @@ cp_print_value_fields (type, valaddr, stream, format, recurse, pretty,
for (i = n_baseclasses; i < len; i++)
{
- /* Check if static field */
- if (TYPE_FIELD_STATIC (type, i))
+ /* If requested, skip printing of static fields. */
+ if (!static_field_print && TYPE_FIELD_STATIC (type, i))
continue;
if (fields_seen)
fprintf_filtered (stream, ", ");
@@ -273,6 +274,8 @@ cp_print_value_fields (type, valaddr, stream, format, recurse, pretty,
fputs_filtered ("\"( ptr \"", stream);
else
fputs_filtered ("\"( nodef \"", stream);
+ if (TYPE_FIELD_STATIC (type, i))
+ fputs_filtered ("static ", stream);
fprintf_symbol_filtered (stream, TYPE_FIELD_NAME (type, i),
language_cplus,
DMGL_PARAMS | DMGL_ANSI);
@@ -286,6 +289,8 @@ cp_print_value_fields (type, valaddr, stream, format, recurse, pretty,
{
annotate_field_begin (TYPE_FIELD_TYPE (type, i));
+ if (TYPE_FIELD_STATIC (type, i))
+ fputs_filtered ("static ", stream);
fprintf_symbol_filtered (stream, TYPE_FIELD_NAME (type, i),
language_cplus,
DMGL_PARAMS | DMGL_ANSI);
@@ -294,7 +299,7 @@ cp_print_value_fields (type, valaddr, stream, format, recurse, pretty,
annotate_field_value ();
}
- if (TYPE_FIELD_PACKED (type, i))
+ if (!TYPE_FIELD_STATIC (type, i) && TYPE_FIELD_PACKED (type, i))
{
value_ptr v;
@@ -319,6 +324,24 @@ cp_print_value_fields (type, valaddr, stream, format, recurse, pretty,
{
fputs_filtered ("<optimized out or zero length>", stream);
}
+ else if (TYPE_FIELD_STATIC (type, i))
+ {
+ value_ptr v;
+ char *phys_name = TYPE_FIELD_STATIC_PHYSNAME (type, i);
+ struct symbol *sym =
+ lookup_symbol (phys_name, 0, VAR_NAMESPACE, 0, NULL);
+ if (sym == NULL)
+ fputs_filtered ("<optimized out>", stream);
+ else
+ {
+ v = value_at (TYPE_FIELD_TYPE (type, i),
+ (CORE_ADDR)SYMBOL_BLOCK_VALUE (sym));
+ val_print (TYPE_FIELD_TYPE (type, i),
+ VALUE_CONTENTS_RAW (v),
+ VALUE_ADDRESS (v),
+ stream, format, 0, recurse + 1, pretty);
+ }
+ }
else
{
val_print (TYPE_FIELD_TYPE (type, i),
@@ -494,6 +517,15 @@ void
_initialize_cp_valprint ()
{
add_show_from_set
+ (add_set_cmd ("static-members", class_support, var_boolean,
+ (char *)&static_field_print,
+ "Set printing of C++ static members.",
+ &setprintlist),
+ &showprintlist);
+ /* Turn on printing of static fields. */
+ static_field_print = 1;
+
+ add_show_from_set
(add_set_cmd ("vtbl", class_support, var_boolean, (char *)&vtblprint,
"Set printing of C++ virtual function tables.",
&setprintlist),
diff --git a/gdb/f-exp.y b/gdb/f-exp.y
index 6270fc7..df22468 100644
--- a/gdb/f-exp.y
+++ b/gdb/f-exp.y
@@ -477,6 +477,10 @@ variable: name_not_typename
innermost_block = block_found;
}
write_exp_elt_opcode (OP_VAR_VALUE);
+ /* We want to use the selected frame, not
+ another more inner frame which happens to
+ be in the same block. */
+ write_exp_elt_block (NULL);
write_exp_elt_sym (sym);
write_exp_elt_opcode (OP_VAR_VALUE);
break;
diff --git a/gdb/f-valprint.c b/gdb/f-valprint.c
index 57d8ec1..73d0f15 100644
--- a/gdb/f-valprint.c
+++ b/gdb/f-valprint.c
@@ -786,10 +786,10 @@ info_common_command (comname, from_tty)
funname = SYMBOL_NAME (msymbol);
}
- /* If comnname is NULL, we assume the user wishes to see the
+ /* If comname is NULL, we assume the user wishes to see the
which COMMON blocks are visible here and then return */
- if (strlen (comname) == 0)
+ if (comname == 0)
{
list_all_visible_commons (funname);
return;