Go to file
Simon Marchi 3dc9dde26d gdb: add prepare_reinflate/reinflate around print_frame_args in info_frame_command_core
I noticed this crash:

    $ ./gdb --data-directory=data-directory -nx -q \
          testsuite/outputs/gdb.python/pretty-print-call-by-hand/pretty-print-call-by-hand \
	  -x testsuite/outputs/gdb.python/pretty-print-call-by-hand/pretty-print-call-by-hand.py \
	  -ex "b g" -ex r
    (gdb) info frame
    Stack level 0, frame at 0x7fffffffdd80:
     rip = 0x555555555160 in g
        (/home/simark/src/binutils-gdb/gdb/testsuite/gdb.python/pretty-print-call-by-hand.c:41); saved rip = 0x5555555551a3
     called by frame at 0x7fffffffdda0
     source language c.
     Arglist at 0x7fffffffdd70, args: mt=mytype is 0x555555556004 "hello world",
        depth=10

    Fatal signal: Segmentation fault

This is another case of frame_info being invalidated under a function's
feet.  The stack trace when the frame_info get invalidated looks like:

    ... many frames to pretty print the arg, that eventually invalidate the frame_infos ...
    #35 0x00005568d0a8ab24 in print_frame_arg (fp_opts=..., arg=0x7ffc3216bcb0) at /home/simark/src/binutils-gdb/gdb/stack.c:489
    #36 0x00005568d0a8cc75 in print_frame_args (fp_opts=..., func=0x621000233210, frame=..., num=-1, stream=0x60b000000300)
        at /home/simark/src/binutils-gdb/gdb/stack.c:898
    #37 0x00005568d0a9536d in info_frame_command_core (fi=..., selected_frame_p=true) at /home/simark/src/binutils-gdb/gdb/stack.c:1682

print_frame_args knows that print_frame_arg can invalidate frame_info
objects, and therefore calls prepare_reinflate/reinflate.  However,
info_frame_command_core has a separate frame_info_ptr instance (it is
passed by value / copy).  So info_frame_command_core needs to know that
print_frame_args can invalidate frame_info objects, and therefore needs
to prepare_reinflate/reinflate as well.  Add those calls, and enhance
the gdb.python/pretty-print-call-by-hand.exp test to test that command.

Reviewed-By: Bruno Larsen <blarsen@redhat.com>
Change-Id: I9edaae06d62e97ffdb30938d364437737238a960
2022-11-10 11:33:02 -05:00
bfd mach-o reloc size overflow 2022-11-10 20:29:03 +10:30
binutils Re: Fuzzed files in archives 2022-11-09 17:31:41 +10:30
config configure: require libzstd >= 1.4.0 2022-11-07 14:32:10 +01:00
contrib
cpu
elfcpp
etc
gas x86/Intel: don't accept malformed EXTRQ / INSERTQ 2022-11-09 11:09:34 +01:00
gdb gdb: add prepare_reinflate/reinflate around print_frame_args in info_frame_command_core 2022-11-10 11:33:02 -05:00
gdbserver gdbserver: do not report btrace support if target does not announce it 2022-11-09 17:46:21 +01:00
gdbsupport gdbsupport, gdb: add read_text_file_to_string, use it in linux_common_core_of_thread 2022-11-08 16:50:52 -05:00
gnulib
gold
gprof Updated Hungarian translation for the gprof sub-directory. 2022-10-21 10:55:57 +01:00
gprofng
include sim: drop unused CORE_ADDR_TYPE 2022-11-08 14:09:06 +07:00
intl
ld ld/testsuite: skip ld-size when -shared is not supported 2022-11-10 13:19:15 +01:00
libbacktrace
libctf configure: require libzstd >= 1.4.0 2022-11-07 14:32:10 +01:00
libdecnumber
libiberty
opcodes [opcodes/arm] Fix potential null pointer dereferences 2022-11-10 01:12:17 +00:00
readline
sim sim: ppc: drop old makefile fragment 2022-11-10 14:45:47 +07:00
texinfo
zlib
.cvsignore
.editorconfig
.gitattributes
.gitignore
ar-lib
ChangeLog
compile
config-ml.in
config.guess
config.rpath
config.sub
configure Reapply "Don't build readline/libreadline.a, when --with-system-readline is supplied" 2022-10-20 17:05:04 +02:00
configure.ac Reapply "Don't build readline/libreadline.a, when --with-system-readline is supplied" 2022-10-20 17:05:04 +02:00
COPYING
COPYING3
COPYING3.LIB
COPYING.LIB
COPYING.LIBGLOSS
COPYING.NEWLIB
depcomp
djunpack.bat
install-sh
libtool.m4
lt~obsolete.m4
ltgcc.m4
ltmain.sh
ltoptions.m4
ltsugar.m4
ltversion.m4
MAINTAINERS
Makefile.def
Makefile.in
Makefile.tpl
makefile.vms
missing
mkdep
mkinstalldirs
move-if-change
multilib.am
README
README-maintainer-mode
setup.com
src-release.sh
symlink-tree
test-driver
ylwrap

		   README for GNU development tools

This directory contains various GNU compilers, assemblers, linkers, 
debuggers, etc., plus their support routines, definitions, and documentation.

If you are receiving this as part of a GDB release, see the file gdb/README.
If with a binutils release, see binutils/README;  if with a libg++ release,
see libg++/README, etc.  That'll give you info about this
package -- supported targets, how to use it, how to report bugs, etc.

It is now possible to automatically configure and build a variety of
tools with one command.  To build all of the tools contained herein,
run the ``configure'' script here, e.g.:

	./configure 
	make

To install them (by default in /usr/local/bin, /usr/local/lib, etc),
then do:
	make install

(If the configure script can't determine your type of computer, give it
the name as an argument, for instance ``./configure sun4''.  You can
use the script ``config.sub'' to test whether a name is recognized; if
it is, config.sub translates it to a triplet specifying CPU, vendor,
and OS.)

If you have more than one compiler on your system, it is often best to
explicitly set CC in the environment before running configure, and to
also set CC when running make.  For example (assuming sh/bash/ksh):

	CC=gcc ./configure
	make

A similar example using csh:

	setenv CC gcc
	./configure
	make

Much of the code and documentation enclosed is copyright by
the Free Software Foundation, Inc.  See the file COPYING or
COPYING.LIB in the various directories, for a description of the
GNU General Public License terms under which you can copy the files.

REPORTING BUGS: Again, see gdb/README, binutils/README, etc., for info
on where and how to report problems.