[edk2] [PATCH 1/1] UefiCpuPkg/CpuExceptionHandlerLib: Fix spelling issue

2018-12-18 Thread Mike Maslenkin
*Excpetion* should be *Exception*

Contributed-under: TianoCore Contribution Agreement 1.1
Signed-off-by: Mike Maslenkin 
CC: Eric Dong 
CC: Laszlo Ersek 
---
 UefiCpuPkg/Library/CpuExceptionHandlerLib/CpuExceptionCommon.h  | 2 +-
 UefiCpuPkg/Library/CpuExceptionHandlerLib/DxeException.c| 2 +-
 .../Library/CpuExceptionHandlerLib/Ia32/ArchExceptionHandler.c  | 2 +-
 .../Library/CpuExceptionHandlerLib/X64/ArchExceptionHandler.c   | 2 +-
 4 files changed, 4 insertions(+), 4 deletions(-)

diff --git a/UefiCpuPkg/Library/CpuExceptionHandlerLib/CpuExceptionCommon.h 
b/UefiCpuPkg/Library/CpuExceptionHandlerLib/CpuExceptionCommon.h
index e10d9379d596..cefa779b7e8a 100644
--- a/UefiCpuPkg/Library/CpuExceptionHandlerLib/CpuExceptionCommon.h
+++ b/UefiCpuPkg/Library/CpuExceptionHandlerLib/CpuExceptionCommon.h
@@ -310,7 +310,7 @@ CommonExceptionHandlerWorker (
   @retval EFI_INVALID_PARAMETER   StackSwitchData contains invalid content.
 **/
 EFI_STATUS
-ArchSetupExcpetionStack (
+ArchSetupExceptionStack (
   IN CPU_EXCEPTION_INIT_DATA*StackSwitchData
   );
 
diff --git a/UefiCpuPkg/Library/CpuExceptionHandlerLib/DxeException.c 
b/UefiCpuPkg/Library/CpuExceptionHandlerLib/DxeException.c
index 2a090782fc22..70ee7dd8bfb3 100644
--- a/UefiCpuPkg/Library/CpuExceptionHandlerLib/DxeException.c
+++ b/UefiCpuPkg/Library/CpuExceptionHandlerLib/DxeException.c
@@ -285,7 +285,7 @@ InitializeCpuExceptionHandlersEx (
 
 InitData = 
   }
-  Status = ArchSetupExcpetionStack (InitData);
+  Status = ArchSetupExceptionStack (InitData);
 }
   }
 
diff --git 
a/UefiCpuPkg/Library/CpuExceptionHandlerLib/Ia32/ArchExceptionHandler.c 
b/UefiCpuPkg/Library/CpuExceptionHandlerLib/Ia32/ArchExceptionHandler.c
index 04f2ab593c3e..8d1326c4ba71 100644
--- a/UefiCpuPkg/Library/CpuExceptionHandlerLib/Ia32/ArchExceptionHandler.c
+++ b/UefiCpuPkg/Library/CpuExceptionHandlerLib/Ia32/ArchExceptionHandler.c
@@ -119,7 +119,7 @@ ArchRestoreExceptionContext (
 
 **/
 EFI_STATUS
-ArchSetupExcpetionStack (
+ArchSetupExceptionStack (
   IN CPU_EXCEPTION_INIT_DATA  *StackSwitchData
   )
 {
diff --git 
a/UefiCpuPkg/Library/CpuExceptionHandlerLib/X64/ArchExceptionHandler.c 
b/UefiCpuPkg/Library/CpuExceptionHandlerLib/X64/ArchExceptionHandler.c
index 56180f4c17e4..02dfa50fc7d0 100644
--- a/UefiCpuPkg/Library/CpuExceptionHandlerLib/X64/ArchExceptionHandler.c
+++ b/UefiCpuPkg/Library/CpuExceptionHandlerLib/X64/ArchExceptionHandler.c
@@ -124,7 +124,7 @@ ArchRestoreExceptionContext (
 
 **/
 EFI_STATUS
-ArchSetupExcpetionStack (
+ArchSetupExceptionStack (
   IN CPU_EXCEPTION_INIT_DATA  *StackSwitchData
   )
 {
-- 
2.19.2

___
edk2-devel mailing list
edk2-devel@lists.01.org
https://lists.01.org/mailman/listinfo/edk2-devel


Re: [edk2] SATA AHCI issue

2016-07-14 Thread Mike Maslenkin
BTW Windows waits for FR bit set for 50ms as opposed to Linux.

See P_Running_WaitOnFRE function of storahci from WDK.

So you can break Intel HBAs for example.
Could you ask iastor team about this issue?

Regards.

On Thu, 2016-07-14 at 06:25 +, Tian, Feng wrote:
> Hi, Shaveta
> 
> We have approved this fix. Do you miss it? 
> http://article.gmane.org/gmane.comp.bios.edk2.devel/13541
> 
> Thanks
> Feng
> 
> -Original Message-
> From: edk2-devel [mailto:edk2-devel-boun...@lists.01.org] On Behalf Of 
> Shaveta Leekha
> Sent: Thursday, July 14, 2016 2:04 PM
> To: edk2-devel@lists.01.org; Linaro UEFI Mailman List 
> ; Jan Dąbroś ; Ard 
> Biesheuvel 
> Cc: Ruchika Gupta 
> Subject: [edk2] SATA AHCI issue
> 
> Hi,
> 
> 
> 
> I have been working on support for AHCI controller for my ARMv8 platform.
> 
> For that I have integrated my PciEmulation code and SataControllerDxe driver 
> code with MdeModulePkg/Bus/Ata.
> 
> 
> 
> But facing one issue, this is same issue reported by Jan Dabros(in To list) 
> sometime back.
> 
> Setting PxCMD.FRE bit of command register doesn't cause PxCMD.FR to be set to 
> '1' even after "500msec" timeout.
> 
> 
> 
> (As per AHCI spec 1.3 : When PxCMD.FRE is set, it causes PxCMD.FR to be set 
> to '1' )
> 
> Is it correct to just comment out following code part from 
> "MdeModulePkg/Bus/Ata/AtaAtapiPassThru/AhciMode.c" file, 
> "AhciModeInitialization" function:
> 
> 
> 
> As Initialization timeouts is occurring in below part of code:
> 
> 
> 
>   //
> 
>   // Enable FIS Receive DMA engine for the first D2H FIS.
> 
>   //
> 
>   Offset = EFI_AHCI_PORT_START + Port * EFI_AHCI_PORT_REG_WIDTH + 
> EFI_AHCI_PORT_CMD;
> 
>   AhciOrReg (PciIo, Offset, EFI_AHCI_PORT_CMD_FRE);
> 
>   Status = AhciWaitMmioSet (
> 
>  PciIo,
> 
>  Offset,
> 
>  EFI_AHCI_PORT_CMD_FR,
> 
>  EFI_AHCI_PORT_CMD_FR,
> 
>  EFI_AHCI_PORT_CMD_FR_CLEAR_TIMEOUT
> 
>  );
> 
>   if (EFI_ERROR (Status)) {
> 
> continue;
> 
>   }
> 
> 
> 
> And if above code is commented out, then SATA stack works completely fine.
> 
> 
> 
> What can be the problem?
> 
> 
> 
> Thank you in advance for your time!
> 
> 
> 
> Best regards,
> 
> Shaveta
> 
> ___
> edk2-devel mailing list
> edk2-devel@lists.01.org
> https://lists.01.org/mailman/listinfo/edk2-devel
> ___
> edk2-devel mailing list
> edk2-devel@lists.01.org
> https://lists.01.org/mailman/listinfo/edk2-devel


___
edk2-devel mailing list
edk2-devel@lists.01.org
https://lists.01.org/mailman/listinfo/edk2-devel


Re: [edk2] [Patch 2/3] UefiCpuPkg/CpuMpPei: Dump message if microcode signature not matched

2016-07-02 Thread Mike Maslenkin
On Sat, 2016-07-02 at 02:58 +, Fan, Jeff wrote:
> Mike,
> 
> Parameter - PeiCpuMpData is added for MicrocodeDetect() in this patch.
> PeiCpuMpData->MpLock is used to avoid debug message corruption when Aps 
> output debug message in parallel mode. 
> 
Thank you. This is a thing I wanted to understand.

> I don't understand why the patch showed in your mail has not the following 
> part of patch. It's maybe the reason of your concern.
> 
I just left the hunk I asked a question about. A quote of complete patch
was not required there.

___
edk2-devel mailing list
edk2-devel@lists.01.org
https://lists.01.org/mailman/listinfo/edk2-devel


Re: [edk2] [Patch 2/3] UefiCpuPkg/CpuMpPei: Dump message if microcode signature not matched

2016-07-01 Thread Mike Maslenkin
Just curious why locking is required here?
Looks like some operator missed.

On Fri, 2016-07-01 at 15:02 +0800, Jeff Fan wrote:
> diff --git a/UefiCpuPkg/CpuMpPei/Microcode.c b/UefiCpuPkg/CpuMpPei/Microcode.c
> index 8e7f3b0..51a0737 100644
> --- a/UefiCpuPkg/CpuMpPei/Microcode.c
> +++ b/UefiCpuPkg/CpuMpPei/Microcode.c
> @@ -187,25 +188,29 @@ MicrocodeDetect (
>  MicrocodeEntryPoint = (EFI_CPU_MICROCODE_HEADER *) (((UINTN) 
> MicrocodeEntryPoint) + TotalSize);
>} while (((UINTN) MicrocodeEntryPoint < MicrocodeEnd));
>  
> -  if (LatestRevision > 0) {
> +  if (LatestRevision > CurrentRevision) {
>  //
>  // BIOS only authenticate updates that contain a numerically larger 
> revision
>  // than the currently loaded revision, where Current Signature < New 
> Update
>  // Revision. A processor with no loaded update is considered to have a
>  // revision equal to zero.
>  //
> -if (LatestRevision > GetCurrentMicrocodeSignature ()) {
> -  AsmWriteMsr64 (
> -EFI_MSR_IA32_BIOS_UPDT_TRIG,
> -(UINT64) (UINTN) MicrocodeInfo.MicrocodeData
> -);
> -  //
> -  // Get and verify new microcode signature
> -  //
> -  ASSERT (LatestRevision == GetCurrentMicrocodeSignature ());
> -  MicrocodeInfo.Load = TRUE;
> -} else {
> -  MicrocodeInfo.Load = FALSE;
> +AsmWriteMsr64 (
> +  EFI_MSR_IA32_BIOS_UPDT_TRIG,
> +  (UINT64) (UINTN) MicrocodeInfo.MicrocodeData
> +  );
> +//
> +// Get and check new microcode signature
> +//
> +CurrentRevision = GetCurrentMicrocodeSignature ();
> +if (CurrentRevision != LatestRevision) {
> +  AcquireSpinLock(>MpLock);
> +  DEBUG ((EFI_D_ERROR, "Updated microcode signature [0x%08x] does not 
> match \
> +loaded microcode signature [0x%08x]\n", CurrentRevision, 
> LatestRevision));
> +  ReleaseSpinLock(>MpLock);
>  }
> +MicrocodeInfo.Load = TRUE;
> +  } else {
> +MicrocodeInfo.Load = FALSE;
>}
>  }


___
edk2-devel mailing list
edk2-devel@lists.01.org
https://lists.01.org/mailman/listinfo/edk2-devel


[edk2] [PATCH 1/1] BaseTools: sync BaseTools from main trunk r18579.

2015-12-02 Thread Mike Maslenkin
This patch fixes incomplete merge of multiple workspaces
support.
Without this patch build fails with error similar to:

~/sources/edk2> build -p MdePkg/MdePkg.dsc -t GCC48 -a X64

Build environment: Linux-3.16.7-24-desktop-x86_64-with-SuSE-13.2-x86_64
Build start time: 17:15:43, Dec.02 2015

WORKSPACE= /home/user/sources/edk2
ECP_SOURCE   = /home/user/sources/edk2/EdkCompatibilityPkg
EDK_SOURCE   = /home/user/sources/edk2/EdkCompatibilityPkg
EFI_SOURCE   = /home/user/sources/edk2/EdkCompatibilityPkg
EDK_TOOLS_PATH   = /home/user/sources/edk2/BaseTools

build.py...
 : error C0DE: Unknown fatal error when processing 
[/home/user/sources/edk2/MdePkg/Library/BaseCacheMaintenanceLib/BaseCacheMaintenanceLib.inf]

(Please send email to edk2-de...@lists.sourceforge.net for help, attaching 
following call stack trace!)

(Python 2.7.8 on linux2) Traceback (most recent call last):
  File 
"/home/user/sources/edk2/BaseTools/BinWrappers/PosixLike/../../Source/Python/build/build.py",
 line 2033, in Main
MyBuild.Launch()
  File 
"/home/user/sources/edk2/BaseTools/BinWrappers/PosixLike/../../Source/Python/build/build.py",
 line 1788, in Launch
self._MultiThreadBuildPlatform()
  File 
"/home/user/sources/edk2/BaseTools/BinWrappers/PosixLike/../../Source/Python/build/build.py",
 line 1583, in _MultiThreadBuildPlatform
self.Progress
  File "/home/user/sources/edk2/BaseTools/Source/Python/AutoGen/AutoGen.py", 
line 175, in __new__
if not AutoGenObject._Init(Workspace, MetaFile, Target, Toolchain, Arch, 
*args, **kwargs):
  File "/home/user/sources/edk2/BaseTools/Source/Python/AutoGen/AutoGen.py", 
line 355, in _Init
Pkgs = list(PkgSet) + list(PGen.PackageList)
  File "/home/user/sources/edk2/BaseTools/Source/Python/AutoGen/AutoGen.py", 
line 1484, in _GetPackageList
for La in self.LibraryAutoGenList:
  File "/home/user/sources/edk2/BaseTools/Source/Python/AutoGen/AutoGen.py", 
line 1594, in _GetLibraryAutoGenList
self._GetAutoGenObjectList()
  File "/home/user/sources/edk2/BaseTools/Source/Python/AutoGen/AutoGen.py", 
line 1575, in _GetAutoGenObjectList
self.MetaFile
  File "/home/user/sources/edk2/BaseTools/Source/Python/AutoGen/AutoGen.py", 
line 175, in __new__
if not AutoGenObject._Init(Workspace, MetaFile, Target, Toolchain, Arch, 
*args, **kwargs):
  File "/home/user/sources/edk2/BaseTools/Source/Python/AutoGen/AutoGen.py", 
line 2199, in _Init
self.SourceDir = mws.relpath(self.SourceDir, self.WorkspaceDir)
  File 
"/home/user/sources/edk2/BaseTools/Source/Python/Common/MultipleWorkspace.py", 
line 94, in relpath
for Pkg in cls.PACKAGES_PATH:
TypeError: 'NoneType' object is not iterable

- Failed -
Build end time: 17:15:44, Dec.02 2015
Build total time: 00:00:01

Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Mike Maslenkin <mike.maslen...@gmail.com>
CC: Fan, Jeff <jeff@intel.com>
---
 BaseTools/Source/Python/build/BuildReport.py |  5 +++--
 BaseTools/Source/Python/build/build.py   | 16 +++-
 2 files changed, 14 insertions(+), 7 deletions(-)

diff --git a/BaseTools/Source/Python/build/BuildReport.py 
b/BaseTools/Source/Python/build/BuildReport.py
index 264607b00360..60e976c169a1 100644
--- a/BaseTools/Source/Python/build/BuildReport.py
+++ b/BaseTools/Source/Python/build/BuildReport.py
@@ -41,6 +41,7 @@ from Common.DataType import TAB_BRG_PCD
 from Common.DataType import TAB_BRG_LIBRARY
 from Common.DataType import TAB_BACK_SLASH
 from Common.LongFilePathSupport import OpenLongFilePath as open
+from Common.MultipleWorkspace import MultipleWorkspace as mws
 
 ## Pattern to extract contents in EDK DXS files
 gDxsDependencyPattern = re.compile(r"DEPENDENCY_START(.+)DEPENDENCY_END", 
re.DOTALL)
@@ -1255,7 +1256,7 @@ class FdRegionReport(object):
 for Pa in Wa.AutoGenObjectList:
 for ModuleKey in Pa.Platform.Modules:
 M = Pa.Platform.Modules[ModuleKey].M
-InfPath = os.path.join(Wa.WorkspaceDir, M.MetaFile.File)
+InfPath = mws.join(Wa.WorkspaceDir, M.MetaFile.File)
 self._GuidsDb[M.Guid.upper()] = "%s (%s)" % 
(M.Module.BaseName, InfPath)
 
 #
@@ -1277,7 +1278,7 @@ class FdRegionReport(object):
 Guid = 
GuidStructureByteArrayToGuidString(GuidValue).upper()
 for Section in Ffs.SectionList:
 try:
-ModuleSectFile = os.path.join(Wa.WorkspaceDir, 
Section.SectFileName)
+ModuleSectFile = mws.join(Wa.WorkspaceDir, 
Section.SectFileName)
 self._GuidsDb[Guid] = ModuleSectFile
 except AttributeError:
 pass
diff --git a/BaseTools/Source/Python/build/build.py 
b/BaseTools/Source/Python

Re: [edk2] [patch] Do not deadloop if Microcode not found in FspTempRamInit.

2015-10-26 Thread Mike Maslenkin
On Mon, 2015-10-26 at 12:39 +0800, jiewen yao wrote:
> diff --git 
> a/IntelFspWrapperPkg/Library/SecPeiFspPlatformSecLibSample/Ia32/SecEntry.asm 
> b/IntelFspWrapperPkg/Library/SecPeiFspPlatformSecLibSample/Ia32/SecEntry.asm
> index 0e0c5c5..3c0bca3 100644
> --- 
> a/IntelFspWrapperPkg/Library/SecPeiFspPlatformSecLibSample/Ia32/SecEntry.asm
> +++ 
> b/IntelFspWrapperPkg/Library/SecPeiFspPlatformSecLibSample/Ia32/SecEntry.asm
> @@ -220,12 +220,22 @@ FspHeaderFound:
>jmp eax
>  
>  TempRamInitDone:
> -  cmp eax, 0
> +  cmp eax, 800Eh  ;Check if EFI_NOT_FOUND returned. Error code for 
> Microcode Update not found.
> +  xor eax, eax
> +  je  CallSecFspInit  ;If microcode not found, don't hang, but continue.
> +
> +  cmp eax, 0  ;Check if EFI_SUCCESS retuned.
>jnz FspApiFailed
 
Hello jiewen, would this condition be always true?
'xor eax, eax' instruction will set ZF flag, so you lose the comparison
result.

___
edk2-devel mailing list
edk2-devel@lists.01.org
https://lists.01.org/mailman/listinfo/edk2-devel


Re: [edk2] [MdeModulePkg] RegularExpressionDxe does not compile with Xcode 6.3.2

2015-10-24 Thread Mike Maslenkin
Sorry for the noise, but I can not pass warnings here:

build -p MdeModulePkg/MdeModulePkg.dsc -t GCC48 -a X64:

Build environment: Linux-3.16.7-24-desktop-x86_64-with-SuSE-13.2-x86_64
Build start time: 00:20:50, Oct.25 2015


Building ... 
/home/user/edk2/MdeModulePkg/Universal/RegularExpressionDxe/RegularExpressionDxe.inf
 [X64]
/home/user/edk2/MdeModulePkg/Universal/RegularExpressionDxe/RegularExpressionDxe.c:
 In function ‘OnigurumaMatch’:
/home/user/edk2/MdeModulePkg/Universal/RegularExpressionDxe/RegularExpressionDxe.c:123:5:
 error: call to function ‘onig_error_code_to_str’ without a real prototype 
[-Werror=unprototyped-calls]
 onig_error_code_to_str ((OnigUChar *)ErrorMessage, OnigResult,
);
 ^
In file included
from 
/home/user/edk2/MdeModulePkg/Universal/RegularExpressionDxe/RegularExpressionDxe.h:19:0,

from 
/home/user/edk2/MdeModulePkg/Universal/RegularExpressionDxe/RegularExpressionDxe.c:17:
/home/user/edk2/MdeModulePkg/Universal/RegularExpressionDxe/Oniguruma/oniguruma.h:722:5:
 note: ‘onig_error_code_to_str’ was declared here
 int onig_error_code_to_str PV_((OnigUChar* s, int err_code, ...));
 ^
/home/user/edk2/MdeModulePkg/Universal/RegularExpressionDxe/RegularExpressionDxe.c:147:7:
 error: call to function ‘onig_error_code_to_str’ without a real prototype 
[-Werror=unprototyped-calls]
   onig_error_code_to_str ((OnigUChar *)ErrorMessage, OnigResult);
   ^
In file included
from 
/home/user/edk2/MdeModulePkg/Universal/RegularExpressionDxe/RegularExpressionDxe.h:19:0,

from 
/home/user/edk2/MdeModulePkg/Universal/RegularExpressionDxe/RegularExpressionDxe.c:17:
/home/user/edk2/MdeModulePkg/Universal/RegularExpressionDxe/Oniguruma/oniguruma.h:722:5:
 note: ‘onig_error_code_to_str’ was declared here
 int onig_error_code_to_str PV_((OnigUChar* s, int err_code, ...));
 ^
cc1: all warnings being treated as errors
make: ***
[/home/user/edk2/Build/MdeModule/DEBUG_GCC48/X64/MdeModulePkg/Universal/RegularExpressionDxe/RegularExpressionDxe/OUTPUT/RegularExpressionDxe.obj]
 Error 1

and this is because of

 RegularExpressionDxe/Oniguruma/oniguruma.h

 #ifdef HAVE_STDARG_PROTOTYPES
 # define PV_(args) args
 #else
 # define PV_(args) ()
 #endif
 #endif

That makes:

  RegularExpressionDxe.i 

int onig_init (void);
extern
int onig_error_code_to_str ();


Am I missing something?

Passing this place I encountered a number of similar issues for other
library modules.

Looks like OnigurumaUefiPort.h must define HAVE_STDARG_PROTOTYPES.


On Thu, 2015-10-22 at 17:16 +, El-Haj-Mahmoud, Samer wrote:
> Reviewed-by: Samer El-Haj-Mahmoud 
> 
>   
> -Original Message-
> From: edk2-devel [mailto:edk2-devel-boun...@lists.01.org] On Behalf Of Andrew 
> Fish
> Sent: Thursday, October 22, 2015 10:54 AM
> To: edk2-devel-01 
> Subject: [edk2] [MdeModulePkg] RegularExpressionDxe does not compile with 
> Xcode 6.3.2
> 
> CHAR8 is not defined as unsigned char, and I get the following error:
> 
> 
> /Users/andrewfish/work/src/edk2/MdeModulePkg/Universal/RegularExpressionDxe/RegularExpressionDxe.c:123:29:
>  error: passing 'CHAR8 [90]' to parameter of type 'OnigUChar *' (aka 
> 'unsigned char *') converts between pointers to integer types with different 
> sign [-Werror,-Wpointer-sign]
> onig_error_code_to_str (ErrorMessage, OnigResult, );
> ^~~~
> /Users/andrewfish/work/src/edk2/MdeModulePkg/Universal/RegularExpressionDxe/Oniguruma/oniguruma.h:722:44:
>  note: passing argument to parameter 's' here int onig_error_code_to_str 
> PV_((OnigUChar* s, int err_code, ...));
>^
> /Users/andrewfish/work/src/edk2/MdeModulePkg/Universal/RegularExpressionDxe/Oniguruma/oniguruma.h:75:20:
>  note: expanded from macro 'PV_'
> # define PV_(args) args
>^
> 1 error generated.
> 
> Fix is to cast to the same type.:
> diff --git 
> a/MdeModulePkg/Universal/RegularExpressionDxe/RegularExpressionDxe.c 
> b/MdeModulePkg/Universal/RegularExpressionDxe/RegularExpressionDxe.c
> index 6580316..e6bad5d 100644
> --- a/MdeModulePkg/Universal/RegularExpressionDxe/RegularExpressionDxe.c
> +++ b/MdeModulePkg/Universal/RegularExpressionDxe/RegularExpressionDxe.c
> @@ -120,7 +120,7 @@ OnigurumaMatch (
>   );
>  
>if (OnigResult != ONIG_NORMAL) {
> -onig_error_code_to_str (ErrorMessage, OnigResult, );
> +onig_error_code_to_str ((OnigUChar *)ErrorMessage, OnigResult, 
> + );
>  DEBUG ((DEBUG_ERROR, "Regex compilation failed: %a\n", ErrorMessage));
>  return EFI_DEVICE_ERROR;
>}
> @@ -144,7 +144,7 @@ OnigurumaMatch (
>} else {
>  *Result = FALSE;
>  if (OnigResult != ONIG_MISMATCH) {
> -  onig_error_code_to_str (ErrorMessage, OnigResult);
> +  onig_error_code_to_str ((OnigUChar *)ErrorMessage, OnigResult);
>DEBUG ((DEBUG_ERROR, "Regex match failed: %a\n", ErrorMessage));
>  }
>}
> 
> 
>