X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=gdb%2Fbreak-catch-throw.c;h=7f4a9f955dfc7edbb61ac5452a0245f1f9f7dab7;hb=refs%2Fheads%2Fconcurrent-displaced-stepping-2020-04-01;hp=2d91285312bb7e51d0b3aa1c449ea08ced2e6a92;hpb=5c31b35808e467d39d05ffa95428e22bb10fd72d;p=deliverable%2Fbinutils-gdb.git diff --git a/gdb/break-catch-throw.c b/gdb/break-catch-throw.c index 2d91285312..7f4a9f955d 100644 --- a/gdb/break-catch-throw.c +++ b/gdb/break-catch-throw.c @@ -1,6 +1,6 @@ /* Everything about catch/throw catchpoints, for GDB. - Copyright (C) 1986-2019 Free Software Foundation, Inc. + Copyright (C) 1986-2020 Free Software Foundation, Inc. This file is part of GDB. @@ -115,7 +115,7 @@ fetch_probe_arguments (struct value **arg0, struct value **arg1) && pc_probe.prob->get_name () != "rethrow")) error (_("not stopped at a C++ exception catchpoint")); - n_args = pc_probe.prob->get_argument_count (frame); + n_args = pc_probe.prob->get_argument_count (get_frame_arch (frame)); if (n_args < 2) error (_("C++ exception catchpoint has too few arguments")); @@ -156,26 +156,28 @@ check_status_exception_catchpoint (struct bpstats *bs) if (self->pattern == NULL) return; + const char *name = nullptr; + gdb::unique_xmalloc_ptr canon; try { struct value *typeinfo_arg; - std::string canon; fetch_probe_arguments (NULL, &typeinfo_arg); type_name = cplus_typename_from_type_info (typeinfo_arg); canon = cp_canonicalize_string (type_name.c_str ()); - if (!canon.empty ()) - std::swap (type_name, canon); + name = (canon != nullptr + ? canon.get () + : type_name.c_str ()); } catch (const gdb_exception_error &e) { exception_print (gdb_stderr, e); } - if (!type_name.empty ()) + if (name != nullptr) { - if (self->pattern->exec (type_name.c_str (), 0, NULL, 0) != 0) + if (self->pattern->exec (name, 0, NULL, 0) != 0) bs->stop = 0; } } @@ -532,8 +534,9 @@ initialize_throw_catchpoint_ops (void) ops->allocate_location = allocate_location_exception_catchpoint; } +void _initialize_break_catch_throw (); void -_initialize_break_catch_throw (void) +_initialize_break_catch_throw () { initialize_throw_catchpoint_ops ();