From 6ad66f21fc6d839966abfb84738f8e992c7bb193 Mon Sep 17 00:00:00 2001 From: Simon Marchi Date: Tue, 13 Dec 2022 22:34:30 -0500 Subject: [PATCH] gdb: move compile_instance to compile/compile.h struct compile_instance needs to be visible to users, since we use std::unique. language.c and c-lang.c currently includes compile-internal.h for this reason, which kind of defeats the purpose of having an "internal" header file. Change-Id: Iedffe5f1173b3de7bdc1be533ee2a68e6f6c549f Reviewed-By: Bruno Larsen --- gdb/c-lang.c | 1 - gdb/c-lang.h | 1 + gdb/compile/compile-c.h | 1 + gdb/compile/compile-cplus.h | 1 + gdb/compile/compile-internal.h | 116 --------------------------------- gdb/compile/compile.h | 116 +++++++++++++++++++++++++++++++++ gdb/language.c | 1 - 7 files changed, 119 insertions(+), 118 deletions(-) diff --git a/gdb/c-lang.c b/gdb/c-lang.c index ef2272e9e6b..a6d912a7be7 100644 --- a/gdb/c-lang.c +++ b/gdb/c-lang.c @@ -36,7 +36,6 @@ #include #include "gdbcore.h" #include "gdbarch.h" -#include "compile/compile-internal.h" #include "c-exp.h" /* Given a C string type, STR_TYPE, return the corresponding target diff --git a/gdb/c-lang.h b/gdb/c-lang.h index 024a302b3f2..8a82606b6d0 100644 --- a/gdb/c-lang.h +++ b/gdb/c-lang.h @@ -26,6 +26,7 @@ struct language_arch_info; struct type_print_options; struct parser_state; +#include "compile/compile.h" #include "value.h" #include "macroexp.h" #include "gdbsupport/enum-flags.h" diff --git a/gdb/compile/compile-c.h b/gdb/compile/compile-c.h index a6362450133..f0477742c44 100644 --- a/gdb/compile/compile-c.h +++ b/gdb/compile/compile-c.h @@ -17,6 +17,7 @@ #ifndef COMPILE_COMPILE_C_H #define COMPILE_COMPILE_C_H +#include "compile/compile.h" #include "gdbsupport/enum-flags.h" #include "gcc-c-plugin.h" diff --git a/gdb/compile/compile-cplus.h b/gdb/compile/compile-cplus.h index 1954f7a105c..91f2e13e0bb 100644 --- a/gdb/compile/compile-cplus.h +++ b/gdb/compile/compile-cplus.h @@ -17,6 +17,7 @@ #ifndef COMPILE_COMPILE_CPLUS_H #define COMPILE_COMPILE_CPLUS_H +#include "compile/compile.h" #include "gdbsupport/enum-flags.h" #include "gcc-cp-plugin.h" #include "symtab.h" diff --git a/gdb/compile/compile-internal.h b/gdb/compile/compile-internal.h index c86d22bcf66..ecf7c11c120 100644 --- a/gdb/compile/compile-internal.h +++ b/gdb/compile/compile-internal.h @@ -24,122 +24,6 @@ extern bool compile_debug; -struct block; - -/* An object of this type holds state associated with a given - compilation job. */ - -class compile_instance -{ -public: - compile_instance (struct gcc_base_context *gcc_fe, const char *options); - - virtual ~compile_instance () - { - m_gcc_fe->ops->destroy (m_gcc_fe); - } - - /* Returns the GCC options to be passed during compilation. */ - const std::string &gcc_target_options () const - { - return m_gcc_target_options; - } - - /* Query the type cache for TYPE, returning the compiler's - type for it in RET. */ - bool get_cached_type (struct type *type, gcc_type *ret) const; - - /* Insert GCC_TYPE into the type cache for TYPE. - - It is ok for a given type to be inserted more than once, provided that - the exact same association is made each time. */ - void insert_type (struct type *type, gcc_type gcc_type); - - /* Associate SYMBOL with some error text. */ - void insert_symbol_error (const struct symbol *sym, const char *text); - - /* Emit the error message corresponding to SYM, if one exists, and - arrange for it not to be emitted again. */ - void error_symbol_once (const struct symbol *sym); - - /* These currently just forward to the underlying ops - vtable. */ - - /* Set the plug-in print callback. */ - void set_print_callback (void (*print_function) (void *, const char *), - void *datum); - - /* Return the plug-in's front-end version. */ - unsigned int version () const; - - /* Set the plug-in's verbosity level. Nop for GCC_FE_VERSION_0. */ - void set_verbose (int level); - - /* Set the plug-in driver program. Nop for GCC_FE_VERSION_0. */ - void set_driver_filename (const char *filename); - - /* Set the regular expression used to match the configury triplet - prefix to the compiler. Nop for GCC_FE_VERSION_0. */ - void set_triplet_regexp (const char *regexp); - - /* Set compilation arguments. REGEXP is only used for protocol - version GCC_FE_VERSION_0. */ - gdb::unique_xmalloc_ptr set_arguments (int argc, char **argv, - const char *regexp = NULL); - - /* Set the filename of the program to compile. Nop for GCC_FE_VERSION_0. */ - void set_source_file (const char *filename); - - /* Compile the previously specified source file to FILENAME. - VERBOSE_LEVEL is only used for protocol version GCC_FE_VERSION_0. */ - bool compile (const char *filename, int verbose_level = -1); - - /* Set the scope type for this compile. */ - void set_scope (enum compile_i_scope_types scope) - { - m_scope = scope; - } - - /* Return the scope type. */ - enum compile_i_scope_types scope () const - { - return m_scope; - } - - /* Set the block to be used for symbol searches. */ - void set_block (const struct block *block) - { - m_block = block; - } - - /* Return the search block. */ - const struct block *block () const - { - return m_block; - } - -protected: - - /* The GCC front end. */ - struct gcc_base_context *m_gcc_fe; - - /* The "scope" of this compilation. */ - enum compile_i_scope_types m_scope; - - /* The block in which an expression is being parsed. */ - const struct block *m_block; - - /* Specify "-std=gnu11", "-std=gnu++11" or similar. These options are put - after CU's DW_AT_producer compilation options to override them. */ - std::string m_gcc_target_options; - - /* Map from gdb types to gcc types. */ - htab_up m_type_map; - - /* Map from gdb symbols to gcc error messages to emit. */ - htab_up m_symbol_err_map; -}; - /* Define header and footers for different scopes. */ /* A simple scope just declares a function named "_gdb_expr", takes no diff --git a/gdb/compile/compile.h b/gdb/compile/compile.h index 7ce338f3704..a3b6a18fe20 100644 --- a/gdb/compile/compile.h +++ b/gdb/compile/compile.h @@ -18,6 +18,8 @@ #ifndef COMPILE_COMPILE_H #define COMPILE_COMPILE_H +#include "gcc-c-interface.h" + struct ui_file; struct gdbarch; struct dwarf2_per_cu_data; @@ -25,6 +27,120 @@ struct dwarf2_per_objfile; struct symbol; struct dynamic_prop; +/* An object of this type holds state associated with a given + compilation job. */ + +class compile_instance +{ +public: + compile_instance (struct gcc_base_context *gcc_fe, const char *options); + + virtual ~compile_instance () + { + m_gcc_fe->ops->destroy (m_gcc_fe); + } + + /* Returns the GCC options to be passed during compilation. */ + const std::string &gcc_target_options () const + { + return m_gcc_target_options; + } + + /* Query the type cache for TYPE, returning the compiler's + type for it in RET. */ + bool get_cached_type (struct type *type, gcc_type *ret) const; + + /* Insert GCC_TYPE into the type cache for TYPE. + + It is ok for a given type to be inserted more than once, provided that + the exact same association is made each time. */ + void insert_type (struct type *type, gcc_type gcc_type); + + /* Associate SYMBOL with some error text. */ + void insert_symbol_error (const struct symbol *sym, const char *text); + + /* Emit the error message corresponding to SYM, if one exists, and + arrange for it not to be emitted again. */ + void error_symbol_once (const struct symbol *sym); + + /* These currently just forward to the underlying ops + vtable. */ + + /* Set the plug-in print callback. */ + void set_print_callback (void (*print_function) (void *, const char *), + void *datum); + + /* Return the plug-in's front-end version. */ + unsigned int version () const; + + /* Set the plug-in's verbosity level. Nop for GCC_FE_VERSION_0. */ + void set_verbose (int level); + + /* Set the plug-in driver program. Nop for GCC_FE_VERSION_0. */ + void set_driver_filename (const char *filename); + + /* Set the regular expression used to match the configury triplet + prefix to the compiler. Nop for GCC_FE_VERSION_0. */ + void set_triplet_regexp (const char *regexp); + + /* Set compilation arguments. REGEXP is only used for protocol + version GCC_FE_VERSION_0. */ + gdb::unique_xmalloc_ptr set_arguments (int argc, char **argv, + const char *regexp = NULL); + + /* Set the filename of the program to compile. Nop for GCC_FE_VERSION_0. */ + void set_source_file (const char *filename); + + /* Compile the previously specified source file to FILENAME. + VERBOSE_LEVEL is only used for protocol version GCC_FE_VERSION_0. */ + bool compile (const char *filename, int verbose_level = -1); + + /* Set the scope type for this compile. */ + void set_scope (enum compile_i_scope_types scope) + { + m_scope = scope; + } + + /* Return the scope type. */ + enum compile_i_scope_types scope () const + { + return m_scope; + } + + /* Set the block to be used for symbol searches. */ + void set_block (const struct block *block) + { + m_block = block; + } + + /* Return the search block. */ + const struct block *block () const + { + return m_block; + } + +protected: + + /* The GCC front end. */ + struct gcc_base_context *m_gcc_fe; + + /* The "scope" of this compilation. */ + enum compile_i_scope_types m_scope; + + /* The block in which an expression is being parsed. */ + const struct block *m_block; + + /* Specify "-std=gnu11", "-std=gnu++11" or similar. These options are put + after CU's DW_AT_producer compilation options to override them. */ + std::string m_gcc_target_options; + + /* Map from gdb types to gcc types. */ + htab_up m_type_map; + + /* Map from gdb symbols to gcc error messages to emit. */ + htab_up m_symbol_err_map; +}; + /* Public function that is called from compile_control case in the expression command. GDB returns either a CMD, or a CMD_STRING, but never both. */ diff --git a/gdb/language.c b/gdb/language.c index 5037867b256..50a53c647f5 100644 --- a/gdb/language.c +++ b/gdb/language.c @@ -46,7 +46,6 @@ #include "c-lang.h" #include #include "gdbarch.h" -#include "compile/compile-internal.h" static void set_range_case (void); -- 2.30.2