mirror of
https://github.com/mruby/mruby
synced 2026-06-08 16:11:16 +00:00
value.h: reconstruct mrb_ro_data_p().
* use predefined `mrb_ro_data_p()` for user-mode Linux and macOS * define `MRB_LINK_TIME_RO_DATA_P` if predefined one is used * configure macro `MRB_USE_LINK_TIME_RO_DATA_P` is no longer used * contributions for new platforms are welcome
This commit is contained in:
@@ -151,14 +151,6 @@ largest value of required alignment.
|
||||
|
||||
## Reduce heap memory configuration
|
||||
|
||||
`MRB_USE_LINK_TIME_RO_DATA_P`
|
||||
|
||||
* Only available on ELF platforms.
|
||||
* If you specify the address of a read-only section when creating a symbol or string, that string will be used as it is.
|
||||
* Heap memory can be saved.
|
||||
* Uses `__ehdr_start` and `__init_array_start`.
|
||||
* It must be `__ehdr_start < data_addr < __init_array_start`.
|
||||
|
||||
`MRB_USE_CUSTOM_RO_DATA_P`
|
||||
|
||||
* Takes precedence over `MRB_USE_LINK_TIME_RO_DATA_P`.
|
||||
|
||||
+1
-5
@@ -113,11 +113,7 @@
|
||||
/* number of object per heap page */
|
||||
//#define MRB_HEAP_PAGE_SIZE 1024
|
||||
|
||||
/* if __ehdr_start is available, mruby can reduce memory used by symbols */
|
||||
//#define MRB_USE_LINK_TIME_RO_DATA_P
|
||||
|
||||
/* 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;
|
||||
/* you can provide and use mrb_ro_data_p() for your platform.
|
||||
prototype is `mrb_bool mrb_ro_data_p(const char *ptr)` */
|
||||
//#define MRB_USE_CUSTOM_RO_DATA_P
|
||||
|
||||
|
||||
@@ -408,17 +408,11 @@ 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_LINK_TIME_RO_DATA_P) || defined(__linux__)
|
||||
#elif (defined(__linux__) && !defined(__KERNEL__))
|
||||
#define MRB_LINK_TIME_RO_DATA_P
|
||||
extern char __ehdr_start[];
|
||||
extern char __init_array_start[];
|
||||
|
||||
@@ -428,6 +422,7 @@ mrb_ro_data_p(const char *p)
|
||||
return __ehdr_start < p && p < __init_array_start;
|
||||
}
|
||||
#elif defined(__APPLE__)
|
||||
#define MRB_LINK_TIME_RO_DATA_P
|
||||
#include <mach-o/getsect.h>
|
||||
static inline mrb_bool
|
||||
mrb_ro_data_p(const char *p)
|
||||
|
||||
+2
-1
@@ -606,7 +606,8 @@ read_irep(mrb_state *mrb, const uint8_t *bin, size_t bufsize, uint8_t flags)
|
||||
static struct RProc*
|
||||
mrb_proc_read_irep(mrb_state *mrb, const uint8_t *bin)
|
||||
{
|
||||
#if defined(MRB_USE_LINK_TIME_RO_DATA_P) || defined(MRB_USE_CUSTOM_RO_DATA_P)
|
||||
/* MRB_LINK_TIME_RO_DATA_P is defined when predefined mrb_ro_data_p() is used */
|
||||
#if defined(MRB_LINK_TIME_RO_DATA_P) || defined(MRB_USE_CUSTOM_RO_DATA_P)
|
||||
uint8_t flags = mrb_ro_data_p((char*)bin) ? FLAG_SRC_STATIC : FLAG_SRC_MALLOC;
|
||||
#else
|
||||
uint8_t flags = FLAG_SRC_STATIC;
|
||||
|
||||
Reference in New Issue
Block a user