I think it may just be the functions you looked at.There are several ways to return from a function in ARM/Thumb. The most common (at least in my experience) are "BX lr" and "LDM sp!, {...., sp}". Although the second one often gets written as "PUSH {....., pc}" depends on which tools you are using. I suspect if you kept looking long enough you would find examples of each in both the kernel and the app.The "B ..." is a little more interesting. I suspect that this is a compiler optimization called "tail calling" - again there is no reason why you this couldn't be present in both the kernel and the app. http://en.wikipedia.org/wiki/Tail_call