我正在使用我自己修改过的 glibc。我在编译的代码中看到,当我链接它时,编译器没有使用我的 glibc 中的许多标准库函数。然后我放了-fno-builtin
flag。事情变得更好了,我可以看到许多不是从 glibc 中获取的函数现在都从那里获取了,例如malloc
.
但是,对于许多功能,例如mmap
,编译器仍然使用一些内置代码。现在我怎么能要求编译器只使用来自 glibc 的代码而不是使用它的内置函数呢?
在我的 x86-64 函数上,如果我对已编译的 glibc 进行 objdump,以下是生成的 mmap 函数。我在 glibc 源代码中找不到等效代码。
0000000000000000 <__mmap>:
0: 49 89 ca mov %rcx,%r10
3: b8 09 00 00 00 mov $0x9,%eax
8: 0f 05 syscall
a: 48 3d 01 f0 ff ff cmp $0xfffffffffffff001,%rax
10: 0f 83 00 00 00 00 jae 16 <__mmap+0x16>
16: c3 retq