projects
/
binutils-gdb.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
gdb/
[binutils-gdb.git]
/
gdb
/
reggroups.c
diff --git
a/gdb/reggroups.c
b/gdb/reggroups.c
index 791ec0abd521f426295bcbd83bb1509736b519db..fdc05754729a4d9373042767231fe77fa517496d 100644
(file)
--- a/
gdb/reggroups.c
+++ b/
gdb/reggroups.c
@@
-1,6
+1,7
@@
/* Register groupings for GDB, the GNU debugger.
/* Register groupings for GDB, the GNU debugger.
- Copyright 2002 Free Software Foundation, Inc.
+ Copyright (C) 2002, 2003, 2007, 2008, 2009, 2010
+ Free Software Foundation, Inc.
Contributed by Red Hat.
Contributed by Red Hat.
@@
-8,7
+9,7
@@
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version
2
of the License, or
+ the Free Software Foundation; either version
3
of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
(at your option) any later version.
This program is distributed in the hope that it will be useful,
@@
-17,11
+18,10
@@
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 59 Temple Place - Suite 330,
- Boston, MA 02111-1307, USA. */
+ along with this program. If not, see <http://www.gnu.org/licenses/>. */
#include "defs.h"
#include "defs.h"
+#include "arch-utils.h"
#include "reggroups.h"
#include "gdbtypes.h"
#include "gdb_assert.h"
#include "reggroups.h"
#include "gdbtypes.h"
#include "gdb_assert.h"
@@
-41,6
+41,7
@@
struct reggroup *
reggroup_new (const char *name, enum reggroup_type type)
{
struct reggroup *group = XMALLOC (struct reggroup);
reggroup_new (const char *name, enum reggroup_type type)
{
struct reggroup *group = XMALLOC (struct reggroup);
+
group->name = name;
group->type = type;
return group;
group->name = name;
group->type = type;
return group;
@@
-81,6
+82,7
@@
reggroups_init (struct gdbarch *gdbarch)
{
struct reggroups *groups = GDBARCH_OBSTACK_ZALLOC (gdbarch,
struct reggroups);
{
struct reggroups *groups = GDBARCH_OBSTACK_ZALLOC (gdbarch,
struct reggroups);
+
groups->last = &groups->first;
return groups;
}
groups->last = &groups->first;
return groups;
}
@@
-103,12
+105,13
@@
void
reggroup_add (struct gdbarch *gdbarch, struct reggroup *group)
{
struct reggroups *groups = gdbarch_data (gdbarch, reggroups_data);
reggroup_add (struct gdbarch *gdbarch, struct reggroup *group)
{
struct reggroups *groups = gdbarch_data (gdbarch, reggroups_data);
+
if (groups == NULL)
{
/* ULGH, called during architecture initialization. Patch
things up. */
groups = reggroups_init (gdbarch);
if (groups == NULL)
{
/* ULGH, called during architecture initialization. Patch
things up. */
groups = reggroups_init (gdbarch);
- set_gdbarch_data (gdbarch, reggroups_data, groups);
+
deprecated_
set_gdbarch_data (gdbarch, reggroups_data, groups);
}
add_group (groups, group,
GDBARCH_OBSTACK_ZALLOC (gdbarch, struct reggroup_el));
}
add_group (groups, group,
GDBARCH_OBSTACK_ZALLOC (gdbarch, struct reggroup_el));
@@
-125,6
+128,7
@@
reggroup_next (struct gdbarch *gdbarch, struct reggroup *last)
{
struct reggroups *groups;
struct reggroup_el *el;
{
struct reggroups *groups;
struct reggroup_el *el;
+
/* Don't allow this function to be called during architecture
creation. If there are no groups, use the default groups list. */
groups = gdbarch_data (gdbarch, reggroups_data);
/* Don't allow this function to be called during architecture
creation. If there are no groups, use the default groups list. */
groups = gdbarch_data (gdbarch, reggroups_data);
@@
-132,13
+136,18
@@
reggroup_next (struct gdbarch *gdbarch, struct reggroup *last)
if (groups->first == NULL)
groups = &default_groups;
if (groups->first == NULL)
groups = &default_groups;
- /* Retun the first/next reggroup. */
+ /* Retu
r
n the first/next reggroup. */
if (last == NULL)
return groups->first->group;
for (el = groups->first; el != NULL; el = el->next)
{
if (el->group == last)
if (last == NULL)
return groups->first->group;
for (el = groups->first; el != NULL; el = el->next)
{
if (el->group == last)
- return el->next->group;
+ {
+ if (el->next != NULL)
+ return el->next->group;
+ else
+ return NULL;
+ }
}
return NULL;
}
}
return NULL;
}
@@
-151,16
+160,15
@@
default_register_reggroup_p (struct gdbarch *gdbarch, int regnum,
int vector_p;
int float_p;
int raw_p;
int vector_p;
int float_p;
int raw_p;
- if (REGISTER_NAME (regnum) == NULL
- || *REGISTER_NAME (regnum) == '\0')
+
+ if (gdbarch_register_name (gdbarch, regnum) == NULL
+ || *gdbarch_register_name (gdbarch, regnum) == '\0')
return 0;
if (group == all_reggroup)
return 1;
vector_p = TYPE_VECTOR (register_type (gdbarch, regnum));
float_p = TYPE_CODE (register_type (gdbarch, regnum)) == TYPE_CODE_FLT;
return 0;
if (group == all_reggroup)
return 1;
vector_p = TYPE_VECTOR (register_type (gdbarch, regnum));
float_p = TYPE_CODE (register_type (gdbarch, regnum)) == TYPE_CODE_FLT;
- /* FIXME: cagney/2003-04-13: Can't yet use gdbarch_num_regs
- (gdbarch), as not all architectures are multi-arch. */
- raw_p = regnum < NUM_REGS;
+ raw_p = regnum < gdbarch_num_regs (gdbarch);
if (group == float_reggroup)
return float_p;
if (group == vector_reggroup)
if (group == float_reggroup)
return float_p;
if (group == vector_reggroup)
@@
-178,11
+186,13
@@
static void
reggroups_dump (struct gdbarch *gdbarch, struct ui_file *file)
{
struct reggroup *group = NULL;
reggroups_dump (struct gdbarch *gdbarch, struct ui_file *file)
{
struct reggroup *group = NULL;
+
do
{
/* Group name. */
{
const char *name;
do
{
/* Group name. */
{
const char *name;
+
if (group == NULL)
name = "Group";
else
if (group == NULL)
name = "Group";
else
@@
-193,6
+203,7
@@
reggroups_dump (struct gdbarch *gdbarch, struct ui_file *file)
/* Group type. */
{
const char *type;
/* Group type. */
{
const char *type;
+
if (group == NULL)
type = "Type";
else
if (group == NULL)
type = "Type";
else
@@
-206,7
+217,7
@@
reggroups_dump (struct gdbarch *gdbarch, struct ui_file *file)
type = "internal";
break;
default:
type = "internal";
break;
default:
- internal_error (__FILE__, __LINE__,
"bad switch"
);
+ internal_error (__FILE__, __LINE__,
_("bad switch")
);
}
}
fprintf_unfiltered (file, " %-10s", type);
}
}
fprintf_unfiltered (file, " %-10s", type);
@@
-225,15
+236,20
@@
reggroups_dump (struct gdbarch *gdbarch, struct ui_file *file)
static void
maintenance_print_reggroups (char *args, int from_tty)
{
static void
maintenance_print_reggroups (char *args, int from_tty)
{
+ struct gdbarch *gdbarch = get_current_arch ();
+
if (args == NULL)
if (args == NULL)
- reggroups_dump (
current_
gdbarch, gdb_stdout);
+ reggroups_dump (gdbarch, gdb_stdout);
else
{
else
{
+ struct cleanup *cleanups;
struct ui_file *file = gdb_fopen (args, "w");
struct ui_file *file = gdb_fopen (args, "w");
+
if (file == NULL)
if (file == NULL)
- perror_with_name ("maintenance print reggroups");
- reggroups_dump (current_gdbarch, file);
- ui_file_delete (file);
+ perror_with_name (_("maintenance print reggroups"));
+ cleanups = make_cleanup_ui_file_delete (file);
+ reggroups_dump (gdbarch, file);
+ do_cleanups (cleanups);
}
}
}
}
@@
-259,7
+275,7
@@
extern initialize_file_ftype _initialize_reggroup; /* -Wmissing-prototypes */
void
_initialize_reggroup (void)
{
void
_initialize_reggroup (void)
{
- reggroups_data =
register_gdbarch_data
(reggroups_init);
+ reggroups_data =
gdbarch_data_register_post_init
(reggroups_init);
/* The pre-defined list of groups. */
add_group (&default_groups, general_reggroup, XMALLOC (struct reggroup_el));
/* The pre-defined list of groups. */
add_group (&default_groups, general_reggroup, XMALLOC (struct reggroup_el));
@@
-271,9
+287,9
@@
_initialize_reggroup (void)
add_group (&default_groups, restore_reggroup, XMALLOC (struct reggroup_el));
add_cmd ("reggroups", class_maintenance,
add_group (&default_groups, restore_reggroup, XMALLOC (struct reggroup_el));
add_cmd ("reggroups", class_maintenance,
- maintenance_print_reggroups, "\
+ maintenance_print_reggroups,
_(
"\
Print the internal register group names.\n\
Print the internal register group names.\n\
-Takes an optional file parameter.",
+Takes an optional file parameter."
)
,
&maintenanceprintlist);
}
&maintenanceprintlist);
}