3 Copyright (c) 2007 - 2016, Intel Corporation. All rights reserved.<BR>
4 This program and the accompanying materials
5 are licensed and made available under the terms and conditions of the BSD License
6 which accompanies this distribution. The full text of the license may be found at
7 http://opensource.org/licenses/bsd-license.php
9 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
10 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
19 Get file name from full path.
21 @param FullPath - full file path
27 GetFileNameFromFullPath (
35 TempFileName
= StrGetNewTokenLine (FullPath
, L
"\\");
37 while (TempFileName
!= NULL
) {
38 FileName
= TempFileName
;
39 TempFileName
= StrGetNextTokenLine (L
"\\");
40 PatchForStrTokenBefore (TempFileName
, L
'\\');
48 Get dir name from full path.
50 @param FullPath - full file path
56 GetDirNameFromFullPath (
62 FileName
= GetFileNameFromFullPath (FullPath
);
63 if (FileName
!= FullPath
) {
73 Construct full path according to dir and file path.
75 @param DirPath - dir path
76 @param FilePath - file path
77 @param Size - dir max size
79 @return Full file name
91 DirPathSize
= StrLen(DirPath
);
92 *(DirPath
+ DirPathSize
) = L
'\\';
93 StrnCatS (DirPath
, DirPathSize
+ Size
+ 1, FilePath
, Size
);
95 *(DirPath
+ DirPathSize
+ Size
+ 1) = 0;
100 CHAR16
*mSymbolTypeStr
[] = {
109 Comvert Symbol Type to string.
111 @param Type - Symbol Type
118 IN EFI_DEBUGGER_SYMBOL_TYPE Type
121 if (Type
< 0 || Type
>= EfiDebuggerSymbolTypeMax
) {
125 return mSymbolTypeStr
[Type
];
130 Find the symbol according to address and display symbol.
132 @param Address - SymbolAddress
133 @param DebuggerPrivate - EBC Debugger private data structure
135 @retval EFI_DEBUG_CONTINUE - formal return value
139 DebuggerDisplaySymbolAccrodingToAddress (
141 IN EFI_DEBUGGER_PRIVATE_DATA
*DebuggerPrivate
144 EFI_DEBUGGER_SYMBOL_OBJECT
*Object
;
145 EFI_DEBUGGER_SYMBOL_ENTRY
*Entry
;
146 UINTN CandidateAddress
;
149 // Find the nearest symbol address
151 CandidateAddress
= EbdFindSymbolAddress (Address
, EdbMatchSymbolTypeNearestAddress
, &Object
, &Entry
);
152 if (CandidateAddress
== 0 || CandidateAddress
== (UINTN
) -1) {
153 EDBPrint (L
"Symbole at Address not found!\n");
154 return EFI_DEBUG_CONTINUE
;
155 } else if (Address
!= CandidateAddress
) {
156 EDBPrint (L
"Symbole at Address not found, print nearest one!\n");
162 EDBPrint (L
"Symbol File Name: %s\n", Object
->Name
);
163 if (sizeof(UINTN
) == sizeof(UINT64
)) {
164 EDBPrint (L
" Address Type Symbol\n");
165 EDBPrint (L
" ================== ==== ========\n");
166 // EDBPrint (L" 0xFFFFFFFF00000000 ( F) TestMain\n");
168 L
" 0x%016lx %s %a\n",
169 (UINT64
)Entry
->Rva
+ Object
->BaseAddress
,
170 EdbSymbolTypeToStr (Entry
->Type
),
174 EDBPrint (L
" Address Type Symbol\n");
175 EDBPrint (L
" ========== ==== ========\n");
176 // EDBPrint (L" 0xFFFF0000 ( F) TestMain\n");
179 Entry
->Rva
+ Object
->BaseAddress
,
180 EdbSymbolTypeToStr (Entry
->Type
),
188 return EFI_DEBUG_CONTINUE
;
193 Find the symbol according to name and display symbol.
195 @param SymbolFileName - The Symbol File Name, NULL means for all
196 @param SymbolName - The Symbol Name, NULL means for all
197 @param DebuggerPrivate - EBC Debugger private data structure
199 @retval EFI_DEBUG_CONTINUE - formal return value
203 DebuggerDisplaySymbolAccrodingToName (
204 IN CHAR16
*SymbolFileName
,
205 IN CHAR16
*SymbolName
,
206 IN EFI_DEBUGGER_PRIVATE_DATA
*DebuggerPrivate
211 EFI_DEBUGGER_SYMBOL_OBJECT
*Object
;
212 EFI_DEBUGGER_SYMBOL_ENTRY
*Entry
;
214 if (DebuggerPrivate
->DebuggerSymbolContext
.ObjectCount
== 0) {
215 EDBPrint (L
"No Symbol File!\n");
216 return EFI_DEBUG_CONTINUE
;
220 // Go throuth each symbol file
222 Object
= DebuggerPrivate
->DebuggerSymbolContext
.Object
;
223 for (Index
= 0; Index
< DebuggerPrivate
->DebuggerSymbolContext
.ObjectCount
; Index
++, Object
++) {
224 if ((SymbolFileName
!= NULL
) &&
225 (StriCmp (SymbolFileName
, Object
->Name
) != 0)) {
230 // Break each symbol file
233 if (SetPageBreak ()) {
238 EDBPrint (L
"Symbol File Name: %s\n", Object
->Name
);
239 if (Object
->EntryCount
== 0) {
240 EDBPrint (L
"No Symbol!\n");
243 Entry
= Object
->Entry
;
244 if (sizeof(UINTN
) == sizeof(UINT64
)) {
245 EDBPrint (L
" Address Type Symbol\n");
246 EDBPrint (L
" ================== ==== ========\n");
247 // EDBPrint (L" 0xFFFFFFFF00000000 ( F) TestMain (EbcTest.obj)\n");
249 EDBPrint (L
" Address Type Symbol\n");
250 EDBPrint (L
" ========== ==== ========\n");
251 // EDBPrint (L" 0xFFFF0000 ( F) TestMain (EbcTest.obj)\n");
255 // Go through each symbol name
257 for (SubIndex
= 0; SubIndex
< Object
->EntryCount
; SubIndex
++, Entry
++) {
258 if ((SymbolName
!= NULL
) &&
259 (StrCmpUnicodeAndAscii (SymbolName
, Entry
->Name
) != 0)) {
266 if (((SubIndex
% EFI_DEBUGGER_LINE_NUMBER_IN_PAGE
) == 0) &&
268 if (SetPageBreak ()) {
273 if (sizeof(UINTN
) == sizeof(UINT64
)) {
275 L
" 0x%016lx %s %a (%a)\n",
276 (UINT64
)Entry
->Rva
+ Object
->BaseAddress
,
277 EdbSymbolTypeToStr (Entry
->Type
),
283 L
" 0x%08x %s %a (%a)\n",
284 Entry
->Rva
+ Object
->BaseAddress
,
285 EdbSymbolTypeToStr (Entry
->Type
),
296 return EFI_DEBUG_CONTINUE
;
301 DebuggerCommand - ListSymbol.
303 @param CommandArg - The argument for this command
304 @param DebuggerPrivate - EBC Debugger private data structure
305 @param ExceptionType - Exception type.
306 @param SystemContext - EBC system context.
308 @retval EFI_DEBUG_CONTINUE - formal return value
313 IN CHAR16
*CommandArg
,
314 IN EFI_DEBUGGER_PRIVATE_DATA
*DebuggerPrivate
,
315 IN EFI_EXCEPTION_TYPE ExceptionType
,
316 IN OUT EFI_SYSTEM_CONTEXT SystemContext
319 CHAR16
*SymbolFileName
;
324 SymbolFileName
= NULL
;
326 CommandStr
= CommandArg
;
329 // display symbol according to address
331 if (CommandStr
!= NULL
) {
332 if ((StriCmp (CommandStr
, L
"F") != 0) &&
333 (StriCmp (CommandStr
, L
"S") != 0)) {
334 Address
= Xtoi (CommandStr
);
335 return DebuggerDisplaySymbolAccrodingToAddress (Address
, DebuggerPrivate
);
340 // Get SymbolFileName
342 if (CommandStr
!= NULL
) {
343 if (StriCmp (CommandStr
, L
"F") == 0) {
344 CommandStr
= StrGetNextTokenLine (L
" ");
345 if (CommandStr
== NULL
) {
346 EDBPrint (L
"Symbol File Name missing!\n");
347 return EFI_DEBUG_CONTINUE
;
349 SymbolFileName
= CommandStr
;
350 CommandStr
= StrGetNextTokenLine (L
" ");
357 if (CommandStr
!= NULL
) {
358 if (StriCmp (CommandStr
, L
"S") == 0) {
359 CommandStr
= StrGetNextTokenLine (L
" ");
360 if (CommandStr
== NULL
) {
361 EDBPrint (L
"Symbol Name missing!\n");
362 return EFI_DEBUG_CONTINUE
;
364 SymbolName
= CommandStr
;
365 CommandStr
= StrGetNextTokenLine (L
" ");
369 if (CommandStr
!= NULL
) {
370 EDBPrint (L
"Argument error!\n");
371 return EFI_DEBUG_CONTINUE
;
375 // display symbol according to name
377 return DebuggerDisplaySymbolAccrodingToName (SymbolFileName
, SymbolName
, DebuggerPrivate
);
382 DebuggerCommand - LoadSymbol.
384 @param CommandArg - The argument for this command
385 @param DebuggerPrivate - EBC Debugger private data structure
386 @param ExceptionType - Exception type.
387 @param SystemContext - EBC system context.
389 @retval EFI_DEBUG_CONTINUE - formal return value
394 IN CHAR16
*CommandArg
,
395 IN EFI_DEBUGGER_PRIVATE_DATA
*DebuggerPrivate
,
396 IN EFI_EXCEPTION_TYPE ExceptionType
,
397 IN OUT EFI_SYSTEM_CONTEXT SystemContext
407 CHAR16 CodFile
[EFI_DEBUGGER_SYMBOL_NAME_MAX
];
412 // Check the argument
414 if (CommandArg
== NULL
) {
415 EDBPrint (L
"SymbolFile not found!\n");
416 return EFI_DEBUG_CONTINUE
;
419 CommandArg2
= StrGetNextTokenLine (L
" ");
420 if (CommandArg2
!= NULL
) {
421 if (StriCmp (CommandArg2
, L
"a") == 0) {
424 EDBPrint (L
"Argument error!\n");
425 return EFI_DEBUG_CONTINUE
;
429 if (StrLen (CommandArg
) <= 4) {
430 EDBPrint (L
"SymbolFile name error!\n");
431 return EFI_DEBUG_CONTINUE
;
433 if (StriCmp (CommandArg
+ (StrLen (CommandArg
) - 4), L
".map") != 0) {
434 EDBPrint (L
"SymbolFile name error!\n");
435 return EFI_DEBUG_CONTINUE
;
439 // Read MAP file to memory
441 Status
= ReadFileToBuffer (DebuggerPrivate
, CommandArg
, &BufferSize
, &Buffer
, TRUE
);
442 if (EFI_ERROR(Status
)) {
443 EDBPrint (L
"SymbolFile read error!\n");
444 return EFI_DEBUG_CONTINUE
;
447 FileName
= GetFileNameFromFullPath (CommandArg
);
451 Status
= EdbLoadSymbol (DebuggerPrivate
, FileName
, BufferSize
, Buffer
);
452 if (EFI_ERROR(Status
)) {
453 EDBPrint (L
"LoadSymbol error!\n");
454 gBS
->FreePool (Buffer
);
455 return EFI_DEBUG_CONTINUE
;
457 gBS
->FreePool (Buffer
);
460 // Patch Symbol for RVA
462 Status
= EdbPatchSymbolRVA (DebuggerPrivate
, FileName
, EdbEbcImageRvaSearchTypeLast
);
463 if (EFI_ERROR(Status
)) {
464 EDBPrint (L
"PatchSymbol RVA - %r! Using the RVA in symbol file.\n", Status
);
466 DEBUG ((DEBUG_ERROR
, "PatchSymbol RVA successfully!\n"));
470 return EFI_DEBUG_CONTINUE
;
474 // load each cod file
476 DirName
= GetDirNameFromFullPath (CommandArg
);
477 ZeroMem (CodFile
, sizeof(CodFile
));
478 if (StrCmp (DirName
, L
"") != 0) {
479 StrCpyS (CodFile
, sizeof(CodFile
), DirName
);
485 // Go throuth each file under this dir
488 CodFileName
= GetFileNameUnderDir (DebuggerPrivate
, DirName
, L
".cod", &Index
);
489 while (CodFileName
!= NULL
) {
490 ZeroMem (CodFile
, sizeof(CodFile
));
491 if (StrCmp (DirName
, L
"\\") != 0) {
492 StrCpyS (CodFile
, sizeof(CodFile
), DirName
);
496 // read cod file to memory
498 Status
= ReadFileToBuffer (DebuggerPrivate
, ConstructFullPath (CodFile
, CodFileName
, EFI_DEBUGGER_SYMBOL_NAME_MAX
- StrLen (CodFile
) - 2), &BufferSize
, &Buffer
, FALSE
);
499 if (EFI_ERROR(Status
)) {
500 EDBPrint (L
"CodeFile read error!\n");
501 CodFileName
= GetFileNameUnderDir (DebuggerPrivate
, DirName
, L
".cod", &Index
);
508 Status
= EdbLoadCode (DebuggerPrivate
, FileName
, CodFileName
, BufferSize
, Buffer
);
509 if (EFI_ERROR (Status
)) {
510 EDBPrint (L
"LoadCode error!\n");
511 gBS
->FreePool (Buffer
);
512 CodFileName
= GetFileNameUnderDir (DebuggerPrivate
, DirName
, L
".cod", &Index
);
519 Status
= EdbAddCodeBuffer (DebuggerPrivate
, FileName
, CodFileName
, BufferSize
, Buffer
);
520 if (EFI_ERROR (Status
)) {
521 EDBPrint (L
"AddCodeBuffer error!\n");
522 gBS
->FreePool (Buffer
);
523 CodFileName
= GetFileNameUnderDir (DebuggerPrivate
, DirName
, L
".cod", &Index
);
530 CodFileName
= GetFileNameUnderDir (DebuggerPrivate
, DirName
, L
".cod", &Index
);
536 return EFI_DEBUG_CONTINUE
;
541 DebuggerCommand - UnloadSymbol
543 @param CommandArg - The argument for this command
544 @param DebuggerPrivate - EBC Debugger private data structure
545 @param ExceptionType - Exception type.
546 @param SystemContext - EBC system context.
548 @retval EFI_DEBUG_CONTINUE - formal return value
552 DebuggerUnloadSymbol (
553 IN CHAR16
*CommandArg
,
554 IN EFI_DEBUGGER_PRIVATE_DATA
*DebuggerPrivate
,
555 IN EFI_EXCEPTION_TYPE ExceptionType
,
556 IN OUT EFI_SYSTEM_CONTEXT SystemContext
562 CHAR16 CodFile
[EFI_DEBUGGER_SYMBOL_NAME_MAX
];
568 // Check the argument
570 if (CommandArg
== NULL
) {
571 EDBPrint (L
"SymbolFile not found!\n");
572 return EFI_DEBUG_CONTINUE
;
575 FileName
= GetFileNameFromFullPath (CommandArg
);
580 DirName
= GetDirNameFromFullPath (CommandArg
);
581 ZeroMem (CodFile
, sizeof(CodFile
));
582 if (StrCmp (DirName
, L
"") != 0) {
583 StrCpyS (CodFile
, sizeof(CodFile
), DirName
);
589 // Go through each file under this dir
592 CodFileName
= GetFileNameUnderDir (DebuggerPrivate
, DirName
, L
".cod", &Index
);
593 while (CodFileName
!= NULL
) {
594 ZeroMem (CodFile
, sizeof(CodFile
));
595 if (StrCmp (DirName
, L
"\\") != 0) {
596 StrCpyS (CodFile
, sizeof(CodFile
), DirName
);
602 Status
= EdbUnloadCode (DebuggerPrivate
, FileName
, CodFileName
, &BufferPtr
);
603 if (EFI_ERROR (Status
)) {
604 EDBPrint (L
"UnloadCode error!\n");
605 CodFileName
= GetFileNameUnderDir (DebuggerPrivate
, DirName
, L
".cod", &Index
);
610 // Delete the code buffer
612 Status
= EdbDeleteCodeBuffer (DebuggerPrivate
, FileName
, CodFileName
, BufferPtr
);
613 if (EFI_ERROR (Status
)) {
614 EDBPrint (L
"DeleteCodeBuffer error!\n");
615 CodFileName
= GetFileNameUnderDir (DebuggerPrivate
, DirName
, L
".cod", &Index
);
622 CodFileName
= GetFileNameUnderDir (DebuggerPrivate
, DirName
, L
".cod", &Index
);
628 Status
= EdbUnloadSymbol (DebuggerPrivate
, FileName
);
629 if (EFI_ERROR(Status
)) {
630 EDBPrint (L
"UnloadSymbol error!\n");
636 return EFI_DEBUG_CONTINUE
;
641 DebuggerCommand - DisplaySymbol.
643 @param CommandArg - The argument for this command
644 @param DebuggerPrivate - EBC Debugger private data structure
645 @param ExceptionType - Exception type.
646 @param SystemContext - EBC system context.
648 @retval EFI_DEBUG_CONTINUE - formal return value
652 DebuggerDisplaySymbol (
653 IN CHAR16
*CommandArg
,
654 IN EFI_DEBUGGER_PRIVATE_DATA
*DebuggerPrivate
,
655 IN EFI_EXCEPTION_TYPE ExceptionType
,
656 IN OUT EFI_SYSTEM_CONTEXT SystemContext
659 if (CommandArg
== NULL
) {
660 DebuggerPrivate
->DebuggerSymbolContext
.DisplaySymbol
= !DebuggerPrivate
->DebuggerSymbolContext
.DisplaySymbol
;
661 EdbShowDisasm (DebuggerPrivate
, SystemContext
);
662 } else if (StriCmp (CommandArg
, L
"on") == 0) {
663 DebuggerPrivate
->DebuggerSymbolContext
.DisplaySymbol
= TRUE
;
664 EdbShowDisasm (DebuggerPrivate
, SystemContext
);
665 } else if (StriCmp (CommandArg
, L
"off") == 0) {
666 DebuggerPrivate
->DebuggerSymbolContext
.DisplaySymbol
= FALSE
;
667 EdbShowDisasm (DebuggerPrivate
, SystemContext
);
669 EDBPrint (L
"DisplaySymbol - argument error\n");
672 return EFI_DEBUG_CONTINUE
;
677 DebuggerCommand - LoadCode.
679 @param CommandArg - The argument for this command
680 @param DebuggerPrivate - EBC Debugger private data structure
681 @param ExceptionType - Exception type.
682 @param SystemContext - EBC system context.
684 @retval EFI_DEBUG_CONTINUE - formal return value
689 IN CHAR16
*CommandArg
,
690 IN EFI_DEBUGGER_PRIVATE_DATA
*DebuggerPrivate
,
691 IN EFI_EXCEPTION_TYPE ExceptionType
,
692 IN OUT EFI_SYSTEM_CONTEXT SystemContext
703 // Check the argument
705 if (CommandArg
== NULL
) {
706 EDBPrint (L
"CodeFile not found!\n");
707 return EFI_DEBUG_CONTINUE
;
709 CommandArg2
= StrGetNextTokenLine (L
" ");
710 if (CommandArg2
== NULL
) {
711 EDBPrint (L
"SymbolFile not found!\n");
712 return EFI_DEBUG_CONTINUE
;
715 if (StrLen (CommandArg
) <= 4) {
716 EDBPrint (L
"CodeFile name error!\n");
717 return EFI_DEBUG_CONTINUE
;
719 if (StriCmp (CommandArg
+ (StrLen (CommandArg
) - 4), L
".cod") != 0) {
720 EDBPrint (L
"CodeFile name error!\n");
721 return EFI_DEBUG_CONTINUE
;
723 if (StrLen (CommandArg2
) <= 4) {
724 EDBPrint (L
"SymbolFile name error!\n");
725 return EFI_DEBUG_CONTINUE
;
727 if (StriCmp (CommandArg2
+ (StrLen (CommandArg2
) - 4), L
".map") != 0) {
728 EDBPrint (L
"SymbolFile name error!\n");
729 return EFI_DEBUG_CONTINUE
;
733 // read cod file to memory
735 Status
= ReadFileToBuffer (DebuggerPrivate
, CommandArg
, &BufferSize
, &Buffer
, TRUE
);
736 if (EFI_ERROR(Status
)) {
737 EDBPrint (L
"CodeFile read error!\n");
738 return EFI_DEBUG_CONTINUE
;
741 FileName
= GetFileNameFromFullPath (CommandArg
);
742 MapFileName
= GetFileNameFromFullPath (CommandArg2
);
746 Status
= EdbLoadCode (DebuggerPrivate
, MapFileName
, FileName
, BufferSize
, Buffer
);
747 if (EFI_ERROR (Status
)) {
748 EDBPrint (L
"LoadCode error!\n");
749 gBS
->FreePool (Buffer
);
750 return EFI_DEBUG_CONTINUE
;
756 Status
= EdbAddCodeBuffer (DebuggerPrivate
, MapFileName
, FileName
, BufferSize
, Buffer
);
757 if (EFI_ERROR (Status
)) {
758 EDBPrint (L
"AddCodeBuffer error!\n");
759 gBS
->FreePool (Buffer
);
760 return EFI_DEBUG_CONTINUE
;
766 return EFI_DEBUG_CONTINUE
;
771 DebuggerCommand - UnloadCode.
773 @param CommandArg - The argument for this command
774 @param DebuggerPrivate - EBC Debugger private data structure
775 @param ExceptionType - Exception type.
776 @param SystemContext - EBC system context.
778 @retval EFI_DEBUG_CONTINUE - formal return value
783 IN CHAR16
*CommandArg
,
784 IN EFI_DEBUGGER_PRIVATE_DATA
*DebuggerPrivate
,
785 IN EFI_EXCEPTION_TYPE ExceptionType
,
786 IN OUT EFI_SYSTEM_CONTEXT SystemContext
796 // Check the argument
798 if (CommandArg
== NULL
) {
799 EDBPrint (L
"CodeFile not found!\n");
800 return EFI_DEBUG_CONTINUE
;
802 CommandArg2
= StrGetNextTokenLine (L
" ");
803 if (CommandArg2
== NULL
) {
804 EDBPrint (L
"SymbolFile not found!\n");
805 return EFI_DEBUG_CONTINUE
;
808 FileName
= GetFileNameFromFullPath (CommandArg
);
809 MapFileName
= GetFileNameFromFullPath (CommandArg2
);
814 Status
= EdbUnloadCode (DebuggerPrivate
, MapFileName
, FileName
, &BufferPtr
);
815 if (EFI_ERROR (Status
)) {
816 EDBPrint (L
"UnloadCode error!\n");
817 return EFI_DEBUG_CONTINUE
;
821 // Delete Code buffer
823 Status
= EdbDeleteCodeBuffer (DebuggerPrivate
, MapFileName
, FileName
, BufferPtr
);
824 if (EFI_ERROR (Status
)) {
825 EDBPrint (L
"DeleteCodeBuffer error!\n");
831 return EFI_DEBUG_CONTINUE
;
836 DebuggerCommand - DisplayCode.
838 @param CommandArg - The argument for this command
839 @param DebuggerPrivate - EBC Debugger private data structure
840 @param ExceptionType - Exception type.
841 @param SystemContext - EBC system context.
843 @retval EFI_DEBUG_CONTINUE - formal return value
847 DebuggerDisplayCode (
848 IN CHAR16
*CommandArg
,
849 IN EFI_DEBUGGER_PRIVATE_DATA
*DebuggerPrivate
,
850 IN EFI_EXCEPTION_TYPE ExceptionType
,
851 IN OUT EFI_SYSTEM_CONTEXT SystemContext
854 if (CommandArg
== NULL
) {
855 DebuggerPrivate
->DebuggerSymbolContext
.DisplayCodeOnly
= !DebuggerPrivate
->DebuggerSymbolContext
.DisplayCodeOnly
;
856 EdbShowDisasm (DebuggerPrivate
, SystemContext
);
857 } else if (StriCmp (CommandArg
, L
"on") == 0) {
858 DebuggerPrivate
->DebuggerSymbolContext
.DisplayCodeOnly
= TRUE
;
859 EdbShowDisasm (DebuggerPrivate
, SystemContext
);
860 } else if (StriCmp (CommandArg
, L
"off") == 0) {
861 DebuggerPrivate
->DebuggerSymbolContext
.DisplayCodeOnly
= FALSE
;
862 EdbShowDisasm (DebuggerPrivate
, SystemContext
);
864 EDBPrint (L
"DisplayCode - argument error\n");
867 return EFI_DEBUG_CONTINUE
;