68 lines · cpp
1//===-- memprof_linux.cpp ------------------------------------------------===//2//3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.4// See https://llvm.org/LICENSE.txt for license information.5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception6//7//===----------------------------------------------------------------------===//8//9// This file is a part of MemProfiler, a memory profiler.10//11// Linux-specific details.12//===----------------------------------------------------------------------===//13 14#include "sanitizer_common/sanitizer_platform.h"15#if !SANITIZER_LINUX16#error Unsupported OS17#endif18 19#include "memprof_interceptors.h"20#include "memprof_internal.h"21#include "memprof_thread.h"22#include "sanitizer_common/sanitizer_flags.h"23#include "sanitizer_common/sanitizer_libc.h"24#include "sanitizer_common/sanitizer_procmaps.h"25 26#include <dlfcn.h>27#include <fcntl.h>28#include <limits.h>29#include <link.h>30#include <pthread.h>31#include <stdio.h>32#include <sys/mman.h>33#include <sys/resource.h>34#include <sys/syscall.h>35#include <sys/time.h>36#include <sys/types.h>37#include <sys/ucontext.h>38#include <unistd.h>39#include <unwind.h>40 41typedef enum {42 MEMPROF_RT_VERSION_UNDEFINED = 0,43 MEMPROF_RT_VERSION_DYNAMIC,44 MEMPROF_RT_VERSION_STATIC,45} memprof_rt_version_t;46 47// FIXME: perhaps also store abi version here?48extern "C" {49SANITIZER_INTERFACE_ATTRIBUTE50memprof_rt_version_t __memprof_rt_version;51}52 53namespace __memprof {54 55void InitializePlatformInterceptors() {}56void InitializePlatformExceptionHandlers() {}57 58uptr FindDynamicShadowStart() {59 uptr shadow_size_bytes = MemToShadowSize(kHighMemEnd);60 return MapDynamicShadow(shadow_size_bytes, SHADOW_SCALE,61 /*min_shadow_base_alignment*/ 0, kHighMemEnd,62 GetMmapGranularity());63}64 65void *MemprofDlSymNext(const char *sym) { return dlsym(RTLD_NEXT, sym); }66 67} // namespace __memprof68