File indexing completed on 2025-05-11 08:24:32
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024
0025
0026
0027
0028 #ifdef HAVE_CONFIG_H
0029 #include "config.h"
0030 #endif
0031
0032 #include "tmacros.h"
0033
0034 #include <stdio.h>
0035
0036 #include <dlfcn.h>
0037
0038 #include <rtems/rtl/rtl-trace.h>
0039
0040 #include "dl-load.h"
0041
0042 #define TEST_TRACE 0
0043 #if TEST_TRACE
0044 #define DEBUG_TRACE (RTEMS_RTL_TRACE_DETAIL | \
0045 RTEMS_RTL_TRACE_WARNING | \
0046 RTEMS_RTL_TRACE_LOAD | \
0047 RTEMS_RTL_TRACE_UNLOAD | \
0048 RTEMS_RTL_TRACE_SYMBOL | \
0049 RTEMS_RTL_TRACE_RELOC | \
0050 RTEMS_RTL_TRACE_ALLOCATOR | \
0051 RTEMS_RTL_TRACE_UNRESOLVED | \
0052 RTEMS_RTL_TRACE_ARCHIVES | \
0053 RTEMS_RTL_TRACE_GLOBAL_SYM | \
0054 RTEMS_RTL_TRACE_DEPENDENCY)
0055 #define DL_DEBUG_TRACE DEBUG_TRACE
0056 #else
0057 #define DL_DEBUG_TRACE 0
0058 #endif
0059
0060 int dl_load_test(void)
0061 {
0062 void* handle;
0063 const char* err;
0064 void (*func)(bool );
0065 #if __i386__
0066
0067
0068
0069 bool throw_runtime = false;
0070 #else
0071 bool throw_runtime = true;
0072 #endif
0073
0074 #if DL_DEBUG_TRACE
0075 rtems_rtl_trace_set_mask (DL_DEBUG_TRACE);
0076 #endif
0077
0078 handle = dlopen("/dl05-o5.o", RTLD_GLOBAL | RTLD_NOW);
0079 if (handle == NULL)
0080 {
0081 err = dlerror();
0082 if (err != NULL)
0083 printf("dlopen: %s\n", err);
0084 }
0085 rtems_test_assert(handle != NULL);
0086
0087 func = dlsym(handle, "exception_dl");
0088 if (func == NULL) {
0089 err = dlerror ();
0090 if (err)
0091 printf ("dlsym: %s\n", err);
0092 }
0093 rtems_test_assert(func != NULL);
0094
0095 exception_base(throw_runtime);
0096
0097 func(throw_runtime);
0098
0099 rtems_test_assert(dlclose(handle) == 0);
0100
0101 return 0;
0102 }