编译选项-finstrument-functions的错误



  • 神威太湖之光上使用了编译选项-finstrument-functions后出现错误,可以编译,但无法正常运行,没使用之前是可以正常编译运行的,想请教一下,谁知道出现错误的原因有哪些?谢谢



  • 明显是编译器的bug...就是你instrument-function是个空函数也能段错误...



  • 可是有的函数可以正常运行,有的函数就不可以,您清楚造成这种错误的其他原因吗?谢谢



  • @段晓辉 可是有的函数可以正常运行,有的函数就不可以,您清楚造成这种错误的其他原因吗?谢谢



  • 如果一个函数使用了动态栈帧,即alloca函数(Fortran下则是函数里定义的数组等都很容易成为动态栈帧,动态栈这件事在fortran中极为常见)。那么他将使用fp寄存器来保存栈顶,并以fp为基址寄存器使用栈空间。
    ra寄存器作为返回值寄存器,在这个时候也一般使用fp作为基址寄存器。
    而-finstrument-functions有自己的一套栈帧逻辑,使用0(sp)保存ra寄存器,并取消了原来*(fp)的形式。这在动态栈帧的情况下会产生冲突,即本来fp基址的访存方式,也使用了0(sp)这个地址。而0(sp)又是用来存放ra的。这会导致这个保存的ra可能被覆写,从而丢失ra的值。导致了程序崩溃。

    一句话:除非编译组出面修复这个功能就当它不存在



  • @jflfy 也不一定, 写个脚本在中间的.s上插桩有望...(明显都是假希望...


登录后回复