mirror of
https://github.com/ApfelTeeSaft/reactos.git
synced 2026-09-03 04:13:31 +00:00
[FREELDR]
Fix ARM build svn path=/trunk/; revision=67164
This commit is contained in:
@@ -158,6 +158,9 @@ else()
|
||||
elseif(ARCH STREQUAL "arm")
|
||||
# _M_ARM is already defined by toolchain
|
||||
add_definitions(-D_ARM_ -D__arm__)
|
||||
if(SARCH STREQUAL "omap-zoom2")
|
||||
add_definitions(-D_ZOOM2_)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
# Other
|
||||
@@ -166,7 +169,7 @@ else()
|
||||
elseif(ARCH STREQUAL "amd64")
|
||||
add_definitions(-DUSE_COMPILER_EXCEPTIONS -DNO_UNDERSCORE_PREFIX)
|
||||
elseif(ARCH STREQUAL "arm")
|
||||
add_definitions(-DUSE_COMPILER_EXCEPTIONS)
|
||||
add_definitions(-DUSE_COMPILER_EXCEPTIONS -DNO_UNDERSCORE_PREFIX)
|
||||
endif()
|
||||
|
||||
# Activate support for assembly source files
|
||||
|
||||
@@ -27,10 +27,6 @@ include_directories(${REACTOS_SOURCE_DIR}/include/reactos/elf)
|
||||
|
||||
add_definitions(-D_NTHAL_ -D_BLDR_ -D_NTSYSTEM_)
|
||||
|
||||
if((ARCH STREQUAL "arm") AND (SARCH STREQUAL "omap-zoom2"))
|
||||
add_definitions(-D_ZOOM2_)
|
||||
endif()
|
||||
|
||||
list(APPEND FREELDR_COMMON_SOURCE
|
||||
include/freeldr.h
|
||||
arcname.c
|
||||
@@ -168,13 +164,10 @@ if(ARCH STREQUAL "i386" AND NOT MSVC)
|
||||
target_link_libraries(freeldr_common mini_hal)
|
||||
endif()
|
||||
|
||||
if(ARCH STREQUAL "i386" OR ARCH STREQUAL "amd64")
|
||||
list(APPEND FREELDR_BASE_SOURCE windows/setupldr.c)
|
||||
endif()
|
||||
|
||||
list(APPEND FREELDR_BASE_SOURCE
|
||||
bootmgr.c # This file is compiled with custom definitions
|
||||
freeldr.c
|
||||
windows/setupldr.c
|
||||
lib/inffile/inffile.c
|
||||
lib/rtl/libsupp.c)
|
||||
|
||||
@@ -191,8 +184,13 @@ if(NOT MSVC AND SEPARATE_DBG)
|
||||
endif()
|
||||
|
||||
if(MSVC)
|
||||
add_target_link_flags(freeldr_pe "/ignore:4078 /ignore:4254 /DRIVER /FIXED /ALIGN:0x400 /SECTION:.text,ERW /SECTION:.data,RW /MERGE:.text16=.text /MERGE:.data=.text /MERGE:.rdata=.text /MERGE:.bss=.text ")
|
||||
add_target_link_flags(freeldr_pe_dbg "/ignore:4078 /ignore:4254 /DRIVER /FIXED /ALIGN:0x400 /SECTION:.text,ERW /SECTION:.data,RW /MERGE:.text16=.text /MERGE:.data=.text /MERGE:.rdata=.text /MERGE:.bss=.text")
|
||||
if(ARCH STREQUAL "arm")
|
||||
add_target_link_flags(freeldr_pe "/ignore:4078 /ignore:4254 /DRIVER")
|
||||
add_target_link_flags(freeldr_pe_dbg "/ignore:4078 /ignore:4254 /DRIVER")
|
||||
else()
|
||||
add_target_link_flags(freeldr_pe "/ignore:4078 /ignore:4254 /DRIVER /FIXED /ALIGN:0x400 /SECTION:.text,ERW /SECTION:.data,RW /MERGE:.text16=.text /MERGE:.data=.text /MERGE:.rdata=.text /MERGE:.bss=.text ")
|
||||
add_target_link_flags(freeldr_pe_dbg "/ignore:4078 /ignore:4254 /DRIVER /FIXED /ALIGN:0x400 /SECTION:.text,ERW /SECTION:.data,RW /MERGE:.text16=.text /MERGE:.data=.text /MERGE:.rdata=.text /MERGE:.bss=.text")
|
||||
endif()
|
||||
else()
|
||||
add_target_link_flags(freeldr_pe "-Wl,--strip-all,--exclude-all-symbols,--file-alignment,0x1000,-T,${CMAKE_CURRENT_SOURCE_DIR}/freeldr_i386.lds")
|
||||
add_target_link_flags(freeldr_pe_dbg "-Wl,--exclude-all-symbols,--file-alignment,0x1000,-T,${CMAKE_CURRENT_SOURCE_DIR}/freeldr_i386.lds")
|
||||
@@ -229,12 +227,17 @@ add_dependencies(freeldr_pe_dbg asm)
|
||||
# Retrieve the full path to the generated file of the 'freeldr_pe' target
|
||||
get_target_property(_freeldr_pe_output_file freeldr_pe LOCATION)
|
||||
|
||||
concatenate_files(
|
||||
${CMAKE_CURRENT_BINARY_DIR}/freeldr.sys
|
||||
${CMAKE_CURRENT_BINARY_DIR}/frldr16.bin
|
||||
${_freeldr_pe_output_file})
|
||||
if(NOT ARCH STREQUAL "arm")
|
||||
|
||||
add_custom_target(freeldr ALL DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/freeldr.sys)
|
||||
concatenate_files(
|
||||
${CMAKE_CURRENT_BINARY_DIR}/freeldr.sys
|
||||
${CMAKE_CURRENT_BINARY_DIR}/frldr16.bin
|
||||
${_freeldr_pe_output_file})
|
||||
|
||||
add_custom_target(freeldr ALL DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/freeldr.sys)
|
||||
else()
|
||||
add_custom_target(freeldr ALL DEPENDS ${_freeldr_pe_output_file})
|
||||
endif()
|
||||
|
||||
# rename freeldr on livecd to setupldr.sys because isoboot.bin looks for setupldr.sys
|
||||
add_cd_file(TARGET freeldr FILE ${CMAKE_CURRENT_BINARY_DIR}/freeldr.sys DESTINATION loader NO_CAB FOR bootcd regtest)
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
* PROGRAMMERS: ReactOS Portable Systems Group
|
||||
*/
|
||||
|
||||
#include "ksarm.h"
|
||||
#include <ksarm.h>
|
||||
|
||||
//.title "ARM FreeLDR Entry Point"
|
||||
//.include "ntoskrnl/include/internal/arm/kxarm.h"
|
||||
@@ -16,9 +16,12 @@
|
||||
NESTED_ENTRY _start
|
||||
PROLOG_END _start
|
||||
|
||||
b ArmInit
|
||||
//b ArmInit
|
||||
|
||||
ENTRY_END _start
|
||||
|
||||
L_ArmInit:
|
||||
.long ArmInit
|
||||
//L_ArmInit:
|
||||
// .long ArmInit
|
||||
|
||||
END
|
||||
/* EOF */
|
||||
|
||||
@@ -107,13 +107,6 @@ ArmDiskGetBootPath(OUT PCHAR BootPath,
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
BOOLEAN
|
||||
ArmInitializeBootDevices(VOID)
|
||||
{
|
||||
/* Emulate old behavior */
|
||||
return (ArmHwDetect() != NULL);
|
||||
}
|
||||
|
||||
PCONFIGURATION_COMPONENT_DATA
|
||||
ArmHwDetect(VOID)
|
||||
{
|
||||
@@ -159,11 +152,19 @@ ArmHwDetect(VOID)
|
||||
return RootNode;
|
||||
}
|
||||
|
||||
BOOLEAN
|
||||
ArmInitializeBootDevices(VOID)
|
||||
{
|
||||
/* Emulate old behavior */
|
||||
return (ArmHwDetect() != NULL);
|
||||
}
|
||||
|
||||
FREELDR_MEMORY_DESCRIPTOR ArmMemoryMap[32];
|
||||
|
||||
PFREELDR_MEMORY_DESCRIPTOR
|
||||
ArmMemGetMemoryMap(OUT ULONG *MemoryMapSize)
|
||||
{
|
||||
ULONG i;
|
||||
ASSERT(ArmBoardBlock->MemoryMapEntryCount <= 32);
|
||||
|
||||
/* Return whatever the board returned to us (CS0 Base + Size and FLASH0) */
|
||||
@@ -177,7 +178,10 @@ ArmMemGetMemoryMap(OUT ULONG *MemoryMapSize)
|
||||
ArmMemoryMap[i].MemoryType = MemoryFirmwarePermanent;
|
||||
}
|
||||
|
||||
return ArmBoardBlock->MemoryMapEntryCount;
|
||||
*MemoryMapSize = ArmBoardBlock->MemoryMapEntryCount;
|
||||
|
||||
// FIXME
|
||||
return NULL;
|
||||
}
|
||||
|
||||
VOID
|
||||
|
||||
@@ -81,7 +81,8 @@ PKPDR_PAGE PdrPage;
|
||||
|
||||
BOOLEAN
|
||||
MempSetupPaging(IN PFN_NUMBER StartPage,
|
||||
IN PFN_COUNT NumberOfPages)
|
||||
IN PFN_NUMBER NumberOfPages,
|
||||
IN BOOLEAN KernelMapping)
|
||||
{
|
||||
return TRUE;
|
||||
}
|
||||
@@ -245,9 +246,7 @@ MempAllocatePageTables(VOID)
|
||||
}
|
||||
|
||||
VOID
|
||||
WinLdrSetProcessorContext(PVOID GdtIdt,
|
||||
IN ULONG Pcr,
|
||||
IN ULONG Tss)
|
||||
WinLdrSetProcessorContext(VOID)
|
||||
{
|
||||
ARM_CONTROL_REGISTER ControlRegister;
|
||||
ARM_TTB_REGISTER TtbRegister;
|
||||
@@ -272,3 +271,31 @@ WinLdrSetProcessorContext(PVOID GdtIdt,
|
||||
ControlRegister.ExtendedPageTables = TRUE;
|
||||
KeArmControlRegisterSet(ControlRegister);
|
||||
}
|
||||
|
||||
VOID
|
||||
WinLdrSetupMachineDependent(
|
||||
PLOADER_PARAMETER_BLOCK LoaderBlock)
|
||||
{
|
||||
}
|
||||
|
||||
VOID DiskStopFloppyMotor(VOID)
|
||||
{
|
||||
}
|
||||
|
||||
VOID
|
||||
RealEntryPoint(VOID)
|
||||
{
|
||||
BootMain("");
|
||||
}
|
||||
|
||||
VOID
|
||||
NTAPI
|
||||
FrLdrBugCheckWithMessage(
|
||||
ULONG BugCode,
|
||||
PCHAR File,
|
||||
ULONG Line,
|
||||
PSTR Format,
|
||||
...)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
@@ -9,12 +9,16 @@
|
||||
#pragma once
|
||||
|
||||
#ifndef __REGISTRY_H
|
||||
#include "../../reactos/registry.h"
|
||||
//#include "../../reactos/registry.h"
|
||||
#endif
|
||||
|
||||
#include "../../../../../armllb/inc/osloader.h"
|
||||
#include "../../../../../armllb/inc/machtype.h"
|
||||
|
||||
#define FREELDR_BASE 0x0001F000
|
||||
#define FREELDR_PE_BASE 0x0001F000
|
||||
#define MAX_FREELDR_PE_SIZE 0xFFFFFF
|
||||
|
||||
extern PARM_BOARD_CONFIGURATION_BLOCK ArmBoardBlock;
|
||||
extern ULONG FirstLevelDcacheSize;
|
||||
extern ULONG FirstLevelDcacheFillSize;
|
||||
@@ -26,4 +30,11 @@ extern ULONG SecondLevelIcacheSize;
|
||||
extern ULONG SecondLevelIcacheFillSize;
|
||||
|
||||
extern ULONG gDiskReadBuffer, gFileSysBuffer;
|
||||
#define DiskReadBuffer gDiskReadBuffer
|
||||
#define DiskReadBuffer ((PVOID)gDiskReadBuffer)
|
||||
|
||||
#define DriveMapGetBiosDriveNumber(DeviceName) 0
|
||||
|
||||
FORCEINLINE VOID Reboot(VOID)
|
||||
{
|
||||
DbgBreakPoint();
|
||||
}
|
||||
|
||||
@@ -322,7 +322,9 @@ FrLdrHeapAllocateEx(
|
||||
PHEAP Heap = HeapHandle;
|
||||
PHEAP_BLOCK Block, NextBlock;
|
||||
USHORT BlockSize, Remaining;
|
||||
#if DBG && !defined(_M_ARM)
|
||||
ULONGLONG Time = __rdtsc();
|
||||
#endif
|
||||
|
||||
#ifdef FREELDR_HEAP_VERIFIER
|
||||
/* Verify the heap */
|
||||
@@ -402,8 +404,9 @@ FrLdrHeapAllocateEx(
|
||||
Heap->MaxAllocBytes = max(Heap->MaxAllocBytes, Heap->CurrentAllocBytes);
|
||||
Heap->LargestAllocation = max(Heap->LargestAllocation,
|
||||
Block->Size * sizeof(HEAP_BLOCK));
|
||||
#if DBG && !defined(_M_ARM)
|
||||
Heap->AllocationTime += (__rdtsc() - Time);
|
||||
|
||||
#endif
|
||||
TRACE("HeapAllocate(%p, %ld, %.4s) -> return %p\n",
|
||||
HeapHandle, ByteSize, &Tag, Block->Data);
|
||||
|
||||
@@ -436,7 +439,9 @@ FrLdrHeapFreeEx(
|
||||
{
|
||||
PHEAP Heap = HeapHandle;
|
||||
PHEAP_BLOCK Block, PrevBlock, NextBlock;
|
||||
#if DBG && !defined(_M_ARM)
|
||||
ULONGLONG Time = __rdtsc();
|
||||
#endif
|
||||
TRACE("HeapFree(%p, %p)\n", HeapHandle, Pointer);
|
||||
ASSERT(Tag != 'dnE#');
|
||||
|
||||
@@ -514,8 +519,9 @@ FrLdrHeapFreeEx(
|
||||
|
||||
/* Update the next block's back link */
|
||||
NextBlock->PreviousSize = Block->Size;
|
||||
|
||||
#if DBG && !defined(_M_ARM)
|
||||
Heap->FreeTime += (__rdtsc() - Time);
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
@@ -602,3 +608,4 @@ RtlFreeHeap(
|
||||
FrLdrHeapFreeEx(FrLdrDefaultHeap, HeapBase, ' ltR');
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
||||
@@ -476,4 +476,9 @@ BOOLEAN UiEditBox(PCSTR MessageText, PCHAR EditTextBuffer, ULONG Length)
|
||||
return UiVtbl.EditBox(MessageText, EditTextBuffer, Length);
|
||||
}
|
||||
|
||||
#else
|
||||
BOOLEAN UiEditBox(PCSTR MessageText, PCHAR EditTextBuffer, ULONG Length)
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
#endif
|
||||
|
||||
@@ -7,7 +7,10 @@ KeArmHaltProcessor(VOID)
|
||||
//
|
||||
// Enter Wait-For-Interrupt Mode
|
||||
//
|
||||
#ifdef _MSC_VER
|
||||
#else
|
||||
__asm__ __volatile__ ("mcr p15, 0, %0, c7, c0, 4" : : "r"(0) : "cc");
|
||||
#endif
|
||||
}
|
||||
|
||||
FORCEINLINE
|
||||
@@ -15,7 +18,11 @@ ARM_CONTROL_REGISTER
|
||||
KeArmControlRegisterGet(VOID)
|
||||
{
|
||||
ARM_CONTROL_REGISTER Value;
|
||||
#ifdef _MSC_VER
|
||||
Value.AsUlong = 0;
|
||||
#else
|
||||
__asm__ __volatile__ ("mrc p15, 0, %0, c1, c0, 0" : "=r"(Value.AsUlong) : : "cc");
|
||||
#endif
|
||||
return Value;
|
||||
}
|
||||
|
||||
@@ -24,7 +31,11 @@ ARM_ID_CODE_REGISTER
|
||||
KeArmIdCodeRegisterGet(VOID)
|
||||
{
|
||||
ARM_ID_CODE_REGISTER Value;
|
||||
#ifdef _MSC_VER
|
||||
Value.AsUlong = 0;
|
||||
#else
|
||||
__asm__ __volatile__ ("mrc p15, 0, %0, c0, c0, 0" : "=r"(Value.AsUlong) : : "cc");
|
||||
#endif
|
||||
return Value;
|
||||
}
|
||||
|
||||
@@ -33,7 +44,11 @@ ULONG
|
||||
KeArmFaultStatusRegisterGet(VOID)
|
||||
{
|
||||
ULONG Value;
|
||||
#ifdef _MSC_VER
|
||||
Value = 0;
|
||||
#else
|
||||
__asm__ __volatile__ ("mrc p15, 0, %0, c5, c0, 0" : "=r"(Value) : : "cc");
|
||||
#endif
|
||||
return Value;
|
||||
}
|
||||
|
||||
@@ -42,7 +57,11 @@ ULONG
|
||||
KeArmInstructionFaultStatusRegisterGet(VOID)
|
||||
{
|
||||
ULONG Value;
|
||||
#ifdef _MSC_VER
|
||||
Value = 0;
|
||||
#else
|
||||
__asm__ __volatile__ ("mrc p15, 0, %0, c5, c0, 1" : "=r"(Value) : : "cc");
|
||||
#endif
|
||||
return Value;
|
||||
}
|
||||
|
||||
@@ -51,7 +70,11 @@ ULONG
|
||||
KeArmFaultAddressRegisterGet(VOID)
|
||||
{
|
||||
ULONG Value;
|
||||
#ifdef _MSC_VER
|
||||
Value = 0;
|
||||
#else
|
||||
__asm__ __volatile__ ("mrc p15, 0, %0, c6, c0, 0" : "=r"(Value) : : "cc");
|
||||
#endif
|
||||
return Value;
|
||||
}
|
||||
|
||||
@@ -60,7 +83,11 @@ ARM_LOCKDOWN_REGISTER
|
||||
KeArmLockdownRegisterGet(VOID)
|
||||
{
|
||||
ARM_LOCKDOWN_REGISTER Value;
|
||||
#ifdef _MSC_VER
|
||||
Value.AsUlong = 0;
|
||||
#else
|
||||
__asm__ __volatile__ ("mrc p15, 0, %0, c10, c0, 0" : "=r"(Value.AsUlong) : : "cc");
|
||||
#endif
|
||||
return Value;
|
||||
}
|
||||
|
||||
@@ -69,7 +96,11 @@ ARM_TTB_REGISTER
|
||||
KeArmTranslationTableRegisterGet(VOID)
|
||||
{
|
||||
ARM_TTB_REGISTER Value;
|
||||
#ifdef _MSC_VER
|
||||
Value.AsUlong = 0;
|
||||
#else
|
||||
__asm__ __volatile__ ("mrc p15, 0, %0, c2, c0, 0" : "=r"(Value.AsUlong) : : "cc");
|
||||
#endif
|
||||
return Value;
|
||||
}
|
||||
|
||||
@@ -78,7 +109,11 @@ ARM_CACHE_REGISTER
|
||||
KeArmCacheRegisterGet(VOID)
|
||||
{
|
||||
ARM_CACHE_REGISTER Value;
|
||||
#ifdef _MSC_VER
|
||||
Value.AsUlong = 0;
|
||||
#else
|
||||
__asm__ __volatile__ ("mrc p15, 0, %0, c0, c0, 1" : "=r"(Value.AsUlong) : : "cc");
|
||||
#endif
|
||||
return Value;
|
||||
}
|
||||
|
||||
@@ -87,69 +122,100 @@ ARM_STATUS_REGISTER
|
||||
KeArmStatusRegisterGet(VOID)
|
||||
{
|
||||
ARM_STATUS_REGISTER Value;
|
||||
#ifdef _MSC_VER
|
||||
Value.AsUlong = _ReadStatusReg(0);
|
||||
#else
|
||||
__asm__ __volatile__ ("mrs %0, cpsr" : "=r"(Value.AsUlong) : : "cc");
|
||||
return Value;
|
||||
#endif
|
||||
return Value;
|
||||
}
|
||||
|
||||
FORCEINLINE
|
||||
VOID
|
||||
KeArmControlRegisterSet(IN ARM_CONTROL_REGISTER ControlRegister)
|
||||
{
|
||||
__asm__ __volatile__ ("mcr p15, 0, %0, c1, c0, 0" : : "r"(ControlRegister.AsUlong) : "cc");
|
||||
#ifdef _MSC_VER
|
||||
#else
|
||||
__asm__ __volatile__ ("mcr p15, 0, %0, c1, c0, 0" : : "r"(ControlRegister.AsUlong) : "cc");
|
||||
#endif
|
||||
}
|
||||
|
||||
FORCEINLINE
|
||||
VOID
|
||||
KeArmTranslationTableRegisterSet(IN ARM_TTB_REGISTER Ttb)
|
||||
{
|
||||
#ifdef _MSC_VER
|
||||
#else
|
||||
__asm__ __volatile__ ("mcr p15, 0, %0, c2, c0, 0" : : "r"(Ttb.AsUlong) : "cc");
|
||||
#endif
|
||||
}
|
||||
|
||||
FORCEINLINE
|
||||
VOID
|
||||
KeArmDomainRegisterSet(IN ARM_DOMAIN_REGISTER DomainRegister)
|
||||
{
|
||||
#ifdef _MSC_VER
|
||||
#else
|
||||
__asm__ __volatile__ ("mcr p15, 0, %0, c3, c0, 0" : : "r"(DomainRegister.AsUlong) : "cc");
|
||||
#endif
|
||||
}
|
||||
|
||||
FORCEINLINE
|
||||
VOID
|
||||
KeArmLockdownRegisterSet(IN ARM_LOCKDOWN_REGISTER LockdownRegister)
|
||||
{
|
||||
#ifdef _MSC_VER
|
||||
#else
|
||||
__asm__ __volatile__ ("mcr p15, 0, %0, c10, c0, 0" : : "r"(LockdownRegister.AsUlong) : "cc");
|
||||
#endif
|
||||
}
|
||||
|
||||
FORCEINLINE
|
||||
VOID
|
||||
KeArmFlushTlb(VOID)
|
||||
{
|
||||
#ifdef _MSC_VER
|
||||
#else
|
||||
__asm__ __volatile__ ("mcr p15, 0, %0, c8, c7, 0" : : "r"(0) : "cc");
|
||||
#endif
|
||||
}
|
||||
|
||||
FORCEINLINE
|
||||
VOID
|
||||
KeArmInvalidateTlbEntry(IN PVOID Address)
|
||||
{
|
||||
#ifdef _MSC_VER
|
||||
#else
|
||||
__asm__ __volatile__ ("mcr p15, 0, %0, c8, c7, 1" : : "r"(Address) : "cc");
|
||||
#endif
|
||||
}
|
||||
|
||||
FORCEINLINE
|
||||
VOID
|
||||
KeArmInvalidateAllCaches(VOID)
|
||||
{
|
||||
#ifdef _MSC_VER
|
||||
#else
|
||||
__asm__ __volatile__ ("mcr p15, 0, %0, c7, c7, 0" : : "r"(0) : "cc");
|
||||
#endif
|
||||
}
|
||||
|
||||
FORCEINLINE
|
||||
VOID
|
||||
KeArmFlushIcache(VOID)
|
||||
{
|
||||
#ifdef _MSC_VER
|
||||
#else
|
||||
__asm__ __volatile__ ("mcr p15, 0, %0, c7, c5, 0" : : "r"(0) : "cc");
|
||||
#endif
|
||||
}
|
||||
|
||||
FORCEINLINE
|
||||
VOID
|
||||
KeArmWaitForInterrupt(VOID)
|
||||
{
|
||||
#ifdef _MSC_VER
|
||||
#else
|
||||
__asm__ __volatile__ ("mcr p15, 0, %0, c7, c0, 4" : : "r"(0) : "cc");
|
||||
#endif
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user