X-Git-Url: https://git.saurik.com/apple/xnu.git/blobdiff_plain/6d2010ae8f7a6078e10b361c6962983bab233e0f..94ff46dc2849db4d43eaaf144872decc522aafb4:/libsyscall/wrappers/unix03/mmap.c?ds=inline diff --git a/libsyscall/wrappers/unix03/mmap.c b/libsyscall/wrappers/unix03/mmap.c index 60c6bba32..203301e3f 100644 --- a/libsyscall/wrappers/unix03/mmap.c +++ b/libsyscall/wrappers/unix03/mmap.c @@ -2,14 +2,14 @@ * Copyright (c) 2004 Apple Computer, Inc. All rights reserved. * * @APPLE_LICENSE_HEADER_START@ - * + * * This file contains Original Code and/or Modifications of Original Code * as defined in and that are subject to the Apple Public Source License * Version 2.0 (the 'License'). You may not use this file except in * compliance with the License. Please obtain a copy of the License at * http://www.opensource.apple.com/apsl/ and read it before using this * file. - * + * * The Original Code and all software distributed under the License are * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, @@ -17,7 +17,7 @@ * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. * Please see the License for the specific language governing rights and * limitations under the License. - * + * * @APPLE_LICENSE_HEADER_END@ */ @@ -28,6 +28,8 @@ #include #include #include +#include +#include "stack_logging_internal.h" void *__mmap(void *addr, size_t len, int prot, int flags, int fildes, off_t off); @@ -42,21 +44,33 @@ mmap(void *addr, size_t len, int prot, int flags, int fildes, off_t off) { /* * Preemptory failures: - * + * * o off is not a multiple of the page size * o flags does not contain either MAP_PRIVATE or MAP_SHARED * o len is zero */ - extern void cthread_set_errno_self(int); + extern void cerror_nocancel(int); if ((off & PAGE_MASK) || (((flags & MAP_PRIVATE) != MAP_PRIVATE) && - ((flags & MAP_SHARED) != MAP_SHARED)) || + ((flags & MAP_SHARED) != MAP_SHARED)) || (len == 0)) { - cthread_set_errno_self(EINVAL); - return(MAP_FAILED); + cerror_nocancel(EINVAL); + return MAP_FAILED; + } + + void *ptr = __mmap(addr, len, prot, flags, fildes, off); + + if (__syscall_logger) { + int stackLoggingFlags = stack_logging_type_vm_allocate; + if (flags & MAP_ANON) { + stackLoggingFlags |= (fildes & VM_FLAGS_ALIAS_MASK); + } else { + stackLoggingFlags |= stack_logging_type_mapped_file_or_shared_mem; + } + __syscall_logger(stackLoggingFlags, (uintptr_t)mach_task_self(), (uintptr_t)len, 0, (uintptr_t)ptr, 0); } - return(__mmap(addr, len, prot, flags, fildes, off)); + return ptr; } #endif /* __DARWIN_UNIX03 */