Kernel : Log IRQ level as string too.
This commit is contained in:
parent
55a764ce52
commit
83fcfd8114
|
@ -231,6 +231,10 @@ extern thread_local std::string _logPrefix;
|
|||
#define LOG_FUNC_RESULT(r) \
|
||||
std::cout << _logFuncPrefix << " returns " << r << "\n";
|
||||
|
||||
// LOG_FUNC_RESULT_TYPE logs the function return result using the overloaded << operator of the given type
|
||||
#define LOG_FUNC_RESULT_TYPE(type, r) \
|
||||
std::cout << _logFuncPrefix << " returns " << (type)r << "\n";
|
||||
|
||||
// LOG_FORWARD indicates that an api is implemented by a forward to another API
|
||||
#define LOG_FORWARD(api) \
|
||||
LOG_INIT \
|
||||
|
@ -275,6 +279,7 @@ extern thread_local std::string _logPrefix;
|
|||
#define LOG_FUNC_ARG_OUT(arg)
|
||||
#define LOG_FUNC_END
|
||||
#define LOG_FUNC_RESULT(r)
|
||||
#define LOG_FUNC_RESULT_TYPE(type, r)
|
||||
#define LOG_FORWARD(arg)
|
||||
#define LOG_IGNORED()
|
||||
#define LOG_UNIMPLEMENTED()
|
||||
|
@ -303,6 +308,9 @@ extern thread_local std::string _logPrefix;
|
|||
// RETURN logs the given result and then returns it (so this should appear last in functions)
|
||||
#define RETURN(r) do { LOG_FUNC_RESULT(r) return r; } while (0)
|
||||
|
||||
// RETURN_TYPE logs the given typed result and then returns it (so this should appear last in functions)
|
||||
#define RETURN_TYPE(type, r) do { LOG_FUNC_RESULT_TYPE(type, r) return r; } while (0)
|
||||
|
||||
#define LOG_ONCE(msg, ...) { static bool bFirstTime = true; if(bFirstTime) { bFirstTime = false; DbgPrintf("TRAC: " ## msg, __VA_ARGS__); } }
|
||||
|
||||
#define LOG_XBOX_CALL(func) DbgPrintf("TRAC: Xbox " ## func ## "() call\n");
|
||||
|
|
|
@ -393,7 +393,7 @@ XBSYSAPI EXPORTNUM(160) xboxkrnl::KIRQL FASTCALL xboxkrnl::KfRaiseIrql
|
|||
IN KIRQL NewIrql
|
||||
)
|
||||
{
|
||||
LOG_FUNC_ONE_ARG(NewIrql);
|
||||
LOG_FUNC_ONE_ARG_TYPE(KIRQL_TYPE, NewIrql);
|
||||
|
||||
// Inlined KeGetCurrentIrql() :
|
||||
PKPCR Pcr = KeGetPcr();
|
||||
|
@ -407,7 +407,7 @@ XBSYSAPI EXPORTNUM(160) xboxkrnl::KIRQL FASTCALL xboxkrnl::KfRaiseIrql
|
|||
KeBugCheckEx(IRQL_NOT_GREATER_OR_EQUAL, (PVOID)OldIrql, (PVOID)NewIrql, 0, 0);
|
||||
}
|
||||
|
||||
RETURN(OldIrql);
|
||||
RETURN_TYPE(KIRQL_TYPE, OldIrql);
|
||||
}
|
||||
|
||||
inline int bsr(const uint32_t a) { DWORD result; _BitScanReverse(&result, a); return result; }
|
||||
|
@ -422,7 +422,7 @@ XBSYSAPI EXPORTNUM(161) xboxkrnl::VOID FASTCALL xboxkrnl::KfLowerIrql
|
|||
IN KIRQL NewIrql
|
||||
)
|
||||
{
|
||||
LOG_FUNC_ONE_ARG(NewIrql);
|
||||
LOG_FUNC_ONE_ARG_TYPE(KIRQL_TYPE, NewIrql);
|
||||
|
||||
KPCR* Pcr = KeGetPcr();
|
||||
|
||||
|
@ -470,7 +470,7 @@ XBSYSAPI EXPORTNUM(163) xboxkrnl::VOID FASTCALL xboxkrnl::KiUnlockDispatcherData
|
|||
IN KIRQL OldIrql
|
||||
)
|
||||
{
|
||||
LOG_FUNC_ONE_ARG(OldIrql);
|
||||
LOG_FUNC_ONE_ARG_TYPE(KIRQL_TYPE, OldIrql);
|
||||
|
||||
if (!(KeGetCurrentPrcb()->DpcRoutineActive)) // Avoid KeIsExecutingDpc(), as that logs
|
||||
HalRequestSoftwareInterrupt(DISPATCH_LEVEL);
|
||||
|
|
|
@ -125,7 +125,7 @@ XBSYSAPI EXPORTNUM(38) xboxkrnl::VOID FASTCALL xboxkrnl::HalClearSoftwareInterru
|
|||
KIRQL Request
|
||||
)
|
||||
{
|
||||
LOG_FUNC_ONE_ARG(Request);
|
||||
LOG_FUNC_ONE_ARG_TYPE(KIRQL_TYPE, Request);
|
||||
|
||||
// Mask out this interrupt request
|
||||
DWORD InterruptMask = 1 << Request;
|
||||
|
@ -438,7 +438,7 @@ XBSYSAPI EXPORTNUM(48) xboxkrnl::VOID FASTCALL xboxkrnl::HalRequestSoftwareInter
|
|||
IN KIRQL Request
|
||||
)
|
||||
{
|
||||
LOG_FUNC_ONE_ARG(Request);
|
||||
LOG_FUNC_ONE_ARG_TYPE(KIRQL_TYPE, Request);
|
||||
|
||||
DWORD InterruptMask = 1 << Request;
|
||||
|
||||
|
|
|
@ -560,7 +560,7 @@ XBSYSAPI EXPORTNUM(103) xboxkrnl::KIRQL NTAPI xboxkrnl::KeGetCurrentIrql(void)
|
|||
KPCR* Pcr = KeGetPcr();
|
||||
KIRQL Irql = (KIRQL)Pcr->Irql;
|
||||
|
||||
RETURN(Irql);
|
||||
RETURN_TYPE(KIRQL_TYPE, Irql);
|
||||
}
|
||||
|
||||
// ******************************************************************
|
||||
|
@ -706,7 +706,7 @@ XBSYSAPI EXPORTNUM(109) xboxkrnl::VOID NTAPI xboxkrnl::KeInitializeInterrupt
|
|||
LOG_FUNC_ARG(ServiceRoutine)
|
||||
LOG_FUNC_ARG(ServiceContext)
|
||||
LOG_FUNC_ARG(Vector)
|
||||
LOG_FUNC_ARG(Irql)
|
||||
LOG_FUNC_ARG_TYPE(KIRQL_TYPE, Irql)
|
||||
LOG_FUNC_ARG(InterruptMode)
|
||||
LOG_FUNC_ARG(ShareVector)
|
||||
LOG_FUNC_END;
|
||||
|
|
|
@ -237,6 +237,15 @@ ENUM2STR_START(KINTERRUPT_MODE)
|
|||
ENUM2STR_CASE(Latched)
|
||||
ENUM2STR_END_and_LOGRENDER(KINTERRUPT_MODE)
|
||||
|
||||
ENUM2STR_START(KIRQL_TYPE)
|
||||
ENUM2STR_CASE_DEF(PASSIVE_LEVEL)
|
||||
ENUM2STR_CASE_DEF(APC_LEVEL)
|
||||
ENUM2STR_CASE_DEF(DISPATCH_LEVEL)
|
||||
ENUM2STR_CASE_DEF(PROFILE_LEVEL)
|
||||
ENUM2STR_CASE_DEF(SYNC_LEVEL)
|
||||
ENUM2STR_CASE_DEF(HIGH_LEVEL)
|
||||
ENUM2STR_END_and_LOGRENDER(KIRQL_TYPE)
|
||||
|
||||
ENUM2STR_START(KWAIT_REASON)
|
||||
ENUM2STR_CASE(Executive)
|
||||
ENUM2STR_CASE(FreePage)
|
||||
|
|
|
@ -46,6 +46,7 @@ enum ALLOCATION_TYPE;
|
|||
enum CREATE_DISPOSITION;
|
||||
enum CREATE_OPTION;
|
||||
//enum NTSTATUS;
|
||||
enum KIRQL_TYPE; // fake enum, since KIRQL is an unsigned char, which clashes with BOOLEAN
|
||||
enum PROTECTION_TYPE;
|
||||
};
|
||||
|
||||
|
@ -69,6 +70,7 @@ ENUM2STR_HEADER(EXCEPTION_DISPOSITION)
|
|||
ENUM2STR_HEADER(FILE_INFORMATION_CLASS)
|
||||
ENUM2STR_HEADER(FS_INFORMATION_CLASS)
|
||||
ENUM2STR_HEADER(KINTERRUPT_MODE)
|
||||
ENUM2STR_HEADER(KIRQL_TYPE) // Not really an enum
|
||||
ENUM2STR_HEADER(KWAIT_REASON)
|
||||
ENUM2STR_HEADER(KOBJECTS)
|
||||
ENUM2STR_HEADER(MODE)
|
||||
|
|
Loading…
Reference in New Issue