mirror of
https://github.com/bminor/binutils-gdb.git
synced 2025-12-27 17:40:49 +00:00
Don't memset non-POD types: struct btrace_insn
struct btrace_insn is not a POD [1] so we shouldn't be using memset to initialize it [2]. Use list-initialization instead, wrapped in a "pt insn to btrace insn" function, which looks like just begging to be added next to the existing pt_reclassify_insn/pt_btrace_insn_flags functions. [1] - because its field "flags" is not POD, because enum_flags has a non-trivial default ctor. gdb/ChangeLog: 2017-04-25 Pedro Alves <palves@redhat.com> * btrace.c (pt_btrace_insn_flags): Change parameter type to reference. (pt_btrace_insn): New function. (ftrace_add_pt): Remove memset call and use pt_btrace_insn.
This commit is contained in:
23
gdb/btrace.c
23
gdb/btrace.c
@@ -1112,16 +1112,27 @@ pt_reclassify_insn (enum pt_insn_class iclass)
|
||||
/* Return the btrace instruction flags for INSN. */
|
||||
|
||||
static btrace_insn_flags
|
||||
pt_btrace_insn_flags (const struct pt_insn *insn)
|
||||
pt_btrace_insn_flags (const struct pt_insn &insn)
|
||||
{
|
||||
btrace_insn_flags flags = 0;
|
||||
|
||||
if (insn->speculative)
|
||||
if (insn.speculative)
|
||||
flags |= BTRACE_INSN_FLAG_SPECULATIVE;
|
||||
|
||||
return flags;
|
||||
}
|
||||
|
||||
/* Return the btrace instruction for INSN. */
|
||||
|
||||
static btrace_insn
|
||||
pt_btrace_insn (const struct pt_insn &insn)
|
||||
{
|
||||
return {(CORE_ADDR) insn.ip, (gdb_byte) insn.size,
|
||||
pt_reclassify_insn (insn.iclass),
|
||||
pt_btrace_insn_flags (insn)};
|
||||
}
|
||||
|
||||
|
||||
/* Add function branch trace using DECODER. */
|
||||
|
||||
static void
|
||||
@@ -1138,7 +1149,6 @@ ftrace_add_pt (struct pt_insn_decoder *decoder,
|
||||
end = *pend;
|
||||
for (;;)
|
||||
{
|
||||
struct btrace_insn btinsn;
|
||||
struct pt_insn insn;
|
||||
|
||||
errcode = pt_insn_sync_forward (decoder);
|
||||
@@ -1150,7 +1160,6 @@ ftrace_add_pt (struct pt_insn_decoder *decoder,
|
||||
break;
|
||||
}
|
||||
|
||||
memset (&btinsn, 0, sizeof (btinsn));
|
||||
for (;;)
|
||||
{
|
||||
errcode = pt_insn_next (decoder, &insn, sizeof(insn));
|
||||
@@ -1207,11 +1216,7 @@ ftrace_add_pt (struct pt_insn_decoder *decoder,
|
||||
/* Maintain the function level offset. */
|
||||
*plevel = std::min (*plevel, end->level);
|
||||
|
||||
btinsn.pc = (CORE_ADDR) insn.ip;
|
||||
btinsn.size = (gdb_byte) insn.size;
|
||||
btinsn.iclass = pt_reclassify_insn (insn.iclass);
|
||||
btinsn.flags = pt_btrace_insn_flags (&insn);
|
||||
|
||||
btrace_insn btinsn = pt_btrace_insn (insn);
|
||||
ftrace_update_insns (end, &btinsn);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user