@@ -131,7 +131,13 @@ DisableBTS (
131
131
VOID
132
132
)
133
133
{
134
- AsmMsrAnd64 (MSR_DEBUG_CTL , ~((UINT64 )(MSR_DEBUG_CTL_BTS | MSR_DEBUG_CTL_TR )));
134
+ MSR_IA32_DEBUGCTL_REGISTER DebugCtl ;
135
+
136
+ DebugCtl .Uint64 = AsmReadMsr64 (MSR_IA32_DEBUGCTL );
137
+ DebugCtl .Bits .BTS = 0 ;
138
+ DebugCtl .Bits .TR = 0 ;
139
+
140
+ AsmWriteMsr64 (MSR_IA32_DEBUGCTL , DebugCtl .Uint64 );
135
141
}
136
142
137
143
/**
@@ -143,7 +149,13 @@ EnableBTS (
143
149
VOID
144
150
)
145
151
{
146
- AsmMsrOr64 (MSR_DEBUG_CTL , (MSR_DEBUG_CTL_BTS | MSR_DEBUG_CTL_TR ));
152
+ MSR_IA32_DEBUGCTL_REGISTER DebugCtl ;
153
+
154
+ DebugCtl .Uint64 = AsmReadMsr64 (MSR_IA32_DEBUGCTL );
155
+ DebugCtl .Bits .BTS = 1 ;
156
+ DebugCtl .Bits .TR = 1 ;
157
+
158
+ AsmWriteMsr64 (MSR_IA32_DEBUGCTL , DebugCtl .Uint64 );
147
159
}
148
160
149
161
/**
@@ -930,15 +942,15 @@ ActivateLBR (
930
942
VOID
931
943
)
932
944
{
933
- UINT64 DebugCtl ;
945
+ MSR_IA32_DEBUGCTL_REGISTER DebugCtl ;
934
946
935
- DebugCtl = AsmReadMsr64 (MSR_DEBUG_CTL );
936
- if (( DebugCtl & MSR_DEBUG_CTL_LBR ) != 0 ) {
947
+ DebugCtl . Uint64 = AsmReadMsr64 (MSR_IA32_DEBUGCTL );
948
+ if (DebugCtl . Bits . LBR ) {
937
949
return ;
938
950
}
939
951
940
- DebugCtl |= MSR_DEBUG_CTL_LBR ;
941
- AsmWriteMsr64 (MSR_DEBUG_CTL , DebugCtl );
952
+ DebugCtl . Bits . LBR = 1 ;
953
+ AsmWriteMsr64 (MSR_IA32_DEBUGCTL , DebugCtl . Uint64 );
942
954
}
943
955
944
956
/**
@@ -952,17 +964,23 @@ ActivateBTS (
952
964
IN UINTN CpuIndex
953
965
)
954
966
{
955
- UINT64 DebugCtl ;
967
+ MSR_IA32_DEBUGCTL_REGISTER DebugCtl ;
956
968
957
- DebugCtl = AsmReadMsr64 (MSR_DEBUG_CTL );
958
- if ((DebugCtl & MSR_DEBUG_CTL_BTS ) != 0 ) {
969
+ DebugCtl . Uint64 = AsmReadMsr64 (MSR_IA32_DEBUGCTL );
970
+ if ((DebugCtl . Bits . BTS ) ) {
959
971
return ;
960
972
}
961
973
962
974
AsmWriteMsr64 (MSR_DS_AREA , (UINT64 )(UINTN )mMsrDsArea [CpuIndex ]);
963
- DebugCtl |= (UINT64 )(MSR_DEBUG_CTL_BTS | MSR_DEBUG_CTL_TR );
964
- DebugCtl &= ~((UINT64 )MSR_DEBUG_CTL_BTINT );
965
- AsmWriteMsr64 (MSR_DEBUG_CTL , DebugCtl );
975
+
976
+ //
977
+ // Enable BTS
978
+ //
979
+ DebugCtl .Bits .BTS = 1 ;
980
+ DebugCtl .Bits .TR = 1 ;
981
+
982
+ DebugCtl .Bits .BTINT = 0 ;
983
+ AsmWriteMsr64 (MSR_IA32_DEBUGCTL , DebugCtl .Uint64 );
966
984
}
967
985
968
986
/**
0 commit comments