Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
btwise
OpenCorePKG_MOD
提交
2325075d
O
OpenCorePKG_MOD
项目概览
btwise
/
OpenCorePKG_MOD
通知
26
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
O
OpenCorePKG_MOD
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
2325075d
编写于
4月 04, 2020
作者:
V
vit9696
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
OcAppleBootCompatLib: Update memory attribute table on memory free
上级
91b81874
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
87 addition
and
13 deletion
+87
-13
Library/OcAppleBootCompatLib/BootCompatInternal.h
Library/OcAppleBootCompatLib/BootCompatInternal.h
+13
-3
Library/OcAppleBootCompatLib/ServiceOverrides.c
Library/OcAppleBootCompatLib/ServiceOverrides.c
+74
-10
未找到文件。
Library/OcAppleBootCompatLib/BootCompatInternal.h
浏览文件 @
2325075d
...
...
@@ -142,16 +142,26 @@ typedef struct UEFI_SERVICES_POINTERS_ {
///
EFI_ALLOCATE_PAGES
AllocatePages
;
///
/// Original p
ool
allocator. We override it to fix memory
/// attributes table as it is updated after p
ool
alloc.
/// Original p
age de
allocator. We override it to fix memory
/// attributes table as it is updated after p
age de
alloc.
///
EFI_
ALLOCATE_POOL
AllocatePool
;
EFI_
FREE_PAGES
FreePages
;
///
/// Original memory map function. We override it to make
/// memory map shrinking and CSM region protection.
///
EFI_GET_MEMORY_MAP
GetMemoryMap
;
///
/// Original pool allocator. We override it to fix memory
/// attributes table as it is updated after pool alloc.
///
EFI_ALLOCATE_POOL
AllocatePool
;
///
/// Original pool deallocator. We override it to fix memory
/// attributes table as it is updated after pool dealloc.
///
EFI_FREE_POOL
FreePool
;
///
/// Original exit boot services function. We override it
/// to ensure we always succeed exiting boot services.
///
...
...
Library/OcAppleBootCompatLib/ServiceOverrides.c
浏览文件 @
2325075d
...
...
@@ -357,13 +357,16 @@ OcAllocatePages (
return
Status
;
}
/**
UEFI Boot Services FreePages override.
Ensures synchronised memory attribute table.
**/
STATIC
EFI_STATUS
EFIAPI
OcAllocatePool
(
IN
EFI_MEMORY_TYPE
PoolType
,
IN
UINTN
Size
,
OUT
VOID
**
Buffer
OcFreePages
(
IN
EFI_PHYSICAL_ADDRESS
Memory
,
IN
UINTN
Pages
)
{
EFI_STATUS
Status
;
...
...
@@ -371,10 +374,9 @@ OcAllocatePool (
BootCompat
=
GetBootCompatContext
();
Status
=
BootCompat
->
ServicePtrs
.
AllocatePool
(
PoolType
,
Size
,
Buffer
Status
=
BootCompat
->
ServicePtrs
.
FreePages
(
Memory
,
Pages
);
if
(
!
EFI_ERROR
(
Status
))
{
...
...
@@ -498,6 +500,64 @@ OcGetMemoryMap (
return
Status
;
}
/**
UEFI Boot Services AllocatePool override.
Ensures synchronised memory attribute table.
**/
STATIC
EFI_STATUS
EFIAPI
OcAllocatePool
(
IN
EFI_MEMORY_TYPE
PoolType
,
IN
UINTN
Size
,
OUT
VOID
**
Buffer
)
{
EFI_STATUS
Status
;
BOOT_COMPAT_CONTEXT
*
BootCompat
;
BootCompat
=
GetBootCompatContext
();
Status
=
BootCompat
->
ServicePtrs
.
AllocatePool
(
PoolType
,
Size
,
Buffer
);
if
(
!
EFI_ERROR
(
Status
))
{
FixRuntimeAttributes
(
BootCompat
);
}
return
Status
;
}
/**
UEFI Boot Services FreePool override.
Ensures synchronised memory attribute table.
**/
STATIC
EFI_STATUS
EFIAPI
OcFreePool
(
IN
VOID
*
Buffer
)
{
EFI_STATUS
Status
;
BOOT_COMPAT_CONTEXT
*
BootCompat
;
BootCompat
=
GetBootCompatContext
();
Status
=
BootCompat
->
ServicePtrs
.
FreePool
(
Buffer
);
if
(
!
EFI_ERROR
(
Status
))
{
FixRuntimeAttributes
(
BootCompat
);
}
return
Status
;
}
/**
UEFI Boot Services StartImage override. Called to start an efi image.
If this is boot.efi, then our overrides are enabled.
...
...
@@ -912,15 +972,19 @@ InstallServiceOverrides (
OriginalTpl
=
gBS
->
RaiseTPL
(
TPL_HIGH_LEVEL
);
ServicePtrs
->
AllocatePages
=
gBS
->
AllocatePages
;
ServicePtrs
->
AllocatePool
=
gBS
->
AllocatePool
;
ServicePtrs
->
FreePages
=
gBS
->
FreePages
;
ServicePtrs
->
GetMemoryMap
=
gBS
->
GetMemoryMap
;
ServicePtrs
->
AllocatePool
=
gBS
->
AllocatePool
;
ServicePtrs
->
FreePool
=
gBS
->
FreePool
;
ServicePtrs
->
ExitBootServices
=
gBS
->
ExitBootServices
;
ServicePtrs
->
StartImage
=
gBS
->
StartImage
;
ServicePtrs
->
SetVirtualAddressMap
=
gRT
->
SetVirtualAddressMap
;
gBS
->
AllocatePages
=
OcAllocatePages
;
gBS
->
AllocatePool
=
OcAllocatePool
;
gBS
->
FreePages
=
OcFreePages
;
gBS
->
GetMemoryMap
=
OcGetMemoryMap
;
gBS
->
AllocatePool
=
OcAllocatePool
;
gBS
->
FreePool
=
OcFreePool
;
gBS
->
ExitBootServices
=
OcExitBootServices
;
gBS
->
StartImage
=
OcStartImage
;
gRT
->
SetVirtualAddressMap
=
OcSetVirtualAddressMap
;
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录