diff options
author | Peng Fan <van.freenix@gmail.com> | 2013-09-05 13:47:18 +0800 |
---|---|---|
committer | Peng Fan <van.freenix@gmail.com> | 2013-09-05 13:47:18 +0800 |
commit | 07d14d4e3239188e4f0ee407d7ae3e49fc71741b (patch) | |
tree | 826668374216a95ed9589b6b087890c84a034904 | |
parent | b25aaa867154306e0cfa6308e1a2b2dfbebb110a (diff) |
Fix symbols which need underscore
To some archs, the symbols are added a '_' prefix. we should handle it.
-rw-r--r-- | main.c | 3 | ||||
-rw-r--r-- | rap.c | 15 | ||||
-rw-r--r-- | rtl.h | 11 |
3 files changed, 25 insertions, 4 deletions
@@ -47,6 +47,7 @@ int remote_debug; #endif +#include <rtl.h> #include <rap-shell.h> #include <rtl-shell.h> #include <rtl-trace.h> @@ -57,7 +58,7 @@ int remote_debug; * The tarfile is built automatically externally so we need to account * for the leading symbol on the names. */ -#if defined(__sh__) +#if (RTL_GLUE(__USER_LABEL_PREFIX__, 1) == RTL_GLUE(_, 1)) #define SYM(_x) _x #else #define SYM(_x) _ ## _x @@ -62,6 +62,15 @@ typedef struct rtems_rap_app_s RTEMS_INHERIT_PRIORITY | RTEMS_NO_PRIORITY_CEILING | RTEMS_LOCAL) /** + * RTL entry. + */ +#if (RTL_GLUE(__USER_LABEL_PREFIX__, 1) == RTL_GLUE(_, 1)) + #define RTL_ENTRY_POINT "_rtems" +#else + #define RTL_ENTRY_POINT "rtems" +#endif + +/** * Static RAP data is returned to the user when the loader is locked. */ static rtems_rap_data_t rap_; @@ -323,7 +332,7 @@ rtems_rap_load (const char* name, int mode, int argc, const char* argv[]) return false; } - init = dlsym (app->handle, "rtems"); + init = dlsym (app->handle, RTL_ENTRY_POINT); if (!init) { rtems_rap_get_rtl_error (); @@ -332,7 +341,7 @@ rtems_rap_load (const char* name, int mode, int argc, const char* argv[]) return false; } - fini = dlsym (app->handle, "rtems"); + fini = dlsym (app->handle, RTL_ENTRY_POINT); if (!fini) { rtems_rap_get_rtl_error (); @@ -375,7 +384,7 @@ rtems_rap_unload (const char* name) return false; } - fini = dlsym (app->handle, "rtems"); + fini = dlsym (app->handle, RTL_ENTRY_POINT); if (!fini) { rtems_rap_get_rtl_error (); @@ -49,6 +49,17 @@ extern "C" { */ /** + * Macros to glue two tokens. + */ +#ifdef __STDC__ +#define RTL_XGLUE(a,b) a##b +#else +#define RTL_XGLUE(a,b) a/**/b +#endif + +#define RTL_GLUE(a,b) RTL_XGLUE(a,b) + +/** * The number of buckets in the global symbol table. */ #define RTEMS_RTL_SYMS_GLOBAL_BUCKETS (32) |