是否有gfortran等同于gcc的__attribute __((section(“ name”)))?

问题描述 投票:0回答:1

我正在使用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部分结尾。

gcc methods gnu gfortran annotate
1个回答
0
投票

是,您想使用ATTRIBUTES directive

ATTRIBUTES

(未经测试,仅从文档和一些Google搜索中提取出来,没有方便的Fortran代码)。

© www.soinside.com 2019 - 2024. All rights reserved.