summaryrefslogtreecommitdiff
path: root/win32/win32.c
diff options
context:
space:
mode:
authorRaed Rizqie <[email protected]>2024-08-10 12:58:56 +0800
committerNobuyoshi Nakada <[email protected]>2024-08-11 00:10:28 +0900
commitf1224e55fda658a7395bd3512c6aaa92cbf4a25c (patch)
treed8e8746dd1687a3d326c14b736015dec23bc8b2b /win32/win32.c
parentb1f4222fc55ffa37496645a02dbe2a4f103b5d5b (diff)
fix i386-ucrt build
Notes
Notes: Merged: https://github.com/ruby/ruby/pull/11358
Diffstat (limited to 'win32/win32.c')
-rw-r--r--win32/win32.c14
1 files changed, 10 insertions, 4 deletions
diff --git a/win32/win32.c b/win32/win32.c
index afcce9f647..23ab773eec 100644
--- a/win32/win32.c
+++ b/win32/win32.c
@@ -2582,7 +2582,7 @@ set_pioinfo_extra(void)
char *p = (char*)get_proc_address(UCRTBASE, "_isatty", NULL);
/* _osfile(fh) & FDEV */
-#ifdef _M_ARM64
+#if defined(_M_ARM64) || defined(__aarch64__)
#define IS_INSN(pc, name) ((*(pc) & name##_mask) == name##_id)
const int max_num_inst = 500;
uint32_t *start = (uint32_t*)p;
@@ -2664,15 +2664,21 @@ set_pioinfo_extra(void)
# else /* x86 */
/* pop ebp */
# define FUNCTION_BEFORE_RET_MARK "\x5d"
+ /* leave */
+# define FUNCTION_BEFORE_RET_MARK_2 "\xc9"
# define FUNCTION_SKIP_BYTES 0
/* mov eax,dword ptr [eax*4+100EB430h] */
# define PIOINFO_MARK "\x8B\x04\x85"
# endif
if (p) {
- for (pend += 10; pend < p + 300; pend++) {
+ for (pend += 10; pend < p + 500; pend++) {
// find end of function
- if (memcmp(pend, FUNCTION_BEFORE_RET_MARK, sizeof(FUNCTION_BEFORE_RET_MARK) - 1) == 0 &&
- (*(pend + (sizeof(FUNCTION_BEFORE_RET_MARK) - 1) + FUNCTION_SKIP_BYTES) & FUNCTION_RET) == FUNCTION_RET) {
+ if ((memcmp(pend, FUNCTION_BEFORE_RET_MARK, sizeof(FUNCTION_BEFORE_RET_MARK) - 1) == 0
+# ifdef FUNCTION_BEFORE_RET_MARK_2
+ || memcmp(pend, FUNCTION_BEFORE_RET_MARK_2, sizeof(FUNCTION_BEFORE_RET_MARK_2) - 1) == 0
+# endif
+ ) &&
+ *(pend + (sizeof(FUNCTION_BEFORE_RET_MARK) - 1) + FUNCTION_SKIP_BYTES) == (char)FUNCTION_RET) {
// search backwards from end of function
for (pend -= (sizeof(PIOINFO_MARK) - 1); pend > p; pend--) {
if (memcmp(pend, PIOINFO_MARK, sizeof(PIOINFO_MARK) - 1) == 0) {