projects
/
deliverable
/
binutils-gdb.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Fix crash when exiting TUI with gdb -tui
[deliverable/binutils-gdb.git]
/
gdb
/
cp-abi.c
diff --git
a/gdb/cp-abi.c
b/gdb/cp-abi.c
index bcbb778e1aeb67118898b7e47b87bfc87ef95f8c..cd6bf82155761ef1cd7b920cec8b5e62fe2faf6a 100644
(file)
--- a/
gdb/cp-abi.c
+++ b/
gdb/cp-abi.c
@@
-1,6
+1,6
@@
/* Generic code for supporting multiple C++ ABI's
/* Generic code for supporting multiple C++ ABI's
- Copyright (C) 2001-20
16
Free Software Foundation, Inc.
+ Copyright (C) 2001-20
20
Free Software Foundation, Inc.
This file is part of GDB.
This file is part of GDB.
@@
-73,22
+73,21
@@
baseclass_offset (struct type *type, int index, const gdb_byte *valaddr,
gdb_assert (current_cp_abi.baseclass_offset != NULL);
gdb_assert (current_cp_abi.baseclass_offset != NULL);
- TRY
+ try
{
res = (*current_cp_abi.baseclass_offset) (type, index, valaddr,
embedded_offset,
address, val);
}
{
res = (*current_cp_abi.baseclass_offset) (type, index, valaddr,
embedded_offset,
address, val);
}
-
CATCH (ex, RETURN_MASK_ERROR
)
+
catch (const gdb_exception_error &ex
)
{
if (ex.error != NOT_AVAILABLE_ERROR)
{
if (ex.error != NOT_AVAILABLE_ERROR)
- throw
_exception (ex)
;
+ throw;
throw_error (NOT_AVAILABLE_ERROR,
_("Cannot determine virtual baseclass offset "
"of incomplete object"));
}
throw_error (NOT_AVAILABLE_ERROR,
_("Cannot determine virtual baseclass offset "
"of incomplete object"));
}
- END_CATCH
return res;
}
return res;
}
@@
-110,17
+109,17
@@
value_rtti_type (struct value *v, int *full,
{
struct type *ret = NULL;
{
struct type *ret = NULL;
- if ((current_cp_abi.rtti_type) == NULL)
+ if ((current_cp_abi.rtti_type) == NULL
+ || !HAVE_CPLUS_STRUCT (check_typedef (value_type (v))))
return NULL;
return NULL;
- TRY
+ try
{
ret = (*current_cp_abi.rtti_type) (v, full, top, using_enc);
}
{
ret = (*current_cp_abi.rtti_type) (v, full, top, using_enc);
}
-
CATCH (e, RETURN_MASK_ERROR
)
+
catch (const gdb_exception_error &e
)
{
return NULL;
}
{
return NULL;
}
- END_CATCH
return ret;
}
return ret;
}
@@
-221,11
+220,13
@@
cplus_typename_from_type_info (struct value *value)
return (*current_cp_abi.get_typename_from_type_info) (value);
}
return (*current_cp_abi.get_typename_from_type_info) (value);
}
-int
+/* See cp-abi.h. */
+
+struct language_pass_by_ref_info
cp_pass_by_reference (struct type *type)
{
if ((current_cp_abi.pass_by_reference) == NULL)
cp_pass_by_reference (struct type *type)
{
if ((current_cp_abi.pass_by_reference) == NULL)
- return
0
;
+ return
{}
;
return (*current_cp_abi.pass_by_reference) (type);
}
return (*current_cp_abi.pass_by_reference) (type);
}
@@
-272,10
+273,8
@@
set_cp_abi_as_auto_default (const char *short_name)
_("Cannot find C++ ABI \"%s\" to set it as auto default."),
short_name);
_("Cannot find C++ ABI \"%s\" to set it as auto default."),
short_name);
- if (auto_cp_abi.longname != NULL)
- xfree ((char *) auto_cp_abi.longname);
- if (auto_cp_abi.doc != NULL)
- xfree ((char *) auto_cp_abi.doc);
+ xfree ((char *) auto_cp_abi.longname);
+ xfree ((char *) auto_cp_abi.doc);
auto_cp_abi = *abi;
auto_cp_abi = *abi;
@@
-314,12
+313,10
@@
static void
list_cp_abis (int from_tty)
{
struct ui_out *uiout = current_uiout;
list_cp_abis (int from_tty)
{
struct ui_out *uiout = current_uiout;
- struct cleanup *cleanup_chain;
int i;
uiout->text ("The available C++ ABIs are:\n");
int i;
uiout->text ("The available C++ ABIs are:\n");
- cleanup_chain = make_cleanup_ui_out_tuple_begin_end (uiout,
- "cp-abi-list");
+ ui_out_emit_tuple tuple_emitter (uiout, "cp-abi-list");
for (i = 0; i < num_cp_abis; i++)
{
char pad[14];
for (i = 0; i < num_cp_abis; i++)
{
char pad[14];
@@
-337,14
+334,13
@@
list_cp_abis (int from_tty)
uiout->field_string ("doc", cp_abis[i]->doc);
uiout->text ("\n");
}
uiout->field_string ("doc", cp_abis[i]->doc);
uiout->text ("\n");
}
- do_cleanups (cleanup_chain);
}
/* Set the current C++ ABI, or display the list of options if no
argument is given. */
static void
}
/* Set the current C++ ABI, or display the list of options if no
argument is given. */
static void
-set_cp_abi_cmd (char *args, int from_tty)
+set_cp_abi_cmd (c
onst c
har *args, int from_tty)
{
if (args == NULL)
{
{
if (args == NULL)
{
@@
-358,8
+354,9
@@
set_cp_abi_cmd (char *args, int from_tty)
/* A completion function for "set cp-abi". */
/* A completion function for "set cp-abi". */
-static
VEC (char_ptr) *
+static
void
cp_abi_completer (struct cmd_list_element *ignore,
cp_abi_completer (struct cmd_list_element *ignore,
+ completion_tracker &tracker,
const char *text, const char *word)
{
static const char **cp_abi_names;
const char *text, const char *word)
{
static const char **cp_abi_names;
@@
-374,13
+371,13
@@
cp_abi_completer (struct cmd_list_element *ignore,
cp_abi_names[i] = NULL;
}
cp_abi_names[i] = NULL;
}
-
return complete_on_enum (
cp_abi_names, text, word);
+
complete_on_enum (tracker,
cp_abi_names, text, word);
}
/* Show the currently selected C++ ABI. */
static void
}
/* Show the currently selected C++ ABI. */
static void
-show_cp_abi_cmd (char *args, int from_tty)
+show_cp_abi_cmd (c
onst c
har *args, int from_tty)
{
struct ui_out *uiout = current_uiout;
{
struct ui_out *uiout = current_uiout;
@@
-392,10
+389,9
@@
show_cp_abi_cmd (char *args, int from_tty)
uiout->text (").\n");
}
uiout->text (").\n");
}
-extern initialize_file_ftype _initialize_cp_abi; /* -Wmissing-prototypes */
-
+void _initialize_cp_abi ();
void
void
-_initialize_cp_abi (
void
)
+_initialize_cp_abi ()
{
struct cmd_list_element *c;
{
struct cmd_list_element *c;
This page took
0.040772 seconds
and
4
git commands to generate.