]> git.proxmox.com Git - mirror_edk2.git/blobdiff - BeagleBoardPkg/Library/EblCmdLib/EblCmdLib.c
Update input of disasmembler to support IfThen construct. Add prototype dos script...
[mirror_edk2.git] / BeagleBoardPkg / Library / EblCmdLib / EblCmdLib.c
index 93164d68dfa2c9f39065d1db5fcaa13c09c50ce7..c69b28904bac90ae279994d6fd46abfd8df2a35f 100644 (file)
 #include <Library/UefiLib.h>\r
 #include <Library/PcdLib.h>\r
 #include <Library/EfiFileLib.h>\r
+#include <Library/ArmDisassemblerLib.h>\r
+\r
+//PcdEmbeddedFdBaseAddress\r
+\r
+/**\r
+  Fill Me In\r
+\r
+  Argv[0] - "%CommandName%"\r
+\r
+  @param  Argc   Number of command arguments in Argv\r
+  @param  Argv   Array of strings that represent the parsed command line. \r
+                 Argv[0] is the comamnd name\r
+\r
+  @return EFI_SUCCESS\r
+\r
+**/\r
+EFI_STATUS\r
+EblDisassembler (\r
+  IN UINTN  Argc,\r
+  IN CHAR8  **Argv\r
+  )\r
+{\r
+  UINT8   *Ptr, *CurrentAddress;\r
+  UINT32  Address;\r
+  UINT32  Count;\r
+  CHAR8   Buffer[80];\r
+  UINT32  ItBlock;\r
+  \r
+  if (Argc < 2) {\r
+    return EFI_INVALID_PARAMETER;\r
+  }\r
+  \r
+  Address = AsciiStrHexToUintn (Argv[1]);\r
+  Count   = (Argc > 2) ? (UINT32)AsciiStrHexToUintn (Argv[2]) : 20;\r
+\r
+  Ptr = (UINT8 *)(UINTN)Address;  \r
+  ItBlock = 0;\r
+  do {\r
+    CurrentAddress = Ptr;\r
+    DisassembleInstruction (&Ptr, TRUE, TRUE, &ItBlock, Buffer, sizeof (Buffer));\r
+    AsciiPrint ("0x%08x: %a\n", CurrentAddress, Buffer);\r
+  } while (Count-- > 0);\r
\r
+\r
+  return EFI_SUCCESS;\r
+}\r
 \r
 \r
 GLOBAL_REMOVE_IF_UNREFERENCED const EBL_COMMAND_TABLE mLibCmdTemplate[] =\r
 {\r
+  {\r
+    "disasm address [count]",\r
+    " disassemble count instructions",\r
+    NULL,\r
+    EblDisassembler\r
+  }\r
 };\r
 \r
 \r