2010-11-26 29 views
3

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

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

出于好奇,你为什么在asm编码? – 2010-11-26 23:38:54

回答

2

如果要放置装配功能于部分YYY,而不是.text,则需要更换

.text 

.section YYY,"ax" 
1

此代码:

.text 
.globl YYY 

告诉汇编程序,你会写在“文本中的东西“部分,并且”YYY“是该部分中的全球。你的.type补充说,“YYY”是一个函数的名称。这不是你想要的:你想部分被命名为“YYY”,而不是函数本身。要选择具有特定名称的部分,请使用.section指令(.text只是指定“文本”部分的.section的快捷键)。

相关问题