]> git.ipfire.org Git - thirdparty/binutils-gdb.git/commitdiff
x86: Refine instruction check in x86_check_tls_relocation
authorCui, Lili <lili.cui@intel.com>
Tue, 15 Oct 2024 06:13:33 +0000 (14:13 +0800)
committerCui, Lili <lili.cui@intel.com>
Tue, 15 Oct 2024 06:17:57 +0000 (14:17 +0800)
gas/ChangeLog:

        * config/tc-i386.c
(x86_check_tls_relocation): Refine instruction check.

gas/config/tc-i386.c

index cdefde037175d3bc95e3e2f9a954142c94c751c2..cfab10d68b827c646ad3ac2194605e2654be9c86 100644 (file)
@@ -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;