non-decr_pc_after_break i386 targets

Andrew Cagney cagney@gnu.org
Tue Aug 24 20:33:00 GMT 2004


> While reading the Solaris proc(4) man page I noticed the PR_BPTADJ
> flag.  If this flag is set, Solaris x86 "will adjust the program
> counter back to location of the breakpointed instructions when the lwp
> stops on a breakpoint".  The man page explicitly says that on SPARC
> this is a no-op.  Using this flag makes it possible to turn
> i386-*-solaris2* into an architecture where decr_pc_after_break is
> zero.  This would have remove some of the problems with breakpoints in
> signal trampolines on Solaris x86.  So I think we should do that.
> 
> However, this also reveals a flaw in the way we handle
> decr_pc_after_break.  Currently it's part of the architecture vector,
> which essentially means that we consider it part of the ISA.  However,
> the above shows that it also depends on the target interface.  So it
> seems we should make it possible for the target vector to override the
> default set by the architecture vector.
> 
> To people agree with this analysis?

The same problem pattern occures with software_single_step - the 
archititecture is incorrectly dictating the presence/absence of hardware 
single-step.

Both of these cases are used in infrun.c.  I think, in both cases, the 
logic should read something like:

	if (!target_has_<feature>_p ())
		gdb_assert (gdbarch_<feature-workaround>_p())
		use gdbarch_feature_workaround

Andrew




More information about the Gdb mailing list