Looking at it purely from the programming language point of view, ignoring dtrace functionality:
There is no standard C or C++ way to do this. Matter-of-fact, it is antithetical to good software design. In object-oriented programming, one could simulate it by using virtual functions and calling via different objects; in non-OO standard C, the same thing could be done by changing the function signatures and passing an extra flag along.
On the other hand, it is possible (although not in a standard-conforming way) for a function to examine the call stack. It's not even terribly difficult; most software engineers have at some point in their careers had to write a "dump stack trace" module which does exactly that. One of the complexities is that the stack only contains "numbers" (pointers, integers, and floats), and to translate it into human-readable stuff (like the string "myfunction"), one needs to decode the debugging information that's in the object code. Doable, but tedious.
Here is my suggestion: Modify "myfunction" to print a message on entry and exit. Then modify the ieee80211-whatever-here:entry function from able to also print a message. Now you have too many messages, because sometimes that function will be called without myfunction on the stack. That's OK, write a little awk script that filters the output to only look for the following pattern: myfunction enters, then iee80211-whatever-here prints, then myfunction exits.