Thanks! I haven't written a plugin before, but I'll give that a try - it sounds like it will do the right thing. I understand that if I write a keybinding with the right scope, I can have make the go-to-definition use my plugin. There is also the behavior that if you hover the mouse over a symbol (variable.funciton scope), it opens a pop-up with the location of the definition and the list of references. Is there a way to replace that with a plugin as well?
Regarding the symbol transformation in the tmPreferences, I have that, and I think it solves the problem in the other direction: if I define a function in assembly (where it has a leading underscore), I can use the symbol transformation so that the symbol does not have the underscore, and it can therefore be seen from C. As far as I can tell, though, the symbol transformation only works on the definition, not the use of the symbol, so I don't think it would help me jump to a C definition from assembly. Is that correct?
I believe that I have to choose to have my symbols all have a leading underscore or all not have a leading underscore and use tmPreferences to force that convention. In one language, go-to-definition will just work, and in the other, I'll have to do something like the plug-in.