/*
- * compat/compat_mman.h
+ * SPDX-License-Identifier: MIT
*
- * Copyright (C) 2013 JP Ikaheimonen <jp_ikaheimonen@mentor.com>
- * 2016 Michael Jeanson <mjeanson@efficios.com>
+ * Copyright (C) 2013 JP Ikaheimonen <jp_ikaheimonen@mentor.com>
+ * Copyright (C) 2016 Michael Jeanson <mjeanson@efficios.com>
*
* These sources are based on ftp://g.oswego.edu/pub/misc/malloc.c
* file by Doug Lea, released to the public domain.
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
- * SOFTWARE.
*/
#define BT_LOG_OUTPUT_LEVEL (mapping->log_level)
#include "logging/log.h"
#include "common/macros.h"
+#include "common/common.h"
#ifdef __APPLE__
/*
* On macOS, we need a dummy symbol so that the linker won't
* complain of an empty table of contents.
*/
-BT_HIDDEN
int bt_mman_dummy_symbol;
#endif /* __APPLE__ */
static pthread_mutex_t mmap_mutex = PTHREAD_MUTEX_INITIALIZER;
static
-struct mmap_mapping *mapping_create(void)
+struct mmap_mapping *mapping_create(int log_level)
{
struct mmap_mapping *mapping;
mapping = malloc(sizeof(struct mmap_mapping));
- if (mapping != NULL) {
+ if (mapping) {
mapping->file_handle = NULL;
mapping->map_handle = NULL;
+ mapping->log_level = log_level;
}
return mapping;
if (mapping) {
if (!CloseHandle(mapping->map_handle)) {
BT_LOGF_STR("Failed to close mmap map_handle.");
- abort();
+ bt_common_abort();
}
if (!CloseHandle(mapping->file_handle)) {
BT_LOGF_STR("Failed to close mmap file_handle.");
- abort();
+ bt_common_abort();
}
free(mapping);
mapping = NULL;
*/
BT_LOG_WRITE_CUR_LVL(BT_LOG_FATAL, BT_LOG_FATAL, BT_LOG_TAG,
"Failed to unmap mmap mapping.");
- abort();
+ bt_common_abort();
}
}
void mmap_lock(int log_level)
{
if (pthread_mutex_lock(&mmap_mutex)) {
- BT_LOGF_STR("Failed to acquire mmap_mutex.");
- abort();
+ BT_LOG_WRITE_CUR_LVL(BT_LOG_FATAL, log_level, BT_LOG_TAG, "Failed to acquire mmap_mutex.");
+ bt_common_abort();
}
}
void mmap_unlock(int log_level)
{
if (pthread_mutex_unlock(&mmap_mutex)) {
- BT_LOGF_STR("Failed to release mmap_mutex.");
- abort();
+ BT_LOG_WRITE_CUR_LVL(BT_LOG_FATAL, log_level, BT_LOG_TAG, "Failed to release mmap_mutex.");
+ bt_common_abort();
}
}
return 0;
}
-BT_HIDDEN
void *bt_mmap(void *addr, size_t length, int prot, int flags, int fd,
off_t offset, int log_level)
{
return MAP_FAILED;
}
-BT_HIDDEN
int bt_munmap(void *addr, size_t length)
{
int ret = 0;
mmap_lock(log_level);
/* Check if the mapping exists in the hashtable. */
- if (g_hash_table_lookup(mmap_mappings, addr) == NULL) {
+ if (!g_hash_table_lookup(mmap_mappings, addr)) {
_set_errno(EINVAL);
ret = -1;
goto end;
/* Remove it. */
if (!g_hash_table_remove(mmap_mappings, addr)) {
BT_LOGF_STR("Failed to remove mapping from hashtable.");
- abort();
+ bt_common_abort();
}
end:
return ret;
}
+size_t bt_mmap_get_offset_align_size(int log_level)
+{
+ SYSTEM_INFO sysinfo;
+
+ GetNativeSystemInfo(&sysinfo);
+ BT_LOG_WRITE_CUR_LVL(BT_LOG_DEBUG, log_level, BT_LOG_TAG,
+ "Allocator granularity is %lu.",
+ sysinfo.dwAllocationGranularity);
+
+ return sysinfo.dwAllocationGranularity;
+}
+
#endif