dd2e65cc2c
Nowadays, GDB calls target_can_download_tracepoint at the entry of download_tracepoint_locations, which is called by. update_global_location_list. Sometimes, it is not needed to call target_can_download_tracepoint at all because there is no tracepoint created. In remote target, target_can_download_tracepoint send qTStatus to the remote in order to know whether tracepoint can be downloaded or not. This means some redundant qTStatus packets are sent. This patch is to teach GDB to call target_can_download_tracepoint lazily, only on the moment there are tracepoint to download. gdb.perf/single-step.exp (with a local patch to measure RSP packets) shows the number of RSP packets is reduced because there is no tracepoint at all, so GDB doesn't send qTStatus any more. # of RSP packets original patched single-step rsp 1000 7000 6000 single-step rsp 2000 14000 12000 single-step rsp 3000 21000 18000 single-step rsp 4000 28000 24000 gdb: 2015-09-10 Yao Qi <yao.qi@linaro.org> * breakpoint.c (download_tracepoint_locations): New local can_download_tracepoint. Check the result of target_can_download_tracepoint and save it in can_download_tracepoint if there are tracepoints to download. * linux-nat.h (enum tribool): Move it to ... * common/common-types.h: ... here.
63 lines
1.7 KiB
C
63 lines
1.7 KiB
C
/* Declarations for common types.
|
|
|
|
Copyright (C) 1986-2015 Free Software Foundation, Inc.
|
|
|
|
This file is part of GDB.
|
|
|
|
This program is free software; you can redistribute it and/or modify
|
|
it under the terms of the GNU General Public License as published by
|
|
the Free Software Foundation; either version 3 of the License, or
|
|
(at your option) any later version.
|
|
|
|
This program is distributed in the hope that it will be useful,
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
GNU General Public License for more details.
|
|
|
|
You should have received a copy of the GNU General Public License
|
|
along with this program. If not, see <http://www.gnu.org/licenses/>. */
|
|
|
|
#ifndef COMMON_TYPES_H
|
|
#define COMMON_TYPES_H
|
|
|
|
#ifdef GDBSERVER
|
|
|
|
/* * A byte from the program being debugged. */
|
|
typedef unsigned char gdb_byte;
|
|
|
|
typedef unsigned long long CORE_ADDR;
|
|
|
|
typedef long long LONGEST;
|
|
typedef unsigned long long ULONGEST;
|
|
|
|
#else /* GDBSERVER */
|
|
|
|
#include "bfd.h"
|
|
|
|
/* * A byte from the program being debugged. */
|
|
typedef bfd_byte gdb_byte;
|
|
|
|
/* * An address in the program being debugged. Host byte order. */
|
|
typedef bfd_vma CORE_ADDR;
|
|
|
|
/* This is to make sure that LONGEST is at least as big as CORE_ADDR. */
|
|
|
|
#ifdef BFD64
|
|
|
|
typedef BFD_HOST_64_BIT LONGEST;
|
|
typedef BFD_HOST_U_64_BIT ULONGEST;
|
|
|
|
#else /* No BFD64 */
|
|
|
|
typedef long long LONGEST;
|
|
typedef unsigned long long ULONGEST;
|
|
|
|
#endif /* No BFD64 */
|
|
#endif /* GDBSERVER */
|
|
|
|
/* * The largest CORE_ADDR value. */
|
|
#define CORE_ADDR_MAX (~ (CORE_ADDR) 0)
|
|
|
|
enum tribool { TRIBOOL_UNKNOWN = -1, TRIBOOL_FALSE = 0, TRIBOOL_TRUE = 1 };
|
|
|
|
#endif /* COMMON_TYPES_H */
|