40 #define PDE_SHIFT_PAE 18 42 #define STARTUP_BASE 0xC0000000 43 #define HYPERSPACE_BASE 0xC0400000 44 #define HYPERSPACE_PAE_BASE 0xC0800000 45 #define APIC_BASE 0xFEC00000 46 #define KPCR_BASE 0xFF000000 48 #define LowMemPageTableIndex 0 49 #define StartupPageTableIndex (STARTUP_BASE >> 22) 50 #define HyperspacePageTableIndex (HYPERSPACE_BASE >> 22) 51 #define KpcrPageTableIndex (KPCR_BASE >> 22) 52 #define ApicPageTableIndex (APIC_BASE >> 22) 54 #define BAT_GRANULARITY (64 * 1024) 55 #define KernelMemorySize (8 * 1024 * 1024) 56 #define XROUNDUP(x,n) ((((ULONG)x) + ((n) - 1)) & (~((n) - 1))) 58 #define TAG_MBOOT 'oobM' 115 printf(
"TRAP %x\n", trapCode);
116 for(
i = 0;
i < 40;
i++ )
139 args[0] = possibly_virtual;
146 return possibly_virtual;
166 for(
j = 0;
j <
set->usecount;
j++ )
168 if(
set->info[
j].addr ==
page)
return;
176 else if (
set->mapsize <=
set->usecount)
187 set->info[
set->usecount].addr = virt;
200 CHAR ModulesTreated[64] = { 0 };
201 ULONG NumberOfEntries = 0, UsedEntries = 0;
208 __asm__(
"mfmsr %0" :
"=r" (tmp));
210 __asm__(
"mtmsr %0" : :
"r" (tmp));
212 while(OldModCount != LoaderBlock.ModsCount)
214 printf(
"Added %d modules last pass\n",
215 LoaderBlock.ModsCount - OldModCount);
217 OldModCount = LoaderBlock.ModsCount;
219 for(
i = 0;
i < LoaderBlock.ModsCount;
i++)
221 if (!ModulesTreated[
i])
223 ModulesTreated[
i] = 1;
224 ModHeader = ((
PCHAR)reactos_modules[
i].ModStart);
225 if(ModHeader[0] ==
'M' && ModHeader[1] ==
'Z')
227 ((
PVOID)reactos_modules[
i].ModStart,
237 printf(
"Allocating vsid 0 (kernel)\n");
241 printf(
"Allocating vsid 1 (freeldr)\n");
257 for(
i = 0;
i < NumberOfEntries;
i++ ) {
272 printf(
"Finished Mapping the Freeldr Heap (used %d pages)\n", UsedEntries);
274 printf(
"Setting initial segments\n");
278 printf(
"Segments set!\n");
335 LoaderBlock.KernelBase = 0x80000000;
338 p = (
PCHAR)LoaderBlock.CommandLine;
345 if (
p[4] ==
' ' ||
p[4] == 0) {
349 LoaderBlock.KernelBase = 0xC0000000;
415 #define ELF_SECTION(n) ((Elf32_Shdr*)(sptr + (n * shsize))) 416 #define COFF_FIRST_SECTION(h) ((PIMAGE_SECTION_HEADER) ((DWORD)h+FIELD_OFFSET(IMAGE_NT_HEADERS,OptionalHeader)+(SWAPW(((PIMAGE_NT_HEADERS)(h))->FileHeader.SizeOfOptionalHeader)))) 430 int shsize, shnum, relsize, SectionAddr = 0;
451 ModuleData = &reactos_modules[LoaderBlock.ModsCount];
458 printf(
"Couldn't read the elf header\n");
475 for(
i = 0;
i < shnum;
i++ )
490 printf(
"SectionAlignment %x\n",
494 printf(
"Header ends at %x\n", SectionAddr);
502 printf(
"No peheader section encountered :-(\n");
520 for (
i=0;
i < SectionCount;
i++, Section++)
532 printf(
"Loading section %d at %x (real: %x:%d)\n",
i, KernelAddr + SectionAddr, MemLoadAddr+SectionAddr, shdr->
sh_size);
540 printf(
"BSS section %d at %x\n",
i, KernelAddr + SectionAddr);
541 memset(MemLoadAddr + SectionAddr, 0,
548 printf(
"Total image size is %x\n", ImageSize);
551 for (
i = 0;
i < shnum;
i++) {
555 int numreloc, relstart, targetSection;
557 PCHAR RelocSection, SymbolSection;
566 numreloc = shdr->
sh_size / relsize;
569 if (!
ELF_SECTION(targetSection)->sh_addr)
continue;
584 for(
j = 0;
j < numreloc;
j++)
589 memcpy(&reloc, RelocSection + (
j * relsize),
sizeof(reloc));
600 printf(
"Symbol[%d] %d -> %d(%x:%x) -> %x(+%x)@%x\n",
611 Target32 = (
ULONG*)(((
PCHAR)MemLoadAddr) + (
P - KernelAddr));
612 Target16 = (
USHORT *)Target32;
622 *Target32 =
S +
A -
P;
625 *Target32 =
S +
A - KernelAddr;
637 *Target16 = (
S +
A + 0x8000) >> 16;
644 printf(
"reloc[%d:%x]: (type %x sym %d val %d) off %x add %x (old %x new %x)\n",
667 printf(
"Module %s (%x-%x) next at %x\n",
672 LoaderBlock.ModsCount++;
716 ULONG LocalModuleSize;
723 ModuleData = &reactos_modules[LoaderBlock.ModsCount];
742 LocalModuleSize =
FileInfo.EndingAddress.LowPart;
757 LoaderBlock.ModsCount++;
760 if (ModuleSize !=
NULL) {
761 *ModuleSize = LocalModuleSize;
764 printf(
"Module %s (%x-%x) next at %x\n",
770 return ThisModuleBase;
804 ModuleData = &reactos_modules[LoaderBlock.ModsCount];
840 LoaderBlock.ModsCount++;
IN PDCB IN POEM_STRING IN PUNICODE_STRING IN OUT POEM_STRING ShortName
#define memmove(s1, s2, n)
#define COFF_FIRST_SECTION(h)
struct png_info_def **typedef void(__cdecl typeof(png_destroy_read_struct))(struct png_struct_def **
PLOADER_MODULE NTAPI LdrGetModuleObject(PCHAR ModuleName)
VOID NTAPI FrLdrAddPageMapping(ppc_map_set_t *set, int proc, paddr_t phys, vaddr_t virt)
#define ROUND_UP(n, align)
ACPI_SIZE strlen(const char *String)
int(* of_proxy)(int table_off, void *arg1, void *arg2, void *arg3, void *arg4, void *arg5, void *arg6)
int ofw_callmethod_ret(const char *method, int handle, int nargs, int *args, int ret)
struct _ppc_map_set_t ppc_map_set_t
GLint GLint GLint GLint GLint x
ACPI_BUFFER *RetBuffer ACPI_BUFFER *RetBuffer char ACPI_WALK_RESOURCE_CALLBACK void *Context ACPI_BUFFER *RetBuffer UINT16 ACPI_RESOURCE **ResourcePtr ACPI_GENERIC_ADDRESS *Reg UINT32 *ReturnValue UINT8 UINT8 *Slp_TypB ACPI_PHYSICAL_ADDRESS PhysicalAddress64 UINT32 UINT32 *TimeElapsed UINT32 ACPI_STATUS const char UINT32 ACPI_STATUS const char UINT32 const char const char * ModuleName
VOID FASTCALL FrLdrSetupPae(ULONG Magic)
_Check_return_ _CRTIMP _CONST_RETURN char *__cdecl strrchr(_In_z_ const char *_Str, _In_ int _Ch)
ULONG_PTR NTAPI FrLdrLoadModule(FILE *ModuleImage, PCSTR ModuleName, PULONG ModuleSize)
char reactos_module_strings[64][256]
NTSTATUS NTAPI LdrPEFixupImports(IN PVOID DllBase, IN PCHAR DllName)
PVOID NTAPI FrLdrMapImage(IN FILE *Image, IN PCHAR ShortName, IN ULONG ImageType)
_Must_inspect_result_ _In_ WDFDEVICE _In_ WDFSTRING String
NTSTATUS(* NTAPI)(IN PFILE_FULL_EA_INFORMATION EaBuffer, IN ULONG EaLength, OUT PULONG ErrorOffset)
__asm__("\t.globl GetPhys\n" "GetPhys:\t\n" "mflr 0\n\t" "stwu 0,-16(1)\n\t" "mfmsr 5\n\t" "andi. 6,5,0xffef\n\t" "mtmsr 6\n\t" "isync\n\t" "sync\n\t" "lwz 3,0(3)\n\t" "mtmsr 5\n\t" "isync\n\t" "sync\n\t" "lwz 0,0(1)\n\t" "addi 1,1,16\n\t" "mtlr 0\n\t" "blr")
paddr_t MmuTranslate(paddr_t possibly_virtual)
FORCEINLINE PVOID FrLdrTempAlloc(_In_ SIZE_T Size, _In_ ULONG Tag)
struct _IMAGE_DOS_HEADER * PIMAGE_DOS_HEADER
_At_(*)(_In_ PWSK_CLIENT Client, _In_opt_ PUNICODE_STRING NodeName, _In_opt_ PUNICODE_STRING ServiceName, _In_opt_ ULONG NameSpace, _In_opt_ GUID *Provider, _In_opt_ PADDRINFOEXW Hints, _Outptr_ PADDRINFOEXW *Result, _In_opt_ PEPROCESS OwningProcess, _In_opt_ PETHREAD OwningThread, _Inout_ PIRP Irp Result)(Mem)) NTSTATUS(WSKAPI *PFN_WSK_GET_ADDRESS_INFO
#define ELF32_R_TYPE(info)
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint GLint GLint j
PLOADER_MODULE CurrentModule
PVOID MmAllocateMemory(SIZE_T MemorySize)
PPAGE_LOOKUP_TABLE_ITEM MmGetMemoryMap(PFN_NUMBER *NoEntries)
static void * MmuAllocVsid(int vsid, int mask)
BOOLEAN NTAPI FrLdrCloseModule(ULONG_PTR ModuleBase, ULONG ModuleSize)
BOOLEAN NTAPI FrLdrMapModule(FILE *KernelImage, PCHAR ImageName, PCHAR MemLoadAddr, ULONG KernelAddr)
ULONG_PTR KernelEntryPoint
#define _strnicmp(_String1, _String2, _MaxCount)
ARC_STATUS ArcRead(ULONG FileId, VOID *Buffer, ULONG N, ULONG *Count)
static const char * ImageName
ARC_STATUS ArcSeek(ULONG FileId, LARGE_INTEGER *Position, SEEKMODE SeekMode)
#define memcpy(s1, s2, n)
VOID NTAPI FrLdrStartup(ULONG Magic)
ULONG_PTR NTAPI FrLdrCreateModule(PCSTR ModuleName)
static int MmuMapPage(ppc_map_info_t *info, int count)
VOID MmFreeMemory(PVOID MemoryPointer)
#define ROUND_DOWN(n, align)
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
void(* KernelEntryFn)(void *)
int MmuPageMiss(int trapCode, ppc_trap_frame_t *trap)
VOID PpcInitializeMmu(int max)
VOID FASTCALL FrLdrGetKernelBase(VOID)
VOID FASTCALL FrLdrGetPaeMode(VOID)
char * strchr(const char *String, int ch)
BOOLEAN NTAPI FrLdrMapKernel(FILE *KernelImage)
ARC_STATUS ArcGetFileInformation(ULONG FileId, FILEINFORMATION *Information)
static int MmuTurnOn(void *fun, void *arg)
char * strcpy(char *DstString, const char *SrcString)
static void MmuSetVsid(int start, int end, int vsid)
VOID FASTCALL FrLdrSetupPageDirectory(VOID)
#define ELF32_R_SYM(info)
unsigned int(__cdecl typeof(jpeg_read_scanlines))(struct jpeg_decompress_struct *
PIMAGE_NT_HEADERS32 PIMAGE_NT_HEADERS
FORCEINLINE VOID FrLdrTempFree(PVOID Allocation, ULONG Tag)