By default, the compiler can choose to omit frame pointers for debugged functions. However, we often disable this in kernel builds in order to make debugging functionality easier. (Specifically, if DDB, dtrace, or HWPMC support is enabled, we disable this for amd64.)
On the other hand, there is a class of function that is so trivial that it is highly unlikely it will ever need to be debugged. critical_enter() is such a function: it is a leaf function which simply sets a variable. It also seems like it is worth optimizing, since it is called an extraordinarily large number of times.
(For example, in one recent measurement sample, Intel's VTune product attributed 0.687% of the clockticks in the kernel to critical_enter(). That's a lot of time to spend in a function that functionally just increments a variable.)