mirror of
https://sourceware.org/git/binutils-gdb.git
synced 2024-12-15 04:31:49 +08:00
d3ce09f5bf
* NEWS: Mention the additional style. * breakpoint.h (struct bp_target_info): New fields tcommands, persist. (struct bp_location): New field cmd_bytecode. * breakpoint.c: Include format.h. (disconnected_dprintf): New global. (parse_cmd_to_aexpr): New function. (build_target_command_list): New function. (insert_bp_location): Call it. (remove_breakpoints_pid): Skip dprintf breakpoints. (print_one_breakpoint_location): Ditto. (dprintf_style_agent): New global. (dprintf_style_enums): Add dprintf_style_agent. (update_dprintf_command_list): Add agent case. (agent_printf_command): New function. (_initialize_breakpoint): Add new commands. * common/ax.def (printf): New bytecode. * ax.h (ax_string): Declare. * ax-gdb.h (gen_printf): Declare. * ax-gdb.c: Include cli-utils.h, format.h. (gen_printf): New function. (maint_agent_print_command): New function. (_initialize_ax_gdb): Add maint agent-printf command. * ax-general.c (ax_string): New function. (ax_print): Add printf disassembly. * Makefile.in (SFILES): Add format.c (COMMON_OBS): Add format.o. * common/format.h: New file. * common/format.c: New file. * printcmd.c: Include format.h. (ui_printf): Call parse_format_string. * remote.c (remote_state): New field breakpoint_commands. (PACKET_BreakpointCommands): New enum. (remote_breakpoint_commands_feature): New function. (remote_protocol_features): Add new BreakpointCommands entry. (remote_can_run_breakpoint_commands): New function. (remote_add_target_side_commands): New function. (remote_insert_breakpoint): Call it. (remote_insert_hw_breakpoint): Ditto. (_initialize_remote): Add new packet configuration for target-side breakpoint commands. * target.h (struct target_ops): New field to_can_run_breakpoint_commands. (target_can_run_breakpoint_commands): New macro. * target.c (update_current_target): Handle to_can_run_breakpoint_commands. [gdbserver] * Makefile.in (WARN_CFLAGS_NO_FORMAT): Define. (ax.o): Add it to build rule. (ax-ipa.o): Ditto. (OBS): Add format.o. (IPA_OBS): Add format.o. * server.c (handle_query): Claim support for breakpoint commands. (process_point_options): Add command case. (process_serial_event): Leave running if there are printfs in effect. * mem-break.h (any_persistent_commands): Declare. (add_breakpoint_commands): Declare. (gdb_no_commands_at_breakpoint): Declare. (run_breakpoint_commands): Declare. * mem-break.c (struct point_command_list): New struct. (struct breakpoint): New field command_list. (any_persistent_commands): New function. (add_commands_to_breakpoint): New function. (add_breakpoint_commands): New function. (gdb_no_commands_at_breakpoint): New function. (run_breakpoint_commands): New function. * linux-low.c (linux_wait_1): Test for and run breakpoint commands locally. * ax.c: Include format.h. (ax_printf): New function. (gdb_eval_agent_expr): Add printf opcode. [doc] * gdb.texinfo (Dynamic Printf): Mention agent style and disconnected dprintf. (Maintenance Commands): Describe maint agent-printf. (General Query Packets): Mention BreakpointCommands feature. (Packets): Document commands extension to Z0 packet. * agentexpr.texi (Bytecode Descriptions): Document printf bytecode. [testsuite] * gdb.base/dprintf.exp: Add agent style tests.
98 lines
3.7 KiB
C
98 lines
3.7 KiB
C
/* Definition of agent opcode values. -*- c -*-
|
|
Copyright (C) 1998-2000, 2007-2012 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/>. */
|
|
|
|
/* The actual values of the various bytecode operations.
|
|
|
|
Other independent implementations of the agent bytecode engine will
|
|
rely on the exact values of these enums, and may not be recompiled
|
|
when we change this table. The numeric values should remain fixed
|
|
whenever possible. Thus, we assign them values explicitly here (to
|
|
allow gaps to form safely), and the disassembly table in
|
|
agentexpr.h behaves like an opcode map. If you want to see them
|
|
grouped logically, see doc/agentexpr.texi.
|
|
|
|
Each line is of the form:
|
|
|
|
DEFOP (name, size, data_size, consumed, produced, opcode)
|
|
|
|
NAME is the name of the operation.
|
|
SIZE is the number of argument bytes that the operation takes from
|
|
the bytecode stream.
|
|
DATA_SIZE is the size of data operated on, in bits, for operations
|
|
that care (ref and const). It is zero otherwise.
|
|
CONSUMED is the number of stack elements consumed.
|
|
PRODUCED is the number of stack elements produced.
|
|
OPCODE is the operation's encoding. */
|
|
|
|
DEFOP (float, 0, 0, 0, 0, 0x01)
|
|
DEFOP (add, 0, 0, 2, 1, 0x02)
|
|
DEFOP (sub, 0, 0, 2, 1, 0x03)
|
|
DEFOP (mul, 0, 0, 2, 1, 0x04)
|
|
DEFOP (div_signed, 0, 0, 2, 1, 0x05)
|
|
DEFOP (div_unsigned, 0, 0, 2, 1, 0x06)
|
|
DEFOP (rem_signed, 0, 0, 2, 1, 0x07)
|
|
DEFOP (rem_unsigned, 0, 0, 2, 1, 0x08)
|
|
DEFOP (lsh, 0, 0, 2, 1, 0x09)
|
|
DEFOP (rsh_signed, 0, 0, 2, 1, 0x0a)
|
|
DEFOP (rsh_unsigned, 0, 0, 2, 1, 0x0b)
|
|
DEFOP (trace, 0, 0, 2, 0, 0x0c)
|
|
DEFOP (trace_quick, 1, 0, 1, 1, 0x0d)
|
|
DEFOP (log_not, 0, 0, 1, 1, 0x0e)
|
|
DEFOP (bit_and, 0, 0, 2, 1, 0x0f)
|
|
DEFOP (bit_or, 0, 0, 2, 1, 0x10)
|
|
DEFOP (bit_xor, 0, 0, 2, 1, 0x11)
|
|
DEFOP (bit_not, 0, 0, 1, 1, 0x12)
|
|
DEFOP (equal, 0, 0, 2, 1, 0x13)
|
|
DEFOP (less_signed, 0, 0, 2, 1, 0x14)
|
|
DEFOP (less_unsigned, 0, 0, 2, 1, 0x15)
|
|
DEFOP (ext, 1, 0, 1, 1, 0x16)
|
|
DEFOP (ref8, 0, 8, 1, 1, 0x17)
|
|
DEFOP (ref16, 0, 16, 1, 1, 0x18)
|
|
DEFOP (ref32, 0, 32, 1, 1, 0x19)
|
|
DEFOP (ref64, 0, 64, 1, 1, 0x1a)
|
|
DEFOP (ref_float, 0, 0, 1, 1, 0x1b)
|
|
DEFOP (ref_double, 0, 0, 1, 1, 0x1c)
|
|
DEFOP (ref_long_double, 0, 0, 1, 1, 0x1d)
|
|
DEFOP (l_to_d, 0, 0, 1, 1, 0x1e)
|
|
DEFOP (d_to_l, 0, 0, 1, 1, 0x1f)
|
|
DEFOP (if_goto, 2, 0, 1, 0, 0x20)
|
|
DEFOP (goto, 2, 0, 0, 0, 0x21)
|
|
DEFOP (const8, 1, 8, 0, 1, 0x22)
|
|
DEFOP (const16, 2, 16, 0, 1, 0x23)
|
|
DEFOP (const32, 4, 32, 0, 1, 0x24)
|
|
DEFOP (const64, 8, 64, 0, 1, 0x25)
|
|
DEFOP (reg, 2, 0, 0, 1, 0x26)
|
|
DEFOP (end, 0, 0, 0, 0, 0x27)
|
|
DEFOP (dup, 0, 0, 1, 2, 0x28)
|
|
DEFOP (pop, 0, 0, 1, 0, 0x29)
|
|
DEFOP (zero_ext, 1, 0, 1, 1, 0x2a)
|
|
DEFOP (swap, 0, 0, 2, 2, 0x2b)
|
|
DEFOP (getv, 2, 0, 0, 1, 0x2c)
|
|
DEFOP (setv, 2, 0, 0, 1, 0x2d)
|
|
DEFOP (tracev, 2, 0, 0, 1, 0x2e)
|
|
DEFOP (tracenz, 0, 0, 2, 0, 0x2f)
|
|
DEFOP (trace16, 2, 0, 1, 1, 0x30)
|
|
/* We need something here just to make the tables come out ok. */
|
|
DEFOP (invalid2, 0, 0, 0, 0, 0x31)
|
|
/* The "consumed" number for pick is wrong, but there's no way to
|
|
express the right thing. */
|
|
DEFOP (pick, 1, 0, 0, 1, 0x32)
|
|
DEFOP (rot, 0, 0, 3, 3, 0x33)
|
|
/* Both the argument and consumed numbers are dynamic for this one. */
|
|
DEFOP (printf, 0, 0, 0, 0, 0x34)
|