kern: implement svc trace

This commit is contained in:
Michael Scire 2020-07-31 19:48:22 -07:00 committed by SciresM
parent f9d68db3f6
commit 920b017677
8 changed files with 203 additions and 19 deletions

View file

@ -30,6 +30,13 @@ namespace ams::kern {
static_assert(IsKTraceEnabled || !IsKTraceEnabled);
class KTrace {
public:
enum Type {
Type_SvcEntry0 = 3,
Type_SvcEntry1 = 4,
Type_SvcExit0 = 5,
Type_SvcExit1 = 6,
};
private:
static bool s_is_active;
public:
@ -37,6 +44,8 @@ namespace ams::kern {
static void Start();
static void Stop();
static void PushRecord(u8 type, u64 param0 = 0, u64 param1 = 0, u64 param2 = 0, u64 param3 = 0, u64 param4 = 0, u64 param5 = 0);
static ALWAYS_INLINE bool IsActive() { return s_is_active; }
};
@ -55,3 +64,23 @@ namespace ams::kern {
::ams::kern::KTrace::Stop(); \
} \
})
#define MESOSPHERE_KTRACE_SVC_ENTRY(SVC_ID, PARAM0, PARAM1, PARAM2, PARAM3, PARAM4, PARAM5, PARAM6, PARAM7) \
({ \
if constexpr (::ams::kern::IsKTraceEnabled) { \
if (::ams::kern::KTrace::IsActive()) { \
::ams::kern::KTrace::PushRecord(::ams::kern::KTrace::Type_SvcEntry0, SVC_ID, PARAM0, PARAM1, PARAM2, PARAM3, PARAM4); \
::ams::kern::KTrace::PushRecord(::ams::kern::KTrace::Type_SvcEntry1, PARAM5, PARAM6, PARAM7); \
} \
} \
})
#define MESOSPHERE_KTRACE_SVC_EXIT(SVC_ID, PARAM0, PARAM1, PARAM2, PARAM3, PARAM4, PARAM5, PARAM6, PARAM7) \
({ \
if constexpr (::ams::kern::IsKTraceEnabled) { \
if (::ams::kern::KTrace::IsActive()) { \
::ams::kern::KTrace::PushRecord(::ams::kern::KTrace::Type_SvcExit0, SVC_ID, PARAM0, PARAM1, PARAM2, PARAM3, PARAM4); \
::ams::kern::KTrace::PushRecord(::ams::kern::KTrace::Type_SvcExit1, PARAM5, PARAM6, PARAM7); \
} \
} \
})