将S文件添加到Linux内核时的链接问题

时间:2010-11-26 15:15:14

标签: assembly linux-kernel

在上一个问题得到解答之后:Adding a .S file to the linux kernel code我能够将.S文件添加到Linux内核make文件中。 但是,我的.S文件包含几个部分,用于替换用C编写的函数。 我注释掉了这些函数,并将替换函数声明为全局变量,但是当我尝试链接内核(使用make)时,我收到以下错误:

arch/x86/kernel/vmlinux.lds:XXX: non constant or forward reference address expression for section .YYY

我替换的原始函数使用以下方式声明: __attribute__ ((unused, __section__("YYY"))) notrace

asm部分使用:

声明
.text
.globl YYY

我也尝试添加:

.type YYY,@function

我可能在某个地方错过了一些声明,但我不确定在哪里看。

有什么想法吗?

2 个答案:

答案 0 :(得分:2)

如果要将汇编函数放入YYY部分,而不是.text,则需要替换

.text

.section YYY,"ax"

答案 1 :(得分:1)

此代码:

.text
.globl YYY

告诉汇编程序您将在“text”部分中编写内容,并且“YYY”是该部分中的全局内容。您的.type添加“YYY”是函数的名称。这不是你想要的:你希望部分被命名为“YYY”,而不是函数本身。要选择具有特定名称的部分,请使用.section指令(.text只是指定“文本”部分的.section的快捷方式。