From 53625db42578d6c1b48b96e8b312bcbcb581ad15 Mon Sep 17 00:00:00 2001 From: Tim Haines Date: Fri, 17 Nov 2023 16:20:08 -0600 Subject: [PATCH] Add missing flagc from RFLAGS FLAGC is the lower bit of the I/O Permission Level field. --- common/h/registers/x86_64_regs.h | 2 ++ common/src/registers/MachRegister.C | 1 + dataflowAPI/src/SymEvalPolicy.C | 2 ++ 3 files changed, 5 insertions(+) diff --git a/common/h/registers/x86_64_regs.h b/common/h/registers/x86_64_regs.h index 7d6ff54a45..95335299f4 100644 --- a/common/h/registers/x86_64_regs.h +++ b/common/h/registers/x86_64_regs.h @@ -129,6 +129,7 @@ namespace Dyninst { namespace x86_64 { const signed int IF = x86::IF; // Interrupt Enable Flag const signed int DF = x86::DF; // Direction Flag const signed int OF = x86::OF; // Overflow Flag + const signed int FLAGC = x86::FLAGC; // I/O Privilege Level (bits 12 and 13) const signed int NT = x86::NT; // Nested Task const signed int RF = x86::RF; // Resume Flag @@ -216,6 +217,7 @@ namespace Dyninst { namespace x86_64 { DEF_REGISTER( if_, IF | BIT | FLAG | Arch_x86_64, "x86_64"); DEF_REGISTER( df, DF | BIT | FLAG | Arch_x86_64, "x86_64"); DEF_REGISTER( of, OF | BIT | FLAG | Arch_x86_64, "x86_64"); + DEF_REGISTER( flagc, FLAGC | BIT | FLAG | Arch_x86_64, "x86_64"); DEF_REGISTER( nt_, NT | BIT | FLAG | Arch_x86_64, "x86_64"); DEF_REGISTER( rf, RF | BIT | FLAG | Arch_x86_64, "x86_64"); DEF_REGISTER( ds, BASEDS | FULL | SEG | Arch_x86_64, "x86_64"); diff --git a/common/src/registers/MachRegister.C b/common/src/registers/MachRegister.C index a0908c5a59..d5c43e7a41 100644 --- a/common/src/registers/MachRegister.C +++ b/common/src/registers/MachRegister.C @@ -809,6 +809,7 @@ namespace Dyninst { case x86_64::IF: n = x86_flag_if; break; case x86_64::DF: n = x86_flag_df; break; case x86_64::OF: n = x86_flag_of; break; + case x86_64::FLAGC: n = x86_flag_iopl0; break; default: c = -1; return; diff --git a/dataflowAPI/src/SymEvalPolicy.C b/dataflowAPI/src/SymEvalPolicy.C index 22a6db1b7b..f6d3c75792 100644 --- a/dataflowAPI/src/SymEvalPolicy.C +++ b/dataflowAPI/src/SymEvalPolicy.C @@ -474,6 +474,8 @@ Absloc SymEvalPolicy_64::convert(X86Flag f) return Absloc(x86_64::df); case x86_flag_of: return Absloc(x86_64::of); + case x86_flag_iopl0: + return Absloc(x86_64::FLAGC); case x86_flag_nt: return Absloc(x86_64::nt_); default: