aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gdb/buildsym.c12
-rw-r--r--gdb/disasm.c2
-rw-r--r--gdb/jit.c8
-rw-r--r--gdb/linespec.c6
-rw-r--r--gdb/mdebugread.c5
-rw-r--r--gdb/python/py-linetable.c11
-rw-r--r--gdb/record-btrace.c4
-rw-r--r--gdb/symmisc.c6
-rw-r--r--gdb/symtab.c40
-rw-r--r--gdb/symtab.h8
10 files changed, 54 insertions, 48 deletions
diff --git a/gdb/buildsym.c b/gdb/buildsym.c
index 0117b06..56f11dd 100644
--- a/gdb/buildsym.c
+++ b/gdb/buildsym.c
@@ -916,13 +916,15 @@ buildsym_compunit::end_compunit_symtab_with_blockvector
size_t entry_array_size = n_entries * sizeof (struct linetable_entry);
int linetablesize = sizeof (struct linetable) + entry_array_size;
- symtab->set_linetable
- (XOBNEWVAR (&m_objfile->objfile_obstack, struct linetable,
- linetablesize));
+ struct linetable *new_table
+ = XOBNEWVAR (&m_objfile->objfile_obstack, struct linetable,
+ linetablesize);
- symtab->linetable ()->nitems = n_entries;
- memcpy (symtab->linetable ()->item,
+ new_table->nitems = n_entries;
+ memcpy (new_table->item,
subfile->line_vector_entries.data (), entry_array_size);
+
+ symtab->set_linetable (new_table);
}
else
symtab->set_linetable (nullptr);
diff --git a/gdb/disasm.c b/gdb/disasm.c
index 2acde04..71d3b97 100644
--- a/gdb/disasm.c
+++ b/gdb/disasm.c
@@ -573,7 +573,7 @@ do_mixed_source_and_assembly_deprecated
{
int newlines = 0;
int nlines;
- struct linetable_entry *le;
+ const struct linetable_entry *le;
struct deprecated_dis_line_entry *mle;
struct symtab_and_line sal;
int i;
diff --git a/gdb/jit.c b/gdb/jit.c
index 938155d..eb2e8ad 100644
--- a/gdb/jit.c
+++ b/gdb/jit.c
@@ -543,9 +543,11 @@ finalize_symtab (struct gdb_symtab *stab, struct objfile *objfile)
size_t size = ((stab->linetable->nitems - 1)
* sizeof (struct linetable_entry)
+ sizeof (struct linetable));
- filetab->set_linetable ((struct linetable *)
- obstack_alloc (&objfile->objfile_obstack, size));
- memcpy (filetab->linetable (), stab->linetable.get (), size);
+ struct linetable *new_table
+ = (struct linetable *) obstack_alloc (&objfile->objfile_obstack,
+ size);
+ memcpy (new_table, stab->linetable.get (), size);
+ filetab->set_linetable (new_table);
}
blockvector_size = (sizeof (struct blockvector)
diff --git a/gdb/linespec.c b/gdb/linespec.c
index 36f2ef4..7d969f3 100644
--- a/gdb/linespec.c
+++ b/gdb/linespec.c
@@ -403,7 +403,7 @@ static std::vector<symtab_and_line> decode_digits_ordinary
(struct linespec_state *self,
linespec *ls,
int line,
- linetable_entry **best_entry);
+ const linetable_entry **best_entry);
static std::vector<symtab_and_line> decode_digits_list_mode
(struct linespec_state *self,
@@ -2079,7 +2079,7 @@ create_sals_line_offset (struct linespec_state *self,
values = decode_digits_list_mode (self, ls, val);
else
{
- struct linetable_entry *best_entry = NULL;
+ const linetable_entry *best_entry = NULL;
int i, j;
std::vector<symtab_and_line> intermediate_results
@@ -4026,7 +4026,7 @@ static std::vector<symtab_and_line>
decode_digits_ordinary (struct linespec_state *self,
linespec *ls,
int line,
- struct linetable_entry **best_entry)
+ const linetable_entry **best_entry)
{
std::vector<symtab_and_line> sals;
for (const auto &elt : ls->file_symtabs)
diff --git a/gdb/mdebugread.c b/gdb/mdebugread.c
index 6fd3b09..13dc789 100644
--- a/gdb/mdebugread.c
+++ b/gdb/mdebugread.c
@@ -4065,7 +4065,10 @@ mdebug_expand_psymtab (legacy_psymtab *pst, struct objfile *objfile)
psymtab_language = cust->primary_filetab ()->language ();
- lines = cust->primary_filetab ()->linetable ();
+ /* This code allocates the line table on the heap and then later
+ copies it to the obstack. So, while casting away const here
+ is ugly, it's not incorrect. */
+ lines = const_cast<linetable *> (cust->primary_filetab ()->linetable ());
/* Get a new lexical context. */
diff --git a/gdb/python/py-linetable.c b/gdb/python/py-linetable.c
index e42bcc2..6e89c43 100644
--- a/gdb/python/py-linetable.c
+++ b/gdb/python/py-linetable.c
@@ -156,7 +156,7 @@ ltpy_get_pcs_for_line (PyObject *self, PyObject *args)
{
struct symtab *symtab;
gdb_py_longest py_line;
- struct linetable_entry *best_entry = NULL;
+ const linetable_entry *best_entry = nullptr;
std::vector<CORE_ADDR> pcs;
LTPY_REQUIRE_VALID (self, symtab);
@@ -201,7 +201,7 @@ ltpy_has_line (PyObject *self, PyObject *args)
for (index = 0; index < symtab->linetable ()->nitems; index++)
{
- struct linetable_entry *item = &(symtab->linetable ()->item[index]);
+ const linetable_entry *item = &(symtab->linetable ()->item[index]);
if (item->line == py_line)
Py_RETURN_TRUE;
}
@@ -219,7 +219,6 @@ ltpy_get_all_source_lines (PyObject *self, PyObject *args)
{
struct symtab *symtab;
Py_ssize_t index;
- struct linetable_entry *item;
LTPY_REQUIRE_VALID (self, symtab);
@@ -236,7 +235,7 @@ ltpy_get_all_source_lines (PyObject *self, PyObject *args)
for (index = 0; index < symtab->linetable ()->nitems; index++)
{
- item = &(symtab->linetable ()->item[index]);
+ const linetable_entry *item = &(symtab->linetable ()->item[index]);
/* 0 is used to signify end of line table information. Do not
include in the source set. */
@@ -395,7 +394,6 @@ ltpy_iternext (PyObject *self)
ltpy_iterator_object *iter_obj = (ltpy_iterator_object *) self;
struct symtab *symtab;
PyObject *obj;
- struct linetable_entry *item;
LTPY_REQUIRE_VALID (iter_obj->source, symtab);
@@ -405,7 +403,8 @@ ltpy_iternext (PyObject *self)
return NULL;
}
- item = &(symtab->linetable ()->item[iter_obj->current_index]);
+ const linetable_entry *item
+ = &(symtab->linetable ()->item[iter_obj->current_index]);
/* Skip over internal entries such as 0. 0 signifies the end of
line table data and is not useful to the API user. */
diff --git a/gdb/record-btrace.c b/gdb/record-btrace.c
index 55fe25e..5b6e33f 100644
--- a/gdb/record-btrace.c
+++ b/gdb/record-btrace.c
@@ -705,8 +705,8 @@ static struct btrace_line_range
btrace_find_line_range (CORE_ADDR pc)
{
struct btrace_line_range range;
- struct linetable_entry *lines;
- struct linetable *ltable;
+ const linetable_entry *lines;
+ const linetable *ltable;
struct symtab *symtab;
int nlines, i;
diff --git a/gdb/symmisc.c b/gdb/symmisc.c
index 3579bf0..2f1e4f5 100644
--- a/gdb/symmisc.c
+++ b/gdb/symmisc.c
@@ -237,7 +237,7 @@ dump_symtab_1 (struct symtab *symtab, struct ui_file *outfile)
struct objfile *objfile = symtab->compunit ()->objfile ();
struct gdbarch *gdbarch = objfile->arch ();
struct mdict_iterator miter;
- struct linetable *l;
+ const struct linetable *l;
struct symbol *sym;
int depth;
@@ -948,7 +948,7 @@ block_depth (const struct block *block)
static int
maintenance_print_one_line_table (struct symtab *symtab, void *data)
{
- struct linetable *linetable;
+ const struct linetable *linetable;
struct objfile *objfile;
objfile = symtab->compunit ()->objfile ();
@@ -986,7 +986,7 @@ maintenance_print_one_line_table (struct symtab *symtab, void *data)
for (int i = 0; i < linetable->nitems; ++i)
{
- struct linetable_entry *item;
+ const linetable_entry *item;
item = &linetable->item [i];
ui_out_emit_tuple tuple_emitter (uiout, nullptr);
diff --git a/gdb/symtab.c b/gdb/symtab.c
index c6be14c..e11f926 100644
--- a/gdb/symtab.c
+++ b/gdb/symtab.c
@@ -78,7 +78,7 @@
static void rbreak_command (const char *, int);
-static int find_line_common (struct linetable *, int, int *, int);
+static int find_line_common (const linetable *, int, int *, int);
static struct block_symbol
lookup_symbol_aux (const char *name,
@@ -2987,15 +2987,15 @@ struct symtab_and_line
find_pc_sect_line (CORE_ADDR pc, struct obj_section *section, int notcurrent)
{
struct compunit_symtab *cust;
- struct linetable *l;
+ const linetable *l;
int len;
- struct linetable_entry *item;
+ const linetable_entry *item;
const struct blockvector *bv;
struct bound_minimal_symbol msymbol;
/* Info on best line seen so far, and where it starts, and its file. */
- struct linetable_entry *best = NULL;
+ const linetable_entry *best = NULL;
CORE_ADDR best_end = 0;
struct symtab *best_symtab = 0;
@@ -3004,11 +3004,11 @@ find_pc_sect_line (CORE_ADDR pc, struct obj_section *section, int notcurrent)
If we don't find a line whose range contains PC,
we will use a line one less than this,
with a range from the start of that file to the first line's pc. */
- struct linetable_entry *alt = NULL;
+ const linetable_entry *alt = NULL;
/* Info on best line seen in this file. */
- struct linetable_entry *prev;
+ const linetable_entry *prev;
/* If this pc is not from the current frame,
it is the address of the end of a call instruction.
@@ -3164,8 +3164,8 @@ find_pc_sect_line (CORE_ADDR pc, struct obj_section *section, int notcurrent)
return comp_pc < lhs.raw_pc ();
};
- struct linetable_entry *first = item;
- struct linetable_entry *last = item + len;
+ const linetable_entry *first = item;
+ const linetable_entry *last = item + len;
item = std::upper_bound (first, last,
pc - objfile->text_section_offset (),
pc_compare);
@@ -3196,7 +3196,7 @@ find_pc_sect_line (CORE_ADDR pc, struct obj_section *section, int notcurrent)
pretty cheap. */
if (!best->is_stmt)
{
- struct linetable_entry *tmp = best;
+ const linetable_entry *tmp = best;
while (tmp > first && (tmp - 1)->raw_pc () == tmp->raw_pc ()
&& (tmp - 1)->line != 0 && !tmp->is_stmt)
--tmp;
@@ -3304,7 +3304,7 @@ find_line_symtab (struct symtab *sym_tab, int line,
so far seen. */
int best_index;
- struct linetable *best_linetable;
+ const struct linetable *best_linetable;
struct symtab *best_symtab;
/* First try looking it up in the given symtab. */
@@ -3339,7 +3339,7 @@ find_line_symtab (struct symtab *sym_tab, int line,
{
for (symtab *s : cu->filetabs ())
{
- struct linetable *l;
+ const struct linetable *l;
int ind;
if (FILENAME_CMP (sym_tab->filename, s->filename) != 0)
@@ -3388,7 +3388,7 @@ done:
std::vector<CORE_ADDR>
find_pcs_for_symtab_line (struct symtab *symtab, int line,
- struct linetable_entry **best_item)
+ const linetable_entry **best_item)
{
int start = 0;
std::vector<CORE_ADDR> result;
@@ -3407,7 +3407,7 @@ find_pcs_for_symtab_line (struct symtab *symtab, int line,
if (!was_exact)
{
- struct linetable_entry *item = &symtab->linetable ()->item[idx];
+ const linetable_entry *item = &symtab->linetable ()->item[idx];
if (*best_item == NULL
|| (item->line < (*best_item)->line && item->is_stmt))
@@ -3431,7 +3431,7 @@ find_pcs_for_symtab_line (struct symtab *symtab, int line,
bool
find_line_pc (struct symtab *symtab, int line, CORE_ADDR *pc)
{
- struct linetable *l;
+ const struct linetable *l;
int ind;
*pc = 0;
@@ -3496,7 +3496,7 @@ find_line_pc_range (struct symtab_and_line sal, CORE_ADDR *startptr,
Set *EXACT_MATCH nonzero if the value returned is an exact match. */
static int
-find_line_common (struct linetable *l, int lineno,
+find_line_common (const linetable *l, int lineno,
int *exact_match, int start)
{
int i;
@@ -3519,7 +3519,7 @@ find_line_common (struct linetable *l, int lineno,
len = l->nitems;
for (i = start; i < len; i++)
{
- struct linetable_entry *item = &(l->item[i]);
+ const linetable_entry *item = &(l->item[i]);
/* Ignore non-statements. */
if (!item->is_stmt)
@@ -3633,7 +3633,7 @@ static CORE_ADDR
skip_prologue_using_lineinfo (CORE_ADDR func_addr, struct symtab *symtab)
{
CORE_ADDR func_start, func_end;
- struct linetable *l;
+ const struct linetable *l;
int i;
/* Give up if this symbol has no lineinfo table. */
@@ -3654,7 +3654,7 @@ skip_prologue_using_lineinfo (CORE_ADDR func_addr, struct symtab *symtab)
address we are looking for. */
for (i = 0; i < l->nitems; i++)
{
- struct linetable_entry *item = &(l->item[i]);
+ const linetable_entry *item = &(l->item[i]);
CORE_ADDR item_pc = item->pc (objfile);
/* Don't use line numbers of zero, they mark special entries in
@@ -3686,7 +3686,7 @@ skip_prologue_using_linetable (CORE_ADDR func_addr)
if (prologue_sal.symtab != nullptr
&& prologue_sal.symtab->language () != language_asm)
{
- struct linetable *linetable = prologue_sal.symtab->linetable ();
+ const linetable *linetable = prologue_sal.symtab->linetable ();
struct objfile *objfile = prologue_sal.symtab->compunit ()->objfile ();
start_pc -= objfile->text_section_offset ();
@@ -3939,7 +3939,7 @@ skip_prologue_using_sal (struct gdbarch *gdbarch, CORE_ADDR func_addr)
{
struct objfile *objfile
= prologue_sal.symtab->compunit ()->objfile ();
- struct linetable *linetable = prologue_sal.symtab->linetable ();
+ const linetable *linetable = prologue_sal.symtab->linetable ();
int idx = 0;
/* Skip any earlier lines, and any end-of-sequence marker
diff --git a/gdb/symtab.h b/gdb/symtab.h
index df308e5..9fc9527 100644
--- a/gdb/symtab.h
+++ b/gdb/symtab.h
@@ -1635,12 +1635,12 @@ struct symtab
m_compunit = compunit;
}
- struct linetable *linetable () const
+ const struct linetable *linetable () const
{
return m_linetable;
}
- void set_linetable (struct linetable *linetable)
+ void set_linetable (const struct linetable *linetable)
{
m_linetable = linetable;
}
@@ -1667,7 +1667,7 @@ struct symtab
/* Table mapping core addresses to line numbers for this file.
Can be NULL if none. Never shared between different symtabs. */
- struct linetable *m_linetable;
+ const struct linetable *m_linetable;
/* Name of this source file, in a form appropriate to print to the user.
@@ -2698,7 +2698,7 @@ void iterate_over_symtabs (const char *name,
std::vector<CORE_ADDR> find_pcs_for_symtab_line
- (struct symtab *symtab, int line, struct linetable_entry **best_entry);
+ (struct symtab *symtab, int line, const linetable_entry **best_entry);
/* Prototype for callbacks for LA_ITERATE_OVER_SYMBOLS. The callback
is called once per matching symbol SYM. The callback should return