From: Tom de Vries via Gdb-patches <gdb-patches@sourceware.org>
To: Simon Marchi <simark@simark.ca>, gdb-patches@sourceware.org
Subject: Re: [PATCH][gdb/testsuite] Detect 'No MPX support'
Date: Wed, 13 Apr 2022 10:58:29 +0200 [thread overview]
Message-ID: <6f5f73b0-3739-8dda-035f-01181e093860@suse.de> (raw)
In-Reply-To: <b41aaf8f-21de-24ee-7876-7c68bf24ddce@suse.de>
On 4/12/22 08:03, Tom de Vries wrote:
> On 4/11/22 17:00, Simon Marchi wrote:
>> On 2022-04-11 10:25, Tom de Vries via Gdb-patches wrote:
>>> Hi,
>>>
>>> On openSUSE Leap 15.3, mpx support has been disabled for m32, so I
>>> run into:
>>> ...
>>> (gdb) run ^M
>>> Starting program: outputs/gdb.arch/i386-mpx/i386-mpx ^M
>>> [Thread debugging using libthread_db enabled]^M
>>> Using host libthread_db library "/lib64/libthread_db.so.1".^M
>>> No MPX support^M
>>> ...
>>> and eventually into all sort of fails in this and other mpx test-cases.
>>>
>>> Fix this by detecting the "No MPX support" message in have_mpx.
>>>
>>> Tested on x86_64-linux with target boards unix and unix/-m32.
>>>
>>> Any comments?
>>>
>>> Thanks,
>>> - Tom
>>>
>>> [gdb/testsuite] Detect 'No MPX support'
>>>
>>> ---
>>> gdb/testsuite/lib/gdb.exp | 23 +++++++++++++++++++++++
>>> 1 file changed, 23 insertions(+)
>>>
>>> diff --git a/gdb/testsuite/lib/gdb.exp b/gdb/testsuite/lib/gdb.exp
>>> index 2eb711748e7..9eb01e0b4b2 100644
>>> --- a/gdb/testsuite/lib/gdb.exp
>>> +++ b/gdb/testsuite/lib/gdb.exp
>>> @@ -8329,6 +8329,29 @@ gdb_caching_proc have_mpx {
>>>
>>> remote_file build delete $obj
>>>
>>> + if { $status == 0 } {
>>> + verbose "$me: returning $status" 2
>>> + return $status
>>> + }
>>> +
>>> + # Compile program with -mmpx -fcheck-pointer-bounds, try to trigger
>>> + # 'No MPX support', in other words, see if kernel supports mpx.
>>> + set src { int main (void) { return 0; } }
>>> + set comp_flags {}
>>> + append comp_flags " additional_flags=-mmpx"
>>> + append comp_flags " additional_flags=-fcheck-pointer-bounds"
>>> + if {![gdb_simple_compile $me-2 $src executable $comp_flags]} {
>>> + return 0
>>> + }
>>> +
>>> + set result [remote_exec target $obj]
>>> + set status [lindex $result 0]
>>> + set output [lindex $result 1]
>>> + set status [expr ($status == 0) \
>>> + && ![string equal $output "No MPX support\r\n"]]
>>> +
>>> + remote_file build delete $obj
>>> +
>>> verbose "$me: returning $status" 2
>>> return $status
>>> }
>>
>> It seems fine to me. I am just wondering:
>>
>> - Who prints this "No MPX support" string exactly?
>
> Libmpx. On gcc-7-branch:
> ...
> ./libmpx/mpxrt/mpxrt.c: __mpxrt_print (VERB_DEBUG, "No MPX
> support.\n");
> ./libmpx/mpxrt/mpxrt.c: __mpxrt_print (VERB_ERROR, "No MPX
> support\n");
> ./libmpx/mpxrt/mpxrt.c: __mpxrt_print (VERB_ERROR, "No MPX
> support\n");
> ...
>
> When it is printed,
>> is the status other than 0? If so, it wouldn't be necessary to check
>> for the "No MPX support" output, just check if the program runs
>> successfully.
>
> No, the status is the same:
> ...
> $ cat ~/min.c
> int
> main (void)
> {
> return 0;
> }
> $ gcc -mmpx -fcheck-pointer-bounds ~/min.c
> $ ./a.out; echo $?
> 0
> $ gcc -mmpx -fcheck-pointer-bounds ~/min.c -m32
> $ ./a.out; echo $?
> No MPX support
> 0
> ...
>
>> - Why do you need to compile a separate program with -mmpx, why not the
>> existing test program?
>
> The existing test program tries to check for cpu support, which requires
> some very specific code.
>
> The added test checks for kernel support, which (because we're relying
> on libmpx output) AFAICT requires no particular program, so I'm using
> the minimal source possible. This for clarity, to prevent giving the
> impression in any way that the source does matter.
>
> I suppose it would be possible to use a more specific test-case that is
> supposed to have a different status with and without kernel support. But
> I don't think it makes sense to invest in that unless we run into
> trouble with this approach.
>
Hi,
any further comments?
I realize you already mentioned that it seems fine to you, but given that:
- you still had questions, and
- I'm also planning to apply to gdb-12-branch
I thought I ask.
Thanks,
- Tom
next prev parent reply other threads:[~2022-04-13 8:58 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-04-11 14:25 Tom de Vries via Gdb-patches
2022-04-11 15:00 ` Simon Marchi
2022-04-12 6:03 ` Tom de Vries via Gdb-patches
2022-04-13 8:58 ` Tom de Vries via Gdb-patches [this message]
2022-04-13 15:29 ` Simon Marchi
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=6f5f73b0-3739-8dda-035f-01181e093860@suse.de \
--to=gdb-patches@sourceware.org \
--cc=simark@simark.ca \
--cc=tdevries@suse.de \
/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