bug-binutils
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Bug gas/24485] New: IRET with .code16gcc


From: nulano at nulano dot eu
Subject: [Bug gas/24485] New: IRET with .code16gcc
Date: Thu, 25 Apr 2019 18:51:13 +0000

https://sourceware.org/bugzilla/show_bug.cgi?id=24485

            Bug ID: 24485
           Summary: IRET with .code16gcc
           Product: binutils
           Version: 2.30
            Status: UNCONFIRMED
          Severity: normal
          Priority: P2
         Component: gas
          Assignee: unassigned at sourceware dot org
          Reporter: nulano at nulano dot eu
  Target Milestone: ---

The .code16gcc directive generates real-mode X86 code and sets the default
operand size to 32 bits (by adding the operand size prefix to every instruction
which can use it). This allows the GNU compiler to generate real-mode code.

This directive also affects the IRET (return from interrupt) instruction. This
is incorrect, as in real-mode an interrupt will almost always be called with a
16-bit call (using the INT instruction) -- the only exception is a PUSHFD
followed by a CALLD used to chain interrupts, I fail to see how that is useful,
but I expect it to be written explicitly.


Code:
    .code16gcc
    .text
    iret

Will output:
    66 CF   IRETD (assuming real mode)

Should output:
    CF      IRETW (assuming real mode)


Found in version: GNU assembler version 2.30 (x86_64-w64-mingw32)

-- 
You are receiving this mail because:
You are on the CC list for the bug.


reply via email to

[Prev in Thread] Current Thread [Next in Thread]