From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: by sourceware.org (Postfix, from userid 2201) id CE20A385843B; Fri, 4 Nov 2022 15:11:31 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org CE20A385843B DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sourceware.org; s=default; t=1667574691; bh=nPI47+puuOhifvRMQ8AVuPMXOWlDZ1/FcY7fTXvrN9I=; h=From:To:Subject:Date:From; b=ep2TWGGVKLmWXqtYAiDKSA30uN+UREyDrunSwFAMxVm3/h1dHjQVLu+xGRwiAh1GE ND+HEVKZLEjLum1S1H+9i/sXpUmM4QlAh9lUjExUyjamLAbvRJ0kazrWv7vDRkJHr2 AtJ3DXJGF7DxKzCSXZnoS0gxk0LhStNszMnIn8RE= Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable From: Jon TURNEY To: cygwin-cvs@sourceware.org Subject: [newlib-cygwin] Cygwin: Handle out of order modules for module offsets in stackdump X-Act-Checkin: newlib-cygwin X-Git-Author: Jon Turney X-Git-Refname: refs/heads/master X-Git-Oldrev: a8526cb52bedabd4d6ba4b227a5185627f871aa1 X-Git-Newrev: 564c88b89833d711281f7b5dd2b74b453dc66ea9 Message-Id: <20221104151131.CE20A385843B@sourceware.org> Date: Fri, 4 Nov 2022 15:11:31 +0000 (GMT) List-Id: https://sourceware.org/git/gitweb.cgi?p=3Dnewlib-cygwin.git;h=3D564c88b8983= 3d711281f7b5dd2b74b453dc66ea9 commit 564c88b89833d711281f7b5dd2b74b453dc66ea9 Author: Jon Turney Date: Tue Nov 1 14:01:08 2022 +0000 Cygwin: Handle out of order modules for module offsets in stackdump =20 Improve address to module+offset conversion, to work correctly in the presence of out-of-order elements in InMemoryOrderModuleList. =20 Fixes: d59651d4 Diff: --- winsup/cygwin/exceptions.cc | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/winsup/cygwin/exceptions.cc b/winsup/cygwin/exceptions.cc index 8cc454c90..c3433ab94 100644 --- a/winsup/cygwin/exceptions.cc +++ b/winsup/cygwin/exceptions.cc @@ -342,11 +342,13 @@ prettyprint_va (PVOID func_va) { PLDR_DATA_TABLE_ENTRY mod =3D CONTAINING_RECORD (x, LDR_DATA_TABLE_E= NTRY, InMemoryOrderLinks); - if (mod->DllBase > func_va) + if ((func_va < mod->DllBase) || + (func_va > (PVOID)((DWORD_PTR)mod->DllBase + mod->SizeOfImage))) continue; =20 __small_sprintf (buf, "%S+0x%x", &mod->BaseDllName, (DWORD_PTR)func_va - (DWORD_PTR)mod->DllBase); + break; } =20 return buf;