diff options
| author | Yukihiro "Matz" Matsumoto <[email protected]> | 2019-09-22 17:00:49 +0900 |
|---|---|---|
| committer | GitHub <[email protected]> | 2019-09-22 17:00:49 +0900 |
| commit | 046b116c189cf5fb1eaa04a52490be5e13c14e54 (patch) | |
| tree | 23f8f74bdf6c3a172fde8cd6d390030aede4cb82 /include | |
| parent | 8db7dfb5c41fcb52d1a571823147589ab2a03a6c (diff) | |
| parent | 7f044341f9f5c227d7c13c9c8ac2e9b00c8ed287 (diff) | |
| download | mruby-046b116c189cf5fb1eaa04a52490be5e13c14e54.tar.gz mruby-046b116c189cf5fb1eaa04a52490be5e13c14e54.zip | |
Merge pull request #4716 from MaskRay/rodata
Rename MRB_USE_ETEXT_EDATA to MRB_USE_LINK_TIME_RO_DATA_P and support lld linked programs
Diffstat (limited to 'include')
| -rw-r--r-- | include/mrbconf.h | 10 | ||||
| -rw-r--r-- | include/mruby/value.h | 32 |
2 files changed, 13 insertions, 29 deletions
diff --git a/include/mrbconf.h b/include/mrbconf.h index c5b9afd05..b86ce82e8 100644 --- a/include/mrbconf.h +++ b/include/mrbconf.h @@ -88,14 +88,10 @@ /* number of object per heap page */ //#define MRB_HEAP_PAGE_SIZE 1024 -/* if _etext and _edata available, mruby can reduce memory used by symbols */ -//#define MRB_USE_ETEXT_EDATA +/* if __ehdr_start is available, mruby can reduce memory used by symbols */ +//#define MRB_USE_LINK_TIME_RO_DATA_P -/* do not use __init_array_start to determine readonly data section; - effective only when MRB_USE_ETEXT_EDATA is defined */ -//#define MRB_NO_INIT_ARRAY_START - -/* if do not works both MRB_USE_ETEXT_EDATA and MRB_NO_INIT_ARRAY_START, +/* if MRB_USE_LINK_TIME_RO_DATA_P does not work, you can try mrb_ro_data_p() that you have implemented yourself in any file; prototype is `mrb_bool mrb_ro_data_p(const char *ptr)` */ //#define MRB_USE_CUSTOM_RO_DATA_P diff --git a/include/mruby/value.h b/include/mruby/value.h index 52ce93d58..831334b9d 100644 --- a/include/mruby/value.h +++ b/include/mruby/value.h @@ -309,37 +309,25 @@ mrb_undef_value(void) return v; } +#if defined(MRB_USE_ETEXT_EDATA) && !defined(MRB_USE_LINK_TIME_RO_DATA_P) +# ifdef __GNUC__ +# warning MRB_USE_ETEXT_EDATA is deprecated. Define MRB_USE_LINK_TIME_RO_DATA_P instead. +# endif +# define MRB_USE_LINK_TIME_RO_DATA_P +#endif + #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_ETEXT_EDATA) -#if (defined(__APPLE__) && defined(__MACH__)) -#include <mach-o/getsect.h> -static inline mrb_bool -mrb_ro_data_p(const char *p) -{ - return (const char*)get_etext() < p && p < (const char*)get_edata(); -} -#else -extern char _etext[]; -#ifdef MRB_NO_INIT_ARRAY_START -extern char _edata[]; - -static inline mrb_bool -mrb_ro_data_p(const char *p) -{ - return _etext < p && p < _edata; -} -#else +#elif defined(MRB_USE_LINK_TIME_RO_DATA_P) +extern char __ehdr_start[]; extern char __init_array_start[]; static inline mrb_bool mrb_ro_data_p(const char *p) { - return _etext < p && p < (char*)&__init_array_start; + return __ehdr_start < p && p < __init_array_start; } -#endif -#endif #else # define mrb_ro_data_p(p) FALSE #endif |
