[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/