|
|
EDK_20080905(各家IBV的应该类似),文件Image.c,在CoreStartImage(),如下一段中:- Status = gEfiPeiTransferControl->SetJump (gEfiPeiTransferControl, Image->JumpContext);: }1 ]) T( S; Y; Q7 S- g' ?. k* j
- //% K q: T* E: E1 M7 A0 @' f* V. l
- // The SetJump returns EFI_SUCCESS when LongJump Buffer has been armed# I8 y: y4 ]: C
- // SetJump returns EFI_WARN_RETURN_FROM_LONG_JUMP as a result of the LongJump: w- H- U7 ?7 ^9 j( O0 Z
- // All other return values for SetJump are undefined.
- l9 b! u: c) J$ k9 j( V - //
/ y. |* F2 q3 T# p; G) l W& b+ u - if (Status == EFI_SUCCESS) {
* m! ]% o. {1 _' V9 G - ' L! o4 Y& T/ { W+ c! c
- //9 l& G5 X! N, ~( `/ Z9 o! x& H
- // Call the image's entry point
: j- }, I3 p: u) s0 V& k" j3 m - //! n, P7 D$ S( A* _+ P6 o- V; g
- Image->Started = TRUE;
) T' |- g# i) c- v* u' b5 r7 X - Image->Status = Image->EntryPoint (ImageHandle, Image->Info.SystemTable);4 k U2 L2 U: Z1 L$ e. t; L! ~
& L' O/ l2 o1 }4 n- //
6 Q/ a7 G: D! U. S4 d - // Add some debug information if the image returned with error.
2 I! U9 ~% v3 f& | - // This make the user aware and check if the driver image have already released
, z8 Y' j6 l. S G - // all the resource in this situation.
& c ~; z4 k; e, v# m4 B0 @ - //
& ^4 q) F$ `# G* d0 X# L" W' v+ Z - DEBUG_CODE (" y' m% F# c6 B# w+ x( a
- if (EFI_ERROR (Image->Status)) {
( F" i2 R8 l% \3 H! l+ ~9 Y0 @; R) }# c - DEBUG ((EFI_D_ERROR, "Error: Image at %08X start failed: %x\n", Image->Info.ImageBase, Image->Status));6 \3 ~# i! K; s( i8 d3 Q. y& U+ f
- }) s" G1 T9 q) {# k) R
- )
2 H+ M: c" E8 { - 8 c9 Y, y0 e2 Q, W
- //5 @7 n) T9 X# |4 r9 }
- // If the image returns, exit it through Exit()
) O Z) `6 X1 q, m- z: X' G - //7 e7 s( R2 L( i' o! a
- CoreExit (ImageHandle, Image->Status, 0, NULL);9 N6 m: c, H' Q3 v! L
- }
复制代码 调用DXE driver前,为什么要用SetJump保存CPU的信息,driver返回后,再用CoreExit--LongJump恢复到SetJump时的状态
; T7 D8 B% M; l# H \& f- G既然driver可以返回,为什么非要这样恢复到调用前的状态呢?难道在调用driver的过程CPU的状态可能会被破坏吗?
1 H3 _) X) E8 q( _, E! A, [ h而且目前来看driver只会返回Status而已,根据这个就可以做处理了./ E4 g# T) k- Z4 N- H. c$ C$ j
4 K Z. d6 }( \5 V3 o; T; _6 m我感觉有点多此一举了...不解 |
|