00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
#include "ki.h"
00033
00034 ULONGLONG
00035 KiGetRegisterValue (
00036 IN ULONG Register,
00037 IN PKEXCEPTION_FRAME ExceptionFrame,
00038 IN PKTRAP_FRAME TrapFrame
00039 )
00040
00041
00042
00043
00044
00045
00046
00047
00048
00049
00050
00051
00052
00053
00054
00055
00056
00057
00058
00059
00060
00061
00062
00063
00064 {
00065
00066
00067
00068
00069
00070
switch (Register) {
00071
00072
00073
00074
00075
00076
case 0:
00077
return TrapFrame->IntV0;
00078
00079
00080
00081
00082
00083
case 1:
00084
return TrapFrame->IntT0;
00085
00086
00087
00088
00089
00090
case 2:
00091
return TrapFrame->IntT1;
00092
00093
00094
00095
00096
00097
case 3:
00098
return TrapFrame->IntT2;
00099
00100
00101
00102
00103
00104
case 4:
00105
return TrapFrame->IntT3;
00106
00107
00108
00109
00110
00111
case 5:
00112
return TrapFrame->IntT4;
00113
00114
00115
00116
00117
00118
case 6:
00119
return TrapFrame->IntT5;
00120
00121
00122
00123
00124
00125
case 7:
00126
return TrapFrame->IntT6;
00127
00128
00129
00130
00131
00132
case 8:
00133
return TrapFrame->IntT7;
00134
00135
00136
00137
00138
00139
case 9:
00140
return ExceptionFrame->IntS0;
00141
00142
00143
00144
00145
00146
case 10:
00147
return ExceptionFrame->IntS1;
00148
00149
00150
00151
00152
00153
case 11:
00154
return ExceptionFrame->IntS2;
00155
00156
00157
00158
00159
00160
case 12:
00161
return ExceptionFrame->IntS3;
00162
00163
00164
00165
00166
00167
case 13:
00168
return ExceptionFrame->IntS4;
00169
00170
00171
00172
00173
00174
case 14:
00175
return ExceptionFrame->IntS5;
00176
00177
00178
00179
00180
00181
00182
00183
00184
00185
case 15:
00186
return TrapFrame->IntFp;
00187
00188
00189
00190
00191
00192
case 16:
00193
return TrapFrame->IntA0;
00194
00195
00196
00197
00198
00199
case 17:
00200
return TrapFrame->IntA1;
00201
00202
00203
00204
00205
00206
case 18:
00207
return TrapFrame->IntA2;
00208
00209
00210
00211
00212
00213
case 19:
00214
return TrapFrame->IntA3;
00215
00216
00217
00218
00219
00220
case 20:
00221
return TrapFrame->IntA4;
00222
00223
00224
00225
00226
00227
case 21:
00228
return TrapFrame->IntA5;
00229
00230
00231
00232
00233
00234
case 22:
00235
return TrapFrame->IntT8;
00236
00237
00238
00239
00240
00241
case 23:
00242
return TrapFrame->IntT9;
00243
00244
00245
00246
00247
00248
case 24:
00249
return TrapFrame->IntT10;
00250
00251
00252
00253
00254
00255
case 25:
00256
return TrapFrame->IntT11;
00257
00258
00259
00260
00261
00262
case 26:
00263
return TrapFrame->IntRa;
00264
00265
00266
00267
00268
00269
case 27:
00270
return TrapFrame->IntT12;
00271
00272
00273
00274
00275
00276
case 28:
00277
return TrapFrame->IntAt;
00278
00279
00280
00281
00282
00283
case 29:
00284
return TrapFrame->IntGp;
00285
00286
00287
00288
00289
00290
case 30:
00291
return TrapFrame->IntSp;
00292
00293
00294
00295
00296
00297
case 31:
00298
return 0;
00299
00300
00301
00302
00303
00304
case 32:
00305
return TrapFrame->FltF0;
00306
00307
00308
00309
00310
00311
case 33:
00312
return TrapFrame->FltF1;
00313
00314
00315
00316
00317
00318
case 34:
00319
return ExceptionFrame->FltF2;
00320
00321
00322
00323
00324
00325
case 35:
00326
return ExceptionFrame->FltF3;
00327
00328
00329
00330
00331
00332
case 36:
00333
return ExceptionFrame->FltF4;
00334
00335
00336
00337
00338
00339
case 37:
00340
return ExceptionFrame->FltF5;
00341
00342
00343
00344
00345
00346
case 38:
00347
return ExceptionFrame->FltF6;
00348
00349
00350
00351
00352
00353
case 39:
00354
return ExceptionFrame->FltF7;
00355
00356
00357
00358
00359
00360
case 40:
00361
return ExceptionFrame->FltF8;
00362
00363
00364
00365
00366
00367
case 41:
00368
return ExceptionFrame->FltF9;
00369
00370
00371
00372
00373
00374
case 42:
00375
return TrapFrame->FltF10;
00376
00377
00378
00379
00380
00381
case 43:
00382
return TrapFrame->FltF11;
00383
00384
00385
00386
00387
00388
case 44:
00389
return TrapFrame->FltF12;
00390
00391
00392
00393
00394
00395
case 45:
00396
return TrapFrame->FltF13;
00397
00398
00399
00400
00401
00402
case 46:
00403
return TrapFrame->FltF14;
00404
00405
00406
00407
00408
00409
case 47:
00410
return TrapFrame->FltF15;
00411
00412
00413
00414
00415
00416
case 48:
00417
return TrapFrame->FltF16;
00418
00419
00420
00421
00422
00423
case 49:
00424
return TrapFrame->FltF17;
00425
00426
00427
00428
00429
00430
case 50:
00431
return TrapFrame->FltF18;
00432
00433
00434
00435
00436
00437
case 51:
00438
return TrapFrame->FltF19;
00439
00440
00441
00442
00443
00444
case 52:
00445
return TrapFrame->FltF20;
00446
00447
00448
00449
00450
00451
case 53:
00452
return TrapFrame->FltF21;
00453
00454
00455
00456
00457
00458
case 54:
00459
return TrapFrame->FltF22;
00460
00461
00462
00463
00464
00465
case 55:
00466
return TrapFrame->FltF23;
00467
00468
00469
00470
00471
00472
case 56:
00473
return TrapFrame->FltF24;
00474
00475
00476
00477
00478
00479
case 57:
00480
return TrapFrame->FltF25;
00481
00482
00483
00484
00485
00486
case 58:
00487
return TrapFrame->FltF26;
00488
00489
00490
00491
00492
00493
case 59:
00494
return TrapFrame->FltF27;
00495
00496
00497
00498
00499
00500
case 60:
00501
return TrapFrame->FltF28;
00502
00503
00504
00505
00506
00507
case 61:
00508
return TrapFrame->FltF29;
00509
00510
00511
00512
00513
00514
case 62:
00515
return TrapFrame->FltF30;
00516
00517
00518
00519
00520
00521
case 63:
00522
return 0;
00523 }
00524 }
00525
00526
VOID
00527 KiSetRegisterValue (
00528 IN ULONG Register,
00529 IN ULONGLONG Value,
00530 OUT PKEXCEPTION_FRAME ExceptionFrame,
00531 OUT PKTRAP_FRAME TrapFrame
00532 )
00533
00534
00535
00536
00537
00538
00539
00540
00541
00542
00543
00544
00545
00546
00547
00548
00549
00550
00551
00552
00553
00554
00555
00556
00557
00558
00559 {
00560
00561
00562
00563
00564
00565
switch (Register) {
00566
00567
00568
00569
00570
00571
case 0:
00572 TrapFrame->IntV0 = Value;
00573
return;
00574
00575
00576
00577
00578
00579
case 1:
00580 TrapFrame->IntT0 = Value;
00581
return;
00582
00583
00584
00585
00586
00587
case 2:
00588 TrapFrame->IntT1 = Value;
00589
return;
00590
00591
00592
00593
00594
00595
case 3:
00596 TrapFrame->IntT2 = Value;
00597
return;
00598
00599
00600
00601
00602
00603
case 4:
00604 TrapFrame->IntT3 = Value;
00605
return;
00606
00607
00608
00609
00610
00611
case 5:
00612 TrapFrame->IntT4 = Value;
00613
return;
00614
00615
00616
00617
00618
00619
case 6:
00620 TrapFrame->IntT5 = Value;
00621
return;
00622
00623
00624
00625
00626
00627
case 7:
00628 TrapFrame->IntT6 = Value;
00629
return;
00630
00631
00632
00633
00634
00635
case 8:
00636 TrapFrame->IntT7 = Value;
00637
return;
00638
00639
00640
00641
00642
00643
case 9:
00644 ExceptionFrame->IntS0 = Value;
00645
return;
00646
00647
00648
00649
00650
00651
case 10:
00652 ExceptionFrame->IntS1 = Value;
00653
return;
00654
00655
00656
00657
00658
00659
case 11:
00660 ExceptionFrame->IntS2 = Value;
00661
return;
00662
00663
00664
00665
00666
00667
case 12:
00668 ExceptionFrame->IntS3 = Value;
00669
return;
00670
00671
00672
00673
00674
00675
case 13:
00676 ExceptionFrame->IntS4 = Value;
00677
return;
00678
00679
00680
00681
00682
00683
case 14:
00684 ExceptionFrame->IntS5 = Value;
00685
return;
00686
00687
00688
00689
00690
00691
00692
00693
00694
00695
case 15:
00696 TrapFrame->IntFp = Value;
00697
return;
00698
00699
00700
00701
00702
00703
case 16:
00704 TrapFrame->IntA0 = Value;
00705
return;
00706
00707
00708
00709
00710
00711
case 17:
00712 TrapFrame->IntA1 = Value;
00713
return;
00714
00715
00716
00717
00718
00719
case 18:
00720 TrapFrame->IntA2 = Value;
00721
return;
00722
00723
00724
00725
00726
00727
case 19:
00728 TrapFrame->IntA3 = Value;
00729
return;
00730
00731
00732
00733
00734
00735
case 20:
00736 TrapFrame->IntA4 = Value;
00737
return;
00738
00739
00740
00741
00742
00743
case 21:
00744 TrapFrame->IntA5 = Value;
00745
return;
00746
00747
00748
00749
00750
00751
case 22:
00752 TrapFrame->IntT8 = Value;
00753
return;
00754
00755
00756
00757
00758
00759
case 23:
00760 TrapFrame->IntT9 = Value;
00761
return;
00762
00763
00764
00765
00766
00767
case 24:
00768 TrapFrame->IntT10 = Value;
00769
return;
00770
00771
00772
00773
00774
00775
case 25:
00776 TrapFrame->IntT11 = Value;
00777
return;
00778
00779
00780
00781
00782
00783
case 26:
00784 TrapFrame->IntRa = Value;
00785
return;
00786
00787
00788
00789
00790
00791
case 27:
00792 TrapFrame->IntT12 = Value;
00793
return;
00794
00795
00796
00797
00798
00799
case 28:
00800 TrapFrame->IntAt = Value;
00801
return;
00802
00803
00804
00805
00806
00807
case 29:
00808 TrapFrame->IntGp = Value;
00809
return;
00810
00811
00812
00813
00814
00815
case 30:
00816 TrapFrame->IntSp = Value;
00817
return;
00818
00819
00820
00821
00822
00823
case 31:
00824
return;
00825
00826
00827
00828
00829
00830
case 32:
00831 TrapFrame->FltF0 = Value;
00832
return;
00833
00834
00835
00836
00837
00838
case 33:
00839 TrapFrame->FltF1 = Value;
00840
return;
00841
00842
00843
00844
00845
00846
case 34:
00847 ExceptionFrame->FltF2 = Value;
00848
return;
00849
00850
00851
00852
00853
00854
case 35:
00855 ExceptionFrame->FltF3 = Value;
00856
return;
00857
00858
00859
00860
00861
00862
case 36:
00863 ExceptionFrame->FltF4 = Value;
00864
return;
00865
00866
00867
00868
00869
00870
case 37:
00871 ExceptionFrame->FltF5 = Value;
00872
return;
00873
00874
00875
00876
00877
00878
case 38:
00879 ExceptionFrame->FltF6 = Value;
00880
return;
00881
00882
00883
00884
00885
00886
case 39:
00887 ExceptionFrame->FltF7 = Value;
00888
return;
00889
00890
00891
00892
00893
00894
case 40:
00895 ExceptionFrame->FltF8 = Value;
00896
return;
00897
00898
00899
00900
00901
00902
case 41:
00903 ExceptionFrame->FltF9 = Value;
00904
return;
00905
00906
00907
00908
00909
00910
case 42:
00911 TrapFrame->FltF10 = Value;
00912
return;
00913
00914
00915
00916
00917
00918
case 43:
00919 TrapFrame->FltF11 = Value;
00920
return;
00921
00922
00923
00924
00925
00926
case 44:
00927 TrapFrame->FltF12 = Value;
00928
return;
00929
00930
00931
00932
00933
00934
case 45:
00935 TrapFrame->FltF13 = Value;
00936
return;
00937
00938
00939
00940
00941
00942
case 46:
00943 TrapFrame->FltF14 = Value;
00944
return;
00945
00946
00947
00948
00949
00950
case 47:
00951 TrapFrame->FltF15 = Value;
00952
return;
00953
00954
00955
00956
00957
00958
case 48:
00959 TrapFrame->FltF16 = Value;
00960
return;
00961
00962
00963
00964
00965
00966
case 49:
00967 TrapFrame->FltF17 = Value;
00968
return;
00969
00970
00971
00972
00973
00974
case 50:
00975 TrapFrame->FltF18 = Value;
00976
return;
00977
00978
00979
00980
00981
00982
case 51:
00983 TrapFrame->FltF19 = Value;
00984
return;
00985
00986
00987
00988
00989
00990
case 52:
00991 TrapFrame->FltF20 = Value;
00992
return;
00993
00994
00995
00996
00997
00998
case 53:
00999 TrapFrame->FltF21 = Value;
01000
return;
01001
01002
01003
01004
01005
01006
case 54:
01007 TrapFrame->FltF22 = Value;
01008
return;
01009
01010
01011
01012
01013
01014
case 55:
01015 TrapFrame->FltF23 = Value;
01016
return;
01017
01018
01019
01020
01021
01022
case 56:
01023 TrapFrame->FltF24 = Value;
01024
return;
01025
01026
01027
01028
01029
01030
case 57:
01031 TrapFrame->FltF25 = Value;
01032
return;
01033
01034
01035
01036
01037
01038
case 58:
01039 TrapFrame->FltF26 = Value;
01040
return;
01041
01042
01043
01044
01045
01046
case 59:
01047 TrapFrame->FltF27 = Value;
01048
return;
01049
01050
01051
01052
01053
01054
case 60:
01055 TrapFrame->FltF28 = Value;
01056
return;
01057
01058
01059
01060
01061
01062
case 61:
01063 TrapFrame->FltF29 = Value;
01064
return;
01065
01066
01067
01068
01069
01070
case 62:
01071 TrapFrame->FltF30 = Value;
01072
return;
01073
01074
01075
01076
01077
01078
case 63:
01079
return;
01080 }
01081 }