X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=src%2Fcompat%2Fmman.c;h=1cc1c44c8380f571284cc6e3948b1c8f72fce2e2;hb=ecd7492f21a492b70569d5ecc1d3a808241b63f0;hp=72c4cc285aabd22b0f855a50950d66067bbb30fc;hpb=95c324a414e7d862985caaf49bdb58f0cdfa2647;p=babeltrace.git diff --git a/src/compat/mman.c b/src/compat/mman.c index 72c4cc28..1cc1c44c 100644 --- a/src/compat/mman.c +++ b/src/compat/mman.c @@ -1,29 +1,11 @@ /* - * compat/compat_mman.h + * SPDX-License-Identifier: MIT * - * Copyright (C) 2013 JP Ikaheimonen - * 2016 Michael Jeanson + * Copyright (C) 2013 JP Ikaheimonen + * Copyright (C) 2016 Michael Jeanson * * 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) @@ -31,13 +13,13 @@ #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__ */ @@ -75,7 +57,7 @@ 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; @@ -90,11 +72,11 @@ void mapping_clean(struct mmap_mapping *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; @@ -112,7 +94,7 @@ void addr_clean(void *addr) */ BT_LOG_WRITE_CUR_LVL(BT_LOG_FATAL, BT_LOG_FATAL, BT_LOG_TAG, "Failed to unmap mmap mapping."); - abort(); + bt_common_abort(); } } @@ -121,7 +103,7 @@ void mmap_lock(int log_level) { if (pthread_mutex_lock(&mmap_mutex)) { BT_LOG_WRITE_CUR_LVL(BT_LOG_FATAL, log_level, BT_LOG_TAG, "Failed to acquire mmap_mutex."); - abort(); + bt_common_abort(); } } @@ -130,7 +112,7 @@ void mmap_unlock(int log_level) { if (pthread_mutex_unlock(&mmap_mutex)) { BT_LOG_WRITE_CUR_LVL(BT_LOG_FATAL, log_level, BT_LOG_TAG, "Failed to release mmap_mutex."); - abort(); + bt_common_abort(); } } @@ -170,9 +152,8 @@ DWORD map_prot_flags(int prot, DWORD *dwDesiredAccess) return 0; } -BT_HIDDEN -void *bt_mmap(void *addr, size_t length, int prot, int flags, int fd, - off_t offset, int log_level) +void *bt_mmap(void *addr __attribute__((unused)), size_t length, int prot, + int flags, int fd, off_t offset, int log_level) { struct mmap_mapping *mapping = NULL; void *mapping_addr; @@ -271,8 +252,7 @@ error: return MAP_FAILED; } -BT_HIDDEN -int bt_munmap(void *addr, size_t length) +int bt_munmap(void *addr, size_t length __attribute__((unused))) { int ret = 0; struct mmap_mapping *mapping = addr; @@ -283,7 +263,7 @@ int bt_munmap(void *addr, size_t length) 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; @@ -292,7 +272,7 @@ int bt_munmap(void *addr, size_t length) /* Remove it. */ if (!g_hash_table_remove(mmap_mappings, addr)) { BT_LOGF_STR("Failed to remove mapping from hashtable."); - abort(); + bt_common_abort(); } end: @@ -300,4 +280,16 @@ 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