summaryrefslogtreecommitdiff
path: root/gdb/ada-lang.c
diff options
context:
space:
mode:
authorPedro Alves <palves@redhat.com>2013-03-13 16:45:06 +0000
committerPedro Alves <palves@redhat.com>2013-03-13 16:45:06 +0000
commit243a8189577dfee5d11924750bfe0a2024963e88 (patch)
treee13a4312869a8909143526e63f05689c912f935c /gdb/ada-lang.c
parent98486eff86243307ae5c2c5beb6494edd0bd2219 (diff)
downloadgdb-243a8189577dfee5d11924750bfe0a2024963e88.tar.gz
More invalid pointer to pointer conversions.
As a follow up to: http://sourceware.org/ml/gdb-patches/2013-03/msg00449.html In a nutshell, casts between 'char **' <-> 'unsigned char **' and 'char **' <-> 'const char **' are invalid. I grepped for "\*\*) &" and found these. There's another one in demangle.c, but I've split fixing that one to a separate patch. I think the ada_decode_symbol change is perhaps the one that could be surprising. The function's description has this comment, which makes things much clearer: The GSYMBOL parameter is "mutable" in the C++ sense: logically const, but nevertheless modified to a semantically equivalent form when a decoded name is cached in it. */ const char * ada_decode_symbol (const struct general_symbol_info *gsymbol) With that out of the way, I think the patch ends up being pretty obvious. Tested on x86_64 Fedora 17. gdb/ 2013-03-13 Pedro Alves <palves@redhat.com> * ada-lang.c (ada_decode_symbol): Cast away constness of GSYMBOL rather than casting 'const char * const *' to 'const char **'. * ada-lex.l (processInt): Make "trailer" local const. Remove 'const char **' cast. * arm-linux-tdep.c (arm_stap_parse_special_token): Add 'char *' locals, and use those as strtol output pointer, instead than doing invalid casts to from 'const char **' to 'char **'. (_initialize_demangle): Remove cast. * i386-tdep.c (i386_stap_parse_special_token): : Add 'char *' locals, and use those as strtol output pointer, instead than doing invalid casts to from 'const char **' to 'char **'. * solib-dsbt.c (dsbt_get_initial_loadmaps): Remove 'gdb_byte**' casts. * stap-probe.c (stap_parse_register_operand) (stap_parse_single_operand): Likewise.
Diffstat (limited to 'gdb/ada-lang.c')
-rw-r--r--gdb/ada-lang.c6
1 files changed, 4 insertions, 2 deletions
diff --git a/gdb/ada-lang.c b/gdb/ada-lang.c
index 63a85eeff31..1e5c55e90cc 100644
--- a/gdb/ada-lang.c
+++ b/gdb/ada-lang.c
@@ -1299,8 +1299,10 @@ static struct htab *decoded_names_store;
const char *
ada_decode_symbol (const struct general_symbol_info *gsymbol)
{
- const char **resultp =
- (const char **) &gsymbol->language_specific.mangled_lang.demangled_name;
+ struct general_symbol_info *gsymbol_rw
+ = (struct general_symbol_info *) gsymbol;
+ const char **resultp
+ = &gsymbol_rw->language_specific.mangled_lang.demangled_name;
if (*resultp == NULL)
{