我正在使用nestedvm软件包,其中包括修补的Gnu gcc编译器。对于此程序包,可调用的用户方法/函数必须用__attribute__((section(".text")))
进行注释,如下面的C示例所示。
void echo(const char *string, int count) __attribute__((section(".text")));
void echo(const char *string, int count) {
int i;
for(i=0;i<count;i++)
printf("%d: %s\n",i,string);
}
我不知道补丁编译器的内部工作原理,但是如果没有此批注,外部调用者将看不到用户功能。
如果使用gfortran,如何为Fortran子例程和函数完成此注释?可以用链接描述文件来完成吗?我可以为Fortran函数编写C包装程序,但如果可能的话,希望避免这种情况。
**更新**使用nm来调查.o文件可以解决这个问题...一个没有属性的C方法看起来像suckram函数(在nestedvm中不能调用),而echo函数具有属性并且可以在nestedvm中调用:
Name Value Class Type Size Line Section
suckram |00000000| T | FUNC|00000078| |.text.suckram
echo |00000200| T | FUNC|00000074| |.text
我的Fortran对象中的test1子例程看起来像没有属性的suckram方法:
test1_ |00000000| T | FUNC|00000080| |.text.test1_
根据我发现的一些nestedvm文档,为了使用户功能可在nestedvm中调用,它必须以.text
部分结尾。