我想知道是否能够(在合理的时间内)修改现有的gcc编译目标或定义一个新的编译目标。目标是进行轻微的修改,例如更改返回函数结果的寄存器或使用不同于x86-64标准SystemV ABI的寄存器传递参数。
例如,如果我希望将函数返回值的寄存器从RAX更改为R8,或者使用YMM0和YMM1返回64字节结构体,而不需要自己使用x86汇编代码来实现。
(背景)我正在开发一个小型自编写操作系统,因此我想知道是否可以不遵循System-V ABI或Microsoft用于Windows的ABI。与现有库和其他东西的兼容性并不重要,因为操作系统中的每行代码都是由我编写的。我只使用gcc、ld和objdump。没有gdb等调试工具。
如果可能,在gcc源代码或配置文件中应该在哪里进行这样的修改?我已经克隆了gcc git存储库,但找不到这样修改的起点。
例如,如果我希望将函数返回值的寄存器从RAX更改为R8,或者使用YMM0和YMM1返回64字节结构体,而不需要自己使用x86汇编代码来实现。
(背景)我正在开发一个小型自编写操作系统,因此我想知道是否可以不遵循System-V ABI或Microsoft用于Windows的ABI。与现有库和其他东西的兼容性并不重要,因为操作系统中的每行代码都是由我编写的。我只使用gcc、ld和objdump。没有gdb等调试工具。
如果可能,在gcc源代码或配置文件中应该在哪里进行这样的修改?我已经克隆了gcc git存储库,但找不到这样修改的起点。
-fcall-used-reg
),但没有其他更改调用约定的选项。我不知道这有多容易/难以调整。 我猜换一个返回值寄存器可能很容易。 使用一对向量寄存器也可能不太麻烦; x86-64 SysV对一对xmm寄存器就是这样做的(但出于某种原因没有更宽的)。 - Peter Cordes