]> git.ipfire.org Git - thirdparty/binutils-gdb.git/blobdiff - gdb/tui/tui-regs.c
Copyright year update in most files of the GDB Project.
[thirdparty/binutils-gdb.git] / gdb / tui / tui-regs.c
index bfb66f820fb83229566fd70a5bfb8eb3d8a1816f..a093e91926c8328c11082a351cacaf7ff861be31 100644 (file)
@@ -1,7 +1,6 @@
 /* TUI display registers in window.
 
-   Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2007, 2008, 2009
-   Free Software Foundation, Inc.
+   Copyright (C) 1998-2004, 2007-2012 Free Software Foundation, Inc.
 
    Contributed by Hewlett-Packard Company.
 
@@ -230,10 +229,19 @@ tui_show_register_group (struct reggroup *group,
                + gdbarch_num_pseudo_regs (gdbarch);
        regnum++)
     {
-      /* Must be in the group and have a name.  */
-      if (gdbarch_register_reggroup_p (gdbarch, regnum, group)
-          && gdbarch_register_name (gdbarch, regnum) != 0)
-        nr_regs++;
+      const char *name;
+
+      /* Must be in the group.  */
+      if (!gdbarch_register_reggroup_p (gdbarch, regnum, group))
+       continue;
+
+      /* If the register name is empty, it is undefined for this
+        processor, so don't display anything.  */
+      name = gdbarch_register_name (gdbarch, regnum);
+      if (name == 0 || *name == '\0')
+       continue;
+
+      nr_regs++;
     }
 
   if (display_info->regs_content_count > 0 && !refresh_values_only)
@@ -273,17 +281,20 @@ tui_show_register_group (struct reggroup *group,
           struct tui_data_element *data;
           const char *name;
 
+          /* Must be in the group.  */
           if (!gdbarch_register_reggroup_p (gdbarch, regnum, group))
             continue;
 
-          name = gdbarch_register_name (gdbarch, regnum);
-          if (name == 0)
-            continue;
+         /* If the register name is empty, it is undefined for this
+            processor, so don't display anything.  */
+         name = gdbarch_register_name (gdbarch, regnum);
+         if (name == 0 || *name == '\0')
+           continue;
 
          data_item_win =
             &display_info->regs_content[pos]->which_element.data_window;
-          data =
-            &((struct tui_win_element *) data_item_win->content[0])->which_element.data;
+          data = &((struct tui_win_element *)
+                  data_item_win->content[0])->which_element.data;
           if (data)
             {
               if (!refresh_values_only)
@@ -292,9 +303,6 @@ tui_show_register_group (struct reggroup *group,
                   data->name = name;
                   data->highlight = FALSE;
                 }
-              if (data->value == (void*) NULL)
-                data->value = (void*) xmalloc (MAX_REGISTER_SIZE);
-
               tui_get_register (frame, data, regnum, 0);
             }
           pos++;
@@ -321,7 +329,7 @@ tui_display_registers_from (int start_element_no)
       && display_info->regs_content_count > 0)
     {
       int i = start_element_no;
-      int j, value_chars_wide, item_win_width, cur_y;
+      int j, item_win_width, cur_y;
 
       int max_len = 0;
       for (i = 0; i < display_info->regs_content_count; i++)
@@ -331,7 +339,8 @@ tui_display_registers_from (int start_element_no)
           char *p;
           int len;
 
-          data_item_win = &display_info->regs_content[i]->which_element.data_window;
+          data_item_win
+           = &display_info->regs_content[i]->which_element.data_window;
           data = &((struct tui_win_element *)
                    data_item_win->content[0])->which_element.data;
           len = 0;
@@ -376,7 +385,7 @@ tui_display_registers_from (int start_element_no)
              data_item_win = &display_info->regs_content[i]
                 ->which_element.data_window;
              data_element_ptr = &((struct tui_win_element *)
-                                data_item_win->content[0])->which_element.data;
+                                  data_item_win->content[0])->which_element.data;
               if (data_item_win->handle != (WINDOW*) NULL
                   && (data_item_win->height != 1
                       || data_item_win->width != item_win_width
@@ -417,7 +426,8 @@ static void
 tui_display_reg_element_at_line (int start_element_no,
                                 int start_line_no)
 {
-  if (TUI_DATA_WIN->detail.data_display_info.regs_content != (tui_win_content) NULL
+  if (TUI_DATA_WIN->detail.data_display_info.regs_content
+      != (tui_win_content) NULL
       && TUI_DATA_WIN->detail.data_display_info.regs_content_count > 0)
     {
       int element_no = start_element_no;
@@ -427,7 +437,8 @@ tui_display_reg_element_at_line (int start_element_no,
          int last_line_no, first_line_on_last_page;
 
          last_line_no = tui_last_regs_line_no ();
-         first_line_on_last_page = last_line_no - (TUI_DATA_WIN->generic.height - 2);
+         first_line_on_last_page
+           = last_line_no - (TUI_DATA_WIN->generic.height - 2);
          if (first_line_on_last_page < 0)
            first_line_on_last_page = 0;
 
@@ -437,7 +448,8 @@ tui_display_reg_element_at_line (int start_element_no,
             display at.  */
          if (TUI_DATA_WIN->detail.data_display_info.data_content_count <= 0
              && start_line_no > first_line_on_last_page)
-           element_no = tui_first_reg_element_no_inline (first_line_on_last_page);
+           element_no
+             = tui_first_reg_element_no_inline (first_line_on_last_page);
        }
       tui_display_registers_from (element_no);
     }
@@ -475,7 +487,8 @@ tui_display_registers_from_line (int line_no,
        line = line_no;
 
       element_no = tui_first_reg_element_no_inline (line);
-      if (element_no < TUI_DATA_WIN->detail.data_display_info.regs_content_count)
+      if (element_no
+         < TUI_DATA_WIN->detail.data_display_info.regs_content_count)
        tui_display_reg_element_at_line (element_no, line);
       else
        line = (-1);
@@ -504,7 +517,7 @@ tui_check_register_values (struct frame_info *frame)
        tui_show_registers (display_info->current_group);
       else
        {
-         int i, j;
+         int i;
 
          for (i = 0; (i < display_info->regs_content_count); i++)
            {
@@ -541,7 +554,12 @@ tui_display_register (struct tui_data_element *data,
       int i;
 
       if (data->highlight)
-       wstandout (win_info->handle);
+       /* We ignore the return value, casting it to void in order to avoid
+          a compiler warning.  The warning itself was introduced by a patch
+          to ncurses 5.7 dated 2009-08-29, changing this macro to expand
+          to code that causes the compiler to generate an unused-value
+          warning.  */
+       (void) wstandout (win_info->handle);
       
       wmove (win_info->handle, 0, 0);
       for (i = 1; i < win_info->width; i++)
@@ -551,7 +569,12 @@ tui_display_register (struct tui_data_element *data,
         waddstr (win_info->handle, data->content);
 
       if (data->highlight)
-       wstandend (win_info->handle);
+       /* We ignore the return value, casting it to void in order to avoid
+          a compiler warning.  The warning itself was introduced by a patch
+          to ncurses 5.7 dated 2009-08-29, changing this macro to expand
+          to code that causes the compiler to generate an unused-value
+          warning.  */
+       (void) wstandend (win_info->handle);
       tui_refresh_win (win_info);
     }
 }
@@ -674,37 +697,17 @@ tui_register_format (struct frame_info *frame,
   const char *name;
   struct cleanup *cleanups;
   char *p, *s;
-  int pos;
-  struct type *type = register_type (gdbarch, regnum);
 
   name = gdbarch_register_name (gdbarch, regnum);
-  if (name == 0)
-    {
-      return;
-    }
-  
+  if (name == 0 || *name == '\0')
+    return;
+
   pagination_enabled = 0;
   old_stdout = gdb_stdout;
   stream = tui_sfileopen (256);
   gdb_stdout = stream;
   cleanups = make_cleanup (tui_restore_gdbout, (void*) old_stdout);
-  if (TYPE_VECTOR (type) != 0 && 0)
-    {
-      gdb_byte buf[MAX_REGISTER_SIZE];
-      int len;
-      struct value_print_options opts;
-
-      len = register_size (gdbarch, regnum);
-      fprintf_filtered (stream, "%-14s ", name);
-      get_frame_register (frame, regnum, buf);
-      get_formatted_print_options (&opts, 'f');
-      print_scalar_formatted (buf, type, &opts, len, stream);
-    }
-  else
-    {
-      gdbarch_print_registers_info (gdbarch, stream,
-                                    frame, regnum, 1);
-    }
+  gdbarch_print_registers_info (gdbarch, stream, frame, regnum, 1);
 
   /* Save formatted output in the buffer.  */
   p = tui_file_get_strbuf (stream);
@@ -733,24 +736,23 @@ tui_get_register (struct frame_info *frame,
     *changedp = FALSE;
   if (target_has_registers)
     {
-      gdb_byte buf[MAX_REGISTER_SIZE];
-      get_frame_register (frame, regnum, buf);
+      struct value *old_val = data->value;
 
+      data->value = get_frame_register_value (frame, regnum);
+      release_value (data->value);
       if (changedp)
        {
          struct gdbarch *gdbarch = get_frame_arch (frame);
          int size = register_size (gdbarch, regnum);
-         char *old = (char*) data->value;
-         int i;
 
-         for (i = 0; i < size; i++)
-           if (buf[i] != old[i])
-             {
-               *changedp = TRUE;
-               old[i] = buf[i];
-             }
+         if (value_optimized_out (data->value) != value_optimized_out (old_val)
+             || !value_available_contents_eq (data->value, 0,
+                                              old_val, 0, size))
+           *changedp = TRUE;
        }
 
+      value_free (old_val);
+
       /* Reformat the data content if the value changed.  */
       if (changedp == 0 || *changedp == TRUE)
        tui_register_format (frame, data, regnum);