summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPedro Alves <palves@redhat.com>2015-10-29 16:18:30 +0000
committerPedro Alves <palves@redhat.com>2015-10-29 17:54:20 +0000
commitd2242e347a25dc15fbf7286975e3baba143deea9 (patch)
tree1e91bcd9a7fe001c9874a093bdb5d98477a73084
parentcb0a2700865a77a111994ced22fd68815e5eed63 (diff)
downloadbinutils-gdb-d2242e347a25dc15fbf7286975e3baba143deea9.tar.gz
mdebugread.c: Address class -> address class index
This fixes this error in C++ mode: /home/pedro/gdb/mygit/cxx-convertion/src/gdb/mdebugread.c:654:11: error: invalid conversion from ‘int’ to ‘address_class’ [-fpermissive] theclass = mdebug_register_index; ^ The "theclass" local is of type enum address_class, however, what it really holds is an address class index. Class index values by design match the address class values up until LOC_FINAL_VALUE, but extend beyond that, so it's not really right to store an address class index in an enum address_class. The fix is really the same making the 'theclass' local be of type int, but while we're at it, we get rid of the goto, and thus the local becomes the 'aclass_index' parameter in the new add_data_symbol function. gdb/ChangeLog: 2015-10-29 Pedro Alves <palves@redhat.com> * mdebugread.c (add_data_symbol): New function, factored out from ... (parse_symbol): ... here. Delete 'theclass' local.
-rw-r--r--gdb/ChangeLog6
-rw-r--r--gdb/mdebugread.c48
2 files changed, 34 insertions, 20 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index 78100fa5b7a..43ad928eb1c 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,3 +1,9 @@
+2015-10-29 Pedro Alves <palves@redhat.com>
+
+ * mdebugread.c (add_data_symbol): New function, factored out from
+ ...
+ (parse_symbol): ... here. Delete 'theclass' local.
+
2015-10-29 Simon Marchi <simon.marchi@polymtl.ca>
* jit.c (jit_target_read_impl): Add cast.
diff --git a/gdb/mdebugread.c b/gdb/mdebugread.c
index 03c1ff893e4..91e122cbe4c 100644
--- a/gdb/mdebugread.c
+++ b/gdb/mdebugread.c
@@ -567,6 +567,26 @@ static const struct symbol_register_ops mdebug_register_funcs = {
static int mdebug_register_index;
static int mdebug_regparm_index;
+/* Common code for symbols describing data. */
+
+static void
+add_data_symbol (SYMR *sh, union aux_ext *ax, int bigend,
+ struct symbol *s, int aclass_index, struct block *b,
+ struct objfile *objfile, char *name)
+{
+ SYMBOL_DOMAIN (s) = VAR_DOMAIN;
+ SYMBOL_ACLASS_INDEX (s) = aclass_index;
+ add_symbol (s, top_stack->cur_st, b);
+
+ /* Type could be missing if file is compiled without debugging info. */
+ if (SC_IS_UNDEF (sh->sc)
+ || sh->sc == scNil || sh->index == indexNil)
+ SYMBOL_TYPE (s) = objfile_type (objfile)->nodebug_data_symbol;
+ else
+ SYMBOL_TYPE (s) = parse_type (cur_fd, ax, sh->index, 0, bigend, name);
+ /* Value of a data symbol is its memory address. */
+}
+
static int
parse_symbol (SYMR *sh, union aux_ext *ax, char *ext_sh, int bigend,
struct section_offsets *section_offsets, struct objfile *objfile)
@@ -581,7 +601,6 @@ parse_symbol (SYMR *sh, union aux_ext *ax, char *ext_sh, int bigend,
struct type *t;
struct field *f;
int count = 1;
- enum address_class theclass;
TIR tir;
long svalue = sh->value;
int bitsize;
@@ -622,15 +641,14 @@ parse_symbol (SYMR *sh, union aux_ext *ax, char *ext_sh, int bigend,
break;
case stGlobal: /* External symbol, goes into global block. */
- theclass = LOC_STATIC;
b = BLOCKVECTOR_BLOCK (SYMTAB_BLOCKVECTOR (top_stack->cur_st),
GLOBAL_BLOCK);
s = new_symbol (name);
SYMBOL_VALUE_ADDRESS (s) = (CORE_ADDR) sh->value;
- goto data;
+ add_data_symbol (sh, ax, bigend, s, LOC_STATIC, b, objfile, name);
+ break;
case stStatic: /* Static data, goes into current block. */
- theclass = LOC_STATIC;
b = top_stack->cur_block;
s = new_symbol (name);
if (SC_IS_COMMON (sh->sc))
@@ -644,29 +662,19 @@ parse_symbol (SYMR *sh, union aux_ext *ax, char *ext_sh, int bigend,
}
else
SYMBOL_VALUE_ADDRESS (s) = (CORE_ADDR) sh->value;
- goto data;
+ add_data_symbol (sh, ax, bigend, s, LOC_STATIC, b, objfile, name);
+ break;
case stLocal: /* Local variable, goes into current block. */
b = top_stack->cur_block;
s = new_symbol (name);
SYMBOL_VALUE (s) = svalue;
if (sh->sc == scRegister)
- theclass = mdebug_register_index;
- else
- theclass = LOC_LOCAL;
-
- data: /* Common code for symbols describing data. */
- SYMBOL_DOMAIN (s) = VAR_DOMAIN;
- SYMBOL_ACLASS_INDEX (s) = theclass;
- add_symbol (s, top_stack->cur_st, b);
-
- /* Type could be missing if file is compiled without debugging info. */
- if (SC_IS_UNDEF (sh->sc)
- || sh->sc == scNil || sh->index == indexNil)
- SYMBOL_TYPE (s) = objfile_type (objfile)->nodebug_data_symbol;
+ add_data_symbol (sh, ax, bigend, s, mdebug_register_index,
+ b, objfile, name);
else
- SYMBOL_TYPE (s) = parse_type (cur_fd, ax, sh->index, 0, bigend, name);
- /* Value of a data symbol is its memory address. */
+ add_data_symbol (sh, ax, bigend, s, LOC_LOCAL,
+ b, objfile, name);
break;
case stParam: /* Arg to procedure, goes into current