syscall_emul.hh (11383:5ac090acd180) syscall_emul.hh (11385:dbbf54058f6f)
1/*
2 * Copyright (c) 2012-2013, 2015 ARM Limited
3 * Copyright (c) 2015 Advanced Micro Devices, Inc.
4 * All rights reserved
5 *
6 * The license below extends only to copyright in the software and shall
7 * not be construed as granting a license to any other intellectual
8 * property including but not limited to intellectual property relating

--- 1209 unchanged lines hidden (view full) ---

1218 delete [] (char *)hiov[i].iov_base;
1219
1220 if (result < 0)
1221 return -errno;
1222
1223 return result;
1224}
1225
1/*
2 * Copyright (c) 2012-2013, 2015 ARM Limited
3 * Copyright (c) 2015 Advanced Micro Devices, Inc.
4 * All rights reserved
5 *
6 * The license below extends only to copyright in the software and shall
7 * not be construed as granting a license to any other intellectual
8 * property including but not limited to intellectual property relating

--- 1209 unchanged lines hidden (view full) ---

1218 delete [] (char *)hiov[i].iov_base;
1219
1220 if (result < 0)
1221 return -errno;
1222
1223 return result;
1224}
1225
1226
1227/// Target mmap() handler.
1226/// Real mmap handler.
1228template <class OS>
1229SyscallReturn
1227template <class OS>
1228SyscallReturn
1230mmapFunc(SyscallDesc *desc, int num, LiveProcess *p, ThreadContext *tc)
1229mmapImpl(SyscallDesc *desc, int num, LiveProcess *p, ThreadContext *tc,
1230 bool is_mmap2)
1231{
1232 int index = 0;
1233 Addr start = p->getSyscallArg(tc, index);
1234 uint64_t length = p->getSyscallArg(tc, index);
1235 int prot = p->getSyscallArg(tc, index);
1236 int tgt_flags = p->getSyscallArg(tc, index);
1237 int tgt_fd = p->getSyscallArg(tc, index);
1238 int offset = p->getSyscallArg(tc, index);
1239
1231{
1232 int index = 0;
1233 Addr start = p->getSyscallArg(tc, index);
1234 uint64_t length = p->getSyscallArg(tc, index);
1235 int prot = p->getSyscallArg(tc, index);
1236 int tgt_flags = p->getSyscallArg(tc, index);
1237 int tgt_fd = p->getSyscallArg(tc, index);
1238 int offset = p->getSyscallArg(tc, index);
1239
1240 DPRINTF_SYSCALL(Verbose, "mmap(0x%x, len %d, prot %d, flags %d, fd %d, "
1241 "offs %d)\n", start, length, prot, tgt_flags, tgt_fd,
1242 offset);
1240 if (is_mmap2)
1241 offset *= TheISA::PageBytes;
1243
1244 if (start & (TheISA::PageBytes - 1) ||
1245 offset & (TheISA::PageBytes - 1) ||
1246 (tgt_flags & OS::TGT_MAP_PRIVATE &&
1247 tgt_flags & OS::TGT_MAP_SHARED) ||
1248 (!(tgt_flags & OS::TGT_MAP_PRIVATE) &&
1249 !(tgt_flags & OS::TGT_MAP_SHARED)) ||
1250 !length) {

--- 107 unchanged lines hidden (view full) ---

1358 // Note that we do not zero out the remainder of the mapping. This
1359 // is done by a real system, but it probably will not affect
1360 // execution (hopefully).
1361 }
1362
1363 return start;
1364}
1365
1242
1243 if (start & (TheISA::PageBytes - 1) ||
1244 offset & (TheISA::PageBytes - 1) ||
1245 (tgt_flags & OS::TGT_MAP_PRIVATE &&
1246 tgt_flags & OS::TGT_MAP_SHARED) ||
1247 (!(tgt_flags & OS::TGT_MAP_PRIVATE) &&
1248 !(tgt_flags & OS::TGT_MAP_SHARED)) ||
1249 !length) {

--- 107 unchanged lines hidden (view full) ---

1357 // Note that we do not zero out the remainder of the mapping. This
1358 // is done by a real system, but it probably will not affect
1359 // execution (hopefully).
1360 }
1361
1362 return start;
1363}
1364
1365/// Target mmap() handler.
1366template <class OS>
1367SyscallReturn
1368mmapFunc(SyscallDesc *desc, int num, LiveProcess *p, ThreadContext *tc)
1369{
1370 return mmapImpl<OS>(desc, num, p, tc, false);
1371}
1372
1373/// Target mmap2() handler.
1374template <class OS>
1375SyscallReturn
1376mmap2Func(SyscallDesc *desc, int num, LiveProcess *p, ThreadContext *tc)
1377{
1378 return mmapImpl<OS>(desc, num, p, tc, true);
1379}
1380
1366/// Target getrlimit() handler.
1367template <class OS>
1368SyscallReturn
1369getrlimitFunc(SyscallDesc *desc, int callnum, LiveProcess *process,
1370 ThreadContext *tc)
1371{
1372 int index = 0;
1373 unsigned resource = process->getSyscallArg(tc, index);

--- 219 unchanged lines hidden ---
1381/// Target getrlimit() handler.
1382template <class OS>
1383SyscallReturn
1384getrlimitFunc(SyscallDesc *desc, int callnum, LiveProcess *process,
1385 ThreadContext *tc)
1386{
1387 int index = 0;
1388 unsigned resource = process->getSyscallArg(tc, index);

--- 219 unchanged lines hidden ---