Introduce gdb_disassembly_flags

For some reason I ended up staring at some of the "int flags" in
btrace-related code, and I got confused because I had no clue what the
flags where supposed to indicate.

Fix that by using enum_flags, so that:
  #1 - it's clear from the type what the flags are about, and
  #2 - the compiler can catch mismatching mistakes

gdb/ChangeLog:
2017-09-04  Pedro Alves  <palves@redhat.com>

	* cli/cli-cmds.c (print_disassembly, disassemble_current_function)
	(disassemble_command): Use gdb_disassembly_flags instead of bare
	int.
	* disasm.c (gdb_pretty_print_disassembler::pretty_print_insn)
	(dump_insns, do_mixed_source_and_assembly_deprecated)
	(do_mixed_source_and_assembly, do_assembly_only, gdb_disassembly):
	Use gdb_disassembly_flags instead of bare int.
	* disasm.h (DISASSEMBLY_SOURCE_DEPRECATED, DISASSEMBLY_RAW_INSN)
	(DISASSEMBLY_OMIT_FNAME, DISASSEMBLY_FILENAME)
	(DISASSEMBLY_OMIT_PC, DISASSEMBLY_SOURCE)
	(DISASSEMBLY_SPECULATIVE): No longer macros.  Instead they're...
	(enum gdb_disassembly_flag): ... values of this new enumeration.
	(gdb_disassembly_flags): Define.
	(gdb_disassembly)
	(gdb_pretty_print_disassembler::pretty_print_insn): Use it.
	* mi/mi-cmd-disas.c (mi_cmd_disassemble): Use
	gdb_disassembly_flags instead of bare int.
	* record-btrace.c (btrace_insn_history)
	(record_btrace_insn_history, record_btrace_insn_history_range)
	(record_btrace_insn_history_from): Use gdb_disassembly_flags
	instead of bare int.
	* record.c (get_insn_history_modifiers, cmd_record_insn_history):
	Use gdb_disassembly_flags instead of bare int.
	* target-debug.h (target_debug_print_gdb_disassembly_flags):
	Define.
	* target-delegates.c: Regenerate.
	* target.c (target_insn_history, target_insn_history_from)
	(target_insn_history_range): Use gdb_disassembly_flags instead of
	bare int.
	* target.h: Include "disasm.h".
	(struct target_ops) <to_insn_history, to_insn_history_from,
	to_insn_history_range>: Use gdb_disassembly_flags instead of bare
	int.
	(target_insn_history, target_insn_history_from)
	(target_insn_history_range): Use gdb_disassembly_flags instead of
	bare int.
This commit is contained in:
Pedro Alves 2017-09-04 18:23:22 +01:00
parent 9521ecda68
commit 9a24775b97
11 changed files with 113 additions and 55 deletions

View File

@ -1,3 +1,42 @@
2017-09-04 Pedro Alves <palves@redhat.com>
* cli/cli-cmds.c (print_disassembly, disassemble_current_function)
(disassemble_command): Use gdb_disassembly_flags instead of bare
int.
* disasm.c (gdb_pretty_print_disassembler::pretty_print_insn)
(dump_insns, do_mixed_source_and_assembly_deprecated)
(do_mixed_source_and_assembly, do_assembly_only, gdb_disassembly):
Use gdb_disassembly_flags instead of bare int.
* disasm.h (DISASSEMBLY_SOURCE_DEPRECATED, DISASSEMBLY_RAW_INSN)
(DISASSEMBLY_OMIT_FNAME, DISASSEMBLY_FILENAME)
(DISASSEMBLY_OMIT_PC, DISASSEMBLY_SOURCE)
(DISASSEMBLY_SPECULATIVE): No longer macros. Instead they're...
(enum gdb_disassembly_flag): ... values of this new enumeration.
(gdb_disassembly_flags): Define.
(gdb_disassembly)
(gdb_pretty_print_disassembler::pretty_print_insn): Use it.
* mi/mi-cmd-disas.c (mi_cmd_disassemble): Use
gdb_disassembly_flags instead of bare int.
* record-btrace.c (btrace_insn_history)
(record_btrace_insn_history, record_btrace_insn_history_range)
(record_btrace_insn_history_from): Use gdb_disassembly_flags
instead of bare int.
* record.c (get_insn_history_modifiers, cmd_record_insn_history):
Use gdb_disassembly_flags instead of bare int.
* target-debug.h (target_debug_print_gdb_disassembly_flags):
Define.
* target-delegates.c: Regenerate.
* target.c (target_insn_history, target_insn_history_from)
(target_insn_history_range): Use gdb_disassembly_flags instead of
bare int.
* target.h: Include "disasm.h".
(struct target_ops) <to_insn_history, to_insn_history_from,
to_insn_history_range>: Use gdb_disassembly_flags instead of bare
int.
(target_insn_history, target_insn_history_from)
(target_insn_history_range): Use gdb_disassembly_flags instead of
bare int.
2017-09-04 Simon Marchi <simon.marchi@ericsson.com>
* cli/cli-script.c (build_command_line): For if/while commands,

View File

@ -1121,7 +1121,8 @@ list_command (char *arg, int from_tty)
static void
print_disassembly (struct gdbarch *gdbarch, const char *name,
CORE_ADDR low, CORE_ADDR high, int flags)
CORE_ADDR low, CORE_ADDR high,
gdb_disassembly_flags flags)
{
#if defined(TUI)
if (!tui_is_window_visible (DISASSEM_WIN))
@ -1152,7 +1153,7 @@ print_disassembly (struct gdbarch *gdbarch, const char *name,
Print a disassembly of the current function according to FLAGS. */
static void
disassemble_current_function (int flags)
disassemble_current_function (gdb_disassembly_flags flags)
{
struct frame_info *frame;
struct gdbarch *gdbarch;
@ -1207,7 +1208,7 @@ disassemble_command (char *arg, int from_tty)
CORE_ADDR low, high;
const char *name;
CORE_ADDR pc;
int flags;
gdb_disassembly_flags flags;
const char *p;
p = arg;

View File

@ -191,7 +191,7 @@ compare_lines (const void *mle1p, const void *mle2p)
int
gdb_pretty_print_disassembler::pretty_print_insn (struct ui_out *uiout,
const struct disasm_insn *insn,
int flags)
gdb_disassembly_flags flags)
{
/* parts of the symbolic representation of the address */
int unmapped;
@ -295,7 +295,7 @@ gdb_pretty_print_disassembler::pretty_print_insn (struct ui_out *uiout,
static int
dump_insns (struct gdbarch *gdbarch,
struct ui_out *uiout, CORE_ADDR low, CORE_ADDR high,
int how_many, int flags, CORE_ADDR *end_pc)
int how_many, gdb_disassembly_flags flags, CORE_ADDR *end_pc)
{
struct disasm_insn insn;
int num_displayed = 0;
@ -338,7 +338,7 @@ do_mixed_source_and_assembly_deprecated
(struct gdbarch *gdbarch, struct ui_out *uiout,
struct symtab *symtab,
CORE_ADDR low, CORE_ADDR high,
int how_many, int flags)
int how_many, gdb_disassembly_flags flags)
{
int newlines = 0;
int nlines;
@ -498,7 +498,7 @@ do_mixed_source_and_assembly (struct gdbarch *gdbarch,
struct ui_out *uiout,
struct symtab *main_symtab,
CORE_ADDR low, CORE_ADDR high,
int how_many, int flags)
int how_many, gdb_disassembly_flags flags)
{
const struct linetable_entry *le, *first_le;
int i, nlines;
@ -730,7 +730,7 @@ do_mixed_source_and_assembly (struct gdbarch *gdbarch,
static void
do_assembly_only (struct gdbarch *gdbarch, struct ui_out *uiout,
CORE_ADDR low, CORE_ADDR high,
int how_many, int flags)
int how_many, gdb_disassembly_flags flags)
{
ui_out_emit_list list_emitter (uiout, "asm_insns");
@ -803,7 +803,7 @@ gdb_disassembler::print_insn (CORE_ADDR memaddr,
void
gdb_disassembly (struct gdbarch *gdbarch, struct ui_out *uiout,
int flags, int how_many,
gdb_disassembly_flags flags, int how_many,
CORE_ADDR low, CORE_ADDR high)
{
struct symtab *symtab;

View File

@ -20,14 +20,19 @@
#define DISASM_H
#include "dis-asm.h"
#include "common/enum-flags.h"
#define DISASSEMBLY_SOURCE_DEPRECATED (0x1 << 0)
#define DISASSEMBLY_RAW_INSN (0x1 << 1)
#define DISASSEMBLY_OMIT_FNAME (0x1 << 2)
#define DISASSEMBLY_FILENAME (0x1 << 3)
#define DISASSEMBLY_OMIT_PC (0x1 << 4)
#define DISASSEMBLY_SOURCE (0x1 << 5)
#define DISASSEMBLY_SPECULATIVE (0x1 << 6)
enum gdb_disassembly_flag
{
DISASSEMBLY_SOURCE_DEPRECATED = (0x1 << 0),
DISASSEMBLY_RAW_INSN = (0x1 << 1),
DISASSEMBLY_OMIT_FNAME = (0x1 << 2),
DISASSEMBLY_FILENAME = (0x1 << 3),
DISASSEMBLY_OMIT_PC = (0x1 << 4),
DISASSEMBLY_SOURCE = (0x1 << 5),
DISASSEMBLY_SPECULATIVE = (0x1 << 6),
};
DEF_ENUM_FLAGS_TYPE (enum gdb_disassembly_flag, gdb_disassembly_flags);
struct gdbarch;
struct ui_out;
@ -87,7 +92,7 @@ struct disasm_insn
};
extern void gdb_disassembly (struct gdbarch *gdbarch, struct ui_out *uiout,
int flags, int how_many,
gdb_disassembly_flags flags, int how_many,
CORE_ADDR low, CORE_ADDR high);
/* Print the instruction at address MEMADDR in debugged memory,
@ -109,7 +114,7 @@ public:
/* Prints the instruction INSN into UIOUT and returns the length of
the printed instruction in bytes. */
int pretty_print_insn (struct ui_out *uiout, const struct disasm_insn *insn,
int flags);
gdb_disassembly_flags flags);
private:
/* Returns the architecture used for disassembling. */

View File

@ -57,7 +57,8 @@ mi_cmd_disassemble (const char *command, char **argv, int argc)
struct ui_out *uiout = current_uiout;
CORE_ADDR start;
int mode, disasm_flags;
int mode;
gdb_disassembly_flags disasm_flags;
struct symtab *s;
/* Which options have we processed ... */

View File

@ -630,15 +630,16 @@ static void
btrace_insn_history (struct ui_out *uiout,
const struct btrace_thread_info *btinfo,
const struct btrace_insn_iterator *begin,
const struct btrace_insn_iterator *end, int flags)
const struct btrace_insn_iterator *end,
gdb_disassembly_flags flags)
{
struct cleanup *cleanups, *ui_item_chain;
struct gdbarch *gdbarch;
struct btrace_insn_iterator it;
struct btrace_line_range last_lines;
DEBUG ("itrace (0x%x): [%u; %u)", flags, btrace_insn_number (begin),
btrace_insn_number (end));
DEBUG ("itrace (0x%x): [%u; %u)", (unsigned) flags,
btrace_insn_number (begin), btrace_insn_number (end));
flags |= DISASSEMBLY_SPECULATIVE;
@ -720,7 +721,8 @@ btrace_insn_history (struct ui_out *uiout,
/* The to_insn_history method of target record-btrace. */
static void
record_btrace_insn_history (struct target_ops *self, int size, int flags)
record_btrace_insn_history (struct target_ops *self, int size,
gdb_disassembly_flags flags)
{
struct btrace_thread_info *btinfo;
struct btrace_insn_history *history;
@ -740,7 +742,7 @@ record_btrace_insn_history (struct target_ops *self, int size, int flags)
{
struct btrace_insn_iterator *replay;
DEBUG ("insn-history (0x%x): %d", flags, size);
DEBUG ("insn-history (0x%x): %d", (unsigned) flags, size);
/* If we're replaying, we start at the replay position. Otherwise, we
start at the tail of the trace. */
@ -772,7 +774,7 @@ record_btrace_insn_history (struct target_ops *self, int size, int flags)
begin = history->begin;
end = history->end;
DEBUG ("insn-history (0x%x): %d, prev: [%u; %u)", flags, size,
DEBUG ("insn-history (0x%x): %d, prev: [%u; %u)", (unsigned) flags, size,
btrace_insn_number (&begin), btrace_insn_number (&end));
if (size < 0)
@ -804,7 +806,8 @@ record_btrace_insn_history (struct target_ops *self, int size, int flags)
static void
record_btrace_insn_history_range (struct target_ops *self,
ULONGEST from, ULONGEST to, int flags)
ULONGEST from, ULONGEST to,
gdb_disassembly_flags flags)
{
struct btrace_thread_info *btinfo;
struct btrace_insn_history *history;
@ -818,7 +821,7 @@ record_btrace_insn_history_range (struct target_ops *self,
low = from;
high = to;
DEBUG ("insn-history (0x%x): [%u; %u)", flags, low, high);
DEBUG ("insn-history (0x%x): [%u; %u)", (unsigned) flags, low, high);
/* Check for wrap-arounds. */
if (low != from || high != to)
@ -853,7 +856,8 @@ record_btrace_insn_history_range (struct target_ops *self,
static void
record_btrace_insn_history_from (struct target_ops *self,
ULONGEST from, int size, int flags)
ULONGEST from, int size,
gdb_disassembly_flags flags)
{
ULONGEST begin, end, context;

View File

@ -470,10 +470,10 @@ no_chunk (char *arg)
/* Read instruction-history modifiers from an argument string. */
static int
static gdb_disassembly_flags
get_insn_history_modifiers (char **arg)
{
int modifiers;
gdb_disassembly_flags modifiers;
char *args;
modifiers = 0;
@ -551,13 +551,11 @@ command_size_to_target_size (unsigned int size)
static void
cmd_record_insn_history (char *arg, int from_tty)
{
int flags, size;
require_record_target ();
flags = get_insn_history_modifiers (&arg);
gdb_disassembly_flags flags = get_insn_history_modifiers (&arg);
size = command_size_to_target_size (record_insn_history_size);
int size = command_size_to_target_size (record_insn_history_size);
if (arg == NULL || *arg == 0 || strcmp (arg, "+") == 0)
target_insn_history (size, flags);

View File

@ -162,6 +162,8 @@
target_debug_do_print (host_address_to_string (X))
#define target_debug_print_enum_remove_bp_reason(X) \
target_debug_do_print (plongest (X))
#define target_debug_print_gdb_disassembly_flags(X) \
target_debug_do_print (plongest (X))
static void
target_debug_print_struct_target_waitstatus_p (struct target_waitstatus *status)

View File

@ -3854,20 +3854,20 @@ debug_goto_record (struct target_ops *self, ULONGEST arg1)
}
static void
delegate_insn_history (struct target_ops *self, int arg1, int arg2)
delegate_insn_history (struct target_ops *self, int arg1, gdb_disassembly_flags arg2)
{
self = self->beneath;
self->to_insn_history (self, arg1, arg2);
}
static void
tdefault_insn_history (struct target_ops *self, int arg1, int arg2)
tdefault_insn_history (struct target_ops *self, int arg1, gdb_disassembly_flags arg2)
{
tcomplain ();
}
static void
debug_insn_history (struct target_ops *self, int arg1, int arg2)
debug_insn_history (struct target_ops *self, int arg1, gdb_disassembly_flags arg2)
{
fprintf_unfiltered (gdb_stdlog, "-> %s->to_insn_history (...)\n", debug_target.to_shortname);
debug_target.to_insn_history (&debug_target, arg1, arg2);
@ -3876,25 +3876,25 @@ debug_insn_history (struct target_ops *self, int arg1, int arg2)
fputs_unfiltered (", ", gdb_stdlog);
target_debug_print_int (arg1);
fputs_unfiltered (", ", gdb_stdlog);
target_debug_print_int (arg2);
target_debug_print_gdb_disassembly_flags (arg2);
fputs_unfiltered (")\n", gdb_stdlog);
}
static void
delegate_insn_history_from (struct target_ops *self, ULONGEST arg1, int arg2, int arg3)
delegate_insn_history_from (struct target_ops *self, ULONGEST arg1, int arg2, gdb_disassembly_flags arg3)
{
self = self->beneath;
self->to_insn_history_from (self, arg1, arg2, arg3);
}
static void
tdefault_insn_history_from (struct target_ops *self, ULONGEST arg1, int arg2, int arg3)
tdefault_insn_history_from (struct target_ops *self, ULONGEST arg1, int arg2, gdb_disassembly_flags arg3)
{
tcomplain ();
}
static void
debug_insn_history_from (struct target_ops *self, ULONGEST arg1, int arg2, int arg3)
debug_insn_history_from (struct target_ops *self, ULONGEST arg1, int arg2, gdb_disassembly_flags arg3)
{
fprintf_unfiltered (gdb_stdlog, "-> %s->to_insn_history_from (...)\n", debug_target.to_shortname);
debug_target.to_insn_history_from (&debug_target, arg1, arg2, arg3);
@ -3905,25 +3905,25 @@ debug_insn_history_from (struct target_ops *self, ULONGEST arg1, int arg2, int a
fputs_unfiltered (", ", gdb_stdlog);
target_debug_print_int (arg2);
fputs_unfiltered (", ", gdb_stdlog);
target_debug_print_int (arg3);
target_debug_print_gdb_disassembly_flags (arg3);
fputs_unfiltered (")\n", gdb_stdlog);
}
static void
delegate_insn_history_range (struct target_ops *self, ULONGEST arg1, ULONGEST arg2, int arg3)
delegate_insn_history_range (struct target_ops *self, ULONGEST arg1, ULONGEST arg2, gdb_disassembly_flags arg3)
{
self = self->beneath;
self->to_insn_history_range (self, arg1, arg2, arg3);
}
static void
tdefault_insn_history_range (struct target_ops *self, ULONGEST arg1, ULONGEST arg2, int arg3)
tdefault_insn_history_range (struct target_ops *self, ULONGEST arg1, ULONGEST arg2, gdb_disassembly_flags arg3)
{
tcomplain ();
}
static void
debug_insn_history_range (struct target_ops *self, ULONGEST arg1, ULONGEST arg2, int arg3)
debug_insn_history_range (struct target_ops *self, ULONGEST arg1, ULONGEST arg2, gdb_disassembly_flags arg3)
{
fprintf_unfiltered (gdb_stdlog, "-> %s->to_insn_history_range (...)\n", debug_target.to_shortname);
debug_target.to_insn_history_range (&debug_target, arg1, arg2, arg3);
@ -3934,7 +3934,7 @@ debug_insn_history_range (struct target_ops *self, ULONGEST arg1, ULONGEST arg2,
fputs_unfiltered (", ", gdb_stdlog);
target_debug_print_ULONGEST (arg2);
fputs_unfiltered (", ", gdb_stdlog);
target_debug_print_int (arg3);
target_debug_print_gdb_disassembly_flags (arg3);
fputs_unfiltered (")\n", gdb_stdlog);
}

View File

@ -3794,7 +3794,7 @@ target_goto_record (ULONGEST insn)
/* See target.h. */
void
target_insn_history (int size, int flags)
target_insn_history (int size, gdb_disassembly_flags flags)
{
current_target.to_insn_history (&current_target, size, flags);
}
@ -3802,7 +3802,8 @@ target_insn_history (int size, int flags)
/* See target.h. */
void
target_insn_history_from (ULONGEST from, int size, int flags)
target_insn_history_from (ULONGEST from, int size,
gdb_disassembly_flags flags)
{
current_target.to_insn_history_from (&current_target, from, size, flags);
}
@ -3810,7 +3811,8 @@ target_insn_history_from (ULONGEST from, int size, int flags)
/* See target.h. */
void
target_insn_history_range (ULONGEST begin, ULONGEST end, int flags)
target_insn_history_range (ULONGEST begin, ULONGEST end,
gdb_disassembly_flags flags)
{
current_target.to_insn_history_range (&current_target, begin, end, flags);
}

View File

@ -74,6 +74,7 @@ struct inferior;
#include "btrace.h"
#include "record.h"
#include "command.h"
#include "disasm.h"
#include "break-common.h" /* For enum target_hw_bp_type. */
@ -1200,7 +1201,8 @@ struct target_ops
the current position.
If SIZE < 0, disassemble abs (SIZE) preceding instructions; otherwise,
disassemble SIZE succeeding instructions. */
void (*to_insn_history) (struct target_ops *, int size, int flags)
void (*to_insn_history) (struct target_ops *, int size,
gdb_disassembly_flags flags)
TARGET_DEFAULT_NORETURN (tcomplain ());
/* Disassemble SIZE instructions in the recorded execution trace around
@ -1208,13 +1210,15 @@ struct target_ops
If SIZE < 0, disassemble abs (SIZE) instructions before FROM; otherwise,
disassemble SIZE instructions after FROM. */
void (*to_insn_history_from) (struct target_ops *,
ULONGEST from, int size, int flags)
ULONGEST from, int size,
gdb_disassembly_flags flags)
TARGET_DEFAULT_NORETURN (tcomplain ());
/* Disassemble a section of the recorded execution trace from instruction
BEGIN (inclusive) to instruction END (inclusive). */
void (*to_insn_history_range) (struct target_ops *,
ULONGEST begin, ULONGEST end, int flags)
ULONGEST begin, ULONGEST end,
gdb_disassembly_flags flags)
TARGET_DEFAULT_NORETURN (tcomplain ());
/* Print a function trace of the recorded execution trace.
@ -2509,13 +2513,15 @@ extern void target_goto_record_end (void);
extern void target_goto_record (ULONGEST insn);
/* See to_insn_history. */
extern void target_insn_history (int size, int flags);
extern void target_insn_history (int size, gdb_disassembly_flags flags);
/* See to_insn_history_from. */
extern void target_insn_history_from (ULONGEST from, int size, int flags);
extern void target_insn_history_from (ULONGEST from, int size,
gdb_disassembly_flags flags);
/* See to_insn_history_range. */
extern void target_insn_history_range (ULONGEST begin, ULONGEST end, int flags);
extern void target_insn_history_range (ULONGEST begin, ULONGEST end,
gdb_disassembly_flags flags);
/* See to_call_history. */
extern void target_call_history (int size, int flags);