We now also implement InterlockedExchange (Fixes rtl build).
authorReactOS Portable Systems Group <ros-arm-bringup@svn.reactos.org>
Fri, 8 Feb 2008 08:20:06 +0000 (08:20 +0000)
committerReactOS Portable Systems Group <ros-arm-bringup@svn.reactos.org>
Fri, 8 Feb 2008 08:20:06 +0000 (08:20 +0000)
We now set -lgcc for all builds (to get built-in division helpers), and also -static (not to import libgcc.dll -- it seems -static isn't needed on x86, but it is on ARM).
We hackfix kdcom to use the FeroUart base address -- this driver won't be used for a while, but we need to have it built.
Now binaries are being created properly (previously kernel was 15MB and importing .DLL files...). FreeLDR output:
FreeLoader v3.0 for ARM
Bootargs: rdbase=0x2000000 rdsize=0x1400000
Detecting Hardware...
Loading...
Reading NTOSKRNL.EXE
Reading BOOTVID.DLL
Reading HAL.DLL
Reading HAL.DLL
Reading c_1252.nls
Reading c_437.nls
Reading l_intl.nls
Reading scsiport.sys

svn path=/trunk/; revision=32207

reactos/ReactOS-arm.rbuild
reactos/drivers/base/kdcom/kdbg.c
reactos/include/psdk/intrin_arm.h

index e0b9211..3108b0b 100644 (file)
@@ -33,4 +33,7 @@
 
        <compilerflag>-Wno-attributes</compilerflag>
        <compilerflag>-fno-strict-aliasing</compilerflag>
+       <linkerflag>-s</linkerflag>
+    <linkerflag>-lgcc</linkerflag>
+    <linkerflag>-static</linkerflag>
 </project>
index c44ff9a..20f9202 100644 (file)
@@ -59,6 +59,8 @@ const ULONG BaseArray[5] = {0, 0x3F8, 0x2F8, 0x3E8, 0x2E8};
 const ULONG BaseArray[2] = {0, 0x800003f8};
 #elif defined(_M_MIPS)
 const ULONG BaseArray[3] = {0, 0x80006000, 0x80007000};
+#elif defined(_M_ARM)
+const ULONG BaseArray[2] = {0, 0xF1012000};
 #else
 #error Unknown architecture
 #endif
index 8f07f23..43808d2 100644 (file)
@@ -72,6 +72,17 @@ static __inline__ __attribute__((always_inline)) long _InterlockedExchangeAdd(vo
        return a;
 }
 
+static __inline__ __attribute__((always_inline)) long _InterlockedExchange(volatile long * const dest, const long exch)
+{
+       long a;
+    
+       __asm__ __volatile__ (  "swp %0, %2, [%1]"
+                          : "=&r" (a)
+                          : "r" (dest), "r" (exch));
+    
+       return a;
+}
+
 static __inline__ __attribute__((always_inline)) char _InterlockedAnd8(volatile char * const value, const char mask)
 {
        char x;