1 /* Build symbol tables in GDB's internal format - legacy APIs 2 Copyright (C) 1986-2024 Free Software Foundation, Inc. 3 4 This file is part of GDB. 5 6 This program is free software; you can redistribute it and/or modify 7 it under the terms of the GNU General Public License as published by 8 the Free Software Foundation; either version 3 of the License, or 9 (at your option) any later version. 10 11 This program is distributed in the hope that it will be useful, 12 but WITHOUT ANY WARRANTY; without even the implied warranty of 13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 GNU General Public License for more details. 15 16 You should have received a copy of the GNU General Public License 17 along with this program. If not, see <http://www.gnu.org/licenses/>. */ 18 19 #ifndef BUILDSYM_LEGACY_H 20 #define BUILDSYM_LEGACY_H 21 22 #include "buildsym.h" 23 24 /* This module provides definitions used for creating and adding to 25 the symbol table. These routines are called from various symbol- 26 file-reading routines. This file holds the legacy API, which 27 relies on a global variable to work properly. New or maintained 28 symbol readers should use the builder API in buildsym.h. 29 30 The basic way this module is used is as follows: 31 32 scoped_free_pendings free_pending; 33 cust = start_compunit_symtab (...); 34 ... read debug info ... 35 cust = end_compunit_symtab (...); 36 37 The compunit symtab pointer ("cust") is returned from both 38 start_compunit_symtab and end_compunit_symtab to simplify the debug info readers. 39 40 dbxread.c and xcoffread.c use another variation: 41 42 scoped_free_pendings free_pending; 43 cust = start_compunit_symtab (...); 44 ... read debug info ... 45 cust = end_compunit_symtab (...); 46 ... start_compunit_symtab + read + end_compunit_symtab repeated ... 47 */ 48 49 class scoped_free_pendings 50 { 51 public: 52 53 scoped_free_pendings () = default; 54 ~scoped_free_pendings (); 55 56 DISABLE_COPY_AND_ASSIGN (scoped_free_pendings); 57 }; 58 59 extern struct block *finish_block (struct symbol *symbol, 60 struct pending_block *old_blocks, 61 const struct dynamic_prop *static_link, 62 CORE_ADDR start, 63 CORE_ADDR end); 64 65 extern void start_subfile (const char *name); 66 67 extern void patch_subfile_names (struct subfile *subfile, const char *name); 68 69 extern void push_subfile (); 70 71 extern const char *pop_subfile (); 72 73 extern struct compunit_symtab *end_compunit_symtab (CORE_ADDR end_addr); 74 75 extern struct context_stack *push_context (int desc, CORE_ADDR valu); 76 77 extern struct context_stack pop_context (); 78 79 extern void record_line (struct subfile *subfile, int line, 80 unrelocated_addr pc); 81 82 extern struct compunit_symtab *start_compunit_symtab (struct objfile *objfile, 83 const char *name, 84 const char *comp_dir, 85 CORE_ADDR start_addr, 86 enum language language); 87 88 /* Record the name of the debug format in the current pending symbol 89 table. FORMAT must be a string with a lifetime at least as long as 90 the symtab's objfile. */ 91 92 extern void record_debugformat (const char *format); 93 94 /* Record the name of the debuginfo producer (usually the compiler) in 95 the current pending symbol table. PRODUCER must be a string with a 96 lifetime at least as long as the symtab's objfile. */ 97 98 extern void record_producer (const char *producer); 99 100 /* Set the name of the last source file. NAME is copied by this 101 function. */ 102 103 extern void set_last_source_file (const char *name); 104 105 /* Fetch the name of the last source file. */ 106 107 extern const char *get_last_source_file (void); 108 109 /* Set the last source start address. Can only be used between 110 start_compunit_symtab and end_compunit_symtab* calls. */ 111 112 extern void set_last_source_start_addr (CORE_ADDR addr); 113 114 /* Get the last source start address. Can only be used between 115 start_compunit_symtab and end_compunit_symtab* calls. */ 116 117 extern CORE_ADDR get_last_source_start_addr (); 118 119 /* True if the context stack is empty. */ 120 121 extern bool outermost_context_p (); 122 123 /* Return the context stack depth. */ 124 125 extern int get_context_stack_depth (); 126 127 /* Return the current subfile. */ 128 129 extern struct subfile *get_current_subfile (); 130 131 /* Return the local symbol list. */ 132 133 extern struct pending **get_local_symbols (); 134 135 /* Return the file symbol list. */ 136 137 extern struct pending **get_file_symbols (); 138 139 /* Return the global symbol list. */ 140 141 extern struct pending **get_global_symbols (); 142 143 /* Return the current buildsym_compunit. */ 144 145 extern struct buildsym_compunit *get_buildsym_compunit (); 146 147 #endif /* BUILDSYM_LEGACY_H */ 148