From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received-SPF: Pass (sender SPF authorized) identity=mailfrom; client-ip=65.50.211.136; helo=terminus.zytor.com; envelope-from=pcacjr@zytor.com; receiver=edk2-devel@lists.01.org Received: from terminus.zytor.com (terminus.zytor.com [65.50.211.136]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ml01.01.org (Postfix) with ESMTPS id 04CC721B00DE1 for ; Thu, 16 Nov 2017 13:59:43 -0800 (PST) Received: from terminus.zytor.com (localhost [127.0.0.1]) by terminus.zytor.com (8.15.2/8.15.2) with ESMTP id vAGM2e0W004316; Thu, 16 Nov 2017 14:02:40 -0800 Received: (from apache@localhost) by terminus.zytor.com (8.15.2/8.15.2/Submit) id vAGM2clS004305; Thu, 16 Nov 2017 20:02:39 -0200 X-Authentication-Warning: terminus.zytor.com: apache set sender to pcacjr@zytor.com using -f Received: from 201.47.212.245 (SquirrelMail authenticated user pcacjr) by www.zytor.com with HTTP; Thu, 16 Nov 2017 20:02:39 -0200 Message-ID: In-Reply-To: References: <4c77020a-e01e-f048-9410-f474c6128601@zytor.com> Date: Thu, 16 Nov 2017 20:02:39 -0200 From: "Paulo Alcantara" To: "Andrew Fish" Cc: "Paulo Alcantara" , edk2-devel@lists.01.org, "Rick Bramley" , "Eric Dong" , "Laszlo Ersek" , "Jeff Fan" User-Agent: SquirrelMail/1.4.22-19.fc24 MIME-Version: 1.0 X-Priority: 3 (Normal) Importance: Normal X-Spam-Status: No, score=-2.9 required=5.0 tests=ALL_TRUSTED,BAYES_00 autolearn=ham autolearn_force=no version=3.4.1 X-Spam-Checker-Version: SpamAssassin 3.4.1 (2015-04-28) on terminus.zytor.com Subject: Re: [RFC v2 0/3] Stack trace support in X64 exception handling X-BeenThere: edk2-devel@lists.01.org X-Mailman-Version: 2.1.22 Precedence: list List-Id: EDK II Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 16 Nov 2017 21:59:44 -0000 X-Groupsio-MsgNum: 17615 Content-Type: multipart/mixed;boundary="----=_20171116200238_54176" ------=_20171116200238_54176 Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: 8bit Hi Andrew, On Thu, November 16, 2017 3:01 am, Andrew Fish wrote: > Paulo, > > Those attached stack traces don't look right. What about the new ones? Thanks! Paulo > > Thanks, > > Andrew Fish > >> On Nov 15, 2017, at 5:46 PM, Paulo Alcantara wrote: >> >> Hi, >> >> On 11/15/2017 11:18 PM, Paulo Alcantara wrote: >>> Hi, >>> This series adds stack trace support during a X64 CPU exception. >>> Informations like back trace, stack contents and image module names >>> (that were part of the call stack) will be dumped out. >>> We already have such support in ARM/AArch64 (IIRC) exception handling >>> (thanks to Ard), and then I thought we'd also deserve it in X64 and >>> IA-32 platforms. >>> What do you think guys? >>> BTW, I've tested this only with OVMF (X64 only), using: >>> - gcc-6.3.0, GCC5, NOOPT >>> Any other tests would be really appreciable. >>> Thanks! >>> Paulo >>> Repo: https://github.com/pcacjr/edk2.git >>> Branch: stacktrace_v2 >>> Cc: Rick Bramley >>> Cc: Andrew Fish >>> Cc: Eric Dong >>> Cc: Laszlo Ersek >>> Cc: "Brian J. Johnson" >>> Cc: Jeff Fan >>> Contributed-under: TianoCore Contribution Agreement 1.1 >>> Signed-off-by: Paulo Alcantara >>> --- >>> v1 -> v2: >>> * Add IA32 arch support (GCC toolchain only) >>> * Replace hard-coded stack alignment value (16) with >>> CPU_STACK_ALIGNMENT. >>> * Check for proper stack and frame pointer alignments. >>> * Fix initialization of UnwoundStacksCount to 1. >>> * Move GetPdbFileName() to common code since it will be used by both >>> IA32 and X64 implementations. >> >> Sorry for the delay in sending v2. It's holiday here :-) >> >> FWIW, I've attached two files which contain stack trace dumps of IA32 >> and X64 exceptions. >> >> The new IA32 arch support is still limited to GCC only (that is, relying >> on frame pointers), but I'll start investing in a new solution that >> would work on both MSVC and GCC toolchains -- probably this weekend. If >> I come up with something, I'll let you know. >> >> On IA32, I performed the same test as in X64 to trigger an NMI interrupt >> manually with: asm ("int $0x2") in PartitionDxe driver and watched out >> the call stack. The difference between the two dumps, regardless the CPU >> context, etc. is that we don't see the calls from PeiCore.dll. Then I >> figured out that the EIP gets a value of 0 before jumping to >> PartitionDxe's entry point. >> >> I guess that's related to the "push $0" that Andrew mentioned earlier so >> the debugger knows when to stop unwinding. Although I can't see a "push >> 0" equivalent neither in SwitchStack.nasm nor in SwitchStack.asm for X64 >> -- so we're able to see the calls within PeiCore.dll. >> >> Thanks! >> Paulo >> _______________________________________________ >> edk2-devel mailing list >> edk2-devel@lists.01.org >> https://lists.01.org/mailman/listinfo/edk2-devel >> > -- Paulo Alcantara, HP Inc. Speaking for myself only. ------=_20171116200238_54176 Content-Type: text/plain; name="ia32_dump.txt" Content-Transfer-Encoding: 8bit Content-Disposition: attachment; filename="ia32_dump.txt" !!!! IA32 Exception Type - 03(#BP - Breakpoint) CPU Apic ID - 00000000 !!!! EIP - 7DBCD580, CS - 00000010, EFLAGS - 00000206 EAX - 00000000, ECX - 7EEC8CFF, EDX - 7ED9C220, EBX - 00000000 ESP - 7EEC8DDC, EBP - 7EEC8DDC, ESI - 00000004, EDI - 00000000 DS - 00000008, ES - 00000008, FS - 00000008, GS - 00000008, SS - 00000008 CR0 - 00000033, CR2 - 00000000, CR3 - 00000000, CR4 - 00000640 DR0 - 00000000, DR1 - 00000000, DR2 - 00000000, DR3 - 00000000 DR6 - FFFF0FF0, DR7 - 00000400 GDTR - 7EE97A90 00000047, IDTR - 7E65B010 000007FF LDTR - 00000000, TR - 00000000 FXSAVE_STATE - 7EEC8B20 Call trace: 0 0x7DBCD580 @ 0x7DBCD000+0x57F (0x7EEC8DDC) in PartitionDxe.dll 1 0x7DBD41BE @ 0x7DBCD000+0x71BD (0x7EEC8DFC) in PartitionDxe.dll 2 0x7DBD456C @ 0x7DBCD000+0x756B (0x7EEC8E1C) in PartitionDxe.dll 3 0x7DBCF7F4 @ 0x7DBCD000+0x27F3 (0x7EEC8E4C) in PartitionDxe.dll 4 0x7EED9EA4 @ 0x7EEC9000+0x10EA3 (0x7EEC8E9C) in DxeCore.dll 5 0x7EEF1A8C @ 0x7EEC9000+0x28A8B (0x7EEC8EDC) in DxeCore.dll 6 0x7EEF3DD0 @ 0x7EEC9000+0x2ADCF (0x7EEC8FAC) in DxeCore.dll 7 0x7EEF44A5 @ 0x7EEC9000+0x2B4A4 (0x7EEC8FCC) in DxeCore.dll 8 0x7EECD272 @ 0x7EEC9000+0x4271 (0x7EEC8FEC) in DxeCore.dll PartitionDxe.dll (ImageBase=0x7DBCD000, EntryPoint=0x7DBCF71B): /home/pcacjr/src/edk2/Build/OvmfIa32/NOOPT_GCC5/IA32/MdeModulePkg/Universal/Disk/PartitionDxe/PartitionDxe/DEBUG/PartitionDxe.dll DxeCore.dll (ImageBase=0x7EEC9000, EntryPoint=0x7EECD259): /home/pcacjr/src/edk2/Build/OvmfIa32/NOOPT_GCC5/IA32/MdeModulePkg/Core/Dxe/DxeMain/DEBUG/DxeCore.dll Stack dump: 0x7EEC8DDC: 7EEC8DFC 7DBD41BE 0x7EEC8DE0: 7DBD41BE 7EAA1690 0x7EEC8DE4: 7EAA1690 7EEFC520 0x7EEC8DE8: 7EEFC520 7EEC8E1C 0x7EEC8DEC: 7EEC8E1C 7DBD44EA 0x7EEC8DF0: 7DBD44EA 7E10E010 0x7EEC8DF4: 7E10E010 7EE97010 0x7EEC8DF8: 7EE97010 7EEC8E1C 0x7EEC8DFC: 7EEC8E1C 7DBD456C ------=_20171116200238_54176 Content-Type: text/plain; name="x64_dump.txt" Content-Transfer-Encoding: 8bit Content-Disposition: attachment; filename="x64_dump.txt" !!!! X64 Exception Type - 03(#BP - Breakpoint) CPU Apic ID - 00000000 !!!! RIP - 000000007EC28791, CS - 0000000000000038, RFLAGS - 0000000000000202 RAX - 000000007FE71018, RCX - 000000007F34F498, RDX - 000000007FE71018 RBX - 0000000000810248, RSP - 000000007FEE4C60, RBP - 000000007FEE4C60 RSI - 0000000000000007, RDI - 000000007F34E018 R8 - 000000007EC32DC8, R9 - 000000007F34E298, R10 - 0000000000000036 R11 - 00000000000000D7, R12 - 0000000000000000, R13 - 0000000000000000 R14 - 0000000000000000, R15 - 0000000000000000 DS - 0000000000000030, ES - 0000000000000030, FS - 0000000000000030 GS - 0000000000000030, SS - 0000000000000030 CR0 - 0000000080010033, CR2 - 0000000000000000, CR3 - 000000007FE83000 CR4 - 0000000000000668, CR8 - 0000000000000000 DR0 - 0000000000000000, DR1 - 0000000000000000, DR2 - 0000000000000000 DR3 - 0000000000000000, DR6 - 00000000FFFF0FF0, DR7 - 0000000000000400 GDTR - 000000007FE71A98 0000000000000047, LDTR - 0000000000000000 IDTR - 000000007F7AB018 0000000000000FFF, TR - 0000000000000000 FXSAVE_STATE - 000000007FEE48C0 Call trace: 0 0x000000007EC28791 @ 0x000000007EC28000+0x790 (0x000000007FEE4C60) in PartitionDxe.dll 1 0x000000007EC30269 @ 0x000000007EC28000+0x8268 (0x000000007FEE4CB0) in PartitionDxe.dll 2 0x000000007EC30640 @ 0x000000007EC28000+0x863F (0x000000007FEE4CE0) in PartitionDxe.dll 3 0x000000007EC2B116 @ 0x000000007EC28000+0x3115 (0x000000007FEE4D20) in PartitionDxe.dll 4 0x000000007FEF8A1B @ 0x000000007FEE5000+0x13A1A (0x000000007FEE4DB0) in DxeCore.dll 5 0x000000007FF10F10 @ 0x000000007FEE5000+0x2BF0F (0x000000007FEE4E30) in DxeCore.dll 6 0x000000007FF1344B @ 0x000000007FEE5000+0x2E44A (0x000000007FEE4F60) in DxeCore.dll 7 0x000000007FF13BCF @ 0x000000007FEE5000+0x2EBCE (0x000000007FEE4F90) in DxeCore.dll 8 0x000000007FEE9DDE @ 0x000000007FEE5000+0x4DDD (0x000000007FEE4FC0) in DxeCore.dll 9 0x000000007FF5B75F @ 0x000000007FF5B000+0x75E (0x000000007BFDC840) in DxeIpl.dll 10 0x000000007FF61551 @ 0x000000007FF5B000+0x6550 (0x000000007BFDC8C0) in DxeIpl.dll 11 0x000000007FF6031D @ 0x000000007FF5B000+0x531C (0x000000007BFDCA30) in DxeIpl.dll 12 0x000000007FF6CDCB @ 0x000000007FF64000+0x8DCA (0x000000007BFDCF80) in PeiCore.dll 13 0x00000000008286F4 @ 0x0000000000820140+0x85B3 (0x000000007BFDD4D0) in PeiCore.dll 14 0x0000000000830940 @ 0x0000000000820140+0x107FF (0x0000000000817600) in PeiCore.dll 15 0x0000000000831585 @ 0x0000000000820140+0x11444 (0x00000000008176D0) in PeiCore.dll 16 0x0000000000828DAD @ 0x0000000000820140+0x8C6C (0x0000000000817C20) in PeiCore.dll 17 0x0000000000832392 @ 0x0000000000820140+0x12251 (0x0000000000817C50) in PeiCore.dll 18 0x0000000000824313 @ 0x0000000000820140+0x41D2 (0x0000000000817C80) in PeiCore.dll 19 0x00000000FFFD42F1 @ 0x00000000FFFCC094+0x825C (0x0000000000817CE0) in SecMain.dll 20 0x00000000FFFCF578 @ 0x00000000FFFCC094+0x34E3 (0x0000000000817D10) in SecMain.dll 21 0x00000000FFFD428C @ 0x00000000FFFCC094+0x81F7 (0x0000000000817FD0) in SecMain.dll 22 0x00000000FFFD44E9 @ 0x00000000FFFCC094+0x8454 (0x00000000FFFCC000) in SecMain.dll PartitionDxe.dll (ImageBase=0x000000007EC28000, EntryPoint=0x000000007EC2B01F): /home/pcacjr/src/edk2/Build/OvmfX64/NOOPT_GCC5/X64/MdeModulePkg/Universal/Disk/PartitionDxe/PartitionDxe/DEBUG/PartitionDxe.dll DxeCore.dll (ImageBase=0x000000007FEE5000, EntryPoint=0x000000007FEE9DBE): /home/pcacjr/src/edk2/Build/OvmfX64/NOOPT_GCC5/X64/MdeModulePkg/Core/Dxe/DxeMain/DEBUG/DxeCore.dll DxeIpl.dll (ImageBase=0x000000007FF5B000, EntryPoint=0x000000007FF5F87F): /home/pcacjr/src/edk2/Build/OvmfX64/NOOPT_GCC5/X64/MdeModulePkg/Core/DxeIplPeim/DxeIpl/DEBUG/DxeIpl.dll PeiCore.dll (ImageBase=0x000000007FF64000, EntryPoint=0x000000007FF681AD): /home/pcacjr/src/edk2/Build/OvmfX64/NOOPT_GCC5/X64/MdeModulePkg/Core/Pei/PeiMain/DEBUG/PeiCore.dll PeiCore.dll (ImageBase=0x0000000000820140, EntryPoint=0x00000000008242ED): /home/pcacjr/src/edk2/Build/OvmfX64/NOOPT_GCC5/X64/MdeModulePkg/Core/Pei/PeiMain/DEBUG/PeiCore.dll SecMain.dll (ImageBase=0x00000000FFFCC094, EntryPoint=0x00000000FFFD44D4): /home/pcacjr/src/edk2/Build/OvmfX64/NOOPT_GCC5/X64/OvmfPkg/Sec/SecMain/DEBUG/SecMain.dll Stack dump: 0x000000007FEE4C60: 000000007FEE4CB0 000000007EC30269 0x000000007FEE4C70: 000000007EC32B20 0000000000000000 0x000000007FEE4C80: 000000007EC32DC8 0000000000000100 0x000000007FEE4C90: 000000007FEE4CB0 0000000000000000 0x000000007FEE4CA0: 000000007FEE4CE0 000000007EC305BA 0x000000007FEE4CB0: 000000007FEE4CE0 000000007EC30640 0x000000007FEE4CC0: 000000007F34F498 000000007FE71018 0x000000007FEE4CD0: 000000077FEF88FB 0000000000000000 0x000000007FEE4CE0: 000000007FEE4D20 000000007EC2B116 0x000000007FEE4CF0: 000000007F34F498 000000007FE71018 0x000000007FEE4D00: 0000000000000000 0000000000000000 0x000000007FEE4D10: 0000000000000000 0000000000000000 0x000000007FEE4D20: 000000007FEE4DB0 000000007FEF8A1B 0x000000007FEE4D30: 000000007F34F498 000000007FE71018 0x000000007FEE4D40: 0000000000000000 0000000000000004 0x000000007FEE4D50: 000000007FF1C1A8 000000007FF1CF90 0x000000007FEE4D60: 000000007FEE4DB0 0000000000000000 0x000000007FEE4D70: 000000007FF1C180 00000000000000B0 0x000000007FEE4D80: 0000000000000000 000000007F34E018 0x000000007FEE4D90: 000000007F34F498 0000000000000000 0x000000007FEE4DA0: 000000007FF1C1A8 000000007FF1CF90 0x000000007FEE4DB0: 000000007FEE4E30 000000007FF10F10 0x000000007FEE4DC0: 000000007F34F498 0000000000000000 ------=_20171116200238_54176--