ARM: Hook in the mmap2 system call. Make ArmLinuxProcess handle 5,6 syscall params.
This commit is contained in:
parent
c913c64be2
commit
b394242240
|
@ -255,7 +255,7 @@ SyscallDesc ArmLinuxProcess::syscallDescs[] = {
|
||||||
/* 189 */ SyscallDesc("putpmsg", unimplementedFunc),
|
/* 189 */ SyscallDesc("putpmsg", unimplementedFunc),
|
||||||
/* 190 */ SyscallDesc("vfork", unimplementedFunc),
|
/* 190 */ SyscallDesc("vfork", unimplementedFunc),
|
||||||
/* 191 */ SyscallDesc("getrlimit", unimplementedFunc),
|
/* 191 */ SyscallDesc("getrlimit", unimplementedFunc),
|
||||||
/* 192 */ SyscallDesc("mmap2", unimplementedFunc),
|
/* 192 */ SyscallDesc("mmap2", mmapFunc<ArmLinux>),
|
||||||
/* 193 */ SyscallDesc("truncate64", unimplementedFunc),
|
/* 193 */ SyscallDesc("truncate64", unimplementedFunc),
|
||||||
/* 194 */ SyscallDesc("ftruncate64", unimplementedFunc),
|
/* 194 */ SyscallDesc("ftruncate64", unimplementedFunc),
|
||||||
/* 195 */ SyscallDesc("stat64", unimplementedFunc),
|
/* 195 */ SyscallDesc("stat64", unimplementedFunc),
|
||||||
|
@ -509,3 +509,21 @@ ArmLinuxProcess::startup()
|
||||||
};
|
};
|
||||||
tc->getMemPort()->writeBlob(commPage + 0x0fe0, get_tls, sizeof(get_tls));
|
tc->getMemPort()->writeBlob(commPage + 0x0fe0, get_tls, sizeof(get_tls));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ArmISA::IntReg
|
||||||
|
ArmLinuxProcess::getSyscallArg(ThreadContext *tc, int i)
|
||||||
|
{
|
||||||
|
// Linux apparently allows more parameter than the ABI says it should.
|
||||||
|
// This limit may need to be increased even further.
|
||||||
|
assert(i < 6);
|
||||||
|
return tc->readIntReg(ArgumentReg0 + i);
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
ArmLinuxProcess::setSyscallArg(ThreadContext *tc, int i, ArmISA::IntReg val)
|
||||||
|
{
|
||||||
|
// Linux apparently allows more parameter than the ABI says it should.
|
||||||
|
// This limit may need to be increased even further.
|
||||||
|
assert(i < 6);
|
||||||
|
tc->setIntReg(ArgumentReg0 + i, val);
|
||||||
|
}
|
||||||
|
|
|
@ -44,6 +44,9 @@ class ArmLinuxProcess : public ArmLiveProcess
|
||||||
|
|
||||||
void startup();
|
void startup();
|
||||||
|
|
||||||
|
ArmISA::IntReg getSyscallArg(ThreadContext *tc, int i);
|
||||||
|
void setSyscallArg(ThreadContext *tc, int i, ArmISA::IntReg val);
|
||||||
|
|
||||||
/// The target system's hostname.
|
/// The target system's hostname.
|
||||||
static const char *hostname;
|
static const char *hostname;
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue