From: Cui, Lili Date: Tue, 15 Oct 2024 06:13:33 +0000 (+0800) Subject: x86: Refine instruction check in x86_check_tls_relocation X-Git-Tag: gdb-16-branchpoint~663 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=9c5b0ee4d5633664733afddfe79ca8fb75cce5cd;p=thirdparty%2Fbinutils-gdb.git x86: Refine instruction check in x86_check_tls_relocation gas/ChangeLog: * config/tc-i386.c (x86_check_tls_relocation): Refine instruction check. --- diff --git a/gas/config/tc-i386.c b/gas/config/tc-i386.c index cdefde03717..cfab10d68b8 100644 --- a/gas/config/tc-i386.c +++ b/gas/config/tc-i386.c @@ -6747,9 +6747,10 @@ x86_check_tls_relocation (enum bfd_reloc_code_real r_type) && i.tm.mnem_off != MN_add && i.tm.mnem_off != MN_mov) return x86_tls_error_insn; - if (i.op[1].regs->reg_type.bitfield.class != Reg - || i.op[0].regs->reg_type.bitfield.class - || i.imm_operands) + if (i.imm_operands + || i.disp_operands != 1 + || i.reg_operands != 1 + || i.types[1].bitfield.class != Reg) return x86_tls_error_opcode; if (!i.base_reg) return x86_tls_error_no_base_reg; @@ -6769,9 +6770,10 @@ x86_check_tls_relocation (enum bfd_reloc_code_real r_type) */ if (i.tm.mnem_off != MN_add && i.tm.mnem_off != MN_mov) return x86_tls_error_insn; - if (i.op[1].regs->reg_type.bitfield.class != Reg - || i.op[0].regs->reg_type.bitfield.class - || i.imm_operands) + if (i.imm_operands + || i.disp_operands != 1 + || i.reg_operands != 1 + || i.types[1].bitfield.class != Reg) return x86_tls_error_opcode; if (i.base_reg || i.index_reg) return x86_tls_error_require_no_base_index_reg; @@ -6789,10 +6791,9 @@ x86_check_tls_relocation (enum bfd_reloc_code_real r_type) */ if (i.tm.mnem_off != MN_add && i.tm.mnem_off != MN_mov) return x86_tls_error_insn; - if (i.op[i.operands - 1].regs->reg_type.bitfield.class != Reg - || (i.op[0].regs->reg_type.bitfield.class - && i.tm.opcode_modifier.vexvvvv != VexVVVV_DST) - || i.imm_operands) + if (i.imm_operands + || i.disp_operands != 1 + || i.types[i.operands - 1].bitfield.class != Reg) return x86_tls_error_opcode; if (!i.base_reg) return x86_tls_error_no_base_reg;