2020-08-25 11:23:25 +00:00
|
|
|
#ifndef COSMOPOLITAN_TOOL_BUILD_LIB_PML4T_H_
|
|
|
|
#define COSMOPOLITAN_TOOL_BUILD_LIB_PML4T_H_
|
|
|
|
#if !(__ASSEMBLER__ + __LINKER__ + 0)
|
|
|
|
COSMOPOLITAN_C_START_
|
|
|
|
|
|
|
|
#define IsValidPage(x) ((x)&1)
|
|
|
|
#define UnmaskPageAddr(x) ((void *)SignExtendAddr(MaskPageAddr(x)))
|
|
|
|
#define MaskPageAddr(x) ((int64_t)(intptr_t)(x)&0x00007ffffffff000)
|
|
|
|
#define SignExtendAddr(x) (!((x)&0x800000000000) ? (x) : (x) | -0x800000000000)
|
|
|
|
|
|
|
|
typedef uint64_t pml4t_t[512] aligned(4096);
|
|
|
|
|
|
|
|
int FreePml4t(pml4t_t, int64_t, uint64_t, void (*)(void *),
|
|
|
|
int (*)(void *, size_t));
|
|
|
|
int RegisterPml4t(pml4t_t, int64_t, int64_t, size_t, void *(*)(void));
|
2020-08-31 12:17:31 +00:00
|
|
|
int64_t FindPml4t(pml4t_t, uint64_t, uint64_t);
|
2020-08-25 11:23:25 +00:00
|
|
|
char *FormatPml4t(pml4t_t) nodiscard;
|
|
|
|
|
|
|
|
COSMOPOLITAN_C_END_
|
|
|
|
#endif /* !(__ASSEMBLER__ + __LINKER__ + 0) */
|
|
|
|
#endif /* COSMOPOLITAN_TOOL_BUILD_LIB_PML4T_H_ */
|