brintos

brintos / llvm-project-archived public Read only

0
0
Text · 978 B · b742074 Raw
31 lines · c
1// This is a hack to access CFI interface that Android has in libdl.so on2// device, but not in the NDK.3#include <dlfcn.h>4#include <stdint.h>5#include <stdlib.h>6 7typedef void (*cfi_slowpath_ty)(uint64_t, void *);8typedef void (*cfi_slowpath_diag_ty)(uint64_t, void *, void *);9 10static cfi_slowpath_ty cfi_slowpath;11static cfi_slowpath_diag_ty cfi_slowpath_diag;12 13__attribute__((constructor(0), no_sanitize("cfi"))) static void init() {14  cfi_slowpath = (cfi_slowpath_ty)dlsym(RTLD_NEXT, "__cfi_slowpath");15  cfi_slowpath_diag =16      (cfi_slowpath_diag_ty)dlsym(RTLD_NEXT, "__cfi_slowpath_diag");17  if (!cfi_slowpath || !cfi_slowpath_diag) abort();18}19 20extern "C" {21__attribute__((visibility("hidden"), no_sanitize("cfi"))) void __cfi_slowpath(22    uint64_t Type, void *Addr) {23  cfi_slowpath(Type, Addr);24}25 26__attribute__((visibility("hidden"), no_sanitize("cfi"))) void27__cfi_slowpath_diag(uint64_t Type, void *Addr, void *Diag) {28  cfi_slowpath_diag(Type, Addr, Diag);29}30}31