mirror of
https://github.com/RGBCube/serenity
synced 2025-05-14 09:04:59 +00:00
LibC: Don't scrub memory in malloc/free when running in UE
Since UE is keeping track of the heap anyway, we can skip the scrubbing and drastically improve the speed of malloc and free when emulating.
This commit is contained in:
parent
84725ef3a5
commit
4faeaf101c
1 changed files with 14 additions and 1 deletions
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright (c) 2018-2020, Andreas Kling <kling@serenityos.org>
|
||||
* Copyright (c) 2018-2021, Andreas Kling <kling@serenityos.org>
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
|
@ -39,6 +39,7 @@
|
|||
#include <string.h>
|
||||
#include <sys/internals.h>
|
||||
#include <sys/mman.h>
|
||||
#include <syscall.h>
|
||||
|
||||
// FIXME: Thread safety.
|
||||
|
||||
|
@ -74,6 +75,7 @@ static bool s_log_malloc = false;
|
|||
static bool s_scrub_malloc = true;
|
||||
static bool s_scrub_free = true;
|
||||
static bool s_profiling = false;
|
||||
static bool s_in_userspace_emulator = false;
|
||||
|
||||
struct MallocStats {
|
||||
size_t number_of_malloc_calls;
|
||||
|
@ -425,6 +427,17 @@ void __malloc_init()
|
|||
{
|
||||
new (&malloc_lock()) LibThread::Lock();
|
||||
|
||||
#ifdef __serenity__
|
||||
s_in_userspace_emulator = syscall(SC_emuctl) != ENOSYS;
|
||||
#endif
|
||||
|
||||
if (s_in_userspace_emulator) {
|
||||
// Don't bother scrubbing memory if we're running in UE since it
|
||||
// keeps track of heap memory anyway.
|
||||
s_scrub_malloc = false;
|
||||
s_scrub_free = false;
|
||||
}
|
||||
|
||||
if (secure_getenv("LIBC_NOSCRUB_MALLOC"))
|
||||
s_scrub_malloc = false;
|
||||
if (secure_getenv("LIBC_NOSCRUB_FREE"))
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue