X-Git-Url: http://drtracing.org/?a=blobdiff_plain;f=gdb%2Fbtrace.c;h=d41e3c4f8f91ac102a76207437a80b1545590f1b;hb=cee00f171520eb85867230d4cbed34480c64e71e;hp=b6a111364442fb22f34b60314112618b8c17cfb8;hpb=46f29a9a260da1a03176682aff63bad03d8f2e8b;p=deliverable%2Fbinutils-gdb.git diff --git a/gdb/btrace.c b/gdb/btrace.c index b6a1113644..d41e3c4f8f 100644 --- a/gdb/btrace.c +++ b/gdb/btrace.c @@ -1,6 +1,6 @@ /* Branch trace support for GDB, the GNU debugger. - Copyright (C) 2013-2019 Free Software Foundation, Inc. + Copyright (C) 2013-2020 Free Software Foundation, Inc. Contributed by Intel Corp. @@ -82,10 +82,10 @@ ftrace_print_function_name (const struct btrace_function *bfun) sym = bfun->sym; if (sym != NULL) - return SYMBOL_PRINT_NAME (sym); + return sym->print_name (); if (msym != NULL) - return MSYMBOL_PRINT_NAME (msym); + return msym->print_name (); return ""; } @@ -197,7 +197,7 @@ ftrace_function_switched (const struct btrace_function *bfun, /* If the minimal symbol changed, we certainly switched functions. */ if (mfun != NULL && msym != NULL - && strcmp (MSYMBOL_LINKAGE_NAME (mfun), MSYMBOL_LINKAGE_NAME (msym)) != 0) + && strcmp (mfun->linkage_name (), msym->linkage_name ()) != 0) return 1; /* If the symbol changed, we certainly switched functions. */ @@ -206,7 +206,7 @@ ftrace_function_switched (const struct btrace_function *bfun, const char *bfname, *fname; /* Check the function name. */ - if (strcmp (SYMBOL_LINKAGE_NAME (fun), SYMBOL_LINKAGE_NAME (sym)) != 0) + if (strcmp (fun->linkage_name (), sym->linkage_name ()) != 0) return 1; /* Check the location of those functions, as well. */ @@ -926,7 +926,7 @@ ftrace_bridge_gap (struct btrace_thread_info *btinfo, best_r = NULL; /* We search the back traces of LHS and RHS for valid connections and connect - the two functon segments that give the longest combined back trace. */ + the two function segments that give the longest combined back trace. */ for (cand_l = lhs; cand_l != NULL; cand_l = ftrace_get_caller (btinfo, cand_l)) @@ -1533,7 +1533,7 @@ btrace_compute_ftrace_1 (struct thread_info *tp, return; } - internal_error (__FILE__, __LINE__, _("Unkown branch trace format.")); + internal_error (__FILE__, __LINE__, _("Unknown branch trace format.")); } static void @@ -1579,7 +1579,7 @@ btrace_add_pc (struct thread_info *tp) pc = regcache_read_pc (regcache); btrace.format = BTRACE_FORMAT_BTS; - btrace.variant.bts.blocks = new std::vector ; + btrace.variant.bts.blocks = new std::vector; btrace.variant.bts.blocks->emplace_back (pc, pc); @@ -1592,7 +1592,8 @@ void btrace_enable (struct thread_info *tp, const struct btrace_config *conf) { if (tp->btrace.target != NULL) - return; + error (_("Recording already enabled on thread %s (%s)."), + print_thread_id (tp), target_pid_to_str (tp->ptid).c_str ()); #if !defined (HAVE_LIBIPT) if (conf->format == BTRACE_FORMAT_PT) @@ -1604,9 +1605,9 @@ btrace_enable (struct thread_info *tp, const struct btrace_config *conf) tp->btrace.target = target_enable_btrace (tp->ptid, conf); - /* We're done if we failed to enable tracing. */ if (tp->btrace.target == NULL) - return; + error (_("Failed to enable recording on thread %s (%s)."), + print_thread_id (tp), target_pid_to_str (tp->ptid).c_str ()); /* We need to undo the enable in case of errors. */ try @@ -1651,7 +1652,8 @@ btrace_disable (struct thread_info *tp) struct btrace_thread_info *btp = &tp->btrace; if (btp->target == NULL) - return; + error (_("Recording not enabled on thread %s (%s)."), + print_thread_id (tp), target_pid_to_str (tp->ptid).c_str ()); DEBUG ("disable thread %s (%s)", print_thread_id (tp), target_pid_to_str (tp->ptid).c_str ()); @@ -1791,7 +1793,7 @@ btrace_stitch_trace (struct btrace_data *btrace, struct thread_info *tp) return -1; } - internal_error (__FILE__, __LINE__, _("Unkown branch trace format.")); + internal_error (__FILE__, __LINE__, _("Unknown branch trace format.")); } /* Clear the branch trace histories in BTINFO. */ @@ -1825,7 +1827,7 @@ btrace_maint_clear (struct btrace_thread_info *btinfo) #if defined (HAVE_LIBIPT) case BTRACE_FORMAT_PT: - xfree (btinfo->maint.variant.pt.packets); + delete btinfo->maint.variant.pt.packets; btinfo->maint.variant.pt.packets = NULL; btinfo->maint.variant.pt.packet_history.begin = 0; @@ -2036,7 +2038,7 @@ parse_xml_btrace_block (struct gdb_xml_parser *parser, case BTRACE_FORMAT_NONE: btrace->format = BTRACE_FORMAT_BTS; - btrace->variant.bts.blocks = new std::vector ; + btrace->variant.bts.blocks = new std::vector; break; default: @@ -2962,6 +2964,9 @@ btrace_maint_decode_pt (struct btrace_maint_info *maint, { int errcode; + if (maint->variant.pt.packets == NULL) + maint->variant.pt.packets = new std::vector; + for (;;) { struct btrace_pt_packet packet; @@ -2982,8 +2987,7 @@ btrace_maint_decode_pt (struct btrace_maint_info *maint, if (maint_btrace_pt_skip_pad == 0 || packet.packet.type != ppt_pad) { packet.errcode = pt_errcode (errcode); - VEC_safe_push (btrace_pt_packet_s, maint->variant.pt.packets, - &packet); + maint->variant.pt.packets->push_back (packet); } } @@ -2991,8 +2995,7 @@ btrace_maint_decode_pt (struct btrace_maint_info *maint, break; packet.errcode = pt_errcode (errcode); - VEC_safe_push (btrace_pt_packet_s, maint->variant.pt.packets, - &packet); + maint->variant.pt.packets->push_back (packet); warning (_("Error at trace offset 0x%" PRIx64 ": %s."), packet.offset, pt_errstr (packet.errcode)); @@ -3093,11 +3096,14 @@ btrace_maint_update_packets (struct btrace_thread_info *btinfo, #if defined (HAVE_LIBIPT) case BTRACE_FORMAT_PT: - if (VEC_empty (btrace_pt_packet_s, btinfo->maint.variant.pt.packets)) + if (btinfo->maint.variant.pt.packets == nullptr) + btinfo->maint.variant.pt.packets = new std::vector; + + if (btinfo->maint.variant.pt.packets->empty ()) btrace_maint_update_pt_packets (btinfo); *begin = 0; - *end = VEC_length (btrace_pt_packet_s, btinfo->maint.variant.pt.packets); + *end = btinfo->maint.variant.pt.packets->size (); *from = btinfo->maint.variant.pt.packet_history.begin; *to = btinfo->maint.variant.pt.packet_history.end; break; @@ -3119,7 +3125,7 @@ btrace_maint_print_packets (struct btrace_thread_info *btinfo, case BTRACE_FORMAT_BTS: { - const std::vector &blocks + const std::vector &blocks = *btinfo->data.variant.bts.blocks; unsigned int blk; @@ -3140,23 +3146,21 @@ btrace_maint_print_packets (struct btrace_thread_info *btinfo, #if defined (HAVE_LIBIPT) case BTRACE_FORMAT_PT: { - VEC (btrace_pt_packet_s) *packets; + const std::vector &packets + = *btinfo->maint.variant.pt.packets; unsigned int pkt; - packets = btinfo->maint.variant.pt.packets; for (pkt = begin; pkt < end; ++pkt) { - const struct btrace_pt_packet *packet; - - packet = VEC_index (btrace_pt_packet_s, packets, pkt); + const struct btrace_pt_packet &packet = packets.at (pkt); printf_unfiltered ("%u\t", pkt); - printf_unfiltered ("0x%" PRIx64 "\t", packet->offset); + printf_unfiltered ("0x%" PRIx64 "\t", packet.offset); - if (packet->errcode == pte_ok) - pt_print_packet (&packet->packet); + if (packet.errcode == pte_ok) + pt_print_packet (&packet.packet); else - printf_unfiltered ("[error: %s]", pt_errstr (packet->errcode)); + printf_unfiltered ("[error: %s]", pt_errstr (packet.errcode)); printf_unfiltered ("\n"); } @@ -3226,7 +3230,7 @@ maint_btrace_packet_history_cmd (const char *arg, int from_tty) struct btrace_thread_info *btinfo; unsigned int size, begin, end, from, to; - thread_info *tp = find_thread_ptid (inferior_ptid); + thread_info *tp = find_thread_ptid (current_inferior (), inferior_ptid); if (tp == NULL) error (_("No thread.")); @@ -3356,51 +3360,6 @@ maint_btrace_clear_cmd (const char *args, int from_tty) btrace_clear (tp); } -/* The "maintenance btrace" command. */ - -static void -maint_btrace_cmd (const char *args, int from_tty) -{ - help_list (maint_btrace_cmdlist, "maintenance btrace ", all_commands, - gdb_stdout); -} - -/* The "maintenance set btrace" command. */ - -static void -maint_btrace_set_cmd (const char *args, int from_tty) -{ - help_list (maint_btrace_set_cmdlist, "maintenance set btrace ", all_commands, - gdb_stdout); -} - -/* The "maintenance show btrace" command. */ - -static void -maint_btrace_show_cmd (const char *args, int from_tty) -{ - help_list (maint_btrace_show_cmdlist, "maintenance show btrace ", - all_commands, gdb_stdout); -} - -/* The "maintenance set btrace pt" command. */ - -static void -maint_btrace_pt_set_cmd (const char *args, int from_tty) -{ - help_list (maint_btrace_pt_set_cmdlist, "maintenance set btrace pt ", - all_commands, gdb_stdout); -} - -/* The "maintenance show btrace pt" command. */ - -static void -maint_btrace_pt_show_cmd (const char *args, int from_tty) -{ - help_list (maint_btrace_pt_show_cmdlist, "maintenance show btrace pt ", - all_commands, gdb_stdout); -} - /* The "maintenance info btrace" command. */ static void @@ -3447,9 +3406,9 @@ maint_info_btrace_cmd (const char *args, int from_tty) version.ext != NULL ? version.ext : ""); btrace_maint_update_pt_packets (btinfo); - printf_unfiltered (_("Number of packets: %u.\n"), - VEC_length (btrace_pt_packet_s, - btinfo->maint.variant.pt.packets)); + printf_unfiltered (_("Number of packets: %zu.\n"), + ((btinfo->maint.variant.pt.packets == nullptr) + ? 0 : btinfo->maint.variant.pt.packets->size ())); } break; #endif /* defined (HAVE_LIBIPT) */ @@ -3469,36 +3428,39 @@ show_maint_btrace_pt_skip_pad (struct ui_file *file, int from_tty, /* Initialize btrace maintenance commands. */ +void _initialize_btrace (); void -_initialize_btrace (void) +_initialize_btrace () { add_cmd ("btrace", class_maintenance, maint_info_btrace_cmd, _("Info about branch tracing data."), &maintenanceinfolist); - add_prefix_cmd ("btrace", class_maintenance, maint_btrace_cmd, - _("Branch tracing maintenance commands."), - &maint_btrace_cmdlist, "maintenance btrace ", - 0, &maintenancelist); + add_basic_prefix_cmd ("btrace", class_maintenance, + _("Branch tracing maintenance commands."), + &maint_btrace_cmdlist, "maintenance btrace ", + 0, &maintenancelist); - add_prefix_cmd ("btrace", class_maintenance, maint_btrace_set_cmd, _("\ + add_basic_prefix_cmd ("btrace", class_maintenance, _("\ Set branch tracing specific variables."), - &maint_btrace_set_cmdlist, "maintenance set btrace ", - 0, &maintenance_set_cmdlist); + &maint_btrace_set_cmdlist, "maintenance set btrace ", + 0, &maintenance_set_cmdlist); - add_prefix_cmd ("pt", class_maintenance, maint_btrace_pt_set_cmd, _("\ + add_basic_prefix_cmd ("pt", class_maintenance, _("\ Set Intel Processor Trace specific variables."), - &maint_btrace_pt_set_cmdlist, "maintenance set btrace pt ", - 0, &maint_btrace_set_cmdlist); + &maint_btrace_pt_set_cmdlist, + "maintenance set btrace pt ", + 0, &maint_btrace_set_cmdlist); - add_prefix_cmd ("btrace", class_maintenance, maint_btrace_show_cmd, _("\ + add_show_prefix_cmd ("btrace", class_maintenance, _("\ Show branch tracing specific variables."), - &maint_btrace_show_cmdlist, "maintenance show btrace ", - 0, &maintenance_show_cmdlist); + &maint_btrace_show_cmdlist, "maintenance show btrace ", + 0, &maintenance_show_cmdlist); - add_prefix_cmd ("pt", class_maintenance, maint_btrace_pt_show_cmd, _("\ + add_show_prefix_cmd ("pt", class_maintenance, _("\ Show Intel Processor Trace specific variables."), - &maint_btrace_pt_show_cmdlist, "maintenance show btrace pt ", - 0, &maint_btrace_show_cmdlist); + &maint_btrace_pt_show_cmdlist, + "maintenance show btrace pt ", + 0, &maint_btrace_show_cmdlist); add_setshow_boolean_cmd ("skip-pad", class_maintenance, &maint_btrace_pt_skip_pad, _("\