diff options
author | Tom Tromey <tom@tromey.com> | 2023-09-03 16:28:54 -0600 |
---|---|---|
committer | Tom Tromey <tom@tromey.com> | 2024-01-28 10:58:16 -0700 |
commit | 6771fc6f1d9d1fada270fd617a71c8b1ac1efc84 (patch) | |
tree | fe5647befab068ea739474c85cd6ddd9918282b7 | |
parent | d4f48c1e26a550a8b3ba8312268b706454b00ee2 (diff) | |
download | gdb-6771fc6f1d9d1fada270fd617a71c8b1ac1efc84.zip gdb-6771fc6f1d9d1fada270fd617a71c8b1ac1efc84.tar.gz gdb-6771fc6f1d9d1fada270fd617a71c8b1ac1efc84.tar.bz2 |
Use a .def file for domain_enum
Future patches will change and reuse the names from domain_enum. This
patch makes this less error-prone by having a single point to define
these names, using the typical gdb ".def" file.
-rw-r--r-- | gdb/guile/scm-symbol.c | 18 | ||||
-rw-r--r-- | gdb/python/py-symbol.c | 21 | ||||
-rw-r--r-- | gdb/sym-domains.def | 47 | ||||
-rw-r--r-- | gdb/symtab.c | 10 | ||||
-rw-r--r-- | gdb/symtab.h | 31 |
5 files changed, 72 insertions, 55 deletions
diff --git a/gdb/guile/scm-symbol.c b/gdb/guile/scm-symbol.c index 801c3f1..bf5fe24 100644 --- a/gdb/guile/scm-symbol.c +++ b/gdb/guile/scm-symbol.c @@ -693,16 +693,18 @@ static const scheme_integer_constant symbol_integer_constants[] = X (LOC_OPTIMIZED_OUT), X (LOC_COMPUTED), X (LOC_REGPARM_ADDR), - - X (UNDEF_DOMAIN), - X (VAR_DOMAIN), - X (STRUCT_DOMAIN), - X (LABEL_DOMAIN), - X (VARIABLES_DOMAIN), - X (FUNCTIONS_DOMAIN), - X (TYPES_DOMAIN), #undef X +#define DOMAIN(X) \ + { "SYMBOL_" #X "_DOMAIN", X ## _DOMAIN }, +#include "sym-domains.def" +#undef DOMAIN + + /* These were never correct. */ + { "SYMBOL_VARIABLES_DOMAIN", VAR_DOMAIN }, + { "SYMBOL_FUNCTIONS_DOMAIN", VAR_DOMAIN }, + { "SYMBOL_TYPES_DOMAIN", VAR_DOMAIN }, + END_INTEGER_CONSTANTS }; diff --git a/gdb/python/py-symbol.c b/gdb/python/py-symbol.c index 82ea5c5..52a25b6 100644 --- a/gdb/python/py-symbol.c +++ b/gdb/python/py-symbol.c @@ -670,20 +670,15 @@ gdbpy_initialize_symbols (void) || PyModule_AddIntConstant (gdb_module, "SYMBOL_LOC_COMMON_BLOCK", LOC_COMMON_BLOCK) < 0 || PyModule_AddIntConstant (gdb_module, "SYMBOL_LOC_REGPARM_ADDR", - LOC_REGPARM_ADDR) < 0 - || PyModule_AddIntConstant (gdb_module, "SYMBOL_UNDEF_DOMAIN", - UNDEF_DOMAIN) < 0 - || PyModule_AddIntConstant (gdb_module, "SYMBOL_VAR_DOMAIN", - VAR_DOMAIN) < 0 - || PyModule_AddIntConstant (gdb_module, "SYMBOL_STRUCT_DOMAIN", - STRUCT_DOMAIN) < 0 - || PyModule_AddIntConstant (gdb_module, "SYMBOL_LABEL_DOMAIN", - LABEL_DOMAIN) < 0 - || PyModule_AddIntConstant (gdb_module, "SYMBOL_MODULE_DOMAIN", - MODULE_DOMAIN) < 0 - || PyModule_AddIntConstant (gdb_module, "SYMBOL_COMMON_BLOCK_DOMAIN", - COMMON_BLOCK_DOMAIN) < 0) + LOC_REGPARM_ADDR) < 0) + return -1; + +#define DOMAIN(X) \ + if (PyModule_AddIntConstant (gdb_module, "SYMBOL_" #X "_DOMAIN", \ + X ## _DOMAIN) < 0) \ return -1; +#include "sym-domains.def" +#undef DOMAIN /* These remain defined for compatibility, but as they were never correct, they are no longer documented. Eventually we can remove diff --git a/gdb/sym-domains.def b/gdb/sym-domains.def new file mode 100644 index 0000000..251c66f --- /dev/null +++ b/gdb/sym-domains.def @@ -0,0 +1,47 @@ +/* Symbol domains -*- c++ -*- + + Copyright (C) 2023 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/>. */ + +/* UNDEF_DOMAIN is used when a domain has not been discovered or + none of the following apply. This usually indicates an error either + in the symbol information or in gdb's handling of symbols. */ + +DOMAIN (UNDEF) + +/* VAR_DOMAIN is the usual domain. In C, this contains variables, + function names, typedef names and enum type values. */ + +DOMAIN (VAR) + +/* STRUCT_DOMAIN is used in C to hold struct, union and enum type names. + Thus, if `struct foo' is used in a C program, it produces a symbol named + `foo' in the STRUCT_DOMAIN. */ + +DOMAIN (STRUCT) + +/* MODULE_DOMAIN is used in Fortran to hold module type names. */ + +DOMAIN (MODULE) + +/* LABEL_DOMAIN may be used for names of labels (for gotos). */ + +DOMAIN (LABEL) + +/* Fortran common blocks. Their naming must be separate from VAR_DOMAIN. + They also always use LOC_COMMON_BLOCK. */ +DOMAIN (COMMON_BLOCK) diff --git a/gdb/symtab.c b/gdb/symtab.c index 2020210..b1deb9d 100644 --- a/gdb/symtab.c +++ b/gdb/symtab.c @@ -305,12 +305,10 @@ domain_name (domain_enum e) { switch (e) { - case UNDEF_DOMAIN: return "UNDEF_DOMAIN"; - case VAR_DOMAIN: return "VAR_DOMAIN"; - case STRUCT_DOMAIN: return "STRUCT_DOMAIN"; - case MODULE_DOMAIN: return "MODULE_DOMAIN"; - case LABEL_DOMAIN: return "LABEL_DOMAIN"; - case COMMON_BLOCK_DOMAIN: return "COMMON_BLOCK_DOMAIN"; +#define DOMAIN(X) \ + case X ## _DOMAIN: return #X "_DOMAIN"; +#include "sym-domains.def" +#undef DOMAIN default: gdb_assert_not_reached ("bad domain_enum"); } } diff --git a/gdb/symtab.h b/gdb/symtab.h index 381a828..7465f7b 100644 --- a/gdb/symtab.h +++ b/gdb/symtab.h @@ -894,34 +894,9 @@ private: enum domain_enum { - /* UNDEF_DOMAIN is used when a domain has not been discovered or - none of the following apply. This usually indicates an error either - in the symbol information or in gdb's handling of symbols. */ - - UNDEF_DOMAIN, - - /* VAR_DOMAIN is the usual domain. In C, this contains variables, - function names, typedef names and enum type values. */ - - VAR_DOMAIN, - - /* STRUCT_DOMAIN is used in C to hold struct, union and enum type names. - Thus, if `struct foo' is used in a C program, it produces a symbol named - `foo' in the STRUCT_DOMAIN. */ - - STRUCT_DOMAIN, - - /* MODULE_DOMAIN is used in Fortran to hold module type names. */ - - MODULE_DOMAIN, - - /* LABEL_DOMAIN may be used for names of labels (for gotos). */ - - LABEL_DOMAIN, - - /* Fortran common blocks. Their naming must be separate from VAR_DOMAIN. - They also always use LOC_COMMON_BLOCK. */ - COMMON_BLOCK_DOMAIN, +#define DOMAIN(X) X ## _DOMAIN, +#include "sym-domains.def" +#undef DOMAIN }; /* The number of bits in a symbol used to represent the domain. */ |