public inbox for gdb-patches@sourceware.org
 help / color / mirror / Atom feed
From: Bruno Larsen <blarsen@redhat.com>
To: Simon Marchi <simon.marchi@polymtl.ca>, gdb-patches@sourceware.org
Subject: Re: [PATCH 2/7] gdb: add prepare_reinflate/reinflate around print_frame_args in info_frame_command_core
Date: Tue, 8 Nov 2022 10:32:12 +0100	[thread overview]
Message-ID: <522f68d7-1452-e275-93c7-b6989b40e5f6@redhat.com> (raw)
In-Reply-To: <20221107155310.2590069-2-simon.marchi@polymtl.ca>

On 07/11/2022 16:53, Simon Marchi via Gdb-patches wrote:
> 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.

Can confirm that the crash is reproducible and that the patch fixes the 
problem. Sorry for missing it the first time. Makes me wonder if I also 
missed this in print_frame... Either way:

Reviewed-By: Bruno Larsen <blarsen@redhat.com>

-- 
Cheers,
Bruno


  reply	other threads:[~2022-11-08  9:32 UTC|newest]

Thread overview: 24+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-11-07 15:53 [PATCH 1/7] gdb: clear other.m_cached_id in frame_info_ptr's move ctor Simon Marchi
2022-11-07 15:53 ` [PATCH 2/7] gdb: add prepare_reinflate/reinflate around print_frame_args in info_frame_command_core Simon Marchi
2022-11-08  9:32   ` Bruno Larsen [this message]
2022-11-08 15:55     ` Simon Marchi
2022-11-08 19:39       ` Tom Tromey
2022-11-08 19:55         ` Simon Marchi
2022-11-07 15:53 ` [PATCH 3/7] gdb: move frame_info_ptr method implementations to frame-info.c Simon Marchi
2022-11-08  9:55   ` Bruno Larsen
2022-11-08 17:39     ` Tom Tromey
2022-11-07 15:53 ` [PATCH 4/7] gdb: remove manual frame_info reinflation code in backtrace_command_1 Simon Marchi
2022-11-08 10:14   ` Bruno Larsen
2022-11-08 16:05     ` Simon Marchi
2022-11-07 15:53 ` [PATCH 5/7] gdb: use frame_id_p instead of comparing to null_frame_id in frame_info_ptr::reinflate Simon Marchi
2022-11-08 17:43   ` Tom Tromey
2022-11-07 15:53 ` [PATCH 6/7] gdb: add missing prepare_reinflate call in print_frame_info Simon Marchi
2022-11-08 10:28   ` Bruno Larsen
2022-11-08 11:31   ` Lancelot SIX
2022-11-08 16:08     ` Simon Marchi
2022-11-07 15:53 ` [PATCH 7/7] gdb: add special handling for frame level 0 in frame_info_ptr Simon Marchi
2022-11-08 10:40   ` Bruno Larsen
2022-11-08 16:19     ` Simon Marchi
2022-11-10 16:28       ` Bruno Larsen
2022-11-10 16:30         ` Simon Marchi
2022-11-08  8:53 ` [PATCH 1/7] gdb: clear other.m_cached_id in frame_info_ptr's move ctor Bruno Larsen

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=522f68d7-1452-e275-93c7-b6989b40e5f6@redhat.com \
    --to=blarsen@redhat.com \
    --cc=gdb-patches@sourceware.org \
    --cc=simon.marchi@polymtl.ca \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).