This is the mail archive of the
gdb@sourceware.org
mailing list for the GDB project.
Re: /gdb/regcache.c question
- From: Mark Kettenis <mark dot kettenis at xs4all dot nl>
- To: der dot herr at hofr dot at
- Cc: mark dot kettenis at xs4all dot nl, der dot herr at hofr dot at, gdb at sourceware dot org
- Date: Sun, 2 Apr 2006 15:49:44 +0200 (CEST)
- Subject: Re: /gdb/regcache.c question
- References: <200604031349.k33DnEk24211@hofr.at>
> From: Der Herr Hofrat <der.herr@hofr.at>
> Date: Mon, 3 Apr 2006 15:49:14 +0200 (CEST)
>
> > > gdb/regcache.c:159-165
> > > struct type *
> > > register_type (struct gdbarch *gdbarch, int regnum)
> > > {
> > > struct regcache_descr *descr = regcache_descr (gdbarch);
> > > gdb_assert (regnum >= 0 && regnum < descr->nr_cooked_registers);
> > > return descr->register_type[regnum];
> > > }
> > >
> > >
> > > So a simple misstyp of the register name runs into an assertion
> > > with a core file dumped - this makes sense for automatic generation
> > > - but for tracepoints you need to manually be able to pass
> > > registers with collect $REGNAME , and for that case gdb_assert ->
> > > corfile is a little harsh on the user.
> >
> > I don't understand what you're doing here, but that gdb_assert (and
> > all gdb_asserts in the code) is checking for a "should not happen"
> > condition. If you hit one, it means there's a bug in some other piece
> > of gdb code. You should find and fix that bug.
> >
> the bug is a simple typo in a collect command - if you type in
> $pc on x86 it will give you the above assertion if you use any
> actually defined registers all is fine (and data is collected)
> My assumption is that the assertion was put in there to catch
> incorrect register names that are generated automatically, but
> not interactively.
No, the bug is that the code that parses your collect command is
asking for the type of a register number that doesn't exist. That
typo should have been caught much earlier before register_type() was
called.
Mark