|
|
EDK_20080905(各家IBV的应该类似),文件Image.c,在CoreStartImage(),如下一段中:- Status = gEfiPeiTransferControl->SetJump (gEfiPeiTransferControl, Image->JumpContext);
r* X! L, h1 B( c9 P0 @9 `1 u - //
# U+ Z0 z; c6 i0 m3 g# ~ - // The SetJump returns EFI_SUCCESS when LongJump Buffer has been armed
' Q9 j% F2 l" L, y - // SetJump returns EFI_WARN_RETURN_FROM_LONG_JUMP as a result of the LongJump
8 M1 l% m3 }% e# p2 R6 D; N% E - // All other return values for SetJump are undefined.- @4 J8 r& @! r& E+ h6 w6 D
- //" Z$ ?' I* T% M
- if (Status == EFI_SUCCESS) {
4 o; `2 M3 o5 C6 d H0 N - - t/ N: H& O! O; ]: v
- //
* f, M1 H& l1 P' S+ Y% v/ Z - // Call the image's entry point
( K# i' M, t$ N8 s5 z# n* y - //
+ p5 n8 o$ [ o3 ~/ a! j# L8 y - Image->Started = TRUE;
- w9 J* L, v8 ~) e/ m7 g/ T; m5 z/ @ - Image->Status = Image->EntryPoint (ImageHandle, Image->Info.SystemTable);7 g: J0 f5 w- G
- x0 I4 b' _: H' z( S$ t2 j8 v! x: h- //
F' V& L. i$ {+ }- D% D& z- { - // Add some debug information if the image returned with error.
% U3 I- z8 o8 e8 c% O- c - // This make the user aware and check if the driver image have already released
! l% c! R" w& O* h; i' K- s( d - // all the resource in this situation. 0 A& F# e- q' ~
- //
& l9 j) g- i6 t' q3 W4 t5 @ - DEBUG_CODE (
5 R2 n e: {0 C$ N4 M1 Y# V - if (EFI_ERROR (Image->Status)) {
Y. T- U, u& J7 { - DEBUG ((EFI_D_ERROR, "Error: Image at %08X start failed: %x\n", Image->Info.ImageBase, Image->Status));
" [1 E+ n1 o+ D" I - }
! A; k) \0 \) i' Q; `" H) b9 R - )
* ~" [; {: A) _* |1 M -
! G0 @ g4 V# M# \8 Q) d0 y, e, ~ - //
6 i1 s( i0 Z, H - // If the image returns, exit it through Exit()6 k3 Z/ i# {; M7 ?6 t, W3 j3 u
- //
( f; q& a6 Z" i5 U+ U C: L; @ - CoreExit (ImageHandle, Image->Status, 0, NULL);
( n7 `( Q$ y6 J2 `; P/ F - }
复制代码 调用DXE driver前,为什么要用SetJump保存CPU的信息,driver返回后,再用CoreExit--LongJump恢复到SetJump时的状态 `& y6 H$ q- b! C! A& M
既然driver可以返回,为什么非要这样恢复到调用前的状态呢?难道在调用driver的过程CPU的状态可能会被破坏吗?
" F4 l. J: c( D而且目前来看driver只会返回Status而已,根据这个就可以做处理了.6 B8 R+ `8 a) H" `) ?( F; Y
: D+ w2 Q+ i6 w/ J4 R我感觉有点多此一举了...不解 |
|