Next: , Up: Host Config


18.1 主机通用信息

有些东西不具有可移植性,甚至是在相似的操作系统之间,并且autoconf也难以检测出。它们是通过钩子函数来实现的,这些函数放在 config.gcchost_hook_obj变量指定的文件中。

— Host Hook: void HOST_HOOKS_EXTRA_SIGNALS (void)

该主机钩子用于建立对额外信号的处理。最通用的事情是在这个钩子中去检测栈溢出。

— Host Hook: void * HOST_HOOKS_GT_PCH_GET_ADDRESS (size_t size, int fd)

该主机钩子返回很可能在编译器的后续调用中为空闲的某块空间地址。我们打算将PCH数据加载到这个地址,从而使得不需要对数据进行重定位。该区域应该能够容纳size个字节。如果主机使用mmap,则fd为一个打开文件的描述符,可以用来做探测。

— Host Hook: int HOST_HOOKS_GT_PCH_USE_ADDRESS (void * address, size_t size, int fd, size_t offset)

该主机钩子会在将要加载PCH文件时被调用。我们要从fd中加载size字节到内存中address地址的offset 偏移量出。给定的address为之前调用HOST_HOOKS_GT_PCH_GET_ADDRESS所得的结果。如果不能在address 处分配size个字节,则返回−1。如果分配了内存但是没有加载数据,则返回0。如果该钩子完成了所有的事情,则返回1。

如果实现使用了保留地址空间,则会释放超出size的任何保留空间,而不管返回值如何。如果不加载PCH,则该钩子可以使用size为0的方式调用,这样所有保留地址空间将被释放。

不要试图不能被该执行程序返回的address值;直接返回−1。这些值通常表明了一个过时的PCH文件(由其它GCC可执行程序创建的),并且该PCH文件是无法工作的。

— Host Hook: size_t HOST_HOOKS_GT_PCH_ALLOC_GRANULARITY (void);

该主机钩子返回分配虚拟内存所需的对齐大小。通常这与getpagesize相同,但是在一些主机上,保留内存的对齐大小与供使用的内存页尺寸是不同的。