Change build_address_symbolic to return std::string

This changes two out parameters of build_address_symbolic to be
std::string, and updates the callers.  This allows removing some
cleanups.

This patch also moves the declaration of build_address_symbolic out of
defs.h.  I think that many things in defs.h should be elsewhere
instead.  In this case, I moved the declaration to valprint.h, becuase
there is no "printcmd.h" -- but perhaps it would be better to
introduce that instead.

Tested by the buildbot.

gdb/ChangeLog
2018-06-07  Tom Tromey  <tom@tromey.com>

	* valprint.h (build_address_symbolic): Declare.
	* printcmd.c (print_address_symbolic): Update.
	(build_address_symbolic): Change "name" and "filename" to
	std::string.
	* disasm.c (gdb_pretty_print_disassembler::pretty_print_insn):
	Update.
	* defs.h (build_address_symbolic): Remove declaration.
This commit is contained in:
Tom Tromey 2018-05-05 10:24:54 -06:00
parent 2a9b2c1abe
commit c7110220be
5 changed files with 41 additions and 42 deletions

View File

@ -1,3 +1,13 @@
2018-06-07 Tom Tromey <tom@tromey.com>
* valprint.h (build_address_symbolic): Declare.
* printcmd.c (print_address_symbolic): Update.
(build_address_symbolic): Change "name" and "filename" to
std::string.
* disasm.c (gdb_pretty_print_disassembler::pretty_print_insn):
Update.
* defs.h (build_address_symbolic): Remove declaration.
2018-06-07 Alan Hayward <alan.hayward@arm.com>
* aarch64-tdep.c (AARCH64_SVE_V0_REGNUM): Add define.

View File

@ -327,15 +327,6 @@ extern int print_address_symbolic (struct gdbarch *, CORE_ADDR,
struct ui_file *, int,
const char *);
extern int build_address_symbolic (struct gdbarch *,
CORE_ADDR addr,
int do_demangle,
char **name,
int *offset,
char **filename,
int *line,
int *unmapped);
extern void print_address (struct gdbarch *, CORE_ADDR, struct ui_file *);
extern const char *pc_prefix (CORE_ADDR);

View File

@ -30,6 +30,7 @@
#include "safe-ctype.h"
#include <algorithm>
#include "common/gdb_optional.h"
#include "valprint.h"
/* Disassemble functions.
FIXME: We should get rid of all the duplicate code in gdb that does
@ -199,8 +200,6 @@ gdb_pretty_print_disassembler::pretty_print_insn (struct ui_out *uiout,
int offset;
int line;
int size;
char *filename = NULL;
char *name = NULL;
CORE_ADDR pc;
struct gdbarch *gdbarch = arch ();
@ -237,6 +236,7 @@ gdb_pretty_print_disassembler::pretty_print_insn (struct ui_out *uiout,
uiout->text (pc_prefix (pc));
uiout->field_core_addr ("address", gdbarch, pc);
std::string name, filename;
if (!build_address_symbolic (gdbarch, pc, 0, &name, &offset, &filename,
&line, &unmapped))
{
@ -244,7 +244,7 @@ gdb_pretty_print_disassembler::pretty_print_insn (struct ui_out *uiout,
the future. */
uiout->text (" <");
if ((flags & DISASSEMBLY_OMIT_FNAME) == 0)
uiout->field_string ("func-name", name);
uiout->field_string ("func-name", name.c_str ());
uiout->text ("+");
uiout->field_int ("offset", offset);
uiout->text (">:\t");
@ -252,11 +252,6 @@ gdb_pretty_print_disassembler::pretty_print_insn (struct ui_out *uiout,
else
uiout->text (":\t");
if (filename != NULL)
xfree (filename);
if (name != NULL)
xfree (name);
m_insn_stb.clear ();
if (flags & DISASSEMBLY_RAW_INSN)

View File

@ -520,63 +520,50 @@ print_address_symbolic (struct gdbarch *gdbarch, CORE_ADDR addr,
struct ui_file *stream,
int do_demangle, const char *leadin)
{
char *name = NULL;
char *filename = NULL;
std::string name, filename;
int unmapped = 0;
int offset = 0;
int line = 0;
/* Throw away both name and filename. */
struct cleanup *cleanup_chain = make_cleanup (free_current_contents, &name);
make_cleanup (free_current_contents, &filename);
if (build_address_symbolic (gdbarch, addr, do_demangle, &name, &offset,
&filename, &line, &unmapped))
{
do_cleanups (cleanup_chain);
return 0;
}
return 0;
fputs_filtered (leadin, stream);
if (unmapped)
fputs_filtered ("<*", stream);
else
fputs_filtered ("<", stream);
fputs_filtered (name, stream);
fputs_filtered (name.c_str (), stream);
if (offset != 0)
fprintf_filtered (stream, "+%u", (unsigned int) offset);
/* Append source filename and line number if desired. Give specific
line # of this addr, if we have it; else line # of the nearest symbol. */
if (print_symbol_filename && filename != NULL)
if (print_symbol_filename && !filename.empty ())
{
if (line != -1)
fprintf_filtered (stream, " at %s:%d", filename, line);
fprintf_filtered (stream, " at %s:%d", filename.c_str (), line);
else
fprintf_filtered (stream, " in %s", filename);
fprintf_filtered (stream, " in %s", filename.c_str ());
}
if (unmapped)
fputs_filtered ("*>", stream);
else
fputs_filtered (">", stream);
do_cleanups (cleanup_chain);
return 1;
}
/* Given an address ADDR return all the elements needed to print the
address in a symbolic form. NAME can be mangled or not depending
on DO_DEMANGLE (and also on the asm_demangle global variable,
manipulated via ''set print asm-demangle''). Return 0 in case of
success, when all the info in the OUT paramters is valid. Return 1
otherwise. */
/* See valprint.h. */
int
build_address_symbolic (struct gdbarch *gdbarch,
CORE_ADDR addr, /* IN */
int do_demangle, /* IN */
char **name, /* OUT */
std::string *name, /* OUT */
int *offset, /* OUT */
char **filename, /* OUT */
std::string *filename, /* OUT */
int *line, /* OUT */
int *unmapped) /* OUT */
{
@ -678,7 +665,7 @@ build_address_symbolic (struct gdbarch *gdbarch,
*offset = addr - name_location;
*name = xstrdup (name_temp);
*name = name_temp;
if (print_symbol_filename)
{
@ -688,7 +675,7 @@ build_address_symbolic (struct gdbarch *gdbarch,
if (sal.symtab)
{
*filename = xstrdup (symtab_to_filename_for_display (sal.symtab));
*filename = symtab_to_filename_for_display (sal.symtab);
*line = sal.line;
}
}

View File

@ -229,4 +229,20 @@ extern void print_command_parse_format (const char **expp, const char *cmdname,
struct format_data *fmtp);
extern void print_value (struct value *val, const struct format_data *fmtp);
/* Given an address ADDR return all the elements needed to print the
address in a symbolic form. NAME can be mangled or not depending
on DO_DEMANGLE (and also on the asm_demangle global variable,
manipulated via ''set print asm-demangle''). Return 0 in case of
success, when all the info in the OUT paramters is valid. Return 1
otherwise. */
extern int build_address_symbolic (struct gdbarch *,
CORE_ADDR addr,
int do_demangle,
std::string *name,
int *offset,
std::string *filename,
int *line,
int *unmapped);
#endif