EFI_DEBUG_STATUS DebuggerGo ( IN CHAR16 *CommandArg, IN EFI_DEBUGGER_PRIVATE_DATA *DebuggerPrivate, IN EFI_EXCEPTION_TYPE ExceptionType, IN OUT EFI_SYSTEM_CONTEXT SystemContext ) /*++ Routine Description: DebuggerCommand - Go Arguments: CommandArg - The argument for this command DebuggerPrivate - EBC Debugger private data structure InterruptType - Interrupt type. SystemContext - EBC system context. Returns: EFI_DEBUG_BREAK - formal return value EFI_DEBUG_CONTINUE - something wrong --*/ { UINTN Address; CHAR16 *CommandStr; EFI_STATUS Status; // // Check argument // if (CommandArg != NULL) { if (EfiStriCmp (CommandArg, L"til") == 0) { CommandStr = StrGetNextTokenLine (L" "); if (CommandStr != NULL) { // // Enable GoTil break now // set BreakAddress, and set feature flag. // Status = Symboltoi (CommandStr, &Address); if (EFI_ERROR (Status)) { if (Status == EFI_NOT_FOUND) { Address = Xtoi(CommandStr); } else { // // Something wrong, let Symboltoi print error info. // EDBPrint (L"Command Argument error!\n"); return EFI_DEBUG_CONTINUE; } } DebuggerPrivate->GoTilContext.BreakAddress = Address; DebuggerPrivate->FeatureFlags |= EFI_DEBUG_FLAG_EBC_GT; } else { EDBPrint (L"Command Argument error!\n"); return EFI_DEBUG_CONTINUE; } } else { EDBPrint (L"Command Argument error!\n"); return EFI_DEBUG_CONTINUE; } } // // Done // return EFI_DEBUG_BREAK; }
EFI_STATUS EdbGetMemoryAddressValue ( IN CHAR16 *CommandArg, IN UINTN *Address, IN UINT64 *Value ) /*++ Routine Description: Get memory address and value Arguments: CommandArg - The argument for this command Address - Memory Address Value - Memory Value Returns: EFI_SUCCESS - memory address and value are got EFI_INVALID_PARAMETER - something wrong --*/ { CHAR16 *CommandStr; UINTN MemAddress; EFI_STATUS Status; // // Get Address // CommandStr = CommandArg; if (CommandStr == NULL) { EDBPrint (L"Memory: Address error!\n"); return EFI_INVALID_PARAMETER; } Status = Symboltoi (CommandStr, &MemAddress); if (EFI_ERROR (Status)) { if (Status == EFI_NOT_FOUND) { MemAddress = Xtoi(CommandStr); } else { // // Something wrong, let Symboltoi print error info. // EDBPrint (L"Command Argument error!\n"); return EFI_INVALID_PARAMETER; } } *Address = MemAddress; // // Get Value // CommandStr = StrGetNextTokenLine (L" "); if (CommandStr == NULL) { EDBPrint (L"Memory: Value error!\n"); return EFI_INVALID_PARAMETER; } *Value = LXtoi(CommandStr); // // Done // return EFI_SUCCESS; }