brintos

brintos / llvm-project-archived public Read only

0
0
Text · 1.9 KiB · 94cd53e Raw
51 lines · c
1//===-- hwasan_globals.h ----------------------------------------*- C++ -*-===//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 HWAddressSanitizer.10//11// Private Hwasan header.12//===----------------------------------------------------------------------===//13 14#ifndef HWASAN_GLOBALS_H15#define HWASAN_GLOBALS_H16 17#include <link.h>18 19#include "sanitizer_common/sanitizer_array_ref.h"20#include "sanitizer_common/sanitizer_common.h"21#include "sanitizer_common/sanitizer_internal_defs.h"22 23namespace __hwasan {24// This object should only ever be casted over the global (i.e. not constructed)25// in the ELF PT_NOTE in order for `addr()` to work correctly.26struct hwasan_global {27  // The size of this global variable. Note that the size in the descriptor is28  // max 1 << 24. Larger globals have multiple descriptors.29  uptr size() const { return info & 0xffffff; }30  // The fully-relocated address of this global.31  uptr addr() const { return reinterpret_cast<uintptr_t>(this) + gv_relptr; }32  // The static tag of this global.33  u8 tag() const { return info >> 24; };34 35  // The relative address between the start of the descriptor for the HWASan36  // global (in the PT_NOTE), and the fully relocated address of the global.37  s32 gv_relptr;38  u32 info;39};40 41// Walk through the specific DSO (as specified by the base, phdr, and phnum),42// and return the range of the [beginning, end) of the HWASan globals descriptor43// array.44ArrayRef<const hwasan_global> HwasanGlobalsFor(ElfW(Addr) base,45                                               const ElfW(Phdr) * phdr,46                                               ElfW(Half) phnum);47 48}  // namespace __hwasan49 50#endif  // HWASAN_GLOBALS_H51