import-trace: limit to general-purpose registers

This change limits fault injection to general-purpose registers, instead of
relying on the LLVM/Fail* bridge to only recognize the status register
(EFLAGS on x86) and general-purpose registers.  Since this bridge just
learned to translate x86's control and segment registers, and these
registers need special handling for fault injection (def/use pruning does
not work here), only import register accesses from the RT_GP subset.

Status register and instruction pointer injection remain functional, and
import-trace now should work architecture independently.

Change-Id: Id8ad2f0a9dab1861bf16ea9443c3bdfe7213d3fa
This commit is contained in:
Horst Schirmeier
2014-03-16 19:03:24 +01:00
parent fb788ce33e
commit 84a03b55ff
2 changed files with 32 additions and 12 deletions

View File

@ -1,7 +1,7 @@
#ifndef __REGISTER_IMPORTER_H__
#define __REGISTER_IMPORTER_H__
#include <set>
#include "util/CommandLine.hpp"
#include "Importer.hpp"
@ -20,6 +20,9 @@ class RegisterImporter : public Importer {
fail::CommandLine::option_handle NO_GP, FLAGS, IP, NO_SPLIT;
bool do_gp, do_flags, do_ip, do_split_registers;
std::set<unsigned> m_register_ids;
unsigned m_ip_register_id;
public:
RegisterImporter() : Importer(), do_gp(true), do_flags(false), do_ip(false),
do_split_registers(true) {}