This is the mail archive of the gdb-patches@sourceware.org mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[rfc][3/3] Eliminate LOC_BASEREG and LOC_BASEREG_ARG


Hello,

finally, the LOC_BASEREG and LOC_BASEREG_ARG address classes are also no
longer set anywhere.  I don't know exactly since when they're no longer
used, but in any case the functionality is completely superseeded by
LOC_COMPUTED (which is used by the DWARF-2 reader anyway).

Removing this also allows us to get rid of the basereg member of the
aux_value union in struct symbol.  (At which point there is only one
member of the union remaining.  Should we remove the union?)

Any objections to removing those address classes?

Bye,
Ulrich


ChangeLog:

	* symtab.h (enum address_class): Remove LOC_BASEREG and
	LOC_BASEREG_ARG.
	(struct symbol): Remove "basereg" member of "aux_value" union.
	(SYMBOL_BASEREG): Remove.

	* ada-exp.y (select_possible_type_sym): Do not handle LOC_BASEREG
	or LOC_BASEREG_ARG.
	* ada-lang.c (resolve_subexp, symtab_for_sym): Likewise.
	(ada_add_block_symbols): Likewise.
	* ax-gdb.c (gen_var_ref): Likewise.
	* buildsym.c (finish_block): Likewise.
	* findvar.c (symbol_read_needs_frame, read_var_value): Likewise.
	* m2-exp.y (yylex): Likewise.
	* mi/mi-cmd-stack.c (list_args_or_locals): Likewise.
	* printcmd.c (address_info): Likewise.
	* stack.c (print_frame_args, print_block_frame_locals): Likewise.
	(print_frame_arg_vars): Likewise.
	* symmisc.c (print_symbol): Likewise.
	* symtab.c (lookup_block_symbol): Likewise.
	* tracepoint.c (collect_symbol, add_local_symbols): Likewise.
	(scope_info): Likewise.


diff -urNp gdb-orig/gdb/ada-exp.y gdb-head/gdb/ada-exp.y
--- gdb-orig/gdb/ada-exp.y	2008-05-19 18:16:58.193650538 +0200
+++ gdb-head/gdb/ada-exp.y	2008-05-19 18:15:44.104943900 +0200
@@ -1059,8 +1059,6 @@ select_possible_type_sym (struct ada_sym
       case LOC_REGPARM:
       case LOC_REGPARM_ADDR:
       case LOC_LOCAL:
-      case LOC_BASEREG:
-      case LOC_BASEREG_ARG:
       case LOC_COMPUTED:
       case LOC_COMPUTED_ARG:
 	return NULL;
diff -urNp gdb-orig/gdb/ada-lang.c gdb-head/gdb/ada-lang.c
--- gdb-orig/gdb/ada-lang.c	2008-05-19 18:16:58.235644530 +0200
+++ gdb-head/gdb/ada-lang.c	2008-05-19 18:14:23.044303562 +0200
@@ -2893,8 +2893,6 @@ resolve_subexp (struct expression **expp
                   case LOC_REGPARM:
                   case LOC_REGPARM_ADDR:
                   case LOC_LOCAL:
-                  case LOC_BASEREG:
-                  case LOC_BASEREG_ARG:
                   case LOC_COMPUTED:
                   case LOC_COMPUTED_ARG:
                     goto FoundNonType;
@@ -4321,8 +4319,6 @@ symtab_for_sym (struct symbol *sym)
       case LOC_REGPARM_ADDR:
       case LOC_LOCAL:
       case LOC_TYPEDEF:
-      case LOC_BASEREG:
-      case LOC_BASEREG_ARG:
       case LOC_COMPUTED:
       case LOC_COMPUTED_ARG:
         for (j = FIRST_LOCAL_BLOCK;
@@ -5223,7 +5219,6 @@ ada_add_block_symbols (struct obstack *o
               case LOC_REF_ARG:
               case LOC_REGPARM:
               case LOC_REGPARM_ADDR:
-              case LOC_BASEREG_ARG:
               case LOC_COMPUTED_ARG:
                 arg_sym = sym;
                 break;
@@ -5256,7 +5251,6 @@ ada_add_block_symbols (struct obstack *o
                   case LOC_REF_ARG:
                   case LOC_REGPARM:
                   case LOC_REGPARM_ADDR:
-                  case LOC_BASEREG_ARG:
                   case LOC_COMPUTED_ARG:
                     arg_sym = sym;
                     break;
@@ -5311,7 +5305,6 @@ ada_add_block_symbols (struct obstack *o
                   case LOC_REF_ARG:
                   case LOC_REGPARM:
                   case LOC_REGPARM_ADDR:
-                  case LOC_BASEREG_ARG:
                   case LOC_COMPUTED_ARG:
                     arg_sym = sym;
                     break;
diff -urNp gdb-orig/gdb/ax-gdb.c gdb-head/gdb/ax-gdb.c
--- gdb-orig/gdb/ax-gdb.c	2008-05-19 18:16:58.280638093 +0200
+++ gdb-head/gdb/ax-gdb.c	2008-05-19 18:15:13.164714383 +0200
@@ -569,13 +569,6 @@ gen_var_ref (struct agent_expr *ax, stru
       value->kind = axs_lvalue_memory;
       break;
 
-    case LOC_BASEREG:		/* relative to some base register */
-    case LOC_BASEREG_ARG:
-      ax_reg (ax, SYMBOL_BASEREG (var));
-      gen_sym_offset (ax, var);
-      value->kind = axs_lvalue_memory;
-      break;
-
     case LOC_TYPEDEF:
       error (_("Cannot compute value of typedef `%s'."),
 	     SYMBOL_PRINT_NAME (var));
diff -urNp gdb-orig/gdb/buildsym.c gdb-head/gdb/buildsym.c
--- gdb-orig/gdb/buildsym.c	2008-05-19 18:16:58.287637091 +0200
+++ gdb-head/gdb/buildsym.c	2008-05-19 18:12:04.095033082 +0200
@@ -289,7 +289,6 @@ finish_block (struct symbol *symbol, str
 		case LOC_REF_ARG:
 		case LOC_REGPARM:
 		case LOC_REGPARM_ADDR:
-		case LOC_BASEREG_ARG:
 		case LOC_COMPUTED_ARG:
 		  nparams++;
 		  break;
@@ -302,7 +301,6 @@ finish_block (struct symbol *symbol, str
 		case LOC_LABEL:
 		case LOC_BLOCK:
 		case LOC_CONST_BYTES:
-		case LOC_BASEREG:
 		case LOC_UNRESOLVED:
 		case LOC_OPTIMIZED_OUT:
 		case LOC_COMPUTED:
@@ -328,7 +326,6 @@ finish_block (struct symbol *symbol, str
 		    case LOC_REF_ARG:
 		    case LOC_REGPARM:
 		    case LOC_REGPARM_ADDR:
-		    case LOC_BASEREG_ARG:
 		    case LOC_COMPUTED_ARG:
 		      TYPE_FIELD_TYPE (ftype, iparams) = SYMBOL_TYPE (sym);
 		      TYPE_FIELD_ARTIFICIAL (ftype, iparams) = 0;
@@ -343,7 +340,6 @@ finish_block (struct symbol *symbol, str
 		    case LOC_LABEL:
 		    case LOC_BLOCK:
 		    case LOC_CONST_BYTES:
-		    case LOC_BASEREG:
 		    case LOC_UNRESOLVED:
 		    case LOC_OPTIMIZED_OUT:
 		    case LOC_COMPUTED:
diff -urNp gdb-orig/gdb/findvar.c gdb-head/gdb/findvar.c
--- gdb-orig/gdb/findvar.c	2008-05-19 18:16:58.293636233 +0200
+++ gdb-head/gdb/findvar.c	2008-05-19 18:11:28.285702212 +0200
@@ -359,8 +359,6 @@ symbol_read_needs_frame (struct symbol *
     case LOC_REGPARM:
     case LOC_REGPARM_ADDR:
     case LOC_LOCAL:
-    case LOC_BASEREG:
-    case LOC_BASEREG_ARG:
       return 1;
 
     case LOC_UNDEF:
@@ -485,20 +483,6 @@ read_var_value (struct symbol *var, stru
       addr += SYMBOL_VALUE (var);
       break;
 
-    case LOC_BASEREG:
-    case LOC_BASEREG_ARG:
-      {
-	struct value *regval;
-
-	regval = value_from_register (lookup_pointer_type (type),
-				      SYMBOL_BASEREG (var), frame);
-	if (regval == NULL)
-	  error (_("Value of base register not available."));
-	addr = value_as_address (regval);
-	addr += SYMBOL_VALUE (var);
-	break;
-      }
-
     case LOC_TYPEDEF:
       error (_("Cannot look up value of a typedef"));
       break;
diff -urNp gdb-orig/gdb/m2-exp.y gdb-head/gdb/m2-exp.y
--- gdb-orig/gdb/m2-exp.y	2008-05-19 18:16:58.299635375 +0200
+++ gdb-head/gdb/m2-exp.y	2008-05-19 18:15:04.015560866 +0200
@@ -1044,8 +1044,6 @@ yylex ()
        case LOC_REGPARM:
        case LOC_REGPARM_ADDR:
        case LOC_LOCAL:
-       case LOC_BASEREG:
-       case LOC_BASEREG_ARG:
        case LOC_CONST:
        case LOC_CONST_BYTES:
        case LOC_OPTIMIZED_OUT:
diff -urNp gdb-orig/gdb/mi/mi-cmd-stack.c gdb-head/gdb/mi/mi-cmd-stack.c
--- gdb-orig/gdb/mi/mi-cmd-stack.c	2008-05-19 18:16:58.305634516 +0200
+++ gdb-head/gdb/mi/mi-cmd-stack.c	2008-05-19 18:10:39.854314110 +0200
@@ -254,14 +254,12 @@ list_args_or_locals (int locals, int val
 	    case LOC_REF_ARG:	/* reference arg         */
 	    case LOC_REGPARM:	/* register arg          */
 	    case LOC_REGPARM_ADDR:	/* indirect register arg */
-	    case LOC_BASEREG_ARG:	/* basereg arg           */
 	    case LOC_COMPUTED_ARG:	/* arg with computed location */
 	      if (!locals)
 		print_me = 1;
 	      break;
 
 	    case LOC_LOCAL:	/* stack local           */
-	    case LOC_BASEREG:	/* basereg local         */
 	    case LOC_STATIC:	/* static                */
 	    case LOC_REGISTER:	/* register              */
 	    case LOC_COMPUTED:	/* computed location     */
diff -urNp gdb-orig/gdb/printcmd.c gdb-head/gdb/printcmd.c
--- gdb-orig/gdb/printcmd.c	2008-05-19 18:16:58.314633229 +0200
+++ gdb-head/gdb/printcmd.c	2008-05-19 18:15:36.612951133 +0200
@@ -1041,7 +1041,6 @@ address_info (char *exp, int from_tty)
   struct symbol *sym;
   struct minimal_symbol *msymbol;
   long val;
-  long basereg;
   asection *section;
   CORE_ADDR load_addr;
   int is_a_field_of_this;	/* C++: lookup_symbol sets this to nonzero
@@ -1099,7 +1098,6 @@ address_info (char *exp, int from_tty)
 			   current_language->la_language, DMGL_ANSI);
   printf_filtered ("\" is ");
   val = SYMBOL_VALUE (sym);
-  basereg = SYMBOL_BASEREG (sym);
   section = SYMBOL_BFD_SECTION (sym);
 
   switch (SYMBOL_CLASS (sym))
@@ -1172,16 +1170,6 @@ address_info (char *exp, int from_tty)
       printf_filtered (_("a reference argument at offset %ld"), val);
       break;
 
-    case LOC_BASEREG:
-      printf_filtered (_("a variable at offset %ld from register %s"),
-		       val, gdbarch_register_name (current_gdbarch, basereg));
-      break;
-
-    case LOC_BASEREG_ARG:
-      printf_filtered (_("an argument at offset %ld from register %s"),
-		       val, gdbarch_register_name (current_gdbarch, basereg));
-      break;
-
     case LOC_TYPEDEF:
       printf_filtered (_("a typedef"));
       break;
diff -urNp gdb-orig/gdb/stack.c gdb-head/gdb/stack.c
--- gdb-orig/gdb/stack.c	2008-05-19 18:16:58.322632084 +0200
+++ gdb-head/gdb/stack.c	2008-05-19 18:11:39.466832530 +0200
@@ -264,7 +264,6 @@ print_frame_args (struct symbol *func, s
 		 keep track of stack offsets in them.  */
 	    case LOC_REGPARM:
 	    case LOC_REGPARM_ADDR:
-	    case LOC_BASEREG_ARG:
 	    case LOC_COMPUTED_ARG:
 	      break;
 
@@ -1375,7 +1374,6 @@ print_block_frame_locals (struct block *
 	case LOC_LOCAL:
 	case LOC_REGISTER:
 	case LOC_STATIC:
-	case LOC_BASEREG:
 	case LOC_COMPUTED:
 	  values_printed = 1;
 	  for (j = 0; j < num_tabs; j++)
@@ -1579,7 +1577,6 @@ print_frame_arg_vars (struct frame_info 
 	case LOC_REF_ARG:
 	case LOC_REGPARM:
 	case LOC_REGPARM_ADDR:
-	case LOC_BASEREG_ARG:
 	case LOC_COMPUTED_ARG:
 	  values_printed = 1;
 	  fputs_filtered (SYMBOL_PRINT_NAME (sym), stream);
diff -urNp gdb-orig/gdb/symmisc.c gdb-head/gdb/symmisc.c
--- gdb-orig/gdb/symmisc.c	2008-05-19 18:16:58.329631083 +0200
+++ gdb-head/gdb/symmisc.c	2008-05-19 18:11:52.242866446 +0200
@@ -668,16 +668,6 @@ print_symbol (void *args)
 			    SYMBOL_VALUE (symbol));
 	  break;
 
-	case LOC_BASEREG:
-	  fprintf_filtered (outfile, "local at 0x%lx from register %d",
-			    SYMBOL_VALUE (symbol), SYMBOL_BASEREG (symbol));
-	  break;
-
-	case LOC_BASEREG_ARG:
-	  fprintf_filtered (outfile, "arg at 0x%lx from register %d",
-			    SYMBOL_VALUE (symbol), SYMBOL_BASEREG (symbol));
-	  break;
-
 	case LOC_TYPEDEF:
 	  break;
 
diff -urNp gdb-orig/gdb/symtab.c gdb-head/gdb/symtab.c
--- gdb-orig/gdb/symtab.c	2008-05-19 18:16:58.342629223 +0200
+++ gdb-head/gdb/symtab.c	2008-05-19 18:12:17.036176544 +0200
@@ -1961,7 +1961,6 @@ lookup_block_symbol (const struct block 
 		  SYMBOL_CLASS (sym) != LOC_REF_ARG &&
 		  SYMBOL_CLASS (sym) != LOC_REGPARM &&
 		  SYMBOL_CLASS (sym) != LOC_REGPARM_ADDR &&
-		  SYMBOL_CLASS (sym) != LOC_BASEREG_ARG &&
 		  SYMBOL_CLASS (sym) != LOC_COMPUTED_ARG)
 		{
 		  break;
diff -urNp gdb-orig/gdb/symtab.h gdb-head/gdb/symtab.h
--- gdb-orig/gdb/symtab.h	2008-05-19 18:16:58.381623644 +0200
+++ gdb-head/gdb/symtab.h	2008-05-19 18:13:47.234973402 +0200
@@ -485,25 +485,6 @@ enum address_class
 
   LOC_CONST_BYTES,
 
-  /* Value is at SYMBOL_VALUE offset from the current value of
-     register number SYMBOL_BASEREG.  This exists mainly for the same
-     things that LOC_LOCAL and LOC_ARG do; but we need to do this
-     instead because on 88k DWARF gives us the offset from the
-     frame/stack pointer, rather than the offset from the "canonical
-     frame address" used by COFF, stabs, etc., and we don't know how
-     to convert between these until we start examining prologues.
-
-     Note that LOC_BASEREG is much less general than a DWARF expression.
-     We don't need the generality (at least not yet), and storing a general
-     DWARF expression would presumably take up more space than the existing
-     scheme.  */
-
-  LOC_BASEREG,
-
-  /* Same as LOC_BASEREG but it is an argument.  */
-
-  LOC_BASEREG_ARG,
-
   /* Value is at fixed address, but the address of the variable has
      to be determined from the minimal symbol table whenever the
      variable is referenced.
@@ -611,8 +592,6 @@ struct symbol
 
   union
   {
-    /* Used by LOC_BASEREG and LOC_BASEREG_ARG.  */
-    short basereg;
     /* An arbitrary data pointer.  Note that this data must be
        allocated using the same obstack as the symbol itself.  */
     /* So far it is only used by LOC_COMPUTED and LOC_COMPUTED_ARG to
@@ -637,7 +616,6 @@ struct symbol
 #define SYMBOL_TYPE(symbol)		(symbol)->type
 #define SYMBOL_LINE(symbol)		(symbol)->line
 #define SYMBOL_SYMTAB(symbol)		(symbol)->symtab
-#define SYMBOL_BASEREG(symbol)		(symbol)->aux_value.basereg
 #define SYMBOL_OPS(symbol)              (symbol)->ops
 #define SYMBOL_LOCATION_BATON(symbol)   (symbol)->aux_value.ptr
 
diff -urNp gdb-orig/gdb/tracepoint.c gdb-head/gdb/tracepoint.c
--- gdb-orig/gdb/tracepoint.c	2008-05-19 18:16:58.390622357 +0200
+++ gdb-head/gdb/tracepoint.c	2008-05-19 18:14:57.993490418 +0200
@@ -1290,19 +1290,6 @@ collect_symbol (struct collection_list *
 	}
       add_memrange (collect, reg, offset, len);
       break;
-    case LOC_BASEREG:
-    case LOC_BASEREG_ARG:
-      reg = SYMBOL_BASEREG (sym);
-      offset = SYMBOL_VALUE (sym);
-      if (info_verbose)
-	{
-	  printf_filtered ("LOC_BASEREG %s: collect %ld bytes at offset ",
-			   DEPRECATED_SYMBOL_NAME (sym), len);
-	  printf_vma (offset);
-	  printf_filtered (" from basereg %d\n", reg);
-	}
-      add_memrange (collect, reg, offset, len);
-      break;
     case LOC_UNRESOLVED:
       printf_filtered ("Don't know LOC_UNRESOLVED %s\n", 
 		       DEPRECATED_SYMBOL_NAME (sym));
@@ -1338,7 +1325,6 @@ add_local_symbols (struct collection_lis
 	    case LOC_LOCAL:
 	    case LOC_STATIC:
 	    case LOC_REGISTER:
-	    case LOC_BASEREG:
 	      if (type == 'L')	/* collecting Locals */
 		{
 		  count++;
@@ -1350,7 +1336,6 @@ add_local_symbols (struct collection_lis
 	    case LOC_REF_ARG:
 	    case LOC_REGPARM:
 	    case LOC_REGPARM_ADDR:
-	    case LOC_BASEREG_ARG:
 	      if (type == 'A')	/* collecting Arguments */
 		{
 		  count++;
@@ -2491,18 +2476,6 @@ scope_info (char *args, int from_tty)
 	      printf_filtered ("a function at address ");
 	      printf_filtered ("%s", paddress (BLOCK_START (SYMBOL_BLOCK_VALUE (sym))));
 	      break;
-	    case LOC_BASEREG:
-	      printf_filtered ("a variable at offset %ld from register $%s",
-			       SYMBOL_VALUE (sym),
-			       gdbarch_register_name
-				 (current_gdbarch, SYMBOL_BASEREG (sym)));
-	      break;
-	    case LOC_BASEREG_ARG:
-	      printf_filtered ("an argument at offset %ld from register $%s",
-			       SYMBOL_VALUE (sym),
-			       gdbarch_register_name
-				 (current_gdbarch, SYMBOL_BASEREG (sym)));
-	      break;
 	    case LOC_UNRESOLVED:
 	      msym = lookup_minimal_symbol (DEPRECATED_SYMBOL_NAME (sym), 
 					    NULL, NULL);
-- 
  Dr. Ulrich Weigand
  GNU Toolchain for Linux on System z and Cell BE
  Ulrich.Weigand@de.ibm.com


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]