diff options
author | Joel Brobecker <brobecker@gnat.com> | 2012-02-29 19:53:16 +0000 |
---|---|---|
committer | Joel Brobecker <brobecker@gnat.com> | 2012-02-29 19:53:16 +0000 |
commit | 718cb7da5d4c438d89fc9aeac7f535d01d64af42 (patch) | |
tree | 11304901ca1e7ef44ad334b2fede38f493e020fb /gdb | |
parent | 739593e0ec988c02057a16da872b32faa992f657 (diff) | |
download | gdb-718cb7da5d4c438d89fc9aeac7f535d01d64af42.zip gdb-718cb7da5d4c438d89fc9aeac7f535d01d64af42.tar.gz gdb-718cb7da5d4c438d89fc9aeac7f535d01d64af42.tar.bz2 |
[Ada] processId: Do not modify already encoded IDs
The processID function is supposed to take a symbol name, and process it
in a way that allows us to look that symbol up. This patch is adding
a guard to make sure that we do not apply any transformation if we detect
that we are given an already-encoded symbol name. For instance:
gv___XR_pck__global_variable___XE
This happens in the case where we are trying to print the value of
a renaming. To do this, we simply parse and evaluate the XR symbol
name as an expression. Without this change, the expression parser
transforms gv___XR_pck__global_variable___XE into somethink like
gv___xr_pck__global_variable___xe, which then screws up the rest
of the renaming evaluation.
gdb/ChangeLog:
* ada-lex.p (processId): Do not modify already encoded IDs.
Update function documentation.
Diffstat (limited to 'gdb')
-rw-r--r-- | gdb/ChangeLog | 5 | ||||
-rw-r--r-- | gdb/ada-lex.l | 15 |
2 files changed, 18 insertions, 2 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog index c6a6d8f..621da5b 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,5 +1,10 @@ 2012-02-29 Joel Brobecker <brobecker@adacore.com> + * ada-lex.p (processId): Do not modify already encoded IDs. + Update function documentation. + +2012-02-29 Joel Brobecker <brobecker@adacore.com> + * ada-lang.h (ada_find_renaming_symbol): Replace parameter "name" with "struct symbol *name_sym". * ada-exp.y (write_var_or_type): Update call to diff --git a/gdb/ada-lex.l b/gdb/ada-lex.l index 48667d0..5102ff4 100644 --- a/gdb/ada-lex.l +++ b/gdb/ada-lex.l @@ -410,7 +410,9 @@ processReal (const char *num0) /* Store a canonicalized version of NAME0[0..LEN-1] in yylval.ssym. The - resulting string is valid until the next call to ada_parse. It differs + resulting string is valid until the next call to ada_parse. If + NAME0 contains the substring "___", it is assumed to be already + encoded and the resulting name is equal to it. Otherwise, it differs from NAME0 in that: + Characters between '...' or <...> are transfered verbatim to yylval.ssym. @@ -430,8 +432,18 @@ processId (const char *name0, int len) int i0, i; struct stoken result; + result.ptr = name; while (len > 0 && isspace (name0[len-1])) len -= 1; + + if (strstr (name0, "___") != NULL) + { + strncpy (name, name0, len); + name[len] = '\000'; + result.length = len; + return result; + } + i = i0 = 0; while (i0 < len) { @@ -471,7 +483,6 @@ processId (const char *name0, int len) } name[i] = '\000'; - result.ptr = name; result.length = i; return result; } |