6827fe2016
* Add comment to kfail for PR30528. * Add UNRESOLVED kfail for gdb.base/gcore-excessive-memory.exp. * Add UNRESOLVED kfail for PR31001. * Remove PR27238 kfail. * Add powerpc64le hw watchpoint kfails. * Add PR31004 kfail. * Add PR30531 kfail. - Patches added (backport from master): * xcoffread.c-fix-werror-dangling-pointer-issue-with-m.patch * avoid-manual-memory-management-in-go-lang.c.patch * gdb-go-handle-v3-go_0-mangled-prefix.patch OBS-URL: https://build.opensuse.org/package/show/devel:gcc/gdb?expand=0&rev=367
140 lines
5.2 KiB
Diff
140 lines
5.2 KiB
Diff
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
|
||
|