[PATCH] D59504: [NFC][Sanitizer] Clean up GetRealFunctionAddress

Julian Lettner via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Wed Apr 24 19:09:28 PDT 2019


yln added a comment.

>   #define ASAN_INTERCEPT_FUNC(name)                                        \
>     do {                                                                   \
>       if ((!INTERCEPT_FUNCTION(name) || !REAL(name)))                      \
>         VReport(1, "AddressSanitizer: failed to intercept '" #name "'\n"); \
>     } while (0)
> 
> 
> I understand that as weird protection against double intercept

Very weird indeed.

  // returns true if a function with the given name was found.
  bool GetRealFunctionAddress(const char *func_name, uptr *func_addr, uptr real, uptr wrapper) {
    // ...
    return real == wrapper;
  }

Usage:

  #define INTERCEPT_FUNCTION_LINUX_OR_FREEBSD(func)                          \
    ::__interception::GetRealFunctionAddress(                                \
        #func, (::__interception::uptr *)&__interception::PTR_TO_REAL(func), \
        (::__interception::uptr) & (func),                                   \
        (::__interception::uptr) & WRAP(func))

That it means it evaluates to  `& (func) == & WRAP(func)`.

I will do what you suggested and break it down into smaller parts.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D59504/new/

https://reviews.llvm.org/D59504





More information about the llvm-commits mailing list