[ros-diffs] [ros-arm-bringup] 32131: Add basic arm target support to the build system. Reactos-arm.rbuild uses the same settings as the x86 version, but defines _ARM_ and __arm__ instead. _M_ARM is already defined by the compiler. Add ARM system call stub support to ncitool. We are currently using a SWI 0x2E to achieve this. Add ARM support to winnt.h. Add a preliminary intrin_arm.h Add ketypes.h and mmtypes.h for ARM in the NDK. For now these are mostly stubs to allow compiling to work. Add ARM support to winddk.h. Fix some broken x86-only assumptions in the NDK. Add config-arm-template.rbuild. By defauilt we build for armv5te (armv4 and v5 are supported, not v6). Set ROS_ARCH=arm to switch to ARM. Set ROS_PREFIX to an appropriate MinGW-32 ARM PE crosscompiler.
ros-arm-bringup at svn.reactos.org
ros-arm-bringup at svn.reactos.org
Tue Feb 5 03:58:29 CET 2008
- Previous message: [ros-diffs] [ros-arm-bringup] 32130: The Windows headers include a file called ioaccess.h in the ddk folder, which exposes various READ/WRITE_PORT/REGISTER_ routines as inlined macros for various architectures (PPC, MIPS, AMD64, IA64, X86), making use of the MSVC compiler-intrinsics (inp, outp, etc). Since ReactOS already has those intrinscs implemented, we've also created an ioaccess.h w32api header file which makes use of them. We can now remove the portio.h and portio.c files in FreeLDR, since there's no more need to duplicate this code. Additionally, this can be also done with the PPC port of FreeLDR or any other architecture, since it doesn't require per-architecture support in FreeLDR anymore -- only the underlying intrinsics in intrin.h must be implemented (note that for PPC, MIPS and ARM, the notion of a port doesn't even exist -- those functions map to register-reading functions, where register basically means memory).
- Next message: [ros-diffs] [ros-arm-bringup] 32132: Build FreeLDR for ARM. We merely provide a _start entrypoint stub and two stub architecture files with no functions implemented. We also supply the proper ARM configuration settings in the .rbuild files, and add the necessary headers. FreeLDR can now be compiled (along with rossym, libcntptr, rtl and cmlib) but it will not link until the actual ARM code is implemented.
- Messages sorted by:
[ date ]
[ thread ]
[ subject ]
[ author ]
Author: ros-arm-bringup
Date: Tue Feb 5 05:58:28 2008
New Revision: 32131
URL: http://svn.reactos.org/svn/reactos?rev=32131&view=rev
Log:
Add basic arm target support to the build system.
Reactos-arm.rbuild uses the same settings as the x86 version, but defines _ARM_ and __arm__ instead. _M_ARM is already defined by the compiler.
Add ARM system call stub support to ncitool. We are currently using a SWI 0x2E to achieve this.
Add ARM support to winnt.h.
Add a preliminary intrin_arm.h
Add ketypes.h and mmtypes.h for ARM in the NDK. For now these are mostly stubs to allow compiling to work.
Add ARM support to winddk.h.
Fix some broken x86-only assumptions in the NDK.
Add config-arm-template.rbuild. By defauilt we build for armv5te (armv4 and v5 are supported, not v6).
Set ROS_ARCH=arm to switch to ARM. Set ROS_PREFIX to an appropriate MinGW-32 ARM PE crosscompiler.
Added:
trunk/reactos/ReactOS-arm.rbuild (with props)
trunk/reactos/config-arm.template.rbuild (with props)
trunk/reactos/include/ndk/arm/
trunk/reactos/include/ndk/arm/ketypes.h (with props)
trunk/reactos/include/ndk/arm/mmtypes.h (with props)
trunk/reactos/include/psdk/intrin_arm.h (with props)
Modified:
trunk/reactos/config.template.rbuild
trunk/reactos/include/ddk/winddk.h
trunk/reactos/include/ndk/arch/ketypes.h
trunk/reactos/include/ndk/arch/mmtypes.h
trunk/reactos/include/ndk/i386/ketypes.h
trunk/reactos/include/ndk/ketypes.h
trunk/reactos/include/ndk/pstypes.h
trunk/reactos/include/psdk/intrin.h
trunk/reactos/include/psdk/winnt.h
trunk/reactos/tools/nci/ncitool.c
Added: trunk/reactos/ReactOS-arm.rbuild
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/ReactOS-arm.rbuild?rev=32131&view=auto
==============================================================================
--- trunk/reactos/ReactOS-arm.rbuild (added)
+++ trunk/reactos/ReactOS-arm.rbuild Tue Feb 5 05:58:28 2008
@@ -1,0 +1,36 @@
+<?xml version="1.0"?>
+<!DOCTYPE project SYSTEM "tools/rbuild/project.dtd">
+<project name="ReactOS" makefile="makefile.auto" xmlns:xi="http://www.w3.org/2001/XInclude">
+ <xi:include href="config-arm.rbuild">
+ <xi:fallback>
+ <xi:include href="config-arm.template.rbuild" />
+ </xi:fallback>
+ </xi:include>
+
+ <xi:include href="ReactOS-generic.rbuild" />
+
+ <define name="_ARM_" />
+ <define name="__arm__" />
+
+ <property name="NTOSKRNL_SHARED" value="-Wl,--file-alignment,0x1000 -Wl,--section-alignment,0x1000 -nostartfiles -shared"/>
+
+ <if property="OPTIMIZE" value="1">
+ <compilerflag>-Os</compilerflag>
+ <compilerflag>-ftracer</compilerflag>
+ </if>
+ <if property="OPTIMIZE" value="2">
+ <compilerflag>-Os</compilerflag>
+ </if>
+ <if property="OPTIMIZE" value="3">
+ <compilerflag>-O1</compilerflag>
+ </if>
+ <if property="OPTIMIZE" value="4">
+ <compilerflag>-O2</compilerflag>
+ </if>
+ <if property="OPTIMIZE" value="5">
+ <compilerflag>-O3</compilerflag>
+ </if>
+
+ <compilerflag>-Wno-attributes</compilerflag>
+ <compilerflag>-fno-strict-aliasing</compilerflag>
+</project>
Propchange: trunk/reactos/ReactOS-arm.rbuild
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: trunk/reactos/ReactOS-arm.rbuild
------------------------------------------------------------------------------
svn:mime-type = text/plain
Added: trunk/reactos/config-arm.template.rbuild
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/config-arm.template.rbuild?rev=32131&view=auto
==============================================================================
--- trunk/reactos/config-arm.template.rbuild (added)
+++ trunk/reactos/config-arm.template.rbuild Tue Feb 5 05:58:28 2008
@@ -1,0 +1,81 @@
+<?xml version="1.0"?>
+<!DOCTYPE group SYSTEM "tools/rbuild/project.dtd">
+<group>
+
+<!--
+ This file is a template used as a starting point for compile-time
+ configuration of ReactOS. Make a copy of this file and name it config.rbuild.
+ Then change the options in config.rbuild. If you don't have a config.rbuild file,
+ then the defaults in this file, config.template.rbuild, will be used instead.
+
+ Boolean options can obtain the values 0 (disabled) or 1 (enabled). String
+ options can obtain any value specified in the comment before it.
+-->
+
+
+<!--
+ Sub-architecture to build for. Specify one of:
+
+-->
+<property name="SARCH" value="" />
+
+
+<!--
+ Which CPU ReactOS should be optimized for. Specify one of:
+ armv4, armv4t, armv5, armv5te
+
+ See GCC manual for more CPU names and which CPUs GCC can optimize for.
+-->
+<property name="OARCH" value="armv5te" />
+
+
+<!--
+ What level of optimisation to use.
+ 0 = off (will not work)
+ 1 = Default option, optimize for size (-Os) with some additional options
+ 2 = -Os
+ 3 = -O1
+ 4 = -O2
+ 5 = -O3
+-->
+<property name="OPTIMIZE" value="1" />
+
+
+<!--
+ Whether to compile in the integrated kernel debugger.
+-->
+<property name="KDBG" value="0" />
+
+
+<!--
+ Whether to compile for debugging. No compiler optimizations will be
+ performed.
+-->
+<property name="DBG" value="1" />
+
+
+<!--
+ Whether to compile for debugging with GDB. If you don't use GDB, don't
+ enable this.
+-->
+<property name="GDB" value="0" />
+
+
+<!--
+ Whether to compile apps/libs with features covered software patents or not.
+ If you live in a country where software patents are valid/apply, don't
+ enable this (except they/you purchased a license from the patent owner).
+ This settings is disabled (0) by default.
+-->
+<property name="NSWPAT" value="0" />
+
+<!--
+ Whether to compile with the KD protocol. This will disable support for KDBG
+ as well as rossym and symbol lookups, and allow WinDBG to connect to ReactOS.
+ This is currently not fully working, and requires kdcom from Windows 2003 or
+ TinyKRNL. Booting into debug mode with this flag enabled will result in a
+ failure to enter GUI mode. Do not enable unless you know what you're doing.
+-->
+<property name="_WINKD_" value="0" />
+
+</group>
Propchange: trunk/reactos/config-arm.template.rbuild
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: trunk/reactos/config-arm.template.rbuild
------------------------------------------------------------------------------
svn:mime-type = text/plain
Modified: trunk/reactos/config.template.rbuild
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/config.template.rbuild?rev=32131&r1=32130&r2=32131&view=diff
==============================================================================
(empty)
Modified: trunk/reactos/include/ddk/winddk.h
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/include/ddk/winddk.h?rev=32131&r1=32130&r2=32131&view=diff
==============================================================================
--- trunk/reactos/include/ddk/winddk.h (original)
+++ trunk/reactos/include/ddk/winddk.h Tue Feb 5 05:58:28 2008
@@ -228,7 +228,10 @@
#define ZwCurrentProcess() NtCurrentProcess()
#define NtCurrentThread() ( (HANDLE)(LONG_PTR) -2 )
#define ZwCurrentThread() NtCurrentThread()
+
+#if (_M_IX86)
#define KIP0PCRADDRESS 0xffdff000
+#endif
#define KERNEL_STACK_SIZE 12288
#define KERNEL_LARGE_STACK_SIZE 61440
@@ -5535,6 +5538,8 @@
#elif defined(_MIPS_)
+#error MIPS Headers are totally incorrect
+
typedef ULONG PFN_NUMBER, *PPFN_NUMBER;
#define PASSIVE_LEVEL 0
@@ -5562,10 +5567,17 @@
return 0;
}
+#elif defined(_M_ARM)
+
+//
+// NT-ARM is not documented, need NDK
+//
+#include <arm/ketypes.h>
+
#else
#error Unknown architecture
#endif
-
+
#define PAGE_SIZE 0x1000
#define PAGE_SHIFT 12L
Modified: trunk/reactos/include/ndk/arch/ketypes.h
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/include/ndk/arch/ketypes.h?rev=32131&r1=32130&r2=32131&view=diff
==============================================================================
--- trunk/reactos/include/ndk/arch/ketypes.h (original)
+++ trunk/reactos/include/ndk/arch/ketypes.h Tue Feb 5 05:58:28 2008
@@ -26,6 +26,8 @@
#include <i386/ketypes.h>
#elif defined(_M_PPC)
#include <powerpc/ketypes.h>
+#elif defined(_M_ARM)
+#include <arm/ketypes.h>
#else
#error "Unknown processor"
#endif
Modified: trunk/reactos/include/ndk/arch/mmtypes.h
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/include/ndk/arch/mmtypes.h?rev=32131&r1=32130&r2=32131&view=diff
==============================================================================
--- trunk/reactos/include/ndk/arch/mmtypes.h (original)
+++ trunk/reactos/include/ndk/arch/mmtypes.h Tue Feb 5 05:58:28 2008
@@ -26,6 +26,8 @@
#include <i386/mmtypes.h>
#elif defined(_M_PPC)
#include <powerpc/mmtypes.h>
+#elif defined(_M_ARM)
+#include <arm/mmtypes.h>
#else
#error "Unknown processor"
#endif
Added: trunk/reactos/include/ndk/arm/ketypes.h
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/include/ndk/arm/ketypes.h?rev=32131&view=auto
==============================================================================
--- trunk/reactos/include/ndk/arm/ketypes.h (added)
+++ trunk/reactos/include/ndk/arm/ketypes.h Tue Feb 5 05:58:28 2008
@@ -1,0 +1,211 @@
+/*++ NDK Version: 0098
+
+Copyright (c) Alex Ionescu. All rights reserved.
+
+Header Name:
+
+ ketypes.h (ARM)
+
+Abstract:
+
+ ARM Type definitions for the Kernel services.
+
+Author:
+
+ Alex Ionescu (alexi at tinykrnl.org) - Updated - 27-Feb-2006
+
+--*/
+
+#ifndef _ARM_KETYPES_H
+#define _ARM_KETYPES_H
+
+//
+// Dependencies
+//
+
+//
+// IRQLs
+//
+#define PASSIVE_LEVEL 0
+#define LOW_LEVEL 0
+#define APC_LEVEL 1
+#define DISPATCH_LEVEL 2
+#define IPI_LEVEL 7
+#define POWER_LEVEL 7
+#define PROFILE_LEVEL 8
+#define HIGH_LEVEL 8
+#define SYNCH_LEVEL (IPI_LEVEL - 1)
+
+//
+// IPI Types
+//
+#define IPI_APC 1
+#define IPI_DPC 2
+#define IPI_FREEZE 4
+#define IPI_PACKET_READY 8
+#define IPI_SYNCH_REQUEST 16
+
+//
+// PRCB Flags
+//
+#define PRCB_MAJOR_VERSION 1
+#define PRCB_BUILD_DEBUG 1
+#define PRCB_BUILD_UNIPROCESSOR 2
+
+//
+// HAL Variables
+//
+#define INITIAL_STALL_COUNT 0x64
+
+//
+// Static Kernel-Mode Address start (use MM_KSEG0_BASE for actual)
+//
+#define KSEG0_BASE 0x80000000
+
+//
+// FIXME: mmtypes.h?
+//
+#define KIPCR 0xFFFFF000
+#define PCR ((volatile KPCR * const)KIPCR)
+
+//
+// Synchronization-level IRQL
+//
+#define SYNCH_LEVEL DISPATCH_LEVEL
+
+//
+// Trap Frame Definition
+//
+typedef struct _KTRAP_FRAME
+{
+ ULONG R0;
+ ULONG R1;
+ ULONG R2;
+ ULONG R3;
+ ULONG R4;
+ ULONG R5;
+ ULONG R6;
+ ULONG R7;
+ ULONG R8;
+ ULONG R9;
+ ULONG R10;
+ ULONG R11;
+ ULONG R12;
+ ULONG Sp;
+ ULONG Lr;
+ ULONG Pc;
+ ULONG Psr;
+ UCHAR ExceptionRecord[(sizeof(EXCEPTION_RECORD) + 7) & (~7)];
+ UCHAR OldIrql;
+ UCHAR PreviousMode;
+ ULONG Fpscr;
+ ULONG FpExc;
+ ULONG S[33];
+ ULONG FpExtra[8];
+} KTRAP_FRAME, *PKTRAP_FRAME;
+
+#ifndef NTOS_MODE_USER
+//
+// Stub
+//
+typedef struct _KFLOATING_SAVE
+{
+ ULONG Reserved;
+} KFLOATING_SAVE, *PKFLOATING_SAVE;
+
+//
+// Processor Region Control Block
+//
+typedef struct _KPRCB
+{
+ USHORT MinorVersion;
+ USHORT MajorVersion;
+ struct _KTHREAD *CurrentThread;
+ struct _KTHREAD *NextThread;
+ struct _KTHREAD *IdleThread;
+ UCHAR Number;
+ //
+ // TODO
+ //
+} KPRCB, *PKPRCB;
+
+//
+// Processor Control Region
+//
+typedef struct _KPCR
+{
+ ULONG MinorVersion;
+ ULONG MajorVersion;
+ PKINTERRUPT_ROUTINE InterruptRoutine[64];
+ PVOID XcodeDispatch;
+ ULONG FirstLevelDcacheSize;
+ ULONG FirstLevelDcacheFillSize;
+ ULONG FirstLevelIcacheSize;
+ ULONG FirstLevelIcacheFillSize;
+ ULONG SecondLevelDcacheSize;
+ ULONG SecondLevelDcacheFillSize;
+ ULONG SecondLevelIcacheSize;
+ ULONG SecondLevelIcacheFillSize;
+ struct _KPRCB *Prcb;
+ struct _TEB *Teb;
+ PVOID TlsArray;
+ ULONG DcacheFillSize;
+ ULONG IcacheAlignment;
+ ULONG IcacheFillSize;
+ ULONG ProcessorId;
+ ULONG ProfileInterval;
+ ULONG ProfileCount;
+ ULONG StallExecutionCount;
+ ULONG StallScaleFactor;
+ CCHAR Number;
+ PVOID DataBusError;
+ PVOID InstructionBusError;
+ ULONG CachePolicy;
+ UCHAR IrqlMask[64];
+ UCHAR IrqlTable[64];
+ UCHAR CurrentIrql;
+ KAFFINITY SetMember;
+ struct _KTHREAD *CurrentThread;
+ KAFFINITY NotMember;
+ ULONG SystemReserved[6];
+ ULONG DcacheAlignment;
+ ULONG HalReserved[64];
+ BOOLEAN FirstLevelActive;
+ BOOLEAN DpcRoutineActive;
+ ULONG CurrentPid;
+ BOOLEAN OnInterruptStack;
+ PVOID SavedInitialStack;
+ PVOID SavedStackLimit;
+ PVOID SystemServiceDispatchStart;
+ PVOID SystemServiceDispatchEnd;
+ PVOID InterruptStack;
+ PVOID PanicStack;
+ PVOID BadVaddr;
+ PVOID InitialStack;
+ PVOID StackLimit;
+ ULONG QuantumEnd;
+} KPCR, *PKPCR;
+
+//
+// Macro to get current KPRCB
+//
+FORCEINLINE
+struct _KPRCB *
+KeGetCurrentPrcb(VOID)
+{
+ return PCR->Prcb;
+}
+
+//
+// Macro to get current CPU
+//
+FORCEINLINE
+ULONG
+DDKAPI
+KeGetCurrentProcessorNumber(VOID)
+{
+ return PCR->Number;
+}
+
+#endif
+#endif
Propchange: trunk/reactos/include/ndk/arm/ketypes.h
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: trunk/reactos/include/ndk/arm/ketypes.h
------------------------------------------------------------------------------
svn:mime-type = text/plain
Added: trunk/reactos/include/ndk/arm/mmtypes.h
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/include/ndk/arm/mmtypes.h?rev=32131&view=auto
==============================================================================
--- trunk/reactos/include/ndk/arm/mmtypes.h (added)
+++ trunk/reactos/include/ndk/arm/mmtypes.h Tue Feb 5 05:58:28 2008
@@ -1,0 +1,141 @@
+/*++ NDK Version: 0095
+
+Copyright (c) Alex Ionescu. All rights reserved.
+
+Header Name:
+
+ mmtypes.h (ARM)
+
+Abstract:
+
+ ARM Type definitions for the Memory Manager
+
+Author:
+
+ Alex Ionescu (alex.ionescu at reactos.com) 06-Oct-2004
+
+--*/
+
+#ifndef _ARM_MMTYPES_H
+#define _ARM_MMTYPES_H
+
+//
+// Dependencies
+//
+
+//
+// Page-related Macros
+//
+#define PAGE_SIZE 0x1000
+#define PAGE_SHIFT 12L
+#define MM_ALLOCATION_GRANULARITY 0x10000
+#define MM_ALLOCATION_GRANULARITY_SHIFT 16L
+
+//
+// Sanity checks for Paging Macros
+//
+#ifdef C_ASSERT
+C_ASSERT(PAGE_SIZE == (1 << PAGE_SHIFT));
+C_ASSERT(MM_ALLOCATION_GRANULARITY == (1 << MM_ALLOCATION_GRANULARITY_SHIFT));
+C_ASSERT(MM_ALLOCATION_GRANULARITY &&
+ !(MM_ALLOCATION_GRANULARITY & (MM_ALLOCATION_GRANULARITY - 1)));
+C_ASSERT(MM_ALLOCATION_GRANULARITY >= PAGE_SIZE);
+#endif
+
+//
+// Page Table Entry Definitions
+//
+typedef struct _HARDWARE_PTE_ARM
+{
+ ULONG Valid:1;
+ ULONG Write:1;
+ ULONG Owner:1;
+ ULONG WriteThrough:1;
+ ULONG CacheDisable:1;
+ ULONG Accessed:1;
+ ULONG Dirty:1;
+ ULONG LargePage:1;
+ ULONG Global:1;
+ ULONG CopyOnWrite:1;
+ ULONG Prototype: 1;
+ ULONG reserved: 1;
+ ULONG PageFrameNumber:20;
+} HARDWARE_PTE_ARM, *PHARDWARE_PTE_ARM;
+
+typedef struct _MMPTE_SOFTWARE
+{
+ ULONG Valid:1;
+ ULONG PageFileLow:4;
+ ULONG Protection:5;
+ ULONG Prototype:1;
+ ULONG Transition:1;
+ ULONG PageFileHigh:20;
+} MMPTE_SOFTWARE;
+
+typedef struct _MMPTE_TRANSITION
+{
+ ULONG Valid:1;
+ ULONG Write:1;
+ ULONG Owner:1;
+ ULONG WriteThrough:1;
+ ULONG CacheDisable:1;
+ ULONG Protection:5;
+ ULONG Prototype:1;
+ ULONG Transition:1;
+ ULONG PageFrameNumber:20;
+} MMPTE_TRANSITION;
+
+typedef struct _MMPTE_PROTOTYPE
+{
+ ULONG Valid:1;
+ ULONG ProtoAddressLow:7;
+ ULONG ReadOnly:1;
+ ULONG WhichPool:1;
+ ULONG Prototype:1;
+ ULONG ProtoAddressHigh:21;
+} MMPTE_PROTOTYPE;
+
+typedef struct _MMPTE_SUBSECTION
+{
+ ULONG Valid:1;
+ ULONG SubsectionAddressLow:4;
+ ULONG Protection:5;
+ ULONG Prototype:1;
+ ULONG SubsectionAddressHigh:20;
+ ULONG WhichPool:1;
+} MMPTE_SUBSECTION;
+
+typedef struct _MMPTE_LIST
+{
+ ULONG Valid:1;
+ ULONG OneEntry:1;
+ ULONG filler0:8;
+ ULONG NextEntry:20;
+ ULONG Prototype:1;
+ ULONG filler1:1;
+} MMPTE_LIST;
+
+typedef struct _MMPTE_HARDWARE
+{
+ ULONG Valid:1;
+ ULONG Write:1;
+ ULONG Owner:1;
+ ULONG WriteThrough:1;
+ ULONG CacheDisable:1;
+ ULONG Accessed:1;
+ ULONG Dirty:1;
+ ULONG LargePage:1;
+ ULONG Global:1;
+ ULONG CopyOnWrite:1;
+ ULONG Prototype:1;
+ ULONG reserved:1;
+ ULONG PageFrameNumber:20;
+} MMPTE_HARDWARE, *PMMPTE_HARDWARE;
+
+//
+// Use the right PTE structure
+//
+#define HARDWARE_PTE HARDWARE_PTE_ARM
+#define PHARDWARE_PTE PHARDWARE_PTE_ARM
+
+#endif
Propchange: trunk/reactos/include/ndk/arm/mmtypes.h
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: trunk/reactos/include/ndk/arm/mmtypes.h
------------------------------------------------------------------------------
svn:mime-type = text/plain
Modified: trunk/reactos/include/ndk/i386/ketypes.h
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/include/ndk/i386/ketypes.h?rev=32131&r1=32130&r2=32131&view=diff
==============================================================================
--- trunk/reactos/include/ndk/i386/ketypes.h (original)
+++ trunk/reactos/include/ndk/i386/ketypes.h Tue Feb 5 05:58:28 2008
@@ -22,6 +22,17 @@
//
// Dependencies
//
+
+//
+// KPCR Access for non-IA64 builds
+//
+#define K0IPCR ((ULONG_PTR)(KIP0PCRADDRESS))
+#define PCR ((volatile KPCR * const)K0IPCR)
+#if !defined(CONFIG_SMP) && !defined(NT_BUILD)
+#define KeGetPcr() PCR
+#else
+#define KeGetPcr() ((volatile KPCR * const)__readfsdword(0x1C))
+#endif
//
// Machine Types
Modified: trunk/reactos/include/ndk/ketypes.h
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/include/ndk/ketypes.h?rev=32131&r1=32130&r2=32131&view=diff
==============================================================================
--- trunk/reactos/include/ndk/ketypes.h (original)
+++ trunk/reactos/include/ndk/ketypes.h Tue Feb 5 05:58:28 2008
@@ -102,17 +102,6 @@
//
#define KI_EXCEPTION_INTERNAL 0x10000000
#define KI_EXCEPTION_ACCESS_VIOLATION (KI_EXCEPTION_INTERNAL | 0x04)
-
-//
-// KPCR Access for non-IA64 builds
-//
-#define K0IPCR ((ULONG_PTR)(KIP0PCRADDRESS))
-#define PCR ((volatile KPCR * const)K0IPCR)
-#if !defined(CONFIG_SMP) && !defined(NT_BUILD)
-#define KeGetPcr() PCR
-#else
-#define KeGetPcr() ((volatile KPCR * const)__readfsdword(0x1C))
-#endif
//
// Number of dispatch codes supported by KINTERRUPT
Modified: trunk/reactos/include/ndk/pstypes.h
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/include/ndk/pstypes.h?rev=32131&r1=32130&r2=32131&view=diff
==============================================================================
--- trunk/reactos/include/ndk/pstypes.h (original)
+++ trunk/reactos/include/ndk/pstypes.h Tue Feb 5 05:58:28 2008
@@ -535,12 +535,14 @@
//
// Descriptor Table Entry Definition
//
+#if (_M_IX86)
#define _DESCRIPTOR_TABLE_ENTRY_DEFINED
typedef struct _DESCRIPTOR_TABLE_ENTRY
{
ULONG Selector;
LDT_ENTRY Descriptor;
} DESCRIPTOR_TABLE_ENTRY, *PDESCRIPTOR_TABLE_ENTRY;
+#endif
//
// PEB Lock Routine
Modified: trunk/reactos/include/psdk/intrin.h
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/include/psdk/intrin.h?rev=32131&r1=32130&r2=32131&view=diff
==============================================================================
--- trunk/reactos/include/psdk/intrin.h (original)
+++ trunk/reactos/include/psdk/intrin.h Tue Feb 5 05:58:28 2008
@@ -75,6 +75,8 @@
#include "intrin_ppc.h"
#elif defined(_MIPS_)
#include "intrin_mips.h"
+#elif defined(_M_ARM)
+#include "intrin_arm.h"
#elif defined(__x86_64__)
/* TODO: the x64 architecture shares most of the i386 intrinsics. It should be easy to support */
#include "intrin_x86_64.h"
Added: trunk/reactos/include/psdk/intrin_arm.h
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/include/psdk/intrin_arm.h?rev=32131&view=auto
==============================================================================
--- trunk/reactos/include/psdk/intrin_arm.h (added)
+++ trunk/reactos/include/psdk/intrin_arm.h Tue Feb 5 05:58:28 2008
@@ -1,0 +1,152 @@
+/*
+ Compatibility <intrin.h> header for GCC -- GCC equivalents of intrinsic
+ Microsoft Visual C++ functions. Originally developed for the ReactOS
+ (<http://www.reactos.org/>) and TinyKrnl (<http://www.tinykrnl.org/>)
+ projects.
+
+ Copyright (c) 2006 KJK::Hyperion <hackbunny at reactos.com>
+
+ Permission is hereby granted, free of charge, to any person obtaining a
+ copy of this software and associated documentation files (the "Software"),
+ to deal in the Software without restriction, including without limitation
+ the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ and/or sell copies of the Software, and to permit persons to whom the
+ Software is furnished to do so, subject to the following conditions:
+
+ The above copyright notice and this permission notice shall be included in
+ all copies or substantial portions of the Software.
+
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+ DEALINGS IN THE SOFTWARE.
+*/
+
+#ifndef KJK_INTRIN_ARM_H_
+#define KJK_INTRIN_ARM_H_
+
+#ifndef __GNUC__
+#error Unsupported compiler
+#endif
+
+#define _ReadWriteBarrier() __sync_synchronize()
+
+FORCEINLINE char _InterlockedCompareExchange8(volatile char * const Destination, const char Exchange, const char Comperand)
+{
+ return __sync_val_compare_and_swap(Destination, Comperand, Exchange);
+}
+
+FORCEINLINE short _InterlockedCompareExchange16(volatile short * const Destination, const short Exchange, const short Comperand)
+{
+ return __sync_val_compare_and_swap(Destination, Comperand, Exchange);
+}
+
+FORCEINLINE long _InterlockedCompareExchange(volatile long * const Destination, const long Exchange, const long Comperand)
+{
+ return __sync_val_compare_and_swap(Destination, Comperand, Exchange);
+}
+
+FORCEINLINE long long _InterlockedCompareExchange64(volatile long long * const Destination, const long long Exchange, const long long Comperand)
+{
+ return __sync_val_compare_and_swap(Destination, Comperand, Exchange);
+}
+
+FORCEINLINE void * _InterlockedCompareExchangePointer(void * volatile * const Destination, void * const Exchange, void * const Comperand)
+{
+ return __sync_val_compare_and_swap(Destination, Comperand, Exchange);
+}
+
+FORCEINLINE long _InterlockedExchange(volatile long * const Target, const long Value)
+{
+ /* NOTE: __sync_lock_test_and_set would be an acquire barrier, so we force a full barrier */
+ __sync_synchronize();
+ return __sync_lock_test_and_set(Target, Value);
+}
+
+FORCEINLINE void * _InterlockedExchangePointer(void * volatile * const Target, void * const Value)
+{
+ /* NOTE: ditto */
+ __sync_synchronize();
+ return __sync_lock_test_and_set(Target, Value);
+}
+
+static __inline__ __attribute__((always_inline)) long _InterlockedExchangeAdd16(volatile short * const Addend, const short Value)
+{
+ return __sync_fetch_and_add(Addend, Value);
+}
+
+FORCEINLINE long _InterlockedExchangeAdd(volatile long * const Addend, const long Value)
+{
+ return __sync_fetch_and_add(Addend, Value);
+}
+
+FORCEINLINE char _InterlockedAnd8(volatile char * const value, const char mask)
+{
+ return __sync_fetch_and_and(value, mask);
+}
+
+FORCEINLINE short _InterlockedAnd16(volatile short * const value, const short mask)
+{
+ return __sync_fetch_and_and(value, mask);
+}
+
+FORCEINLINE long _InterlockedAnd(volatile long * const value, const long mask)
+{
+ return __sync_fetch_and_and(value, mask);
+}
+
+FORCEINLINE char _InterlockedOr8(volatile char * const value, const char mask)
+{
+ return __sync_fetch_and_or(value, mask);
+}
+
+FORCEINLINE short _InterlockedOr16(volatile short * const value, const short mask)
+{
+ return __sync_fetch_and_or(value, mask);
+}
+
+FORCEINLINE long _InterlockedOr(volatile long * const value, const long mask)
+{
+ return __sync_fetch_and_or(value, mask);
+}
+
+FORCEINLINE char _InterlockedXor8(volatile char * const value, const char mask)
+{
+ return __sync_fetch_and_xor(value, mask);
+}
+
+FORCEINLINE short _InterlockedXor16(volatile short * const value, const short mask)
+{
+ return __sync_fetch_and_xor(value, mask);
+}
+
+FORCEINLINE long _InterlockedXor(volatile long * const value, const long mask)
+{
+ return __sync_fetch_and_xor(value, mask);
+}
+
+static __inline__ __attribute__((always_inline)) long _InterlockedDecrement(volatile long * const lpAddend)
+{
+ return _InterlockedExchangeAdd(lpAddend, -1) - 1;
+}
+
+static __inline__ __attribute__((always_inline)) long _InterlockedIncrement(volatile long * const lpAddend)
+{
+ return _InterlockedExchangeAdd(lpAddend, 1) + 1;
+}
+
+static __inline__ __attribute__((always_inline)) long _InterlockedDecrement16(volatile short * const lpAddend)
+{
+ return _InterlockedExchangeAdd16(lpAddend, -1) - 1;
+}
+
+static __inline__ __attribute__((always_inline)) long _InterlockedIncrement16(volatile short * const lpAddend)
+{
+ return _InterlockedExchangeAdd16(lpAddend, 1) + 1;
+}
+
+#endif
+/* EOF */
Propchange: trunk/reactos/include/psdk/intrin_arm.h
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: trunk/reactos/include/psdk/intrin_arm.h
------------------------------------------------------------------------------
svn:mime-type = text/plain
Modified: trunk/reactos/include/psdk/winnt.h
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/include/psdk/winnt.h?rev=32131&r1=32130&r2=32131&view=diff
==============================================================================
--- trunk/reactos/include/psdk/winnt.h (original)
+++ trunk/reactos/include/psdk/winnt.h Tue Feb 5 05:58:28 2008
@@ -4064,6 +4064,8 @@
);
return ret;
}
+#elif defined (_M_ARM)
+ PVOID WINAPI GetCurrentFiber(VOID);
#else
#if defined(_M_PPC)
static __inline__ __attribute__((always_inline)) unsigned long __readfsdword_winnt(const unsigned long Offset)
@@ -4101,6 +4103,8 @@
return ret;
}
+#elif _M_ARM
+ struct _TEB* WINAPI NtCurrentTeb(VOID);
#else
static __inline__ struct _TEB * NtCurrentTeb(void)
{
@@ -4235,6 +4239,8 @@
#define YieldProcessor() __asm__ __volatile__("nop");
#elif defined(_M_MIPS)
#define YieldProcessor() __asm__ __volatile__("nop");
+#elif defined(_M_ARM)
+#define YieldProcessor()
#else
#error Unknown architecture
#endif
Modified: trunk/reactos/tools/nci/ncitool.c
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/tools/nci/ncitool.c?rev=32131&r1=32130&r2=32131&view=diff
==============================================================================
--- trunk/reactos/tools/nci/ncitool.c (original)
+++ trunk/reactos/tools/nci/ncitool.c Tue Feb 5 05:58:28 2008
@@ -67,6 +67,13 @@
" lw $8,0($8)\n" \
" j $8\n" \
" nop\n"
+
+//
+// For now, only supports 0-4 arguments
+//
+#define UserModeStub_arm " mov r12, #0x%x\n" \
+ " swi #0x2E\n" \
+ " bx lr\n\n"
#elif defined(_MSC_VER)
#define UserModeStub_x86 " asm { \n" \
@@ -96,6 +103,10 @@
#define KernelModeStub_mips " j KiSystemService\n" \
" nop\n"
+
+#define KernelModeStub_arm " mov r12, #0x%x\n" \
+ " swi #0x2E\n" \
+ " bx lr\n\n"
#elif defined(_MSC_VER)
#define KernelModeStub_x86 " asm { \n" \
@@ -127,6 +138,8 @@
"\t.globl %s\n", "%s:\n" },
{ "mips", 4, KernelModeStub_mips, UserModeStub_mips,
"\t.globl %s\n", "%s:\n" },
+ { "arm", 4, KernelModeStub_arm, UserModeStub_arm,
+ "\t.globl %s\n", "%s:\n" },
{ 0, }
};
int arch_sel = 0;
- Previous message: [ros-diffs] [ros-arm-bringup] 32130: The Windows headers include a file called ioaccess.h in the ddk folder, which exposes various READ/WRITE_PORT/REGISTER_ routines as inlined macros for various architectures (PPC, MIPS, AMD64, IA64, X86), making use of the MSVC compiler-intrinsics (inp, outp, etc). Since ReactOS already has those intrinscs implemented, we've also created an ioaccess.h w32api header file which makes use of them. We can now remove the portio.h and portio.c files in FreeLDR, since there's no more need to duplicate this code. Additionally, this can be also done with the PPC port of FreeLDR or any other architecture, since it doesn't require per-architecture support in FreeLDR anymore -- only the underlying intrinsics in intrin.h must be implemented (note that for PPC, MIPS and ARM, the notion of a port doesn't even exist -- those functions map to register-reading functions, where register basically means memory).
- Next message: [ros-diffs] [ros-arm-bringup] 32132: Build FreeLDR for ARM. We merely provide a _start entrypoint stub and two stub architecture files with no functions implemented. We also supply the proper ARM configuration settings in the .rbuild files, and add the necessary headers. FreeLDR can now be compiled (along with rossym, libcntptr, rtl and cmlib) but it will not link until the actual ARM code is implemented.
- Messages sorted by:
[ date ]
[ thread ]
[ subject ]
[ author ]
More information about the Ros-diffs
mailing list