value.h: enable `mrb_ro_data_p()` on `__linux__` and `__APPLE__`.

Probably we should add conditions for FreeBSD, etc.
parent ef66406c
......@@ -418,7 +418,7 @@ mrb_undef_value(void)
#if defined(MRB_USE_CUSTOM_RO_DATA_P)
/* If you define `MRB_USE_CUSTOM_RO_DATA_P`, you must implement `mrb_ro_data_p()`. */
mrb_bool mrb_ro_data_p(const char *p);
#elif defined(MRB_USE_LINK_TIME_RO_DATA_P)
#elif defined(MRB_USE_LINK_TIME_RO_DATA_P) || defined(__linux__)
extern char __ehdr_start[];
extern char __init_array_start[];
......@@ -427,6 +427,13 @@ mrb_ro_data_p(const char *p)
{
return __ehdr_start < p && p < __init_array_start;
}
#elif defined(__APPLE__)
#include <mach-o/getsect.h>;
static inline mrb_bool
mrb_ro_data_p(const char *p)
{
return (void*)get_edata() < p && p < (void*)get_end();
}
#else
# define mrb_ro_data_p(p) FALSE
#endif
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment