From: Andy Lutomirski <[email protected]>
To: Simon Marchi <[email protected]>
Cc: Andy Lutomirski <[email protected]>,
Stefan Metzmacher <[email protected]>,
Borislav Petkov <[email protected]>,
Peter Zijlstra <[email protected]>,
Linus Torvalds <[email protected]>,
Thomas Gleixner <[email protected]>,
Jens Axboe <[email protected]>,
Linux Kernel Mailing List <[email protected]>,
io-uring <[email protected]>,
"the arch/x86 maintainers" <[email protected]>,
[email protected]
Subject: Re: [PATCH] io_thread/x86: don't reset 'cs', 'ss', 'ds' and 'es' registers for io_threads
Date: Thu, 6 May 2021 08:11:24 -0700 [thread overview]
Message-ID: <CALCETrUP1+Vy=PJASbXWgUUFHTrskLb+fO2-1huQT7A_GZpTyA@mail.gmail.com> (raw)
In-Reply-To: <[email protected]>
On Wed, May 5, 2021 at 6:04 PM Simon Marchi <[email protected]> wrote:
>
> On 2021-05-05 6:11 p.m., Andy Lutomirski wrote:
> I looked at how GDB reads registers from a "64-bit" task and a "32-bit"
> task (I have to quote now, since I now know it's an abuse of
> terminology) side by side. And indeed, GDB reads a full 64-bit state in
> both cases. For the 32-bit case, it picks the 32-bit values from that
> buffer. For example, to get the eax value it picks the low 4 bytes of
> rax (well, ax in user_regs_struct).
>
> So I suppose that if GDB wanted to tell nothing but the truth, it would
> present the full 64-bit register state to the user even when debugging a
> 32-bit program. But at the end of the day, the typical user debugging a
> 32-bit program on a 64-bit probably just wants the illusion that they
> are on i386.
True. I see no reason, especially by default, to show the extra
registers. On the other hand, if the program switches modes, having
gdb notice would be nice. And, if gdb handled this correctly, all
this io_uring stuff would be entirely moot. The made-up register
state of the io_uring thread would have no bearing on the debugging of
other threads.
>
> > Now I realize that the ptrace() API is awful and makes life difficult
> > in several respects for no good reason but, if gdb is ever interested
> > in fixing its ideas about architecture to understand that all tasks,
> > even those that think of themselves as "compat", have full 64-bit
> > state, I would be more than willing to improve the ptrace() API as
> > needed to make this work well.
>
> Just wondering, do you have specific ptrace shortcomings in mind when
> saying this? As I found above, ptrace lets us read the whole 64-bit
> register state. After that it's up to us to analyze the state of the
> program based on its registers and memory. What more could ptrace give
> us?
Two specific issues come to mind:
1. PTRACE_GETREGSET and PTRACE_SETREGSET are terminally broken. See
the comment above task_user_regset_view() in arch/x86/kernel/ptrace.c.
We need a new version of those APIs that takes an e_machine parameter.
(I don't even see how you can call these APIs safely at all, short of
allocating a buffer with a guard page or intentionally over-allocating
and calculating the maximum possible size of buffer that could be used
in case of a screwup.)
2. There should be an API to either read the descriptor table or to
look up a specific descriptor. How else are you supposed to know
whether CS.L is set? (Keep in mind that 0x33 is not necessarily the
only long mode segment that gets used. Linux on Xen PV has an extra
one.)
--Andy
next prev parent reply other threads:[~2021-05-06 15:11 UTC|newest]
Thread overview: 44+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <[email protected]>
2021-05-03 16:05 ` [PATCH] io_thread/x86: don't reset 'cs', 'ss', 'ds' and 'es' registers for io_threads Andy Lutomirski
2021-05-03 19:14 ` Linus Torvalds
2021-05-03 20:15 ` Andy Lutomirski
2021-05-03 20:21 ` Andy Lutomirski
2021-05-03 20:37 ` Linus Torvalds
2021-05-03 21:26 ` Jens Axboe
2021-05-03 21:49 ` Andy Lutomirski
2021-05-03 22:08 ` Linus Torvalds
2021-05-03 22:56 ` Thomas Gleixner
2021-05-03 23:15 ` Andy Lutomirski
2021-05-03 23:16 ` Linus Torvalds
2021-05-03 23:19 ` Linus Torvalds
2021-05-03 23:27 ` Stefan Metzmacher
2021-05-03 23:48 ` Linus Torvalds
2021-05-04 2:50 ` Jens Axboe
2021-05-04 11:39 ` Stefan Metzmacher
2021-05-04 15:53 ` Linus Torvalds
2021-05-12 4:24 ` Olivier Langlois
2021-05-12 17:44 ` Linus Torvalds
2021-05-12 20:55 ` Jens Axboe
2021-05-20 4:13 ` Olivier Langlois
2021-05-21 7:31 ` Olivier Langlois
2021-05-25 19:39 ` Olivier Langlois
2021-05-25 19:45 ` Olivier Langlois
2021-05-25 19:52 ` Jens Axboe
2021-05-25 20:23 ` Linus Torvalds
2021-05-04 8:22 ` David Laight
2021-05-04 0:01 ` Andy Lutomirski
2021-05-04 8:39 ` Peter Zijlstra
2021-05-04 15:35 ` Borislav Petkov
2021-05-04 15:55 ` Simon Marchi
2021-05-05 11:29 ` Stefan Metzmacher
2021-05-05 21:59 ` Simon Marchi
2021-05-05 22:11 ` Andy Lutomirski
2021-05-05 23:12 ` Borislav Petkov
2021-05-05 23:22 ` Andy Lutomirski
2021-05-06 1:04 ` Simon Marchi
2021-05-06 15:11 ` Andy Lutomirski [this message]
2021-05-06 9:47 ` David Laight
2021-05-06 9:53 ` David Laight
2021-05-05 22:21 ` Stefan Metzmacher
2021-05-05 23:15 ` Simon Marchi
2021-04-11 15:27 Stefan Metzmacher
2021-04-14 21:28 ` Stefan Metzmacher
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='CALCETrUP1+Vy=PJASbXWgUUFHTrskLb+fO2-1huQT7A_GZpTyA@mail.gmail.com' \
[email protected] \
[email protected] \
[email protected] \
[email protected] \
[email protected] \
[email protected] \
[email protected] \
[email protected] \
[email protected] \
[email protected] \
[email protected] \
[email protected] \
/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