This is the mail archive of the
gdb-patches@sourceware.org
mailing list for the GDB project.
[RFA-v2] xtensa-tdep.c ARI fixes
- From: "Pierre Muller" <pierre dot muller at ics-cnrs dot unistra dot fr>
- To: "'Tom Tromey'" <tromey at redhat dot com>
- Cc: <gdb-patches at sourceware dot org>, "'Maxim Grigoriev'" <maxim at tensilica dot com>
- Date: Fri, 15 Apr 2011 09:40:05 +0200
- Subject: [RFA-v2] xtensa-tdep.c ARI fixes
- References: <15837.6740910628$1302342165@news.gmane.org> <m34o60fuc2.fsf@fleche.redhat.com>
> Pierre> The only non-trivial change is in xtensa_register_type:
> Pierre> this is mainly because I do not understand the old code:
> Pierre> it was using both xmalloc and strdup, which should
> Pierre> create a memory leak, no?
> Pierre> But maybe I miss something?
>
> I agree.
>
> Pierre> - char *name = xmalloc (16);
> Pierre> + char *name = xstrprintf ("int%d", size * 8);
>
> Looks better.
>
> Pierre> + = arch_integer_type (gdbarch, size * 8, 1,
name);
>
> arch_integer_type calls arch_type, which calls xstrdup(name).
> So I think you need to xfree name here.
Here is a new version that adds this xfree call.
Could someone test this patch out?
Again, I have no way to trigger that code, so I can't really test it.
Pierre Muller
as ARI maintainer.
2011-04-15 Pierre Muller <muller@ics.u-strasbg.fr>
ARI cleanup.
* xtensa-tdep.c (xtensa_register_type): Use xstrprintf instead of
sprintf. Simplify code and avoid loosing memory.
(xtensa_register_reggroup_p): Extract assignment out of IF clause.
(call0_frame_cache): Remove && operator from end of line.
Index: xtensa-tdep.c
===================================================================
RCS file: /cvs/src/src/gdb/xtensa-tdep.c,v
retrieving revision 1.57
diff -u -p -r1.57 xtensa-tdep.c
--- xtensa-tdep.c 18 Mar 2011 18:52:32 -0000 1.57
+++ xtensa-tdep.c 15 Apr 2011 07:05:30 -0000
@@ -318,15 +318,14 @@ xtensa_register_type (struct gdbarch *gd
if (tp == NULL)
{
- char *name = xmalloc (16);
+ char *name = xstrprintf ("int%d", size * 8);
tp = xmalloc (sizeof (struct ctype_cache));
tp->next = tdep->type_entries;
tdep->type_entries = tp;
tp->size = size;
-
- sprintf (name, "int%d", size * 8);
tp->virtual_type
- = arch_integer_type (gdbarch, size * 8, 1, xstrdup
(name));
+ = arch_integer_type (gdbarch, size * 8, 1, name);
+ xfree (name);
}
reg->ctype = tp->virtual_type;
@@ -843,7 +842,8 @@ xtensa_register_reggroup_p (struct gdbar
if (group == restore_reggroup)
return (regnum < gdbarch_num_regs (gdbarch)
&& (reg->flags & SAVE_REST_FLAGS) == SAVE_REST_VALID);
- if ((cp_number = xtensa_coprocessor_register_group (group)) >= 0)
+ cp_number = xtensa_coprocessor_register_group (group);
+ if (cp_number >= 0)
return rg & (xtRegisterGroupCP0 << cp_number);
else
return 1;
@@ -2715,9 +2715,9 @@ call0_frame_cache (struct frame_info *th
too bad. */
int i;
- for (i = 0;
- (i < C0_NREGS) &&
- (i == C0_RA || cache->c0.c0_rt[i].fr_reg != C0_RA);
+ for (i = 0;
+ (i < C0_NREGS)
+ && (i == C0_RA || cache->c0.c0_rt[i].fr_reg != C0_RA);
++i);
if (i >= C0_NREGS && cache->c0.c0_rt[C0_RA].fr_reg == C0_RA)
i = C0_RA;