FILL
在当输出 section 可能存在未描述的存储区域 (比如由于对齐造成的空隙),可以用
FILL(EXPRESSION) 命令决定这些存储区域的内容,EXPRESSION 的前两字节有效,这两字
节在必要时间可以重复被使用以填充这类存储区域。如
一个简单的例子:
e.g. 三个源文件 DemoA.c,DemoB.c 和 DemoC.c,其中 DemoA.c 引用 DemoA.c 和
DemoB.c 里面的函数,使用 GCC 生成独立的目标文件 DemoA.o,DemoB.o 和 DemoC.o。
ld 使用链接脚本 Demo.lds, 并且在 Demo.lds 里面通过 FILL 关键字,在 DemoData 段
内将未定义的定义通过 FILL 进行填充:
DemoA.c
DemoB.c
DemoC.c
Demo.lds
使用如下命令进行编译和链接:
通过上面的运行数据可知,在 DemoData section 中使用了 FILL 命令之后,可以看出链
接之后 DemoData 中包含了 FILL mask 字段。FILL 关键字的作用了输出 section 描述
的 =FILEEXP 作用效果相似,所以也可以在链接脚本中这么设置:
Demo.lds
运行结果如下:
附录
BiscuitOS Home
BiscuitOS Driver
BiscuitOS Kernel Build
Linux Kernel
Bootlin: Elixir Cross Referencer
赞赏一下吧 🙂