12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849 |
- //===-- hwasan_globals.h ----------------------------------------*- C++ -*-===//
- //
- // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
- // See https://llvm.org/LICENSE.txt for license information.
- // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
- //
- //===----------------------------------------------------------------------===//
- //
- // This file is a part of HWAddressSanitizer.
- //
- // Private Hwasan header.
- //===----------------------------------------------------------------------===//
- #ifndef HWASAN_GLOBALS_H
- #define HWASAN_GLOBALS_H
- #include <link.h>
- #include "sanitizer_common/sanitizer_common.h"
- #include "sanitizer_common/sanitizer_internal_defs.h"
- namespace __hwasan {
- // This object should only ever be casted over the global (i.e. not constructed)
- // in the ELF PT_NOTE in order for `addr()` to work correctly.
- struct hwasan_global {
- // The size of this global variable. Note that the size in the descriptor is
- // max 1 << 24. Larger globals have multiple descriptors.
- uptr size() const { return info & 0xffffff; }
- // The fully-relocated address of this global.
- uptr addr() const { return reinterpret_cast<uintptr_t>(this) + gv_relptr; }
- // The static tag of this global.
- u8 tag() const { return info >> 24; };
- // The relative address between the start of the descriptor for the HWASan
- // global (in the PT_NOTE), and the fully relocated address of the global.
- s32 gv_relptr;
- u32 info;
- };
- // Walk through the specific DSO (as specified by the base, phdr, and phnum),
- // and return the range of the [beginning, end) of the HWASan globals descriptor
- // array.
- ArrayRef<const hwasan_global> HwasanGlobalsFor(ElfW(Addr) base,
- const ElfW(Phdr) * phdr,
- ElfW(Half) phnum);
- } // namespace __hwasan
- #endif // HWASAN_GLOBALS_H
|