[pushed,8.0-branch,Bug,server/22137] gdbserver crashes on hosts with pkru register

Message ID 4e1810f2-a6cd-1c80-bdc6-6588e8759246@redhat.com
State New, archived
Headers

Commit Message

Pedro Alves Oct. 16, 2017, 12:49 p.m. UTC
  On 10/16/2017 09:30 AM, Tedeschi, Walfred wrote:
>> -----Original Message-----
>> From: palves at redhat dot com [mailto:sourceware-
>> bugzilla@sourceware.org]
>> Sent: Friday, October 13, 2017 11:06 AM
>> To: Tedeschi, Walfred <walfred.tedeschi@intel.com>
>> Subject: [Bug server/22137] gdbserver crashes on hosts with pkru register
>>
>> https://sourceware.org/bugzilla/show_bug.cgi?id=22137
>>
>> Pedro Alves <palves at redhat dot com> changed:
>>
>>            What    |Removed                     |Added
>> ----------------------------------------------------------------------------
>>              Status|UNCONFIRMED                 |NEW
>>    Last reconfirmed|                            |2017-10-13
>>      Ever confirmed|0                           |1
>>
>> --- Comment #3 from Pedro Alves <palves at redhat dot com> ---
>>> Bug is confirmed.
>>
>> Updating status then.  Waldfred, if your account doesn't let you do that
>> yourself, please let me know.
>>
>> And, I believe the bug is fixed in both master and 8.0 branch, right?
>>
> Hello Pedro,
> 
> I have pushed this one to 8.0 branch.  In Master it does not apply anymore.

Yes, you had fixed it in 

 commit 1b7fa39ed9678fded7264636c1e5cc14c6d6ebc6
 Author:     Walfred Tedeschi <walfred.tedeschi@intel.com>
 AuthorDate: Wed Sep 20 15:24:47 2017 +0200

    [OBV] amd64-features-makefile: add missing backslash.
    
    In an old commit the backslash of was missing in the rule for creating the
    i386-avx-mpx-avx512-pku.dat file.  No need to regenerate the files, this
    was done by another commit from Yao.

Note that if you mention the PR number in the commit log (which
happens if you put the PR number in the ChangeLog entry, given the
ChangeLog is pasted in the commit log too), then the bug in bugzilla
is automatically updated to refer to the commit.

> I also couldn't compile master:
> ../../../binutils-gdb/gdb/probe.c: In function \u2018void parse_probes_in_pspace(const probe_ops*, program_space*, const char*, const char*, const char*, std::vector<symtab_and_line>*)\u2019:
> ../../../binutils-gdb/gdb/probe.c:68:12: error: types may not be defined in a for-range-declaration [-Werror]
>        for (struct probe *probe : probes)
>             ^~~~~~
> ../../../binutils-gdb/gdb/probe.c: In function \u2018VEC_probe_p* find_probes_in_objfile(objfile*, const char*, const char*)\u2019:
> ../../../binutils-gdb/gdb/probe.c:213:8: error: types may not be defined in a for-range-declaration [-Werror]
>    for (struct probe *probe : probes)
>         ^~~~~~
> 
> Are you aware of it?

Yes, it's a GCC bug:
 https://sourceware.org/ml/gdb-patches/2017-09/msg00270.html

What is your gcc version?

I don't see this myself, but I know that Keith also ran into this
recently.  If it's easy to work around it, I don't see why not.

Does this work for you?

From 9c7590f2ea94930fd9280a6d66610edd53c0bb16 Mon Sep 17 00:00:00 2001
From: Pedro Alves <palves@redhat.com>
Date: Mon, 16 Oct 2017 13:39:12 +0100
Subject: [PATCH] fix

---
 gdb/probe.c | 12 ++++++------
 1 file changed, 6 insertions(+), 6 deletions(-)
  

Comments

Walfred Tedeschi Oct. 16, 2017, 1:20 p.m. UTC | #1
> -----Original Message-----

> From: gdb-patches-owner@sourceware.org [mailto:gdb-patches-

> owner@sourceware.org] On Behalf Of Pedro Alves

> Sent: Monday, October 16, 2017 2:50 PM

> To: Tedeschi, Walfred <walfred.tedeschi@intel.com>; gdb-

> patches@sourceware.org

> Subject: Re: [pushed 8.0-branch] [Bug server/22137] gdbserver crashes on

> hosts with pkru register

> 

> On 10/16/2017 09:30 AM, Tedeschi, Walfred wrote:

> >> -----Original Message-----

> >> From: palves at redhat dot com [mailto:sourceware-

> >> bugzilla@sourceware.org]

> >> Sent: Friday, October 13, 2017 11:06 AM

> >> To: Tedeschi, Walfred <walfred.tedeschi@intel.com>

> >> Subject: [Bug server/22137] gdbserver crashes on hosts with pkru

> >> register

> >>

> >> https://sourceware.org/bugzilla/show_bug.cgi?id=22137

> >>

> >> Pedro Alves <palves at redhat dot com> changed:

> >>

> >>            What    |Removed                     |Added

> >> ----------------------------------------------------------------------------

> >>              Status|UNCONFIRMED                 |NEW

> >>    Last reconfirmed|                            |2017-10-13

> >>      Ever confirmed|0                           |1

> >>

> >> --- Comment #3 from Pedro Alves <palves at redhat dot com> ---

> >>> Bug is confirmed.

> >>

> >> Updating status then.  Waldfred, if your account doesn't let you do

> >> that yourself, please let me know.

> >>

> >> And, I believe the bug is fixed in both master and 8.0 branch, right?

> >>

> > Hello Pedro,

> >

> > I have pushed this one to 8.0 branch.  In Master it does not apply anymore.

> 

> Yes, you had fixed it in


After some exercises I could see that in master it is not reproducible. It is already fixed there.

> 

>  commit 1b7fa39ed9678fded7264636c1e5cc14c6d6ebc6

>  Author:     Walfred Tedeschi <walfred.tedeschi@intel.com>

>  AuthorDate: Wed Sep 20 15:24:47 2017 +0200

> 

>     [OBV] amd64-features-makefile: add missing backslash.

> 

>     In an old commit the backslash of was missing in the rule for creating the

>     i386-avx-mpx-avx512-pku.dat file.  No need to regenerate the files, this

>     was done by another commit from Yao.

> 

> Note that if you mention the PR number in the commit log (which happens if

> you put the PR number in the ChangeLog entry, given the ChangeLog is

> pasted in the commit log too), then the bug in bugzilla is automatically

> updated to refer to the commit.

> 


Sorry! I missed there!

> > I also couldn't compile master:

> > ../../../binutils-gdb/gdb/probe.c: In function \u2018void

> parse_probes_in_pspace(const probe_ops*, program_space*, const char*,

> const char*, const char*, std::vector<symtab_and_line>*)\u2019:

> > ../../../binutils-gdb/gdb/probe.c:68:12: error: types may not be defined in a

> for-range-declaration [-Werror]

> >        for (struct probe *probe : probes)

> >             ^~~~~~

> > ../../../binutils-gdb/gdb/probe.c: In function \u2018VEC_probe_p*

> find_probes_in_objfile(objfile*, const char*, const char*)\u2019:

> > ../../../binutils-gdb/gdb/probe.c:213:8: error: types may not be defined in a

> for-range-declaration [-Werror]

> >    for (struct probe *probe : probes)

> >         ^~~~~~

> >

> > Are you aware of it?

> 

> Yes, it's a GCC bug:

>  https://sourceware.org/ml/gdb-patches/2017-09/msg00270.html

> 

> What is your gcc version?

> 

> I don't see this myself, but I know that Keith also ran into this recently.  If it's

> easy to work around it, I don't see why not.

> 

> Does this work for you?

> 

It worked!
Thanks!
/Fred
> From 9c7590f2ea94930fd9280a6d66610edd53c0bb16 Mon Sep 17 00:00:00

> 2001

> From: Pedro Alves <palves@redhat.com>

> Date: Mon, 16 Oct 2017 13:39:12 +0100

> Subject: [PATCH] fix

> 

> ---

>  gdb/probe.c | 12 ++++++------

>  1 file changed, 6 insertions(+), 6 deletions(-)

> 

> diff --git a/gdb/probe.c b/gdb/probe.c

> index b3dbf89..f657548 100644

> --- a/gdb/probe.c

> +++ b/gdb/probe.c

> @@ -65,23 +65,23 @@ parse_probes_in_pspace (const struct probe_ops

> *probe_ops,

>        const std::vector<probe *> &probes

>  	= objfile->sf->sym_probe_fns->sym_get_probes (objfile);

> 

> -      for (struct probe *probe : probes)

> +      for (probe *pro : probes)

>  	{

> -	  if (probe_ops != &probe_ops_any && probe->pops != probe_ops)

> +	  if (probe_ops != &probe_ops_any && pro->pops != probe_ops)

>  	    continue;

> 

> -	  if (provider && strcmp (probe->provider, provider) != 0)

> +	  if (provider && strcmp (pro->provider, provider) != 0)

>  	    continue;

> 

> -	  if (strcmp (probe->name, name) != 0)

> +	  if (strcmp (pro->name, name) != 0)

>  	    continue;

> 

>  	  symtab_and_line sal;

> -	  sal.pc = get_probe_address (probe, objfile);

> +	  sal.pc = get_probe_address (pro, objfile);

>  	  sal.explicit_pc = 1;

>  	  sal.section = find_pc_overlay (sal.pc);

>  	  sal.pspace = search_pspace;

> -	  sal.probe = probe;

> +	  sal.probe = pro;

>  	  sal.objfile = objfile;

> 

>  	  result->push_back (std::move (sal));

> --

> 2.5.5


Thanks and regards,
/Fred
Intel Deutschland GmbH
Registered Address: Am Campeon 10-12, 85579 Neubiberg, Germany
Tel: +49 89 99 8853-0, www.intel.de
Managing Directors: Christin Eisenschmid, Christian Lamprechter
Chairperson of the Supervisory Board: Nicole Lau
Registered Office: Munich
Commercial Register: Amtsgericht Muenchen HRB 186928
  
Pedro Alves Oct. 16, 2017, 1:44 p.m. UTC | #2
On 10/16/2017 02:20 PM, Tedeschi, Walfred wrote:
> 
>>> > > I also couldn't compile master:
>>> > > ../../../binutils-gdb/gdb/probe.c: In function \u2018void
>> > parse_probes_in_pspace(const probe_ops*, program_space*, const char*,
>> > const char*, const char*, std::vector<symtab_and_line>*)\u2019:
>>> > > ../../../binutils-gdb/gdb/probe.c:68:12: error: types may not be defined in a
>> > for-range-declaration [-Werror]
>>> > >        for (struct probe *probe : probes)
>>> > >             ^~~~~~
>>> > > ../../../binutils-gdb/gdb/probe.c: In function \u2018VEC_probe_p*
>> > find_probes_in_objfile(objfile*, const char*, const char*)\u2019:
>>> > > ../../../binutils-gdb/gdb/probe.c:213:8: error: types may not be defined in a
>> > for-range-declaration [-Werror]
>>> > >    for (struct probe *probe : probes)
>>> > >         ^~~~~~
>>> > >
>>> > > Are you aware of it?
>> > 
>> > Yes, it's a GCC bug:
>> >  https://sourceware.org/ml/gdb-patches/2017-09/msg00270.html
>> > 
>> > What is your gcc version?
>> > 
>> > I don't see this myself, but I know that Keith also ran into this recently.  If it's
>> > easy to work around it, I don't see why not.
>> > 
>> > Does this work for you?
>> > 
> It worked!

Thanks, I'll push in a bit.  I'm still curious to 
know your gcc version though.

Actually, I'm confused on how it worked for you, since
I hadn't fixed the same problem around line "213" quoted
above.

Are you sure you tested with the same compiler?

Thanks,
Pedro Alves
  

Patch

diff --git a/gdb/probe.c b/gdb/probe.c
index b3dbf89..f657548 100644
--- a/gdb/probe.c
+++ b/gdb/probe.c
@@ -65,23 +65,23 @@  parse_probes_in_pspace (const struct probe_ops *probe_ops,
       const std::vector<probe *> &probes
 	= objfile->sf->sym_probe_fns->sym_get_probes (objfile);
 
-      for (struct probe *probe : probes)
+      for (probe *pro : probes)
 	{
-	  if (probe_ops != &probe_ops_any && probe->pops != probe_ops)
+	  if (probe_ops != &probe_ops_any && pro->pops != probe_ops)
 	    continue;
 
-	  if (provider && strcmp (probe->provider, provider) != 0)
+	  if (provider && strcmp (pro->provider, provider) != 0)
 	    continue;
 
-	  if (strcmp (probe->name, name) != 0)
+	  if (strcmp (pro->name, name) != 0)
 	    continue;
 
 	  symtab_and_line sal;
-	  sal.pc = get_probe_address (probe, objfile);
+	  sal.pc = get_probe_address (pro, objfile);
 	  sal.explicit_pc = 1;
 	  sal.section = find_pc_overlay (sal.pc);
 	  sal.pspace = search_pspace;
-	  sal.probe = probe;
+	  sal.probe = pro;
 	  sal.objfile = objfile;
 
 	  result->push_back (std::move (sal));