This is the mail archive of the
frysk@sourceware.org
mailing list for the frysk project.
Re: frysk-core/frysk proc/BankRegister.java proc/C ...
Phil Muldoon wrote:
Andrew Cagney wrote:
Phil Muldoon wrote:
Andrew,
I know this work is ongoing, so should I sit tight regarding the
FIXME notifications? I'm not sure how to fix the gpr registers
access. If it is work ongoing, I'll just wait until you give the
signal with an explanation regarding how a Task accesses it's own
registers.
The function to look at is Task.accessRegister(Register register,int
offset, int length, byte[] buffer, int start, boolean write) which
will does a direct/raw byte copy of the data into a buffer.
However, yes, perhaps hold off a little until I've got all the
register code in frysk.proc resolved.
Andrew
Ok will do, will wait and see. As a rhetorical question, what is wrong
with task.getSomeRegisterFunctionName("eax") as a general helper function?
The only place where a String->Register lookup (e.g., "eax" ->
frysk.isa.IA32Registers.EAX) is needed is in the expression evaluator
where it interprets << $eax >>. Every where else constant object, such
as frysk.isa.IA32Registers.EAX can be used: these objects are efficient
(better with HashMap) and second having defined constants prevents typos
such as a register being called "foo" in one place and "fos" in a second.
Why do I need to know (ptrace buffer?) offset and length to access a
register? Is this because register access is being move to the task
from the ISA? Just trying to get a sense of where this refactor is going.
I'm not sure what you mean, the offset/length are for within the
specified register, and start is an offset into the byte buffer. Two
things change: tThe code that implements register accesses isn't being
moved to the task; but the way to access registers is now simpler, contrast:
Task.getRegister(IA32Register.XIP)
with:
Task.getIsa().getBankRegister("xip").getRegister(task)
the internals, though cleaned up will still be very similar.
Andrew
Regards
Phil