1/* DWARF stringify code
2
3   Copyright (C) 1994-2020 Free Software Foundation, Inc.
4
5   Adapted by Gary Funck (gary@intrepid.com), Intrepid Technology,
6   Inc.  with support from Florida State University (under contract
7   with the Ada Joint Program Office), and Silicon Graphics, Inc.
8   Initial contribution by Brent Benson, Harris Computer Systems, Inc.,
9   based on Fred Fish's (Cygnus Support) implementation of DWARF 1
10   support.
11
12   This file is part of GDB.
13
14   This program is free software; you can redistribute it and/or modify
15   it under the terms of the GNU General Public License as published by
16   the Free Software Foundation; either version 3 of the License, or
17   (at your option) any later version.
18
19   This program is distributed in the hope that it will be useful,
20   but WITHOUT ANY WARRANTY; without even the implied warranty of
21   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
22   GNU General Public License for more details.
23
24   You should have received a copy of the GNU General Public License
25   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
26
27#include "defs.h"
28#include "dwarf2.h"
29#include "dwarf2/stringify.h"
30
31/* A convenience function that returns an "unknown" DWARF name,
32   including the value of V.  STR is the name of the entity being
33   printed, e.g., "TAG".  */
34
35static const char *
36dwarf_unknown (const char *str, unsigned v)
37{
38  char *cell = get_print_cell ();
39  xsnprintf (cell, PRINT_CELL_SIZE, "DW_%s_<unknown: %u>", str, v);
40  return cell;
41}
42
43/* See stringify.h.  */
44
45const char *
46dwarf_tag_name (unsigned tag)
47{
48  const char *name = get_DW_TAG_name (tag);
49
50  if (name == NULL)
51    return dwarf_unknown ("TAG", tag);
52
53  return name;
54}
55
56/* See stringify.h.  */
57
58const char *
59dwarf_attr_name (unsigned attr)
60{
61  const char *name;
62
63#ifdef MIPS /* collides with DW_AT_HP_block_index */
64  if (attr == DW_AT_MIPS_fde)
65    return "DW_AT_MIPS_fde";
66#else
67  if (attr == DW_AT_HP_block_index)
68    return "DW_AT_HP_block_index";
69#endif
70
71  name = get_DW_AT_name (attr);
72
73  if (name == NULL)
74    return dwarf_unknown ("AT", attr);
75
76  return name;
77}
78
79/* See stringify.h.  */
80
81const char *
82dwarf_form_name (unsigned form)
83{
84  const char *name = get_DW_FORM_name (form);
85
86  if (name == NULL)
87    return dwarf_unknown ("FORM", form);
88
89  return name;
90}
91
92/* See stringify.h.  */
93
94const char *
95dwarf_bool_name (unsigned mybool)
96{
97  if (mybool)
98    return "TRUE";
99  else
100    return "FALSE";
101}
102
103/* See stringify.h.  */
104
105const char *
106dwarf_type_encoding_name (unsigned enc)
107{
108  const char *name = get_DW_ATE_name (enc);
109
110  if (name == NULL)
111    return dwarf_unknown ("ATE", enc);
112
113  return name;
114}
115