[pushed,8.0-branch,Bug,server/22137] gdbserver crashes on hosts with pkru register
Commit Message
> -----Original Message-----
> From: Pedro Alves [mailto:palves@redhat.com]
> Sent: Monday, October 16, 2017 3:44 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 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.
Version is 6.3.1
>
> Actually, I'm confused on how it worked for you, since I hadn't fixed the
> same problem around line "213" quoted above.
>
Yes there were more, I fixed in the same way, full patch is here:
> Are you sure you tested with the same compiler?
>
> Thanks,
> Pedro Alves
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
Comments
On 10/16/2017 03:04 PM, Tedeschi, Walfred wrote:
>> From: Pedro Alves [mailto:palves@redhat.com]
>>>>> Does this work for you?
>>>>>
>>> It worked!
>>
>> Thanks, I'll push in a bit. I'm still curious to know your gcc version though.
> Version is 6.3.1
>>
>> Actually, I'm confused on how it worked for you, since I hadn't fixed the
>> same problem around line "213" quoted above.
>>
> Yes there were more, I fixed in the same way, full patch is here:
OK, I've pushed it now:
https://sourceware.org/ml/gdb-patches/2017-10/msg00442.html
Thanks,
Pedro Alves
@@ -1340,8 +1340,8 @@ probe_key_free (bfd *abfd, void *d)
{
std::vector<probe *> *probes = (std::vector<probe *> *) d;
- for (struct probe *probe : *probes)
- probe->pops->destroy (probe);
+ for (probe *prob : *probes)
+ prob->pops->destroy (prob);
delete probes;
}
@@ -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));
@@ -210,15 +210,15 @@ find_probes_in_objfile (struct objfile *objfile, const char *provider,
const std::vector<probe *> &probes
= objfile->sf->sym_probe_fns->sym_get_probes (objfile);
- for (struct probe *probe : probes)
+ for (probe *prob : probes)
{
- if (strcmp (probe->provider, provider) != 0)
+ if (strcmp (prob->provider, provider) != 0)
continue;
- if (strcmp (probe->name, name) != 0)
+ if (strcmp (prob->name, name) != 0)
continue;
- VEC_safe_push (probe_p, result, probe);
+ VEC_safe_push (probe_p, result, prob);
}
return result;
@@ -244,11 +244,11 @@ find_probe_by_pc (CORE_ADDR pc)
/* If this proves too inefficient, we can replace with a hash. */
const std::vector<probe *> &probes
= objfile->sf->sym_probe_fns->sym_get_probes (objfile);
- for (struct probe *probe : probes)
- if (get_probe_address (probe, objfile) == pc)
+ for (probe *prob : probes)
+ if (get_probe_address (prob, objfile) == pc)
{
result.objfile = objfile;
- result.probe = probe;
+ result.probe = prob;
return result;
}
}
@@ -294,20 +294,20 @@ collect_probes (const std::string &objname, const std::string &provider,
const std::vector<probe *> &probes
= objfile->sf->sym_probe_fns->sym_get_probes (objfile);
- for (struct probe *probe : probes)
+ for (probe *prob : probes)
{
- if (pops != NULL && probe->pops != pops)
+ if (pops != NULL && prob->pops != pops)
continue;
if (prov_pat
- && prov_pat->exec (probe->provider, 0, NULL, 0) != 0)
+ && prov_pat->exec (prob->provider, 0, NULL, 0) != 0)
continue;
if (probe_pat
- && probe_pat->exec (probe->name, 0, NULL, 0) != 0)
+ && probe_pat->exec (prob->name, 0, NULL, 0) != 0)
continue;
- result.emplace_back (probe, objfile);
+ result.emplace_back (prob, objfile);
}
}