When building the x86_64 gdbidt with newer gcc it fails recognizing the segment registers FS/GS being too short for pushq/popq in .code64 sections. arch/x86_64/core/gdbidt.S:109: Error: operand type mismatch for `push' arch/x86_64/core/gdbidt.S:110: Error: operand type mismatch for `push' arch/x86_64/core/gdbidt.S:161: Error: operand type mismatch for `pop' arch/x86_64/core/gdbidt.S:162: Error: operand type mismatch for `pop'
This is due to [1] changed in bintutils. All the time the pushq/popq in .code64 only generated opcodes matching just what a basic pop/push would do. Therefore switch to push/pop to match the old opcodes we already had, but get the build to work again with new gnu as. [1]: https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;a=commit;h=21df382b918888de64749e977f185c4e10a5b838 Signed-off-by: Christian Ehrhardt <christian.ehrha...@canonical.com> --- src/arch/x86_64/core/gdbidt.S | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/arch/x86_64/core/gdbidt.S b/src/arch/x86_64/core/gdbidt.S index 89280bf8..a4b0965f 100644 --- a/src/arch/x86_64/core/gdbidt.S +++ b/src/arch/x86_64/core/gdbidt.S @@ -106,8 +106,8 @@ gdbmach_sigill: gdbmach_interrupt: /* Create register dump */ - pushq %gs - pushq %fs + push %gs + push %fs pushq $0 /* %es unused in long mode */ pushq $0 /* %ds unused in long mode */ pushq ( frame_ss - regs_ss - SIZEOF_REG )(%rsp) @@ -158,8 +158,8 @@ gdbmach_interrupt: popq ( frame_cs - regs_cs - SIZEOF_REG )(%rsp) popq ( frame_ss - regs_ss - SIZEOF_REG )(%rsp) addq $( regs_fs - regs_ds ), %rsp /* skip %ds, %es */ - popq %fs - popq %gs + pop %fs + pop %gs /* Skip code */ addq $( gdb_end - gdb_code ), %rsp /* skip code */ -- 2.23.0 _______________________________________________ ipxe-devel mailing list ipxe-devel@lists.ipxe.org https://lists.ipxe.org/mailman/listinfo.cgi/ipxe-devel