arch: Use VPtr for uname.
Change-Id: Ia4b6c9135f16e6c68bbcf3a9c15ba7433a0a6682 Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/29403 Maintainer: Gabe Black <gabeblack@google.com> Tested-by: kokoro <noreply+kokoro@google.com> Reviewed-by: Matthew Poremba <matthew.poremba@amd.com>
This commit is contained in:
@@ -100,10 +100,9 @@ ArmLinuxObjectFileLoader loader;
|
||||
|
||||
/// Target uname() handler.
|
||||
static SyscallReturn
|
||||
unameFunc32(SyscallDesc *desc, ThreadContext *tc, Addr utsname)
|
||||
unameFunc32(SyscallDesc *desc, ThreadContext *tc, VPtr<Linux::utsname> name)
|
||||
{
|
||||
auto process = tc->getProcessPtr();
|
||||
TypedBufferArg<Linux::utsname> name(utsname);
|
||||
|
||||
strcpy(name->sysname, "Linux");
|
||||
strcpy(name->nodename, "m5.eecs.umich.edu");
|
||||
@@ -111,16 +110,14 @@ unameFunc32(SyscallDesc *desc, ThreadContext *tc, Addr utsname)
|
||||
strcpy(name->version, "#1 SMP Sat Dec 1 00:00:00 GMT 2012");
|
||||
strcpy(name->machine, "armv7l");
|
||||
|
||||
name.copyOut(tc->getVirtProxy());
|
||||
return 0;
|
||||
}
|
||||
|
||||
/// Target uname() handler.
|
||||
static SyscallReturn
|
||||
unameFunc64(SyscallDesc *desc, ThreadContext *tc, Addr utsname)
|
||||
unameFunc64(SyscallDesc *desc, ThreadContext *tc, VPtr<Linux::utsname> name)
|
||||
{
|
||||
auto process = tc->getProcessPtr();
|
||||
TypedBufferArg<Linux::utsname> name(utsname);
|
||||
|
||||
strcpy(name->sysname, "Linux");
|
||||
strcpy(name->nodename, "gem5");
|
||||
@@ -128,7 +125,6 @@ unameFunc64(SyscallDesc *desc, ThreadContext *tc, Addr utsname)
|
||||
strcpy(name->version, "#1 SMP Sat Dec 1 00:00:00 GMT 2012");
|
||||
strcpy(name->machine, "armv8l");
|
||||
|
||||
name.copyOut(tc->getVirtProxy());
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
@@ -77,10 +77,9 @@ MipsLinuxObjectFileLoader loader;
|
||||
|
||||
/// Target uname() handler.
|
||||
static SyscallReturn
|
||||
unameFunc(SyscallDesc *desc, ThreadContext *tc, Addr utsname)
|
||||
unameFunc(SyscallDesc *desc, ThreadContext *tc, VPtr<Linux::utsname> name)
|
||||
{
|
||||
auto process = tc->getProcessPtr();
|
||||
TypedBufferArg<Linux::utsname> name(utsname);
|
||||
|
||||
strcpy(name->sysname, "Linux");
|
||||
strcpy(name->nodename,"sim.gem5.org");
|
||||
@@ -88,7 +87,6 @@ unameFunc(SyscallDesc *desc, ThreadContext *tc, Addr utsname)
|
||||
strcpy(name->version, "#1 Mon Aug 18 11:32:15 EDT 2003");
|
||||
strcpy(name->machine, "mips");
|
||||
|
||||
name.copyOut(tc->getVirtProxy());
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -103,10 +101,9 @@ sys_getsysinfoFunc(SyscallDesc *desc, ThreadContext *tc, unsigned op,
|
||||
case 45:
|
||||
{
|
||||
// GSI_IEEE_FP_CONTROL
|
||||
TypedBufferArg<uint64_t> fpcr(bufPtr);
|
||||
VPtr<uint64_t> fpcr(bufPtr, tc);
|
||||
// I don't think this exactly matches the HW FPCR
|
||||
*fpcr = 0;
|
||||
fpcr.copyOut(tc->getVirtProxy());
|
||||
return 0;
|
||||
}
|
||||
default:
|
||||
@@ -128,11 +125,11 @@ sys_setsysinfoFunc(SyscallDesc *desc, ThreadContext *tc, unsigned op,
|
||||
case 14:
|
||||
{
|
||||
// SSI_IEEE_FP_CONTROL
|
||||
TypedBufferArg<uint64_t> fpcr(bufPtr);
|
||||
ConstVPtr<uint64_t> fpcr(bufPtr, tc);
|
||||
// I don't think this exactly matches the HW FPCR
|
||||
fpcr.copyIn(tc->getVirtProxy());
|
||||
DPRINTFR(SyscallVerbose, "sys_setsysinfo(SSI_IEEE_FP_CONTROL): "
|
||||
" setting FPCR to 0x%x\n", letoh(*(uint64_t*)fpcr));
|
||||
" setting FPCR to 0x%x\n", letoh(*fpcr));
|
||||
return 0;
|
||||
}
|
||||
default:
|
||||
|
||||
@@ -76,10 +76,9 @@ PowerLinuxObjectFileLoader loader;
|
||||
|
||||
/// Target uname() handler.
|
||||
static SyscallReturn
|
||||
unameFunc(SyscallDesc *desc, ThreadContext *tc, Addr utsname)
|
||||
unameFunc(SyscallDesc *desc, ThreadContext *tc, VPtr<Linux::utsname> name)
|
||||
{
|
||||
auto process = tc->getProcessPtr();
|
||||
TypedBufferArg<Linux::utsname> name(utsname);
|
||||
|
||||
strcpy(name->sysname, "Linux");
|
||||
strcpy(name->nodename, "sim.gem5.org");
|
||||
@@ -87,7 +86,6 @@ unameFunc(SyscallDesc *desc, ThreadContext *tc, Addr utsname)
|
||||
strcpy(name->version, "#1 Mon Aug 18 11:32:15 EDT 2003");
|
||||
strcpy(name->machine, "power");
|
||||
|
||||
name.copyOut(tc->getVirtProxy());
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
@@ -84,10 +84,9 @@ RiscvLinuxObjectFileLoader loader;
|
||||
|
||||
/// Target uname() handler.
|
||||
static SyscallReturn
|
||||
unameFunc64(SyscallDesc *desc, ThreadContext *tc, Addr utsname)
|
||||
unameFunc64(SyscallDesc *desc, ThreadContext *tc, VPtr<Linux::utsname> name)
|
||||
{
|
||||
auto process = tc->getProcessPtr();
|
||||
TypedBufferArg<Linux::utsname> name(utsname);
|
||||
|
||||
strcpy(name->sysname, "Linux");
|
||||
strcpy(name->nodename,"sim.gem5.org");
|
||||
@@ -95,16 +94,14 @@ unameFunc64(SyscallDesc *desc, ThreadContext *tc, Addr utsname)
|
||||
strcpy(name->version, "#1 Mon Aug 18 11:32:15 EDT 2003");
|
||||
strcpy(name->machine, "riscv64");
|
||||
|
||||
name.copyOut(tc->getVirtProxy());
|
||||
return 0;
|
||||
}
|
||||
|
||||
/// Target uname() handler.
|
||||
static SyscallReturn
|
||||
unameFunc32(SyscallDesc *desc, ThreadContext *tc, Addr utsname)
|
||||
unameFunc32(SyscallDesc *desc, ThreadContext *tc, VPtr<Linux::utsname> name)
|
||||
{
|
||||
auto process = tc->getProcessPtr();
|
||||
TypedBufferArg<Linux::utsname> name(utsname);
|
||||
|
||||
strcpy(name->sysname, "Linux");
|
||||
strcpy(name->nodename,"sim.gem5.org");
|
||||
@@ -112,7 +109,6 @@ unameFunc32(SyscallDesc *desc, ThreadContext *tc, Addr utsname)
|
||||
strcpy(name->version, "#1 Mon Aug 18 11:32:15 EDT 2003");
|
||||
strcpy(name->machine, "riscv32");
|
||||
|
||||
name.copyOut(tc->getVirtProxy());
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
@@ -37,10 +37,9 @@ namespace SparcISA {
|
||||
|
||||
/// Target uname() handler.
|
||||
static SyscallReturn
|
||||
unameFunc(SyscallDesc *desc, ThreadContext *tc, Addr utsname)
|
||||
unameFunc(SyscallDesc *desc, ThreadContext *tc, VPtr<Linux::utsname> name)
|
||||
{
|
||||
auto process = tc->getProcessPtr();
|
||||
TypedBufferArg<Linux::utsname> name(utsname);
|
||||
|
||||
strcpy(name->sysname, "Linux");
|
||||
strcpy(name->nodename, "sim.gem5.org");
|
||||
@@ -48,8 +47,6 @@ unameFunc(SyscallDesc *desc, ThreadContext *tc, Addr utsname)
|
||||
strcpy(name->version, "#1 Mon Aug 18 11:32:15 EDT 2003");
|
||||
strcpy(name->machine, "sparc");
|
||||
|
||||
name.copyOut(tc->getVirtProxy());
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
@@ -70,10 +70,9 @@ SparcSolarisObjectFileLoader loader;
|
||||
|
||||
/// Target uname() handler.
|
||||
static SyscallReturn
|
||||
unameFunc(SyscallDesc *desc, ThreadContext *tc, Addr utsname)
|
||||
unameFunc(SyscallDesc *desc, ThreadContext *tc, VPtr<Solaris::utsname> name)
|
||||
{
|
||||
auto process = tc->getProcessPtr();
|
||||
TypedBufferArg<Solaris::utsname> name(utsname);
|
||||
|
||||
strcpy(name->sysname, "SunOS");
|
||||
strcpy(name->nodename, "m5.eecs.umich.edu");
|
||||
@@ -81,8 +80,6 @@ unameFunc(SyscallDesc *desc, ThreadContext *tc, Addr utsname)
|
||||
strcpy(name->version, "Generic_118558-21");
|
||||
strcpy(name->machine, "sun4u");
|
||||
|
||||
name.copyOut(tc->getVirtProxy());
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
@@ -89,10 +89,9 @@ X86LinuxObjectFileLoader loader;
|
||||
|
||||
/// Target uname() handler.
|
||||
static SyscallReturn
|
||||
unameFunc(SyscallDesc *desc, ThreadContext *tc, Addr utsname)
|
||||
unameFunc(SyscallDesc *desc, ThreadContext *tc, VPtr<Linux::utsname> name)
|
||||
{
|
||||
auto process = tc->getProcessPtr();
|
||||
TypedBufferArg<Linux::utsname> name(utsname);
|
||||
|
||||
strcpy(name->sysname, "Linux");
|
||||
strcpy(name->nodename, "sim.gem5.org");
|
||||
@@ -100,8 +99,6 @@ unameFunc(SyscallDesc *desc, ThreadContext *tc, Addr utsname)
|
||||
strcpy(name->version, "#1 Mon Aug 18 11:32:15 EDT 2003");
|
||||
strcpy(name->machine, "x86_64");
|
||||
|
||||
name.copyOut(tc->getVirtProxy());
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -167,7 +164,8 @@ struct UserDesc64 {
|
||||
};
|
||||
|
||||
static SyscallReturn
|
||||
setThreadArea32Func(SyscallDesc *desc, ThreadContext *tc, Addr userDescPtr)
|
||||
setThreadArea32Func(SyscallDesc *desc, ThreadContext *tc,
|
||||
VPtr<UserDesc32> userDesc)
|
||||
{
|
||||
const int minTLSEntry = 6;
|
||||
const int numTLSEntries = 3;
|
||||
@@ -180,14 +178,10 @@ setThreadArea32Func(SyscallDesc *desc, ThreadContext *tc, Addr userDescPtr)
|
||||
|
||||
assert((maxTLSEntry + 1) * sizeof(uint64_t) <= x86p->gdtSize());
|
||||
|
||||
TypedBufferArg<UserDesc32> userDesc(userDescPtr);
|
||||
TypedBufferArg<uint64_t>
|
||||
gdt(x86p->gdtStart() + minTLSEntry * sizeof(uint64_t),
|
||||
numTLSEntries * sizeof(uint64_t));
|
||||
|
||||
if (!userDesc.copyIn(tc->getVirtProxy()))
|
||||
return -EFAULT;
|
||||
|
||||
if (!gdt.copyIn(tc->getVirtProxy()))
|
||||
panic("Failed to copy in GDT for %s.\n", desc->name());
|
||||
|
||||
@@ -240,8 +234,6 @@ setThreadArea32Func(SyscallDesc *desc, ThreadContext *tc, Addr userDescPtr)
|
||||
|
||||
gdt[index] = (uint64_t)segDesc;
|
||||
|
||||
if (!userDesc.copyOut(tc->getVirtProxy()))
|
||||
return -EFAULT;
|
||||
if (!gdt.copyOut(tc->getVirtProxy()))
|
||||
panic("Failed to copy out GDT for %s.\n", desc->name());
|
||||
|
||||
|
||||
Reference in New Issue
Block a user