From 850daa51f0b75c96af821ae9d4da5ec69f52e1c1 Mon Sep 17 00:00:00 2001 From: Thurston Dang Date: Fri, 30 Jun 2023 20:18:53 +0000 Subject: [PATCH] [msan] Add lit test for dladdr This adds a simple lit test for dladdr. (There is currently a dladdr testcase in compiler-rt/lib/msan/tests/msan_test.cpp, but not a stand-alone lit test.) This is an incremental step towards adding a test case (and, eventually, an interceptor) for the more complicated dladdr1 function. Differential Revision: https://reviews.llvm.org/D154255 --- compiler-rt/test/msan/dladdr_test.c | 47 +++++++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100644 compiler-rt/test/msan/dladdr_test.c diff --git a/compiler-rt/test/msan/dladdr_test.c b/compiler-rt/test/msan/dladdr_test.c new file mode 100644 index 0000000..111b6f0 --- /dev/null +++ b/compiler-rt/test/msan/dladdr_test.c @@ -0,0 +1,47 @@ +/* RUN: %clang_msan -g %s -o %t + RUN: %clang_msan -g %s -DBUILD_SO -fPIC -o %t-so.so -shared + RUN: %run %t 2>&1 | FileCheck %s + + REQUIRES: glibc{{.*}} +*/ + +#define _GNU_SOURCE + +#ifndef BUILD_SO +#include +#include +#include +#include + +typedef volatile long *(* get_t)(); +get_t GetTls; + +int main(int argc, char *argv[]) { + char path[4096]; + snprintf(path, sizeof(path), "%s-so.so", argv[0]); + int i; + + void *handle = dlopen(path, RTLD_LAZY); + if (!handle) fprintf(stderr, "%s\n", dlerror()); + assert(handle != 0); + GetTls = (get_t)dlsym(handle, "GetTls"); + assert(dlerror() == 0); + + Dl_info info; + int ret = dladdr(GetTls, &info); + assert (ret != 0); + printf ("fname: %s\n", info.dli_fname); + printf ("fbase: %p\n", info.dli_fbase); + printf ("sname: %s\n", info.dli_sname); + printf ("saddr: %p\n", info.dli_saddr); + + // CHECK: sname: GetTls + + return 0; +} +#else // BUILD_SO +long var; +long *GetTls() { + return &var; +} +#endif -- 2.7.4