This is the mail archive of the gdb@sourceware.org mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: /gdb/regcache.c question


> 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


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]