Use getsegmentdata instead of deprecated get_etext/get_edata

This commit is contained in:
fn ⌃ ⌥
2022-12-28 08:50:59 -08:00
committed by GitHub
parent 73fbc33596
commit e6c0f324ae
+11 -1
View File
@@ -435,10 +435,20 @@ mrb_ro_data_p(const char *p)
#elif defined(__APPLE__)
#define MRB_LINK_TIME_RO_DATA_P
#include <mach-o/getsect.h>
#include <crt_externs.h>
static inline mrb_bool
mrb_ro_data_p(const char *p)
{
return (char*)get_etext() < p && p < (char*)get_edata();
#ifdef __LP64__
struct mach_header_64 *mhp;
#else
struct mach_header *mhp;
#endif
mhp = _NSGetMachExecuteHeader();
unsigned long textsize, datasize;
char *text = (char*)getsegmentdata(mhp, SEG_TEXT, &textsize);
char *data = (char*)getsegmentdata(mhp, SEG_DATA, &datasize);
return text + textsize < p && p < data + datasize;
}
#endif /* Linux or macOS */
#endif /* MRB_NO_DEFAULT_RO_DATA_P */