brintos

brintos / llvm-project-archived public Read only

0
0
Text · 1.3 KiB · b597f5d Raw
45 lines · c
1// Test that __orc_rt_macho_jit_dlsym works as expected.2//3// RUN: %clang -c -o %t.sym.o %p/Inputs/ret_self.S4// RUN: %clang -c -o %t.test.o %s5// RUN: %llvm_jitlink \6// RUN:   -alias Platform:_dlopen=___orc_rt_macho_jit_dlopen \7// RUN:   -alias Platform:_dlsym=___orc_rt_macho_jit_dlsym \8// RUN:   -alias Platform:_dlclose=___orc_rt_macho_jit_dlclose \9// RUN:   %t.test.o -lextra_sym -jd extra_sym %t.sym.o | FileCheck %s10 11// CHECK: entering main12// CHECK-NEXT: found "ret_self" at13// CHECK-NEXT: address of "ret_self" is consistent14// CHECK-NEXT: leaving main15 16int printf(const char *restrict format, ...);17void *dlopen(const char *path, int mode);18void *dlsym(void *handle, const char *symbol);19int dlclose(void *handle);20 21int main(int argc, char *argv[]) {22  printf("entering main\n");23  void *H = dlopen("extra_sym", 0);24  if (!H) {25    printf("failed\n");26    return -1;27  }28 29  void *(*ret_self)(void) = (void *(*)(void))dlsym(H, "ret_self");30  if (ret_self)31    printf("found \"ret_self\" at %p\n", ret_self);32  else33    printf("failed to find \"ret_self\" via dlsym\n");34 35  printf("address of \"ret_self\" is %s\n",36         ret_self() == ret_self ? "consistent" : "inconsistent");37 38  if (dlclose(H) == -1) {39    printf("failed\n");40    return -1;41  }42  printf("leaving main\n");43  return 0;44}45