From nobody Sat May 4 19:23:56 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of groups.io designates 66.175.222.12 as permitted sender) client-ip=66.175.222.12; envelope-from=bounce+27952+46192+1787277+3901457@groups.io; helo=web01.groups.io; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zoho.com: domain of groups.io designates 66.175.222.12 as permitted sender) smtp.mailfrom=bounce+27952+46192+1787277+3901457@groups.io; dmarc=fail(p=none dis=none) header.from=intel.com ARC-Seal: i=1; a=rsa-sha256; t=1566441374; cv=none; d=zoho.com; s=zohoarc; b=YcACKgLlBaQWiRUY7xtWLqMdYiMD/KfKMhioX82im6Gp62zgqq/aRgj7V3HmN8kud4I7Nz1QAiZmdLJfoJdI19UXp0h6bdNtKkH9nNsLb4nJXzLqN6NBqyJkiPi256EGR67SHoeF5ke7osY+mWxWb8PfI83btZNKQty8oY5TVxk= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zoho.com; s=zohoarc; t=1566441374; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Id:List-Unsubscribe:MIME-Version:Message-ID:Reply-To:References:Sender:Subject:To:ARC-Authentication-Results; bh=W/BfI8JgrS5ifDbRsPUHHQs/9gyeEtpvBwp1STUY3Ns=; b=RaSqPkQqYRS7iKeQga3QLtyQU9reqPS6KklbmRjrr41BI/j0caKwS8xLwG7RQnWF77kUUQ98mHds50+1VXJ43+aqj4fR6NlRVjbb0djqJBedk74UC5bLHGJJPFPuybUjQbP7Zkkt8NBFzwX6HzkzW5YZyoThOOiEx/nB6bjCmG4= ARC-Authentication-Results: i=1; mx.zoho.com; dkim=pass; spf=pass (zoho.com: domain of groups.io designates 66.175.222.12 as permitted sender) smtp.mailfrom=bounce+27952+46192+1787277+3901457@groups.io; dmarc=fail header.from= (p=none dis=none) header.from= Received: from web01.groups.io (web01.groups.io [66.175.222.12]) by mx.zohomail.com with SMTPS id 1566441374595753.8274512641163; Wed, 21 Aug 2019 19:36:14 -0700 (PDT) Return-Path: X-Received: from mga12.intel.com (mga12.intel.com []) by groups.io with SMTP; Wed, 21 Aug 2019 19:36:13 -0700 X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False X-Received: from orsmga003.jf.intel.com ([10.7.209.27]) by fmsmga106.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 21 Aug 2019 19:36:12 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.64,415,1559545200"; d="scan'208";a="181225532" X-Received: from unknown (HELO mdkinney-MOBL2.amr.corp.intel.com) ([10.241.98.74]) by orsmga003.jf.intel.com with ESMTP; 21 Aug 2019 19:36:12 -0700 From: "Michael D Kinney" To: devel@edk2.groups.io Cc: Jordan Justen , Ray Ni , Andrew Fish , Tim Lewis Subject: [edk2-devel] [Patch][edk2-stable201908 1/2] EmulatorPkg/Win/Host: Fix image unload regression Date: Wed, 21 Aug 2019 19:36:09 -0700 Message-Id: <20190822023610.2068-2-michael.d.kinney@intel.com> In-Reply-To: <20190822023610.2068-1-michael.d.kinney@intel.com> References: <20190822023610.2068-1-michael.d.kinney@intel.com> MIME-Version: 1.0 Precedence: Bulk List-Unsubscribe: Sender: devel@edk2.groups.io List-Id: Mailing-List: list devel@edk2.groups.io; contact devel+owner@edk2.groups.io Reply-To: devel@edk2.groups.io,michael.d.kinney@intel.com Content-Transfer-Encoding: quoted-printable DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=groups.io; q=dns/txt; s=20140610; t=1566441374; bh=HEcVNfxP/2EbwlE/1jIMzYf/Y+zpsW6sxNcaNW7nHIs=; h=Cc:Date:From:Reply-To:Subject:To; b=hqUvxzif9GMEPP2qfDLzTIWMdlKMLiGIVgWGn0xqSkcl4kiux4O2VQyp7NiSxl6AId4 nJMgBO7jBz4UpfKmLfeQ/nqpnHTWWguRRTyS9N91e4Nb4qfaB73j4qOE9nKgfSlk+x4ot ITCspm9IqEUk+wzP9Rny7qif0VSybczlorw= X-ZohoMail-DKIM: pass (identity @groups.io) Content-Type: text/plain; charset="utf-8" https://bugzilla.tianocore.org/show_bug.cgi?id=3D2104 When UEFI Applications or UEFI Drivers are unloaded, the PeCoffLoaderUnloadImageExtraAction() needs to unload the image using FreeLibrary() if the image was successfully loaded using LoadLibrrayEx(). This is a regression from the Nt32Pkg that supported unloading applications and drivers as well as loading the same application or driver multiple times. Cc: Jordan Justen Cc: Ray Ni Cc: Andrew Fish Cc: Tim Lewis Signed-off-by: Michael D Kinney Reviewed-by: Ray Ni Tested-by: Tim Lewis --- EmulatorPkg/Win/Host/WinHost.c | 167 +++++++++++++++++++++++++++++++-- 1 file changed, 161 insertions(+), 6 deletions(-) diff --git a/EmulatorPkg/Win/Host/WinHost.c b/EmulatorPkg/Win/Host/WinHost.c index dd52075f98..9c6acac279 100644 --- a/EmulatorPkg/Win/Host/WinHost.c +++ b/EmulatorPkg/Win/Host/WinHost.c @@ -19,6 +19,25 @@ SPDX-License-Identifier: BSD-2-Clause-Patent #define SE_TIME_ZONE_NAME TEXT("SeTimeZonePrivilege") #endif =20 +// +// The growth size for array of module handle entries +// +#define MAX_PDB_NAME_TO_MOD_HANDLE_ARRAY_SIZE 0x100 + +// +// Module handle entry structure +// +typedef struct { + CHAR8 *PdbPointer; + VOID *ModHandle; +} PDB_NAME_TO_MOD_HANDLE; + +// +// An Array to hold the module handles +// +PDB_NAME_TO_MOD_HANDLE *mPdbNameModHandleArray =3D NULL; +UINTN mPdbNameModHandleArraySize =3D 0; + // // Default information about where the FD is located. // This array gets filled in with information from PcdWinNtFirmwareVolume @@ -840,6 +859,120 @@ Returns: return Count; } =20 +/** + Store the ModHandle in an array indexed by the Pdb File name. + The ModHandle is needed to unload the image. + @param ImageContext - Input data returned from PE Laoder Library. Used t= o find the + .PDB file name of the PE Image. + @param ModHandle - Returned from LoadLibraryEx() and stored for call = to + FreeLibrary(). + @return return EFI_SUCCESS when ModHandle was stored. +--*/ +EFI_STATUS +AddModHandle ( + IN PE_COFF_LOADER_IMAGE_CONTEXT *ImageContext, + IN VOID *ModHandle + ) + +{ + UINTN Index; + PDB_NAME_TO_MOD_HANDLE *Array; + UINTN PreviousSize; + PDB_NAME_TO_MOD_HANDLE *TempArray; + HANDLE Handle; + UINTN Size; + + // + // Return EFI_ALREADY_STARTED if this DLL has already been loaded + // + Array =3D mPdbNameModHandleArray; + for (Index =3D 0; Index < mPdbNameModHandleArraySize; Index++, Array++) { + if (Array->PdbPointer !=3D NULL && Array->ModHandle =3D=3D ModHandle) { + return EFI_ALREADY_STARTED; + } + } + + Array =3D mPdbNameModHandleArray; + for (Index =3D 0; Index < mPdbNameModHandleArraySize; Index++, Array++) { + if (Array->PdbPointer =3D=3D NULL) { + // + // Make a copy of the stirng and store the ModHandle + // + Handle =3D GetProcessHeap (); + Size =3D AsciiStrLen (ImageContext->PdbPointer) + 1; + Array->PdbPointer =3D HeapAlloc ( Handle, HEAP_ZERO_MEMORY, Size); + ASSERT (Array->PdbPointer !=3D NULL); + + AsciiStrCpyS (Array->PdbPointer, Size, ImageContext->PdbPointer); + Array->ModHandle =3D ModHandle; + return EFI_SUCCESS; + } + } + + // + // No free space in mPdbNameModHandleArray so grow it by + // MAX_PDB_NAME_TO_MOD_HANDLE_ARRAY_SIZE entires. + // + PreviousSize =3D mPdbNameModHandleArraySize * sizeof (PDB_NAME_TO_MOD_HA= NDLE); + mPdbNameModHandleArraySize +=3D MAX_PDB_NAME_TO_MOD_HANDLE_ARRAY_SIZE; + // + // re-allocate a new buffer and copy the old values to the new locaiton. + // + TempArray =3D HeapAlloc (GetProcessHeap (), + HEAP_ZERO_MEMORY, + mPdbNameModHandleArraySize * sizeof (PDB_N= AME_TO_MOD_HANDLE) + ); + + CopyMem ((VOID *) (UINTN) TempArray, (VOID *) (UINTN)mPdbNameModHandleAr= ray, PreviousSize); + + HeapFree (GetProcessHeap (), 0, mPdbNameModHandleArray); + + mPdbNameModHandleArray =3D TempArray; + if (mPdbNameModHandleArray =3D=3D NULL) { + ASSERT (FALSE); + return EFI_OUT_OF_RESOURCES; + } + + return AddModHandle (ImageContext, ModHandle); +} + +/** + Return the ModHandle and delete the entry in the array. + @param ImageContext - Input data returned from PE Laoder Library. Used= to find the + .PDB file name of the PE Image. + @return + ModHandle - ModHandle assoicated with ImageContext is returned + NULL - No ModHandle associated with ImageContext +**/ +VOID * +RemoveModHandle ( + IN PE_COFF_LOADER_IMAGE_CONTEXT *ImageContext + ) +{ + UINTN Index; + PDB_NAME_TO_MOD_HANDLE *Array; + + if (ImageContext->PdbPointer =3D=3D NULL) { + // + // If no PDB pointer there is no ModHandle so return NULL + // + return NULL; + } + + Array =3D mPdbNameModHandleArray; + for (Index =3D 0; Index < mPdbNameModHandleArraySize; Index++, Array++) { + if ((Array->PdbPointer !=3D NULL) && (AsciiStrCmp(Array->PdbPointer, I= mageContext->PdbPointer) =3D=3D 0)) { + // + // If you find a match return it and delete the entry + // + HeapFree (GetProcessHeap (), 0, Array->PdbPointer); + Array->PdbPointer =3D NULL; + return Array->ModHandle; + } + } + + return NULL; +} =20 VOID EFIAPI @@ -847,6 +980,7 @@ PeCoffLoaderRelocateImageExtraAction ( IN OUT PE_COFF_LOADER_IMAGE_CONTEXT *ImageContext ) { + EFI_STATUS Status; VOID *DllEntryPoint; CHAR16 *DllFileName; HMODULE Library; @@ -855,7 +989,7 @@ PeCoffLoaderRelocateImageExtraAction ( ASSERT (ImageContext !=3D NULL); // // If we load our own PE COFF images the Windows debugger can not source - // level debug our code. If a valid PDB pointer exists usw it to load + // level debug our code. If a valid PDB pointer exists use it to load // the *.dll file as a library using Windows* APIs. This allows // source level debug. The image is still loaded and relocated // in the Framework memory space like on a real system (by the code abo= ve), @@ -913,10 +1047,22 @@ PeCoffLoaderRelocateImageExtraAction ( } =20 if ((Library !=3D NULL) && (DllEntryPoint !=3D NULL)) { - ImageContext->EntryPoint =3D (EFI_PHYSICAL_ADDRESS) (UINTN) DllEntr= yPoint; - SecPrint ("LoadLibraryEx (%S,\n NULL, DONT_RESOLVE_DLL= _REFERENCES)\n", DllFileName); + Status =3D AddModHandle (ImageContext, Library); + if (Status =3D=3D EFI_ALREADY_STARTED) { + // + // If the DLL has already been loaded before, then this instance o= f the DLL can not be debugged. + // + ImageContext->PdbPointer =3D NULL; + SecPrint ("WARNING: DLL already loaded. No source level debug %S.= \n\r", DllFileName); + } else { + // + // This DLL is not already loaded, so source level debugging is su= pported. + // + ImageContext->EntryPoint =3D (EFI_PHYSICAL_ADDRESS) (UINTN) DllEn= tryPoint; + SecPrint ("LoadLibraryEx (\n\r %S,\n\r NULL, DONT_RESOLVE_DLL_RE= FERENCES)\n\r", DllFileName); + } } else { - SecPrint ("WARNING: No source level debug %S. \n", DllFileName); + SecPrint ("WARNING: No source level debug %S. \n\r", DllFileName); } =20 free (DllFileName); @@ -926,13 +1072,22 @@ PeCoffLoaderRelocateImageExtraAction ( VOID EFIAPI PeCoffLoaderUnloadImageExtraAction ( - IN PE_COFF_LOADER_IMAGE_CONTEXT *ImageContext + IN PE_COFF_LOADER_IMAGE_CONTEXT *ImageContext ) { + VOID *ModHandle; + ASSERT (ImageContext !=3D NULL); + + ModHandle =3D RemoveModHandle (ImageContext); + if (ModHandle !=3D NULL) { + FreeLibrary (ModHandle); + SecPrint ("FreeLibrary (\n\r %s)\n\r", ImageContext->PdbPointer); + } else { + SecPrint ("WARNING: Unload image without source level debug\n\r"); + } } =20 - VOID _ModuleEntryPoint ( VOID --=20 2.21.0.windows.1 -=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#46192): https://edk2.groups.io/g/devel/message/46192 Mute This Topic: https://groups.io/mt/32986083/1787277 Group Owner: devel+owner@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [importer@patchew.org] -=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D- From nobody Sat May 4 19:23:56 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of groups.io designates 66.175.222.12 as permitted sender) client-ip=66.175.222.12; envelope-from=bounce+27952+46193+1787277+3901457@groups.io; helo=web01.groups.io; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zoho.com: domain of groups.io designates 66.175.222.12 as permitted sender) smtp.mailfrom=bounce+27952+46193+1787277+3901457@groups.io; dmarc=fail(p=none dis=none) header.from=intel.com ARC-Seal: i=1; a=rsa-sha256; t=1566441374; cv=none; d=zoho.com; s=zohoarc; b=KjawnAq/1QPo85yL7pQ01dxyHb4O0jCPPMjdNvmjWOLRbHZsJFVYYkXrRFHBrLKrELiOT5njYtAjeLeZ8WapsxoGaYYSzniRr3h45llh3XfNZ35i5HD0IZa1nwsGi5GnpJj9T+gDHLLRoA67qqPYjuv7kXRtrg0hYO+Z+YeBvcs= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zoho.com; s=zohoarc; t=1566441374; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Id:List-Unsubscribe:MIME-Version:Message-ID:Reply-To:References:Sender:Subject:To:ARC-Authentication-Results; bh=viwZm1NGUsV/YeBFqF2EkvPAmsUBSKYLEGtrL96ZUOc=; b=Fh+NsLc6Vawj512uEgXIdMvNgZOl+fyzzuVw/yUETND4rbGGH00nUq4r7yqnixt+gledhhlNCliZtqL39gkEo6e6xzvdrdLmH4ShhXh+9mpnFmB7zmbynpjBGLKTSEOh69Pj+b/phgAi42sbJ57W3b86eyXaiJdslxNLwZg2NLY= ARC-Authentication-Results: i=1; mx.zoho.com; dkim=pass; spf=pass (zoho.com: domain of groups.io designates 66.175.222.12 as permitted sender) smtp.mailfrom=bounce+27952+46193+1787277+3901457@groups.io; dmarc=fail header.from= (p=none dis=none) header.from= Received: from web01.groups.io (web01.groups.io [66.175.222.12]) by mx.zohomail.com with SMTPS id 1566441374637436.06636173195295; Wed, 21 Aug 2019 19:36:14 -0700 (PDT) Return-Path: X-Received: from mga12.intel.com (mga12.intel.com []) by groups.io with SMTP; Wed, 21 Aug 2019 19:36:13 -0700 X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False X-Received: from orsmga003.jf.intel.com ([10.7.209.27]) by fmsmga106.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 21 Aug 2019 19:36:12 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.64,415,1559545200"; d="scan'208";a="181225535" X-Received: from unknown (HELO mdkinney-MOBL2.amr.corp.intel.com) ([10.241.98.74]) by orsmga003.jf.intel.com with ESMTP; 21 Aug 2019 19:36:12 -0700 From: "Michael D Kinney" To: devel@edk2.groups.io Cc: Jordan Justen , Ray Ni , Andrew Fish , Tim Lewis Subject: [edk2-devel] [Patch][edk2-stable201908 2/2] EmulatorPkg/Win/Host: Fix SecPrint() log line endings Date: Wed, 21 Aug 2019 19:36:10 -0700 Message-Id: <20190822023610.2068-3-michael.d.kinney@intel.com> In-Reply-To: <20190822023610.2068-1-michael.d.kinney@intel.com> References: <20190822023610.2068-1-michael.d.kinney@intel.com> MIME-Version: 1.0 Precedence: Bulk List-Unsubscribe: Sender: devel@edk2.groups.io List-Id: Mailing-List: list devel@edk2.groups.io; contact devel+owner@edk2.groups.io Reply-To: devel@edk2.groups.io,michael.d.kinney@intel.com Content-Transfer-Encoding: quoted-printable DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=groups.io; q=dns/txt; s=20140610; t=1566441374; bh=g8eNi2VwqcnFjSrIEFhlxB4YcHQeWW5ERTRG0AkecsE=; h=Cc:Date:From:Reply-To:Subject:To; b=qrt7PEGqaQsPv3l+DLZedWv8zKTMa6MjHZ3GywVdljRP7xwbK24yA9To5M6PNEauSdu 3WJx+I5EraKdOOxDRkBFy5BrhkSRSUwzFMlCbdnRMdDEzwJmR26fUY3ypkvWGGyOru769 sueenp2LArF3WY1jpmXKwc2s/gwclx/Yiso= X-ZohoMail-DKIM: pass (identity @groups.io) Content-Type: text/plain; charset="utf-8" Update use of SecPrint() to consistently use \n\r for line endings to fix formatting issues in the debug log. Cc: Jordan Justen Cc: Ray Ni Cc: Andrew Fish Cc: Tim Lewis Signed-off-by: Michael D Kinney Reviewed-by: Ray Ni Tested-by: Tim Lewis --- EmulatorPkg/Win/Host/WinHost.c | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/EmulatorPkg/Win/Host/WinHost.c b/EmulatorPkg/Win/Host/WinHost.c index 9c6acac279..9aba3c8959 100644 --- a/EmulatorPkg/Win/Host/WinHost.c +++ b/EmulatorPkg/Win/Host/WinHost.c @@ -408,7 +408,7 @@ Returns: MemorySizeStr =3D (CHAR16 *) PcdGetPtr (PcdEmuMemorySize); FirmwareVolumesStr =3D (CHAR16 *) PcdGetPtr (PcdEmuFirmwareVolume); =20 - SecPrint ("\nEDK II WIN Host Emulation Environment from http://www.tiano= core.org/edk2/\n"); + SecPrint ("\n\rEDK II WIN Host Emulation Environment from http://www.tia= nocore.org/edk2/\n\r"); =20 // // Determine the first thread available to this process. @@ -450,7 +450,7 @@ Returns: gSystemMemoryCount =3D CountSeparatorsInString (MemorySizeStr, '!') + 1; gSystemMemory =3D calloc (gSystemMemoryCount, sizeof (NT_SYSTEM_ME= MORY)); if (gSystemMemory =3D=3D NULL) { - SecPrint ("ERROR : Can not allocate memory for %S. Exiting.\n", Memor= ySizeStr); + SecPrint ("ERROR : Can not allocate memory for %S. Exiting.\n\r", Mem= orySizeStr); exit (1); } =20 @@ -460,13 +460,13 @@ Returns: gFdInfoCount =3D CountSeparatorsInString (FirmwareVolumesStr, '!') + 1; gFdInfo =3D calloc (gFdInfoCount, sizeof (NT_FD_INFO)); if (gFdInfo =3D=3D NULL) { - SecPrint ("ERROR : Can not allocate memory for %S. Exiting.\n", Firmw= areVolumesStr); + SecPrint ("ERROR : Can not allocate memory for %S. Exiting.\n\r", Fir= mwareVolumesStr); exit (1); } // // Setup Boot Mode. // - SecPrint (" BootMode 0x%02x\n", PcdGet32 (PcdEmuBootMode)); + SecPrint (" BootMode 0x%02x\n\r", PcdGet32 (PcdEmuBootMode)); =20 // // Allocate 128K memory to emulate temp memory for PEI. @@ -476,12 +476,12 @@ Returns: TemporaryRamSize =3D TEMPORARY_RAM_SIZE; TemporaryRam =3D VirtualAlloc (NULL, (SIZE_T) (TemporaryRamSize), ME= M_COMMIT, PAGE_EXECUTE_READWRITE); if (TemporaryRam =3D=3D NULL) { - SecPrint ("ERROR : Can not allocate enough space for SecStack\n"); + SecPrint ("ERROR : Can not allocate enough space for SecStack\n\r"); exit (1); } SetMem32 (TemporaryRam, TemporaryRamSize, PcdGet32 (PcdInitValueInTempSt= ack)); =20 - SecPrint (" OS Emulator passing in %u KB of temp RAM at 0x%08lx to SEC\= n", + SecPrint (" OS Emulator passing in %u KB of temp RAM at 0x%08lx to SEC\= n\r", TemporaryRamSize / SIZE_1KB, TemporaryRam ); @@ -503,7 +503,7 @@ Returns: &Size ); if (EFI_ERROR (Status)) { - SecPrint ("ERROR : Could not allocate PeiServicesTablePage @ %p\n", = EmuMagicPage); + SecPrint ("ERROR : Could not allocate PeiServicesTablePage @ %p\n\r"= , EmuMagicPage); return EFI_DEVICE_ERROR; } } @@ -514,7 +514,7 @@ Returns: // FileNamePtr =3D AllocateCopyPool (StrSize (FirmwareVolumesStr), Firmware= VolumesStr); if (FileNamePtr =3D=3D NULL) { - SecPrint ("ERROR : Can not allocate memory for firmware volume string\= n"); + SecPrint ("ERROR : Can not allocate memory for firmware volume string\= n\r"); exit (1); } =20 @@ -540,11 +540,11 @@ Returns: &gFdInfo[Index].Size ); if (EFI_ERROR (Status)) { - SecPrint ("ERROR : Can not open Firmware Device File %S (0x%X). Exi= ting.\n", FileName, Status); + SecPrint ("ERROR : Can not open Firmware Device File %S (0x%X). Exi= ting.\n\r", FileName, Status); exit (1); } =20 - SecPrint (" FD loaded from %S\n", FileName); + SecPrint (" FD loaded from %S", FileName); =20 if (SecFile =3D=3D NULL) { // @@ -565,7 +565,7 @@ Returns: } } =20 - SecPrint ("\n"); + SecPrint ("\n\r"); } // // Calculate memory regions and store the information in the gSystemMemo= ry @@ -590,7 +590,7 @@ Returns: MemorySizeStr =3D MemorySizeStr + Index1 + 1; } =20 - SecPrint ("\n"); + SecPrint ("\n\r"); =20 // // Hand off to SEC Core @@ -601,7 +601,7 @@ Returns: // If we get here, then the SEC Core returned. This is an error as SEC s= hould // always hand off to PEI Core and then on to DXE Core. // - SecPrint ("ERROR : SEC returned\n"); + SecPrint ("ERROR : SEC returned\n\r"); exit (1); } =20 --=20 2.21.0.windows.1 -=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#46193): https://edk2.groups.io/g/devel/message/46193 Mute This Topic: https://groups.io/mt/32986084/1787277 Group Owner: devel+owner@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [importer@patchew.org] -=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-