在上一个问题得到解答之后: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
我可能在某个地方错过了一些声明,但我不确定在哪里看。
有什么想法吗?
答案 0 :(得分:2)
如果要将汇编函数放入YYY
部分,而不是.text
,则需要替换
.text
与
.section YYY,"ax"
答案 1 :(得分:1)
此代码:
.text
.globl YYY
告诉汇编程序您将在“text”部分中编写内容,并且“YYY”是该部分中的全局内容。您的.type
添加“YYY”是函数的名称。这不是你想要的:你希望部分被命名为“YYY”,而不是函数本身。要选择具有特定名称的部分,请使用.section
指令(.text
只是指定“文本”部分的.section
的快捷方式。