gdb/xcoffread.c-fix-werror-dangling-pointer-issue-with-m.patch

140 lines
5.2 KiB
Diff
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

From c835eac78b389ce1e29aade9d0468c13854c1cb9 Mon Sep 17 00:00:00 2001
From: Mark Wielaard <mark@klomp.org>
Date: Sat, 29 Apr 2023 22:46:11 +0200
Subject: [PATCH 1/3] xcoffread.c: Fix -Werror=dangling-pointer= issue with
main_subfile.
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
GCC 13 points out that main_subfile has local function scope, but a
pointer to it is assigned to the global inclTable array subfile
element field:
In function void process_linenos(CORE_ADDR, CORE_ADDR),
inlined from void aix_process_linenos(objfile*) at xcoffread.c:727:19,
inlined from void aix_process_linenos(objfile*) at xcoffread.c:720:1:
xcoffread.c:629:37: error: storing the address of local variable main_subfile in *inclTable.19_45 + _28._inclTable::subfile [-Werror=dangling-pointer=]
629 | inclTable[ii].subfile = &main_subfile;
| ~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~
xcoffread.c: In function void aix_process_linenos(objfile*):
xcoffread.c:579:18: note: main_subfile declared here
579 | struct subfile main_subfile;
| ^~~~~~~~~~~~
xcoffread.c:496:19: note: inclTable declared here
496 | static InclTable *inclTable; /* global include table */
| ^~~~~~~~~
Fix this by making main_subfile file static. And allocate and
deallocated together with inclTable in allocate_include_entry and
xcoff_symfile_finish. Adjust the use of main_subfile in
process_linenos to take a pointer to the subfile.
---
gdb/xcoffread.c | 24 +++++++++++++-----------
1 file changed, 13 insertions(+), 11 deletions(-)
diff --git a/gdb/xcoffread.c b/gdb/xcoffread.c
index 52ae3aecb97..53779259b57 100644
--- a/gdb/xcoffread.c
+++ b/gdb/xcoffread.c
@@ -501,6 +501,9 @@ static int inclIndx; /* last entry to table */
static int inclLength; /* table length */
static int inclDepth; /* nested include depth */
+/* subfile structure for the main compilation unit. */
+static subfile *main_subfile;
+
static void allocate_include_entry (void);
static void
@@ -551,6 +554,7 @@ allocate_include_entry (void)
inclTable = XCNEWVEC (InclTable, INITIAL_INCLUDE_TABLE_LENGTH);
inclLength = INITIAL_INCLUDE_TABLE_LENGTH;
inclIndx = 0;
+ main_subfile = new subfile;
}
else if (inclIndx >= inclLength)
{
@@ -578,9 +582,6 @@ process_linenos (CORE_ADDR start, CORE_ADDR end)
file_ptr max_offset
= XCOFF_DATA (this_symtab_objfile)->max_lineno_offset;
- /* subfile structure for the main compilation unit. */
- struct subfile main_subfile;
-
/* In the main source file, any time we see a function entry, we
reset this variable to function's absolute starting line number.
All the following line numbers in the function are relative to
@@ -599,7 +600,7 @@ process_linenos (CORE_ADDR start, CORE_ADDR end)
/* All source lines were in the main source file. None in include
files. */
- enter_line_range (&main_subfile, offset, 0, start, end,
+ enter_line_range (main_subfile, offset, 0, start, end,
&main_source_baseline);
else
@@ -616,7 +617,7 @@ process_linenos (CORE_ADDR start, CORE_ADDR end)
if (offset < inclTable[ii].begin)
{
enter_line_range
- (&main_subfile, offset, inclTable[ii].begin - linesz,
+ (main_subfile, offset, inclTable[ii].begin - linesz,
start, 0, &main_source_baseline);
}
@@ -627,9 +628,9 @@ process_linenos (CORE_ADDR start, CORE_ADDR end)
main_source_baseline = inclTable[ii].funStartLine;
enter_line_range
- (&main_subfile, inclTable[ii].begin, inclTable[ii].end,
+ (main_subfile, inclTable[ii].begin, inclTable[ii].end,
start, 0, &main_source_baseline);
- inclTable[ii].subfile = &main_subfile;
+ inclTable[ii].subfile = main_subfile;
}
else
{
@@ -651,24 +652,24 @@ process_linenos (CORE_ADDR start, CORE_ADDR end)
enter remaining lines of the main file, if any left. */
if (offset < max_offset + 1 - linesz)
{
- enter_line_range (&main_subfile, offset, 0, start, end,
+ enter_line_range (main_subfile, offset, 0, start, end,
&main_source_baseline);
}
}
/* Process main file's line numbers. */
- if (!main_subfile.line_vector_entries.empty ())
+ if (!main_subfile->line_vector_entries.empty ())
{
/* Line numbers are not necessarily ordered. xlc compilation will
put static function to the end. */
- arrange_linetable (main_subfile.line_vector_entries);
+ arrange_linetable (main_subfile->line_vector_entries);
}
/* Now, process included files' line numbers. */
for (int ii = 0; ii < inclIndx; ++ii)
{
- if (inclTable[ii].subfile != ((struct subfile *) &main_subfile)
+ if (inclTable[ii].subfile != main_subfile
&& !inclTable[ii].subfile->line_vector_entries.empty ())
{
/* Line numbers are not necessarily ordered. xlc compilation will
@@ -1811,6 +1812,7 @@ xcoff_symfile_finish (struct objfile *objfile)
{
xfree (inclTable);
inclTable = NULL;
+ delete main_subfile;
}
inclIndx = inclLength = inclDepth = 0;
}
base-commit: 38a5283b23caca5317eaeb7927a5a11eccc6eb69
--
2.35.3