Fix --as-needed undefined symbol references from dynamic libraries.
[deliverable/binutils-gdb.git] / gdb / user-regs.c
index ef9d3b2f84b1c635089c3c924814b84126c5453d..c4ea3da6fb741ad1c0c8ca3d74315795c3dc1412 100644 (file)
@@ -1,6 +1,6 @@
 /* User visible, per-frame registers, for GDB, the GNU debugger.
 
-   Copyright (C) 2002, 2003, 2004, 2007 Free Software Foundation, Inc.
+   Copyright (C) 2002-2013 Free Software Foundation, Inc.
 
    Contributed by Red Hat.
 
@@ -8,7 +8,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
-   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,
    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., 51 Franklin Street, Fifth Floor,
-   Boston, MA 02110-1301, USA.  */
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
 
 #include "defs.h"
 #include "user-regs.h"
 #include "gdbtypes.h"
-#include "gdb_string.h"
+#include <string.h>
 #include "gdb_assert.h"
 #include "frame.h"
 
 /* A table of user registers.
 
    User registers have regnum's that live above of the range [0
-   .. NUM_REGS + NUM_PSEUDO_REGS) (which is controlled by the target).
+   .. gdbarch_num_regs + gdbarch_num_pseudo_regs)
+   (which is controlled by the target).
    The target should never see a user register's regnum value.
 
    Always append, never delete.  By doing this, the relative regnum
-   (offset from NUM_REGS + NUM_PSEUDO_REGS) assigned to each user
-   register never changes.  */
+   (offset from gdbarch_num_regs + gdbarch_num_pseudo_regs)
+    assigned to each user  register never changes.  */
 
 struct user_reg
 {
@@ -77,7 +76,9 @@ append_user_reg (struct gdb_user_regs *regs, const char *name,
 
 /* An array of the builtin user registers.  */
 
-static struct gdb_user_regs builtin_user_regs = { NULL, &builtin_user_regs.first };
+static struct gdb_user_regs builtin_user_regs = {
+  NULL, &builtin_user_regs.first
+};
 
 void
 user_reg_add_builtin (const char *name, user_reg_read_ftype *read,
@@ -96,7 +97,9 @@ static void *
 user_regs_init (struct gdbarch *gdbarch)
 {
   struct user_reg *reg;
-  struct gdb_user_regs *regs = GDBARCH_OBSTACK_ZALLOC (gdbarch, struct gdb_user_regs);
+  struct gdb_user_regs *regs 
+    = GDBARCH_OBSTACK_ZALLOC (gdbarch, struct gdb_user_regs);
+
   regs->last = &regs->first;
   for (reg = builtin_user_regs.first; reg != NULL; reg = reg->next)
     append_user_reg (regs, reg->name, reg->read, reg->baton,
@@ -109,6 +112,7 @@ user_reg_add (struct gdbarch *gdbarch, const char *name,
              user_reg_read_ftype *read, const void *baton)
 {
   struct gdb_user_regs *regs = gdbarch_data (gdbarch, user_regs_data);
+
   if (regs == NULL)
     {
       /* ULGH, called during architecture initialization.  Patch
@@ -134,9 +138,11 @@ user_reg_map_name_to_regnum (struct gdbarch *gdbarch, const char *name,
     int i;
     int maxregs = (gdbarch_num_regs (gdbarch)
                   + gdbarch_num_pseudo_regs (gdbarch));
+
     for (i = 0; i < maxregs; i++)
       {
        const char *regname = gdbarch_register_name (gdbarch, i);
+
        if (regname != NULL && len == strlen (regname)
            && strncmp (regname, name, len) == 0)
          {
@@ -150,12 +156,14 @@ user_reg_map_name_to_regnum (struct gdbarch *gdbarch, const char *name,
     struct gdb_user_regs *regs = gdbarch_data (gdbarch, user_regs_data);
     struct user_reg *reg;
     int nr;
+
     for (nr = 0, reg = regs->first; reg != NULL; reg = reg->next, nr++)
       {
        if ((len < 0 && strcmp (reg->name, name))
            || (len == strlen (reg->name)
                && strncmp (reg->name, name, len) == 0))
-         return NUM_REGS + NUM_PSEUDO_REGS + nr;
+         return gdbarch_num_regs (gdbarch)
+                + gdbarch_num_pseudo_regs (gdbarch) + nr;
       }
   }
 
@@ -167,6 +175,7 @@ usernum_to_user_reg (struct gdbarch *gdbarch, int usernum)
 {
   struct gdb_user_regs *regs = gdbarch_data (gdbarch, user_regs_data);
   struct user_reg *reg;
+
   for (reg = regs->first; reg != NULL; reg = reg->next)
     {
       if (usernum == 0)
@@ -181,6 +190,7 @@ user_reg_map_regnum_to_name (struct gdbarch *gdbarch, int regnum)
 {
   int maxregs = (gdbarch_num_regs (gdbarch)
                 + gdbarch_num_pseudo_regs (gdbarch));
+
   if (regnum < 0)
     return NULL;
   else if (regnum < maxregs)
@@ -202,6 +212,7 @@ value_of_user_reg (int regnum, struct frame_info *frame)
   int maxregs = (gdbarch_num_regs (gdbarch)
                 + gdbarch_num_pseudo_regs (gdbarch));
   struct user_reg *reg = usernum_to_user_reg (gdbarch, regnum - maxregs);
+
   gdb_assert (reg != NULL);
   return reg->read (frame, reg->baton);
 }
This page took 0.025086 seconds and 4 git commands to generate.