- Replace tentative fix with upstreamed fix [swo#27681]:
Remove: * gdb-build-workaround-pcre2_posix-linking-problem.patch Add: * gdb-build-hardcode-with-included-regex.patch - Backport fix from upstream [bsc#1185638, swo#26327]: * gdb-symtab-fix-infinite-recursion-in-dwarf2_cu-get_builder.patch - Backport fix from upstream [rh#1931344]: * gdb-save-restore-file-offset-while-reading-notes-in-core-file.patch OBS-URL: https://build.opensuse.org/package/show/devel:gcc/gdb?expand=0&rev=276
This commit is contained in:
parent
dc44c74411
commit
434fe8a120
153
gdb-build-hardcode-with-included-regex.patch
Normal file
153
gdb-build-hardcode-with-included-regex.patch
Normal file
@ -0,0 +1,153 @@
|
||||
Index: gdb-10.1/gdb/config.in
|
||||
===================================================================
|
||||
--- gdb-10.1.orig/gdb/config.in
|
||||
+++ gdb-10.1/gdb/config.in
|
||||
@@ -734,9 +734,6 @@
|
||||
/* Define if <thread_db.h> has the TD_VERSION error code. */
|
||||
#undef THREAD_DB_HAS_TD_VERSION
|
||||
|
||||
-/* Define to 1 if the regex included in libiberty should be used. */
|
||||
-#undef USE_INCLUDED_REGEX
|
||||
-
|
||||
/* Enable extensions on AIX 3, Interix. */
|
||||
#ifndef _ALL_SOURCE
|
||||
# undef _ALL_SOURCE
|
||||
Index: gdb-10.1/gdb/configure
|
||||
===================================================================
|
||||
--- gdb-10.1.orig/gdb/configure
|
||||
+++ gdb-10.1/gdb/configure
|
||||
@@ -912,7 +912,6 @@ enable_source_highlight
|
||||
with_intel_pt
|
||||
with_libipt_prefix
|
||||
with_libipt_type
|
||||
-with_included_regex
|
||||
with_sysroot
|
||||
with_system_gdbinit
|
||||
with_system_gdbinit_dir
|
||||
@@ -1663,10 +1662,6 @@ Optional Packages:
|
||||
--with-libipt-prefix[=DIR] search for libipt in DIR/include and DIR/lib
|
||||
--without-libipt-prefix don't search for libipt in includedir and libdir
|
||||
--with-libipt-type=TYPE type of library to search for (auto/static/shared)
|
||||
- --without-included-regex
|
||||
- don't use included regex; this is the default on
|
||||
- systems with version 2 of the GNU C library (use
|
||||
- with caution on other system)
|
||||
--with-sysroot[=DIR] search for usr/lib et al within DIR
|
||||
--with-system-gdbinit=PATH
|
||||
automatically load a system-wide gdbinit file
|
||||
@@ -16006,57 +16001,6 @@ if test "$ac_cv_func_setpgrp_void" = yes
|
||||
fi
|
||||
fi
|
||||
|
||||
-# Assume we'll default to using the included libiberty regex.
|
||||
-gdb_use_included_regex=yes
|
||||
-
|
||||
-# However, if the system regex is GNU regex, then default to *not*
|
||||
-# using the included regex.
|
||||
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU regex" >&5
|
||||
-$as_echo_n "checking for GNU regex... " >&6; }
|
||||
-if ${gdb_cv_have_gnu_regex+:} false; then :
|
||||
- $as_echo_n "(cached) " >&6
|
||||
-else
|
||||
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
|
||||
-/* end confdefs.h. */
|
||||
-#include <gnu-versions.h>
|
||||
-int
|
||||
-main ()
|
||||
-{
|
||||
-#define REGEX_INTERFACE_VERSION 1
|
||||
-#if _GNU_REGEX_INTERFACE_VERSION != REGEX_INTERFACE_VERSION
|
||||
-# error "Version mismatch"
|
||||
-#endif
|
||||
- ;
|
||||
- return 0;
|
||||
-}
|
||||
-_ACEOF
|
||||
-if ac_fn_c_try_compile "$LINENO"; then :
|
||||
- gdb_cv_have_gnu_regex=yes
|
||||
-else
|
||||
- gdb_cv_have_gnu_regex=no
|
||||
-fi
|
||||
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
|
||||
-fi
|
||||
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gdb_cv_have_gnu_regex" >&5
|
||||
-$as_echo "$gdb_cv_have_gnu_regex" >&6; }
|
||||
-if test "$gdb_cv_have_gnu_regex" = yes; then
|
||||
- gdb_use_included_regex=no
|
||||
-fi
|
||||
-
|
||||
-
|
||||
-# Check whether --with-included-regex was given.
|
||||
-if test "${with_included_regex+set}" = set; then :
|
||||
- withval=$with_included_regex; gdb_with_regex=$withval
|
||||
-else
|
||||
- gdb_with_regex=$gdb_use_included_regex
|
||||
-fi
|
||||
-
|
||||
-if test "$gdb_with_regex" = yes; then
|
||||
-
|
||||
-$as_echo "#define USE_INCLUDED_REGEX 1" >>confdefs.h
|
||||
-
|
||||
-fi
|
||||
-
|
||||
# Check if <sys/proc.h> defines `struct thread' with a td_pcb member.
|
||||
ac_fn_c_check_member "$LINENO" "struct thread" "td_pcb" "ac_cv_member_struct_thread_td_pcb" "#include <sys/param.h>
|
||||
#include <sys/proc.h>
|
||||
Index: gdb-10.1/gdb/configure.ac
|
||||
===================================================================
|
||||
--- gdb-10.1.orig/gdb/configure.ac
|
||||
+++ gdb-10.1/gdb/configure.ac
|
||||
@@ -1514,35 +1514,6 @@ if test "$ac_cv_func_setpgrp_void" = yes
|
||||
fi
|
||||
fi
|
||||
|
||||
-# Assume we'll default to using the included libiberty regex.
|
||||
-gdb_use_included_regex=yes
|
||||
-
|
||||
-# However, if the system regex is GNU regex, then default to *not*
|
||||
-# using the included regex.
|
||||
-AC_CACHE_CHECK(
|
||||
- [for GNU regex],
|
||||
- [gdb_cv_have_gnu_regex],
|
||||
- [AC_TRY_COMPILE(
|
||||
- [#include <gnu-versions.h>],
|
||||
- [#define REGEX_INTERFACE_VERSION 1
|
||||
-#if _GNU_REGEX_INTERFACE_VERSION != REGEX_INTERFACE_VERSION
|
||||
-# error "Version mismatch"
|
||||
-#endif],
|
||||
- gdb_cv_have_gnu_regex=yes,
|
||||
- gdb_cv_have_gnu_regex=no)])
|
||||
-if test "$gdb_cv_have_gnu_regex" = yes; then
|
||||
- gdb_use_included_regex=no
|
||||
-fi
|
||||
-
|
||||
-AC_ARG_WITH(included-regex,
|
||||
- AS_HELP_STRING([--without-included-regex], [don't use included regex; this is the default on systems with version 2 of the GNU C library (use with caution on other system)]),
|
||||
- gdb_with_regex=$withval,
|
||||
- gdb_with_regex=$gdb_use_included_regex)
|
||||
-if test "$gdb_with_regex" = yes; then
|
||||
- AC_DEFINE(USE_INCLUDED_REGEX, 1,
|
||||
- [Define to 1 if the regex included in libiberty should be used.])
|
||||
-fi
|
||||
-
|
||||
# Check if <sys/proc.h> defines `struct thread' with a td_pcb member.
|
||||
AC_CHECK_MEMBERS([struct thread.td_pcb], [], [],
|
||||
[#include <sys/param.h>
|
||||
Index: gdb-10.1/gdb/gdb_regex.h
|
||||
===================================================================
|
||||
--- gdb-10.1.orig/gdb/gdb_regex.h
|
||||
+++ gdb-10.1/gdb/gdb_regex.h
|
||||
@@ -19,13 +19,7 @@
|
||||
#ifndef GDB_REGEX_H
|
||||
#define GDB_REGEX_H 1
|
||||
|
||||
-#ifdef USE_INCLUDED_REGEX
|
||||
# include "xregex.h"
|
||||
-#else
|
||||
-/* Request 4.2 BSD regex functions. */
|
||||
-# define _REGEX_RE_COMP
|
||||
-# include <regex.h>
|
||||
-#endif
|
||||
|
||||
/* A compiled regex. This is mainly a wrapper around regex_t. The
|
||||
the constructor throws on regcomp error and the destructor is
|
@ -1,117 +0,0 @@
|
||||
[gdb/build] Workaround pcre2_posix linking problem
|
||||
|
||||
On openSUSE Tumbleweed, the ncurses package got the --with-pcre2 configure
|
||||
switch enabled, and solved the resulting dependencies using:
|
||||
...
|
||||
$ cat /usr/lib64/libncursesw.so
|
||||
/* GNU ld script */
|
||||
-INPUT(/lib64/libncursesw.so.6 AS_NEEDED(-ltinfo -ldl))
|
||||
+INPUT(/lib64/libncursesw.so.6 AS_NEEDED(-ltinfo -ldl -lpcre2-posix -lpcre2-8))
|
||||
...
|
||||
|
||||
GDB uses the regexp functions regcomp, regerror, regfree, regexec and re_search, see
|
||||
gdb_regex.c. The latter is a GNU extension.
|
||||
|
||||
Due to the changes mentioned above, the first four functions got bound to
|
||||
lpcre2-posix, while re_search still got bound to lc, resulting in all sorts of
|
||||
trouble, like hangs or:
|
||||
...
|
||||
$ gdb -q -batch -ex "apropos apropos"
|
||||
Aborted (core dumped)
|
||||
...
|
||||
|
||||
There is a debate whether it's legal to use re_search in combination with regcomp.
|
||||
|
||||
Either way, the immediate problem can be fixed/worked-around by adding -lc
|
||||
before @LIBS@ in the CLIBS def in Makefile.in.
|
||||
|
||||
This is something that works with clang++, though not with g++, which drops
|
||||
-lc, see PR gcc/99896. For g++, we can work around this by using -Wl,-lc
|
||||
instead.
|
||||
|
||||
Add -lc before @LIBS@ in CLIBS def.
|
||||
|
||||
Tested on x86_64-linux.
|
||||
|
||||
gdb/ChangeLog:
|
||||
|
||||
2021-04-06 Tom de Vries <tdevries@suse.de>
|
||||
|
||||
PR build/27681
|
||||
* Makefile.in (CDEFS): Add @LIBC@ before @LIBS@.
|
||||
* configure.ac: Define LIBC.
|
||||
* configure: Regenerate.
|
||||
|
||||
---
|
||||
gdb/Makefile.in | 5 +++--
|
||||
gdb/configure | 11 +++++++++++
|
||||
gdb/configure.ac | 8 ++++++++
|
||||
3 files changed, 22 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/gdb/Makefile.in b/gdb/Makefile.in
|
||||
index 4808357e651..31a1009dd6d 100644
|
||||
--- a/gdb/Makefile.in
|
||||
+++ b/gdb/Makefile.in
|
||||
@@ -620,11 +620,12 @@ INTERNAL_LDFLAGS = \
|
||||
|
||||
# Libraries and corresponding dependencies for compiling gdb.
|
||||
# XM_CLIBS, defined in *config files, have host-dependent libs.
|
||||
-# LIBIBERTY appears twice on purpose.
|
||||
+# LIBIBERTY appears twice on purpose. LIBC is added before
|
||||
+# LIBS to ensure that all functions in gdb_regex.c bind to libc.
|
||||
CLIBS = $(SIM) $(READLINE) $(OPCODES) $(LIBCTF) $(BFD) $(ZLIB) \
|
||||
$(LIBSUPPORT) $(INTL) $(LIBIBERTY) $(LIBDECNUMBER) \
|
||||
$(XM_CLIBS) $(GDBTKLIBS) \
|
||||
- @LIBS@ @GUILE_LIBS@ @PYTHON_LIBS@ \
|
||||
+ @LIBC@ @LIBS@ @GUILE_LIBS@ @PYTHON_LIBS@ \
|
||||
$(LIBEXPAT) $(LIBLZMA) $(LIBBABELTRACE) $(LIBIPT) \
|
||||
$(WIN32LIBS) $(LIBGNU) $(LIBICONV) \
|
||||
$(LIBMPFR) $(SRCHIGH_LIBS) $(LIBXXHASH) $(PTHREAD_LIBS) \
|
||||
diff --git a/gdb/configure b/gdb/configure
|
||||
index e7811e807a6..4a8bf5cc78e 100755
|
||||
--- a/gdb/configure
|
||||
+++ b/gdb/configure
|
||||
@@ -728,6 +728,7 @@ HAVE_PYTHON_TRUE
|
||||
PYTHON_LIBS
|
||||
PYTHON_CPPFLAGS
|
||||
PYTHON_CFLAGS
|
||||
+LIBC
|
||||
python_prog_path
|
||||
LTLIBMPFR
|
||||
LIBMPFR
|
||||
@@ -10983,6 +10984,16 @@ _ACEOF
|
||||
fi
|
||||
fi
|
||||
|
||||
+if test "${GCC}" = yes; then
|
||||
+ # G++ drops -lc, so wrap it using -Wl. See PR gcc/99896.
|
||||
+ GCC_LIBC="-Wl,-lc"
|
||||
+ LIBC=$GCC_LIBC
|
||||
+
|
||||
+else
|
||||
+ LIBC=-lc
|
||||
+
|
||||
+fi
|
||||
+
|
||||
|
||||
# Check whether --with-python-libdir was given.
|
||||
if test "${with_python_libdir+set}" = set; then :
|
||||
diff --git a/gdb/configure.ac b/gdb/configure.ac
|
||||
index 620ae23e343..5bf44beb63a 100644
|
||||
--- a/gdb/configure.ac
|
||||
+++ b/gdb/configure.ac
|
||||
@@ -891,6 +891,14 @@ else
|
||||
fi
|
||||
fi
|
||||
|
||||
+if test "${GCC}" = yes; then
|
||||
+ # G++ drops -lc, so wrap it using -Wl. See PR gcc/99896.
|
||||
+ GCC_LIBC="-Wl,-lc"
|
||||
+ AC_SUBST(LIBC, $GCC_LIBC)
|
||||
+else
|
||||
+ AC_SUBST(LIBC, -lc)
|
||||
+fi
|
||||
+
|
||||
dnl Use --with-python-libdir to control where GDB looks for the Python
|
||||
dnl libraries.
|
||||
dnl
|
@ -0,0 +1,88 @@
|
||||
Save/restore file offset while reading notes in core file
|
||||
|
||||
A recent bug (RH BZ 1931344) has exposed a bug in the core file
|
||||
build-ID support that I introduced a while ago. It is pretty
|
||||
easy to demonstate the problem following a simplified procedure
|
||||
outlined in that bug:
|
||||
|
||||
[shell1]
|
||||
shell1$ /usr/libexec/qemu-kvm
|
||||
|
||||
[shell2]
|
||||
shell2$ pkill -SEGV -x qemu-kvm
|
||||
|
||||
[shell1]
|
||||
Segmentation fault (core dumped)
|
||||
|
||||
Load this core file into GDB without specifying an executable
|
||||
(an unfortunate Fedora/RHEL-ism), and GDB will inform the user
|
||||
to install debuginfo for the "missing" executable:
|
||||
|
||||
$ gdb -nx -q core.12345
|
||||
...
|
||||
Missing separate debuginfo for the main executable file
|
||||
Try: dnf --enablerepo='*debug*' install /usr/lib/debug/.build-id/e2/e9c66d3117fb2bbb5b2be122f04f2664e5df54
|
||||
Core was generated by `/usr/libexec/qemu-kvm'.
|
||||
Program terminated with signal SIGSEGV, Segmentation fault.
|
||||
...
|
||||
|
||||
The suggested build-ID is actaully for gmp not qemu-kvm. The problem
|
||||
lies in _bfd_elf_core_find_build_id, where we loop over program headers
|
||||
looking for note segments:
|
||||
|
||||
/* Read in program headers and parse notes. */
|
||||
for (i = 0; i < i_ehdr.e_phnum; ++i, ++i_phdr)
|
||||
{
|
||||
Elf_External_Phdr x_phdr;
|
||||
|
||||
if (bfd_bread (&x_phdr, sizeof (x_phdr), abfd) != sizeof (x_phdr))
|
||||
goto fail;
|
||||
elf_swap_phdr_in (abfd, &x_phdr, i_phdr);
|
||||
|
||||
if (i_phdr->p_type == PT_NOTE && i_phdr->p_filesz > 0)
|
||||
{
|
||||
elf_read_notes (abfd, offset + i_phdr->p_offset,
|
||||
i_phdr->p_filesz, i_phdr->p_align);
|
||||
|
||||
if (abfd->build_id != NULL)
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
elf_read_notes uses bfd_seek to forward the stream to the location of
|
||||
the note segment. When control returns to _bfd_elf_core_fild_build_id,
|
||||
the stream is no longer in the location looking at program headers, and
|
||||
all subsequent reads will read from the wrong file offset.
|
||||
|
||||
To fix this, this patch marks the stream location and ensures
|
||||
that it is restored after elf_read_notes is called.
|
||||
|
||||
bfd/ChangeLog
|
||||
2021-03-26 Keith Seitz <keiths@redhat.com>
|
||||
|
||||
* elfcore.h (_bfd_elf_core_find_build_id): Seek file
|
||||
offset of program headers after calling elf_read_notes.
|
||||
|
||||
|
||||
|
||||
---
|
||||
bfd/elfcore.h | 7 +++++++
|
||||
2 files changed, 12 insertions(+)
|
||||
|
||||
diff --git a/bfd/elfcore.h b/bfd/elfcore.h
|
||||
index 3015e582ef0..4e6383415f7 100644
|
||||
--- a/bfd/elfcore.h
|
||||
+++ b/bfd/elfcore.h
|
||||
@@ -410,6 +410,13 @@ NAME(_bfd_elf, core_find_build_id)
|
||||
{
|
||||
elf_read_notes (abfd, offset + i_phdr->p_offset,
|
||||
i_phdr->p_filesz, i_phdr->p_align);
|
||||
+
|
||||
+ /* Make sure ABFD returns to processing the program headers. */
|
||||
+ if (bfd_seek (abfd, (file_ptr) (offset + i_ehdr.e_phoff
|
||||
+ + (i + 1) * sizeof (x_phdr)),
|
||||
+ SEEK_SET) != 0)
|
||||
+ goto fail;
|
||||
+
|
||||
if (abfd->build_id != NULL)
|
||||
return TRUE;
|
||||
}
|
165
gdb-symtab-fix-infinite-recursion-in-dwarf2_cu-get_builder.patch
Normal file
165
gdb-symtab-fix-infinite-recursion-in-dwarf2_cu-get_builder.patch
Normal file
@ -0,0 +1,165 @@
|
||||
[gdb/symtab] Fix infinite recursion in dwarf2_cu::get_builder()
|
||||
|
||||
With the test-case attached in PR26327, gdb aborts:
|
||||
...
|
||||
$ gdb -q -batch 447.dealII -ex "b main"
|
||||
Aborted (core dumped)
|
||||
...
|
||||
when running out of stack due to infinite recursion:
|
||||
...
|
||||
#8 0x00000000006aaba6 in dwarf2_cu::get_builder (this=0x35e4b40)
|
||||
at src/gdb/dwarf2/read.c:700
|
||||
#9 0x00000000006aaba6 in dwarf2_cu::get_builder (this=0x22ee2c0)
|
||||
at src/gdb/dwarf2/read.c:700
|
||||
#10 0x00000000006aaba6 in dwarf2_cu::get_builder (this=0x35e4b40)
|
||||
at src/gdb/dwarf2/read.c:700
|
||||
#11 0x00000000006aaba6 in dwarf2_cu::get_builder (this=0x22ee2c0)
|
||||
at src/gdb/dwarf2/read.c:700
|
||||
...
|
||||
|
||||
We're recursing in this code in dwarf2_cu::get_builder():
|
||||
...
|
||||
/* Otherwise, search ancestors for a valid builder. */
|
||||
if (ancestor != nullptr)
|
||||
return ancestor->get_builder ();
|
||||
...
|
||||
due to the fact that the ancestor chain is a cycle.
|
||||
|
||||
Higher up in the call stack, we find some code that is responsible for
|
||||
triggering this, in new_symbol:
|
||||
...
|
||||
case DW_TAG_formal_parameter:
|
||||
{
|
||||
/* If we are inside a function, mark this as an argument. If
|
||||
not, we might be looking at an argument to an inlined function
|
||||
when we do not have enough information to show inlined frames;
|
||||
pretend it's a local variable in that case so that the user can
|
||||
still see it. */
|
||||
struct context_stack *curr
|
||||
= cu->get_builder ()->get_current_context_stack ();
|
||||
if (curr != nullptr && curr->name != nullptr)
|
||||
SYMBOL_IS_ARGUMENT (sym) = 1;
|
||||
...
|
||||
|
||||
This is code that was added to support pre-4.1 gcc, to be able to show
|
||||
arguments of inlined functions as locals, in the absense of sufficiently
|
||||
correct debug information.
|
||||
|
||||
Removing this code (that is, doing SYMBOL_IS_ARGUMENT (sym) = 1
|
||||
unconditially), fixes the crash. The ancestor variable also seems to have
|
||||
been added specifically to deal with fallout from this code, so remove that as
|
||||
well.
|
||||
|
||||
Tested on x86_64-linux:
|
||||
- openSUSE Leap 15.2 with gcc 7.5.0, and
|
||||
- openSUSE Tumbleweed with gcc 10.3.0.
|
||||
|
||||
gdb/ChangeLog:
|
||||
|
||||
2021-05-07 Tom de Vries <tdevries@suse.de>
|
||||
|
||||
PR symtab/26327
|
||||
* dwarf2/read.c (struct dwarf2_cu): Remove ancestor.
|
||||
(dwarf2_cu::get_builder): Remove ancestor-related code.
|
||||
(new_symbol): Remove code supporting pre-4.1 gcc that show arguments
|
||||
of inlined functions as locals.
|
||||
(follow_die_offset, follow_die_sig_1): Remove setting of ancestor.
|
||||
|
||||
gdb/doc/ChangeLog:
|
||||
|
||||
2021-05-07 Tom de Vries <tdevries@suse.de>
|
||||
|
||||
PR symtab/26327
|
||||
* gdb.texinfo (Inline Functions): Update.
|
||||
|
||||
---
|
||||
gdb/doc/gdb.texinfo | 4 ++--
|
||||
gdb/dwarf2/read.c | 25 ++-----------------------
|
||||
4 files changed, 18 insertions(+), 25 deletions(-)
|
||||
|
||||
diff --git a/gdb/doc/gdb.texinfo b/gdb/doc/gdb.texinfo
|
||||
index 56f37eb2288..f4d7085da58 100644
|
||||
--- a/gdb/doc/gdb.texinfo
|
||||
+++ b/gdb/doc/gdb.texinfo
|
||||
@@ -13842,8 +13842,8 @@ when using @sc{dwarf 2}. Versions of @value{NGCC} before 4.1
|
||||
do not emit two required attributes (@samp{DW_AT_call_file} and
|
||||
@samp{DW_AT_call_line}); @value{GDBN} does not display inlined
|
||||
function calls with earlier versions of @value{NGCC}. It instead
|
||||
-displays the arguments and local variables of inlined functions as
|
||||
-local variables in the caller.
|
||||
+displays local variables of inlined functions as local variables in
|
||||
+the caller.
|
||||
|
||||
The body of an inlined function is directly included at its call site;
|
||||
unlike a non-inlined function, there are no instructions devoted to
|
||||
diff --git a/gdb/dwarf2/read.c b/gdb/dwarf2/read.c
|
||||
index 5796cf1730b..b2f48f1f395 100644
|
||||
--- a/gdb/dwarf2/read.c
|
||||
+++ b/gdb/dwarf2/read.c
|
||||
@@ -684,10 +684,6 @@ struct dwarf2_cu
|
||||
|
||||
struct partial_die_info *find_partial_die (sect_offset sect_off);
|
||||
|
||||
- /* If this CU was inherited by another CU (via specification,
|
||||
- abstract_origin, etc), this is the ancestor CU. */
|
||||
- dwarf2_cu *ancestor;
|
||||
-
|
||||
/* Get the buildsym_compunit for this CU. */
|
||||
buildsym_compunit *get_builder ()
|
||||
{
|
||||
@@ -695,10 +691,6 @@ struct dwarf2_cu
|
||||
if (m_builder != nullptr)
|
||||
return m_builder.get ();
|
||||
|
||||
- /* Otherwise, search ancestors for a valid builder. */
|
||||
- if (ancestor != nullptr)
|
||||
- return ancestor->get_builder ();
|
||||
-
|
||||
return nullptr;
|
||||
}
|
||||
};
|
||||
@@ -22045,15 +22037,7 @@ new_symbol (struct die_info *die, struct type *type, struct dwarf2_cu *cu,
|
||||
break;
|
||||
case DW_TAG_formal_parameter:
|
||||
{
|
||||
- /* If we are inside a function, mark this as an argument. If
|
||||
- not, we might be looking at an argument to an inlined function
|
||||
- when we do not have enough information to show inlined frames;
|
||||
- pretend it's a local variable in that case so that the user can
|
||||
- still see it. */
|
||||
- struct context_stack *curr
|
||||
- = cu->get_builder ()->get_current_context_stack ();
|
||||
- if (curr != nullptr && curr->name != nullptr)
|
||||
- SYMBOL_IS_ARGUMENT (sym) = 1;
|
||||
+ SYMBOL_IS_ARGUMENT (sym) = 1;
|
||||
attr = dwarf2_attr (die, DW_AT_location, cu);
|
||||
if (attr != nullptr)
|
||||
{
|
||||
@@ -23389,9 +23373,6 @@ follow_die_offset (sect_offset sect_off, int offset_in_dwz,
|
||||
*ref_cu = target_cu;
|
||||
temp_die.sect_off = sect_off;
|
||||
|
||||
- if (target_cu != cu)
|
||||
- target_cu->ancestor = cu;
|
||||
-
|
||||
return (struct die_info *) htab_find_with_hash (target_cu->die_hash,
|
||||
&temp_die,
|
||||
to_underlying (sect_off));
|
||||
@@ -23741,7 +23722,7 @@ follow_die_sig_1 (struct die_info *src_die, struct signatured_type *sig_type,
|
||||
struct dwarf2_cu **ref_cu)
|
||||
{
|
||||
struct die_info temp_die;
|
||||
- struct dwarf2_cu *sig_cu, *cu = *ref_cu;
|
||||
+ struct dwarf2_cu *sig_cu;
|
||||
struct die_info *die;
|
||||
dwarf2_per_objfile *per_objfile = (*ref_cu)->per_objfile;
|
||||
|
||||
@@ -23777,8 +23758,6 @@ follow_die_sig_1 (struct die_info *src_die, struct signatured_type *sig_type,
|
||||
}
|
||||
|
||||
*ref_cu = sig_cu;
|
||||
- if (sig_cu != cu)
|
||||
- sig_cu->ancestor = cu;
|
||||
|
||||
return die;
|
||||
}
|
12
gdb.changes
12
gdb.changes
@ -1,3 +1,15 @@
|
||||
-------------------------------------------------------------------
|
||||
Fri May 7 10:43:38 UTC 2021 - Tom de Vries <tdevries@suse.com>
|
||||
- Replace tentative fix with upstreamed fix [swo#27681]:
|
||||
Remove:
|
||||
* gdb-build-workaround-pcre2_posix-linking-problem.patch
|
||||
Add:
|
||||
* gdb-build-hardcode-with-included-regex.patch
|
||||
- Backport fix from upstream [bsc#1185638, swo#26327]:
|
||||
* gdb-symtab-fix-infinite-recursion-in-dwarf2_cu-get_builder.patch
|
||||
- Backport fix from upstream [rh#1931344]:
|
||||
* gdb-save-restore-file-offset-while-reading-notes-in-core-file.patch
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Sun May 2 18:24:36 UTC 2021 - Tom de Vries <tdevries@suse.com>
|
||||
|
||||
|
8
gdb.spec
8
gdb.spec
@ -295,7 +295,6 @@ Patch1512: gdb-tui-enable-work-around-libncurses-segfault.patch
|
||||
Patch1513: gdb-testsuite-fix-control-flow-in-gdb-reverse-insn-reverse-exp.patch
|
||||
Patch1514: gdb-fix-use-of-invalid-pointer-in-remote-async-inferior-event-handler.patch
|
||||
Patch1515: gdb-try-to-load-libthread_db-only-after-reading-all-shared-libraries-when-attaching.patch
|
||||
Patch1516: gdb-build-workaround-pcre2_posix-linking-problem.patch
|
||||
|
||||
# Backports from master
|
||||
|
||||
@ -317,6 +316,9 @@ Patch2015: gdb-threads-fix-lin_thread_get_thread_signals-for-glibc-2.28.pat
|
||||
Patch2016: gdb-testsuite-ignore-debuginfod_urls.patch
|
||||
Patch2017: gdb-testsuite-fix-unset-of-debuginfod_urls-in-default_gdb_init.patch
|
||||
Patch2018: gdb-tui-fix-len_without_escapes-in-tui-disasm.c.patch
|
||||
Patch2019: gdb-build-hardcode-with-included-regex.patch
|
||||
Patch2020: gdb-symtab-fix-infinite-recursion-in-dwarf2_cu-get_builder.patch
|
||||
Patch2021: gdb-save-restore-file-offset-while-reading-notes-in-core-file.patch
|
||||
|
||||
# Testsuite patches
|
||||
|
||||
@ -714,7 +716,6 @@ find -name "*.info*"|xargs rm -f
|
||||
%patch1513 -p1
|
||||
%patch1514 -p1
|
||||
%patch1515 -p1
|
||||
%patch1516 -p1
|
||||
|
||||
%patch2000 -p1
|
||||
%patch2002 -p1
|
||||
@ -734,6 +735,9 @@ find -name "*.info*"|xargs rm -f
|
||||
%patch2016 -p1
|
||||
%patch2017 -p1
|
||||
%patch2018 -p1
|
||||
%patch2019 -p1
|
||||
%patch2020 -p1
|
||||
%patch2021 -p1
|
||||
|
||||
%patch2500 -p1
|
||||
%if 0%{?suse_version} > 1500
|
||||
|
Loading…
x
Reference in New Issue
Block a user