Move DWARF-constant stringifying code to new file

This moves the DWARF debugging functions that stringify various
constants to a new file, dwarf2/stringify.c.

gdb/ChangeLog
2020-03-26  Tom Tromey  <tom@tromey.com>

	* dwarf2/read.c (dwarf_unit_type_name, dwarf_tag_name)
	(dwarf_attr_name, dwarf_form_name, dwarf_bool_name)
	(dwarf_type_encoding_name): Move to stringify.c.
	* Makefile.in (COMMON_SFILES): Add dwarf2/stringify.c.
	* dwarf2/stringify.c: New file.
	* dwarf2/stringify.h: New file.
This commit is contained in:
Tom Tromey 2020-03-26 09:28:08 -06:00
parent eeb647814f
commit 2b2558bfac
5 changed files with 163 additions and 93 deletions

View File

@ -1,3 +1,12 @@
2020-03-26 Tom Tromey <tom@tromey.com>
* dwarf2/read.c (dwarf_unit_type_name, dwarf_tag_name)
(dwarf_attr_name, dwarf_form_name, dwarf_bool_name)
(dwarf_type_encoding_name): Move to stringify.c.
* Makefile.in (COMMON_SFILES): Add dwarf2/stringify.c.
* dwarf2/stringify.c: New file.
* dwarf2/stringify.h: New file.
2020-03-26 Tom Tromey <tom@tromey.com>
* dwarf2/die.h (struct die_info) <addr_base, ranges_base>:

View File

@ -1016,6 +1016,7 @@ COMMON_SFILES = \
dwarf2/macro.c \
dwarf2/read.c \
dwarf2/section.c \
dwarf2/stringify.c \
eval.c \
event-loop.c \
event-top.c \

View File

@ -40,6 +40,7 @@
#include "dwarf2/dwz.h"
#include "dwarf2/macro.h"
#include "dwarf2/die.h"
#include "dwarf2/stringify.h"
#include "bfd.h"
#include "elf-bfd.h"
#include "symtab.h"
@ -1406,16 +1407,6 @@ static const char *dwarf2_physname (const char *name, struct die_info *die,
static struct die_info *dwarf2_extension (struct die_info *die,
struct dwarf2_cu **);
static const char *dwarf_tag_name (unsigned int);
static const char *dwarf_attr_name (unsigned int);
static const char *dwarf_form_name (unsigned int);
static const char *dwarf_bool_name (unsigned int);
static const char *dwarf_type_encoding_name (unsigned int);
static void dump_die_shallow (struct ui_file *, int indent, struct die_info *);
static void dump_die_for_error (struct die_info *);
@ -21334,89 +21325,6 @@ dwarf2_extension (struct die_info *die, struct dwarf2_cu **ext_cu)
return follow_die_ref (die, attr, ext_cu);
}
/* A convenience function that returns an "unknown" DWARF name,
including the value of V. STR is the name of the entity being
printed, e.g., "TAG". */
static const char *
dwarf_unknown (const char *str, unsigned v)
{
char *cell = get_print_cell ();
xsnprintf (cell, PRINT_CELL_SIZE, "DW_%s_<unknown: %u>", str, v);
return cell;
}
/* Convert a DIE tag into its string name. */
static const char *
dwarf_tag_name (unsigned tag)
{
const char *name = get_DW_TAG_name (tag);
if (name == NULL)
return dwarf_unknown ("TAG", tag);
return name;
}
/* Convert a DWARF attribute code into its string name. */
static const char *
dwarf_attr_name (unsigned attr)
{
const char *name;
#ifdef MIPS /* collides with DW_AT_HP_block_index */
if (attr == DW_AT_MIPS_fde)
return "DW_AT_MIPS_fde";
#else
if (attr == DW_AT_HP_block_index)
return "DW_AT_HP_block_index";
#endif
name = get_DW_AT_name (attr);
if (name == NULL)
return dwarf_unknown ("AT", attr);
return name;
}
/* Convert a DWARF value form code into its string name. */
static const char *
dwarf_form_name (unsigned form)
{
const char *name = get_DW_FORM_name (form);
if (name == NULL)
return dwarf_unknown ("FORM", form);
return name;
}
static const char *
dwarf_bool_name (unsigned mybool)
{
if (mybool)
return "TRUE";
else
return "FALSE";
}
/* Convert a DWARF type code into its string name. */
static const char *
dwarf_type_encoding_name (unsigned enc)
{
const char *name = get_DW_ATE_name (enc);
if (name == NULL)
return dwarf_unknown ("ATE", enc);
return name;
}
static void
dump_die_shallow (struct ui_file *f, int indent, struct die_info *die)
{

114
gdb/dwarf2/stringify.c Normal file
View File

@ -0,0 +1,114 @@
/* DWARF stringify code
Copyright (C) 1994-2020 Free Software Foundation, Inc.
Adapted by Gary Funck (gary@intrepid.com), Intrepid Technology,
Inc. with support from Florida State University (under contract
with the Ada Joint Program Office), and Silicon Graphics, Inc.
Initial contribution by Brent Benson, Harris Computer Systems, Inc.,
based on Fred Fish's (Cygnus Support) implementation of DWARF 1
support.
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/>. */
#include "defs.h"
#include "dwarf2.h"
#include "dwarf2/stringify.h"
/* A convenience function that returns an "unknown" DWARF name,
including the value of V. STR is the name of the entity being
printed, e.g., "TAG". */
static const char *
dwarf_unknown (const char *str, unsigned v)
{
char *cell = get_print_cell ();
xsnprintf (cell, PRINT_CELL_SIZE, "DW_%s_<unknown: %u>", str, v);
return cell;
}
/* See stringify.h. */
const char *
dwarf_tag_name (unsigned tag)
{
const char *name = get_DW_TAG_name (tag);
if (name == NULL)
return dwarf_unknown ("TAG", tag);
return name;
}
/* See stringify.h. */
const char *
dwarf_attr_name (unsigned attr)
{
const char *name;
#ifdef MIPS /* collides with DW_AT_HP_block_index */
if (attr == DW_AT_MIPS_fde)
return "DW_AT_MIPS_fde";
#else
if (attr == DW_AT_HP_block_index)
return "DW_AT_HP_block_index";
#endif
name = get_DW_AT_name (attr);
if (name == NULL)
return dwarf_unknown ("AT", attr);
return name;
}
/* See stringify.h. */
const char *
dwarf_form_name (unsigned form)
{
const char *name = get_DW_FORM_name (form);
if (name == NULL)
return dwarf_unknown ("FORM", form);
return name;
}
/* See stringify.h. */
const char *
dwarf_bool_name (unsigned mybool)
{
if (mybool)
return "TRUE";
else
return "FALSE";
}
/* See stringify.h. */
const char *
dwarf_type_encoding_name (unsigned enc)
{
const char *name = get_DW_ATE_name (enc);
if (name == NULL)
return dwarf_unknown ("ATE", enc);
return name;
}

38
gdb/dwarf2/stringify.h Normal file
View File

@ -0,0 +1,38 @@
/* DWARF stringify code
Copyright (C) 2003-2020 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 GDB_DWARF2_STRINGIFY_H
#define GDB_DWARF2_STRINGIFY_H
/* Convert a DIE tag into its string name. */
extern const char *dwarf_tag_name (unsigned tag);
/* Convert a DWARF attribute code into its string name. */
extern const char *dwarf_attr_name (unsigned attr);
/* Convert a DWARF value form code into its string name. */
extern const char *dwarf_form_name (unsigned form);
/* Convert a boolean to a string form. */
extern const char *dwarf_bool_name (unsigned mybool);
/* Convert a DWARF type code into its string name. */
extern const char *dwarf_type_encoding_name (unsigned enc);
#endif /* GDB_DWARF2_STRINGIFY_H */