aboutsummaryrefslogtreecommitdiff
path: root/gdb/dwarf2/cu.c
diff options
context:
space:
mode:
Diffstat (limited to 'gdb/dwarf2/cu.c')
-rw-r--r--gdb/dwarf2/cu.c89
1 files changed, 89 insertions, 0 deletions
diff --git a/gdb/dwarf2/cu.c b/gdb/dwarf2/cu.c
new file mode 100644
index 0000000..4f13f4f
--- /dev/null
+++ b/gdb/dwarf2/cu.c
@@ -0,0 +1,89 @@
+/* DWARF CU data structure
+
+ Copyright (C) 2021 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/>. */
+
+#include "defs.h"
+#include "dwarf2/cu.h"
+#include "dwarf2/read.h"
+
+/* Initialize dwarf2_cu to read PER_CU, in the context of PER_OBJFILE. */
+
+dwarf2_cu::dwarf2_cu (dwarf2_per_cu_data *per_cu,
+ dwarf2_per_objfile *per_objfile)
+ : per_cu (per_cu),
+ per_objfile (per_objfile),
+ mark (false),
+ has_loclist (false),
+ checked_producer (false),
+ producer_is_gxx_lt_4_6 (false),
+ producer_is_gcc_lt_4_3 (false),
+ producer_is_icc (false),
+ producer_is_icc_lt_14 (false),
+ producer_is_codewarrior (false),
+ processing_has_namespace_info (false)
+{
+}
+
+/* See cu.h. */
+
+struct type *
+dwarf2_cu::addr_sized_int_type (bool unsigned_p) const
+{
+ int addr_size = this->per_cu->addr_size ();
+ return this->per_objfile->int_type (addr_size, unsigned_p);
+}
+
+/* Start a symtab for DWARF. NAME, COMP_DIR, LOW_PC are passed to the
+ buildsym_compunit constructor. */
+
+struct compunit_symtab *
+dwarf2_cu::start_symtab (const char *name, const char *comp_dir,
+ CORE_ADDR low_pc)
+{
+ gdb_assert (m_builder == nullptr);
+
+ m_builder.reset (new struct buildsym_compunit
+ (this->per_objfile->objfile,
+ name, comp_dir, language, low_pc));
+
+ list_in_scope = get_builder ()->get_file_symbols ();
+
+ get_builder ()->record_debugformat ("DWARF 2");
+ get_builder ()->record_producer (producer);
+
+ processing_has_namespace_info = false;
+
+ return get_builder ()->get_compunit_symtab ();
+}
+
+/* See read.h. */
+
+struct type *
+dwarf2_cu::addr_type () const
+{
+ struct objfile *objfile = this->per_objfile->objfile;
+ struct type *void_type = objfile_type (objfile)->builtin_void;
+ struct type *addr_type = lookup_pointer_type (void_type);
+ int addr_size = this->per_cu->addr_size ();
+
+ if (TYPE_LENGTH (addr_type) == addr_size)
+ return addr_type;
+
+ addr_type = addr_sized_int_type (addr_type->is_unsigned ());
+ return addr_type;
+}