您已经使用非常不同的选项编译了代码。第一个是ARM(仅32位),第二个是Thumb2(混合的16/32位)。请参阅侧面的十六进制操作码。Thumb2以紧凑的方式(16位编码)使用了前8个寄存器,因此调用接口是不同的。即,fp是r7对r12。这就是为什么您看到相同代码的不同调用序列的原因。
另外,第一个启用了性能分析(为什么插入__gnu_mcount_nc)。
它实际上与“内核”与“用户”代码无关。可以使用与内核使用类似的选项来编译用户代码。有许多gcc命令行选项会影响“调用界面”(搜索AAPCS以获取更多信息,以及gcc ARM选项帮助)。
相关:ARM链接和框架指针