[Charset ISO-8859-1 unsupported, filtering to ASCII...]
> Today I was trying to debug a problem with the cardbus driver in b44
> using kmdb, and I tried to set a break point using the delayed syntax
> that I recall using back in the Solaris 8 days:
> 
> boot kadb -d
> 
> boots and leaves me in the kmdb prompt, which I then type:
> 
> cardbus`cardbus_rootnex_map+8:b
> 
> To set a delayed breakpoint in the cardbus_rootnex_map function in the
> cardbus module.  Imagine my surprise when instead of taking the
> breakpoint (note that cardbus is not loaded as show by ::modinfo), I get
> a complaint from kmdb that the symbol cannot be resolved.
> 
> Of course it can't be resolved!  I'm trying to use a delayed break
> point, the module isn't loaded yet.
> 
> The cardbus_rootnex_map function is declared static in the cardbus.c
> module.  Back in Solaris 8 days, kadb had no problem with static functions.
> 
> Am I just being a dunce? Has kadb/kmdb changed somehow significantly so
> that it can't resolve static symbols?
> 
> Note also that I'm doing this on a US-3i platform for which uname -i is
> not "standard".  (TAD,Viper).  So the /platform links aren't set up. 
> Solaris boots fine this way, but does kmdb need some kind of link
> somewhere?  If so I'd appreciate any advice.  I didn't see anything
> obvious /platform for it.

Actually you're using a mixture of old and new syntax.  The old syntax was

        module#symbol:b

The problem was that the person who added that feature forgot that # is an
operator in adb, so they actually broke the syntax.  When I wrote mdb, I
added the ` scoping operator, and also introduced proper deferred breakpoints
as the following:

        ::bp module`symbol

The reason for this is that the left-hand side of a command in the grammar
is an expression which evaluates to an integer.  So any deferred resolution
must be a string on the right hand side (i.e. an argument to the command).

-Mike

-- 
Mike Shapiro, Solaris Kernel Development. blogs.sun.com/mws/

Reply via email to