Author: arty Date: Mon Sep 4 10:38:37 2006 New Revision: 23909
URL: http://svn.reactos.org/svn/reactos?rev=23909&view=rev Log: Link ntoskrnl.
Removed: branches/powerpc/reactos/lib/rtl/bitmap.c Modified: branches/powerpc/reactos/lib/rtl/bit.c branches/powerpc/reactos/tools/ppc.lost+found/link-ntoskrnl
Modified: branches/powerpc/reactos/lib/rtl/bit.c URL: http://svn.reactos.org/svn/reactos/branches/powerpc/reactos/lib/rtl/bit.c?re... ============================================================================== --- branches/powerpc/reactos/lib/rtl/bit.c (original) +++ branches/powerpc/reactos/lib/rtl/bit.c Mon Sep 4 10:38:37 2006 @@ -13,45 +13,4 @@
/* FUNCTIONS ****************************************************************/
-/* - * @implemented - */ -CCHAR NTAPI -RtlFindLeastSignificantBit(IN ULONGLONG Set) -{ - int i; - - if (Set == 0ULL) - return -1; - - for (i = 0; i < 64; i++) - { - if (Set & (1 << i)) - return (CCHAR)i; - } - - return -1; -} - - -/* - * @implemented - */ -CCHAR NTAPI -RtlFindMostSignificantBit(IN ULONGLONG Set) -{ - int i; - - if (Set == 0ULL) - return -1; - - for (i = 63; i >= 0; i--) - { - if (Set & (1 << i)) - return (CCHAR)i; - } - - return -1; -} - /* EOF */
Removed: branches/powerpc/reactos/lib/rtl/bitmap.c URL: http://svn.reactos.org/svn/reactos/branches/powerpc/reactos/lib/rtl/bitmap.c... ============================================================================== --- branches/powerpc/reactos/lib/rtl/bitmap.c (original) +++ branches/powerpc/reactos/lib/rtl/bitmap.c (removed) @@ -1,979 +1,0 @@ -/* COPYRIGHT: See COPYING in the top level directory - * PROJECT: ReactOS system libraries - * FILE: lib/rtl/bitmap.c - * PURPOSE: Bitmap functions - * PROGRAMMER: Eric Kohl - */ - -/* INCLUDES *****************************************************************/ - -#include <rtl.h> - -#define NDEBUG -#include <debug.h> - -/* MACROS *******************************************************************/ - -/* Bits set from LSB to MSB; used as mask for runs < 8 bits */ -static const BYTE NTDLL_maskBits[8] = { 0, 1, 3, 7, 15, 31, 63, 127 }; - -/* Number of set bits for each value of a nibble; used for counting */ -static const BYTE NTDLL_nibbleBitCount[16] = { - 0, 1, 1, 2, 1, 2, 2, 3, 1, 2, 2, 3, 2, 3, 3, 4 -}; - -/* First set bit in a nibble; used for determining least significant bit */ -static const BYTE NTDLL_leastSignificant[16] = { - 0, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0 -}; - -/* Last set bit in a nibble; used for determining most significant bit */ -static const signed char NTDLL_mostSignificant[16] = { - -1, 0, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3 -}; - -/* PRIVATE FUNCTIONS *********************************************************/ - -static -int -NTDLL_RunSortFn(const void *lhs, - const void *rhs) -{ - if (((const RTL_BITMAP_RUN*)lhs)->NumberOfBits > ((const RTL_BITMAP_RUN*)rhs)->NumberOfBits) - return -1; - return 1; -} - -static -ULONG -WINAPI -NTDLL_FindRuns(PRTL_BITMAP lpBits, - PRTL_BITMAP_RUN lpSeries, - ULONG ulCount, - BOOLEAN bLongest, - ULONG (*fn)(PRTL_BITMAP,ULONG,PULONG)) -{ - BOOL bNeedSort = ulCount > 1 ? TRUE : FALSE; - ULONG ulPos = 0, ulRuns = 0; - - if (!ulCount) - return ~0U; - - while (ulPos < lpBits->SizeOfBitMap) - { - /* Find next set/clear run */ - ULONG ulSize, ulNextPos = fn(lpBits, ulPos, &ulSize); - - if (ulNextPos == ~0U) - break; - - if (bLongest && ulRuns == ulCount) - { - /* Sort runs with shortest at end, if they are out of order */ - if (bNeedSort) - qsort(lpSeries, ulRuns, sizeof(RTL_BITMAP_RUN), NTDLL_RunSortFn); - - /* Replace last run if this one is bigger */ - if (ulSize > lpSeries[ulRuns - 1].NumberOfBits) - { - lpSeries[ulRuns - 1].StartingIndex = ulNextPos; - lpSeries[ulRuns - 1].NumberOfBits = ulSize; - - /* We need to re-sort the array, _if_ we didn't leave it sorted */ - if (ulRuns > 1 && ulSize > lpSeries[ulRuns - 2].NumberOfBits) - bNeedSort = TRUE; - } - } - else - { - /* Append to found runs */ - lpSeries[ulRuns].StartingIndex = ulNextPos; - lpSeries[ulRuns].NumberOfBits = ulSize; - ulRuns++; - - if (!bLongest && ulRuns == ulCount) - break; - } - ulPos = ulNextPos + ulSize; - } - return ulRuns; -} - -static -ULONG -NTDLL_FindSetRun(PRTL_BITMAP lpBits, - ULONG ulStart, - PULONG lpSize) -{ - LPBYTE lpOut; - ULONG ulFoundAt = 0, ulCount = 0; - - /* FIXME: It might be more efficient/cleaner to manipulate four bytes - * at a time. But beware of the pointer arithmetics... - */ - lpOut = ((BYTE*)lpBits->Buffer) + (ulStart >> 3u); - - while (1) - { - /* Check bits in first byte */ - const BYTE bMask = (0xff << (ulStart & 7)) & 0xff; - const BYTE bFirst = *lpOut & bMask; - - if (bFirst) - { - /* Have a set bit in first byte */ - if (bFirst != bMask) - { - /* Not every bit is set */ - ULONG ulOffset; - - if (bFirst & 0x0f) - ulOffset = NTDLL_leastSignificant[bFirst & 0x0f]; - else - ulOffset = 4 + NTDLL_leastSignificant[bFirst >> 4]; - ulStart += ulOffset; - ulFoundAt = ulStart; - for (;ulOffset < 8; ulOffset++) - { - if (!(bFirst & (1 << ulOffset))) - { - *lpSize = ulCount; - return ulFoundAt; /* Set from start, but not until the end */ - } - ulCount++; - ulStart++; - } - /* Set to the end - go on to count further bits */ - lpOut++; - break; - } - /* every bit from start until the end of the byte is set */ - ulFoundAt = ulStart; - ulCount = 8 - (ulStart & 7); - ulStart = (ulStart & ~7u) + 8; - lpOut++; - break; - } - ulStart = (ulStart & ~7u) + 8; - lpOut++; - if (ulStart >= lpBits->SizeOfBitMap) - return ~0U; - } - - /* Count blocks of 8 set bits */ - while (*lpOut == 0xff) - { - ulCount += 8; - ulStart += 8; - if (ulStart >= lpBits->SizeOfBitMap) - { - *lpSize = ulCount - (ulStart - lpBits->SizeOfBitMap); - return ulFoundAt; - } - lpOut++; - } - - /* Count remaining contiguous bits, if any */ - if (*lpOut & 1) - { - ULONG ulOffset = 0; - - for (;ulOffset < 7u; ulOffset++) - { - if (!(*lpOut & (1 << ulOffset))) - break; - ulCount++; - } - } - *lpSize = ulCount; - return ulFoundAt; -} - -static -ULONG -NTDLL_FindClearRun(PRTL_BITMAP lpBits, - ULONG ulStart, - PULONG lpSize) -{ - LPBYTE lpOut; - ULONG ulFoundAt = 0, ulCount = 0; - - /* FIXME: It might be more efficient/cleaner to manipulate four bytes - * at a time. But beware of the pointer arithmetics... - */ - lpOut = ((BYTE*)lpBits->Buffer) + (ulStart >> 3u); - - while (1) - { - /* Check bits in first byte */ - const BYTE bMask = (0xff << (ulStart & 7)) & 0xff; - const BYTE bFirst = (~*lpOut) & bMask; - - if (bFirst) - { - /* Have a clear bit in first byte */ - if (bFirst != bMask) - { - /* Not every bit is clear */ - ULONG ulOffset; - - if (bFirst & 0x0f) - ulOffset = NTDLL_leastSignificant[bFirst & 0x0f]; - else - ulOffset = 4 + NTDLL_leastSignificant[bFirst >> 4]; - ulStart += ulOffset; - ulFoundAt = ulStart; - for (;ulOffset < 8; ulOffset++) - { - if (!(bFirst & (1 << ulOffset))) - { - *lpSize = ulCount; - return ulFoundAt; /* Clear from start, but not until the end */ - } - ulCount++; - ulStart++; - } - /* Clear to the end - go on to count further bits */ - lpOut++; - break; - } - /* Every bit from start until the end of the byte is clear */ - ulFoundAt = ulStart; - ulCount = 8 - (ulStart & 7); - ulStart = (ulStart & ~7u) + 8; - lpOut++; - break; - } - ulStart = (ulStart & ~7u) + 8; - lpOut++; - if (ulStart >= lpBits->SizeOfBitMap) - return ~0U; - } - - /* Count blocks of 8 clear bits */ - while (!*lpOut) - { - ulCount += 8; - ulStart += 8; - if (ulStart >= lpBits->SizeOfBitMap) - { - *lpSize = ulCount - (ulStart - lpBits->SizeOfBitMap); - return ulFoundAt; - } - lpOut++; - } - - /* Count remaining contiguous bits, if any */ - if (!(*lpOut & 1)) - { - ULONG ulOffset = 0; - - for (;ulOffset < 7u; ulOffset++) - { - if (*lpOut & (1 << ulOffset)) - break; - ulCount++; - } - } - *lpSize = ulCount; - return ulFoundAt; -} - -/* FUNCTIONS ****************************************************************/ - -/* - * @implemented - */ -VOID -NTAPI -RtlInitializeBitMap(IN PRTL_BITMAP BitMapHeader, - IN PULONG BitMapBuffer, - IN ULONG SizeOfBitMap) -{ - /* Setup the bitmap header */ - BitMapHeader->SizeOfBitMap = SizeOfBitMap; - BitMapHeader->Buffer = BitMapBuffer; -} - -/* - * @implemented - */ -BOOLEAN -NTAPI -RtlAreBitsClear(IN PRTL_BITMAP BitMapHeader, - IN ULONG StartingIndex, - IN ULONG Length) -{ - LPBYTE lpOut; - ULONG ulRemainder; - - if (!BitMapHeader || !Length || - StartingIndex >= BitMapHeader->SizeOfBitMap || - Length > BitMapHeader->SizeOfBitMap - StartingIndex) - return FALSE; - - /* FIXME: It might be more efficient/cleaner to manipulate four bytes - * at a time. But beware of the pointer arithmetics... - */ - lpOut = ((BYTE*)BitMapHeader->Buffer) + (StartingIndex >> 3u); - - /* Check bits in first byte, if StartingIndex isn't a byte boundary */ - if (StartingIndex & 7) - { - if (Length > 7) - { - /* Check from start bit to the end of the byte */ - if (*lpOut & ((0xff << (StartingIndex & 7)) & 0xff)) - return FALSE; - lpOut++; - Length -= (8 - (StartingIndex & 7)); - } - else - { - /* Check from the start bit, possibly into the next byte also */ - USHORT initialWord = NTDLL_maskBits[Length] << (StartingIndex & 7); - - if (*lpOut & (initialWord & 0xff)) - return FALSE; - if ((initialWord & 0xff00) && (lpOut[1] & (initialWord >> 8))) - return FALSE; - return TRUE; - } - } - - /* Check bits in blocks of 8 bytes */ - ulRemainder = Length & 7; - Length >>= 3; - while (Length--) - { - if (*lpOut++) - return FALSE; - } - - /* Check remaining bits, if any */ - if (ulRemainder && *lpOut & NTDLL_maskBits[ulRemainder]) - return FALSE; - return TRUE; -} - - -/* - * @implemented - */ -BOOLEAN NTAPI -RtlAreBitsSet(PRTL_BITMAP BitMapHeader, - ULONG StartingIndex, - ULONG Length) -{ - LPBYTE lpOut; - ULONG ulRemainder; - - - if (!BitMapHeader || !Length || - StartingIndex >= BitMapHeader->SizeOfBitMap || - Length > BitMapHeader->SizeOfBitMap - StartingIndex) - return FALSE; - - /* FIXME: It might be more efficient/cleaner to manipulate four bytes - * at a time. But beware of the pointer arithmetics... - */ - lpOut = ((BYTE*)BitMapHeader->Buffer) + (StartingIndex >> 3u); - - /* Check bits in first byte, if StartingIndex isn't a byte boundary */ - if (StartingIndex & 7) - { - if (Length > 7) - { - /* Check from start bit to the end of the byte */ - if ((*lpOut & - ((0xff << (StartingIndex & 7))) & 0xff) != ((0xff << (StartingIndex & 7) & 0xff))) - return FALSE; - lpOut++; - Length -= (8 - (StartingIndex & 7)); - } - else - { - /* Check from the start bit, possibly into the next byte also */ - USHORT initialWord = NTDLL_maskBits[Length] << (StartingIndex & 7); - - if ((*lpOut & (initialWord & 0xff)) != (initialWord & 0xff)) - return FALSE; - if ((initialWord & 0xff00) && - ((lpOut[1] & (initialWord >> 8)) != (initialWord >> 8))) - return FALSE; - return TRUE; - } - } - - /* Check bits in blocks of 8 bytes */ - ulRemainder = Length & 7; - Length >>= 3; - while (Length--) - { - if (*lpOut++ != 0xff) - return FALSE; - } - - /* Check remaining bits, if any */ - if (ulRemainder && - (*lpOut & NTDLL_maskBits[ulRemainder]) != NTDLL_maskBits[ulRemainder]) - return FALSE; - return TRUE; -} - - -/* - * @implemented - */ -VOID NTAPI -RtlClearAllBits(IN OUT PRTL_BITMAP BitMapHeader) -{ - memset(BitMapHeader->Buffer, 0, ((BitMapHeader->SizeOfBitMap + 31) & ~31) >> 3); -} - -/* - * @implemented - */ -VOID -NTAPI -RtlClearBit(PRTL_BITMAP BitMapHeader, - ULONG BitNumber) -{ - PULONG Ptr; - - if (BitNumber >= BitMapHeader->SizeOfBitMap) return; - - Ptr = (PULONG)BitMapHeader->Buffer + (BitNumber / 32); - *Ptr &= ~(1 << (BitNumber % 32)); -} - -/* - * @implemented - */ -VOID -NTAPI -RtlClearBits(IN PRTL_BITMAP BitMapHeader, - IN ULONG StartingIndex, - IN ULONG NumberToClear) -{ - LPBYTE lpOut; - - if (!BitMapHeader || !NumberToClear || - StartingIndex >= BitMapHeader->SizeOfBitMap || - NumberToClear > BitMapHeader->SizeOfBitMap - StartingIndex) - return; - - /* FIXME: It might be more efficient/cleaner to manipulate four bytes - * at a time. But beware of the pointer arithmetics... - */ - lpOut = ((BYTE*)BitMapHeader->Buffer) + (StartingIndex >> 3u); - - /* Clear bits in first byte, if StartingIndex isn't a byte boundary */ - if (StartingIndex & 7) - { - if (NumberToClear > 7) - { - /* Clear from start bit to the end of the byte */ - *lpOut++ &= ~(0xff << (StartingIndex & 7)); - NumberToClear -= (8 - (StartingIndex & 7)); - } - else - { - /* Clear from the start bit, possibly into the next byte also */ - USHORT initialWord = ~(NTDLL_maskBits[NumberToClear] << (StartingIndex & 7)); - - *lpOut++ &= (initialWord & 0xff); - *lpOut &= (initialWord >> 8); - return; - } - } - - /* Clear bits (in blocks of 8) on whole byte boundaries */ - if (NumberToClear >> 3) - { - memset(lpOut, 0, NumberToClear >> 3); - lpOut = lpOut + (NumberToClear >> 3); - } - - /* Clear remaining bits, if any */ - if (NumberToClear & 0x7) - *lpOut &= ~NTDLL_maskBits[NumberToClear & 0x7]; -} - - -/* - * @implemented - */ -ULONG NTAPI -RtlFindClearBits(PRTL_BITMAP BitMapHeader, - ULONG NumberToFind, - ULONG HintIndex) -{ - ULONG ulPos, ulEnd; - - if (!BitMapHeader || !NumberToFind || NumberToFind > BitMapHeader->SizeOfBitMap) - return ~0U; - - ulEnd = BitMapHeader->SizeOfBitMap; - - if (HintIndex + NumberToFind > BitMapHeader->SizeOfBitMap) - HintIndex = 0; - - ulPos = HintIndex; - - while (ulPos < ulEnd) - { - /* FIXME: This could be made a _lot_ more efficient */ - if (RtlAreBitsClear(BitMapHeader, ulPos, NumberToFind)) - return ulPos; - - /* Start from the beginning if we hit the end and started from HintIndex */ - if (ulPos == ulEnd - 1 && HintIndex) - { - ulEnd = HintIndex; - ulPos = HintIndex = 0; - } - else - ulPos++; - } - return ~0U; -} - - - - - - - -/* - * @implemented - */ -ULONG NTAPI -RtlFindClearRuns(PRTL_BITMAP BitMapHeader, - PRTL_BITMAP_RUN RunArray, - ULONG SizeOfRunArray, - BOOLEAN LocateLongestRuns) -{ - return NTDLL_FindRuns(BitMapHeader, RunArray, SizeOfRunArray, LocateLongestRuns, NTDLL_FindClearRun); -} - - -/* - * @unimplemented - */ -ULONG NTAPI -RtlFindLastBackwardRunClear(IN PRTL_BITMAP BitMapHeader, - IN ULONG FromIndex, - IN PULONG StartingRunIndex) -{ - UNIMPLEMENTED; - return 0; -} - -/* - * @implemented - */ -ULONG NTAPI -RtlFindNextForwardRunClear(IN PRTL_BITMAP BitMapHeader, - IN ULONG FromIndex, - IN PULONG StartingRunIndex) -{ - ULONG ulSize = 0; - - if (BitMapHeader && FromIndex < BitMapHeader->SizeOfBitMap && StartingRunIndex) - *StartingRunIndex = NTDLL_FindClearRun(BitMapHeader, FromIndex, &ulSize); - - return ulSize; -} - -/* - * @implemented - */ -ULONG NTAPI -RtlFindFirstRunSet(IN PRTL_BITMAP BitMapHeader, - IN PULONG StartingIndex) -{ - ULONG Size; - ULONG Index; - ULONG Count; - PULONG Ptr; - ULONG Mask; - - Size = BitMapHeader->SizeOfBitMap; - if (*StartingIndex > Size) - { - *StartingIndex = (ULONG)-1; - return 0; - } - - Index = *StartingIndex; - Ptr = (PULONG)BitMapHeader->Buffer + (Index / 32); - Mask = 1 << (Index & 0x1F); - - /* Skip clear bits */ - for (; Index < Size && ~*Ptr & Mask; Index++) - { - Mask <<= 1; - - if (Mask == 0) - { - Mask = 1; - Ptr++; - } - } - - /* Return index of first set bit */ - if (Index >= Size) - { - *StartingIndex = (ULONG)-1; - return 0; - } - else - { - *StartingIndex = Index; - } - - /* Count set bits */ - for (Count = 0; Index < Size && *Ptr & Mask; Index++) - { - Count++; - Mask <<= 1; - - if (Mask == 0) - { - Mask = 1; - Ptr++; - } - } - - return Count; -} - - -/* - * @implemented - */ -ULONG NTAPI -RtlFindLongestRunClear(PRTL_BITMAP BitMapHeader, - PULONG StartingIndex) -{ - RTL_BITMAP_RUN br; - - if (RtlFindClearRuns(BitMapHeader, &br, 1, TRUE) == 1) - { - if (StartingIndex) - *StartingIndex = br.StartingIndex; - return br.NumberOfBits; - } - return 0; -} - - -/* - * @implemented - */ -ULONG NTAPI -RtlFindLongestRunSet(PRTL_BITMAP BitMapHeader, - PULONG StartingIndex) -{ - RTL_BITMAP_RUN br; - - if (NTDLL_FindRuns(BitMapHeader, &br, 1, TRUE, NTDLL_FindSetRun) == 1) - { - if (StartingIndex) - *StartingIndex = br.StartingIndex; - return br.NumberOfBits; - } - return 0; -} - - -/* - * @implemented - */ -ULONG NTAPI -RtlFindSetBits(PRTL_BITMAP BitMapHeader, - ULONG NumberToFind, - ULONG HintIndex) -{ - ULONG ulPos, ulEnd; - - if (!BitMapHeader || !NumberToFind || NumberToFind > BitMapHeader->SizeOfBitMap) - return ~0U; - - ulEnd = BitMapHeader->SizeOfBitMap; - - if (HintIndex + NumberToFind > BitMapHeader->SizeOfBitMap) - HintIndex = 0; - - ulPos = HintIndex; - - while (ulPos < ulEnd) - { - /* FIXME: This could be made a _lot_ more efficient */ - if (RtlAreBitsSet(BitMapHeader, ulPos, NumberToFind)) - return ulPos; - - /* Start from the beginning if we hit the end and had a hint */ - if (ulPos == ulEnd - 1 && HintIndex) - { - ulEnd = HintIndex; - ulPos = HintIndex = 0; - } - else - ulPos++; - } - return ~0U; -} - - -/* - * @implemented - */ -ULONG NTAPI -RtlFindSetBitsAndClear(PRTL_BITMAP BitMapHeader, - ULONG NumberToFind, - ULONG HintIndex) -{ - ULONG ulPos; - - ulPos = RtlFindSetBits(BitMapHeader, NumberToFind, HintIndex); - if (ulPos != ~0U) - RtlClearBits(BitMapHeader, ulPos, NumberToFind); - return ulPos; -} - - - - - -/* - * @implemented - */ -ULONG NTAPI -RtlNumberOfSetBits(PRTL_BITMAP BitMapHeader) -{ - ULONG ulSet = 0; - - if (BitMapHeader) - { - LPBYTE lpOut = (BYTE *)BitMapHeader->Buffer; - ULONG Length, ulRemainder; - BYTE bMasked; - - Length = BitMapHeader->SizeOfBitMap >> 3; - ulRemainder = BitMapHeader->SizeOfBitMap & 0x7; - - while (Length--) - { - ulSet += NTDLL_nibbleBitCount[*lpOut >> 4]; - ulSet += NTDLL_nibbleBitCount[*lpOut & 0xf]; - lpOut++; - } - - bMasked = *lpOut & NTDLL_maskBits[ulRemainder]; - ulSet += NTDLL_nibbleBitCount[bMasked >> 4]; - ulSet += NTDLL_nibbleBitCount[bMasked & 0xf]; - } - return ulSet; -} - - -/* - * @implemented - */ -VOID NTAPI -RtlSetAllBits(IN OUT PRTL_BITMAP BitMapHeader) -{ - memset(BitMapHeader->Buffer, 0xff, ((BitMapHeader->SizeOfBitMap + 31) & ~31) >> 3); -} - - -/* - * @implemented - */ -VOID NTAPI -RtlSetBit(PRTL_BITMAP BitMapHeader, - ULONG BitNumber) -{ - PULONG Ptr; - - if (BitNumber >= BitMapHeader->SizeOfBitMap) - return; - - Ptr = (PULONG)BitMapHeader->Buffer + (BitNumber / 32); - - *Ptr |= (1 << (BitNumber % 32)); -} - - -/* - * @implemented - */ -VOID NTAPI -RtlSetBits(PRTL_BITMAP BitMapHeader, - ULONG StartingIndex, - ULONG NumberToSet) -{ - LPBYTE lpOut; - - if (!BitMapHeader || !NumberToSet || - StartingIndex >= BitMapHeader->SizeOfBitMap || - NumberToSet > BitMapHeader->SizeOfBitMap - StartingIndex) - return; - - /* FIXME: It might be more efficient/cleaner to manipulate four bytes - * at a time. But beware of the pointer arithmetics... - */ - lpOut = ((BYTE*)BitMapHeader->Buffer) + (StartingIndex >> 3u); - - /* Set bits in first byte, if StartingIndex isn't a byte boundary */ - if (StartingIndex & 7) - { - if (NumberToSet > 7) - { - /* Set from start bit to the end of the byte */ - *lpOut++ |= 0xff << (StartingIndex & 7); - NumberToSet -= (8 - (StartingIndex & 7)); - } - else - { - /* Set from the start bit, possibly into the next byte also */ - USHORT initialWord = NTDLL_maskBits[NumberToSet] << (StartingIndex & 7); - - *lpOut++ |= (initialWord & 0xff); - *lpOut |= (initialWord >> 8); - return; - } - } - - /* Set bits up to complete byte count */ - if (NumberToSet >> 3) - { - memset(lpOut, 0xff, NumberToSet >> 3); - lpOut = lpOut + (NumberToSet >> 3); - } - - /* Set remaining bits, if any */ - *lpOut |= NTDLL_maskBits[NumberToSet & 0x7]; -} - - -/* - * @implemented - */ -BOOLEAN NTAPI -RtlTestBit(PRTL_BITMAP BitMapHeader, - ULONG BitNumber) -{ - PULONG Ptr; - - if (BitNumber >= BitMapHeader->SizeOfBitMap) - return FALSE; - - Ptr = (PULONG)BitMapHeader->Buffer + (BitNumber / 32); - - return (*Ptr & (1 << (BitNumber % 32))); -} - -/* - * @implemented - */ -ULONG NTAPI -RtlFindFirstRunClear(PRTL_BITMAP BitMapHeader, - PULONG StartingIndex) -{ - return RtlFindNextForwardRunClear(BitMapHeader, 0, StartingIndex); -} - -/* - * @implemented - */ -ULONG NTAPI -RtlNumberOfClearBits(PRTL_BITMAP BitMapHeader) -{ - - if (BitMapHeader) - return BitMapHeader->SizeOfBitMap - RtlNumberOfSetBits(BitMapHeader); - return 0; -} - -/* - * @implemented - */ -ULONG NTAPI -RtlFindClearBitsAndSet(PRTL_BITMAP BitMapHeader, - ULONG NumberToFind, - ULONG HintIndex) -{ - ULONG ulPos; - - ulPos = RtlFindClearBits(BitMapHeader, NumberToFind, HintIndex); - if (ulPos != ~0U) - RtlSetBits(BitMapHeader, ulPos, NumberToFind); - return ulPos; -} - -/* - * @implemented - */ -CCHAR WINAPI RtlFindMostSignificantBit(ULONGLONG ulLong) -{ - signed char ret = 32; - DWORD dw; - - if (!(dw = (ulLong >> 32))) - { - ret = 0; - dw = (DWORD)ulLong; - } - if (dw & 0xffff0000) - { - dw >>= 16; - ret += 16; - } - if (dw & 0xff00) - { - dw >>= 8; - ret += 8; - } - if (dw & 0xf0) - { - dw >>= 4; - ret += 4; - } - return ret + NTDLL_mostSignificant[dw]; -} - -/* - * @implemented - */ -CCHAR WINAPI RtlFindLeastSignificantBit(ULONGLONG ulLong) -{ - signed char ret = 0; - DWORD dw; - - if (!(dw = (DWORD)ulLong)) - { - ret = 32; - if (!(dw = ulLong >> 32)) return -1; - } - if (!(dw & 0xffff)) - { - dw >>= 16; - ret += 16; - } - if (!(dw & 0xff)) - { - dw >>= 8; - ret += 8; - } - if (!(dw & 0x0f)) - { - dw >>= 4; - ret += 4; - } - return ret + NTDLL_leastSignificant[dw & 0x0f]; -} - -/* EOF */
Modified: branches/powerpc/reactos/tools/ppc.lost+found/link-ntoskrnl URL: http://svn.reactos.org/svn/reactos/branches/powerpc/reactos/tools/ppc.lost%2... ============================================================================== --- branches/powerpc/reactos/tools/ppc.lost+found/link-ntoskrnl (original) +++ branches/powerpc/reactos/tools/ppc.lost+found/link-ntoskrnl Mon Sep 4 10:38:37 2006 @@ -1,3 +1,174 @@ #!/bin/sh -xv
-reactos-powerpc-gcc --begin-group -v -Wl,--subsystem,native -Wl,--entry,NtProcessStartup -Wl,--image-base,0x80000000 -Wl,--file-alignment,0x1000 -Wl,--section-alignment,0x1000 -nostartfiles -shared ntoskrnl.temp.exp -o output-ppc/ntoskrnl/ntoskrnl.exe obj-ppc/ntoskrnl/ke/powerpc/main_asm.o obj-ppc/ntoskrnl/ke/apc.o obj-ppc/ntoskrnl/ke/bug.o obj-ppc/ntoskrnl/ke/clock.o obj-ppc/ntoskrnl/ke/device.o obj-ppc/ntoskrnl/ke/dpc.o obj-ppc/ntoskrnl/ke/event.o obj-ppc/ntoskrnl/ke/exception.o obj-ppc/ntoskrnl/ke/gate.o obj-ppc/ntoskrnl/ke/gmutex.o obj-ppc/ntoskrnl/ke/ipi.o obj-ppc/ntoskrnl/ke/kqueue.o obj-ppc/ntoskrnl/ke/kthread.o obj-ppc/ntoskrnl/ke/main.o obj-ppc/ntoskrnl/ke/mutex.o obj-ppc/ntoskrnl/ke/process.o obj-ppc/ntoskrnl/ke/profile.o obj-ppc/ntoskrnl/ke/queue.o obj-ppc/ntoskrnl/ke/sem.o obj-ppc/ntoskrnl/ke/spinlock.o obj-ppc/ntoskrnl/ke/timer.o obj-ppc/ntoskrnl/ke/usercall.o obj-ppc/ntoskrnl/ke/wait.o obj-ppc/ntoskrnl/cc/cacheman.o obj-ppc/ntoskrnl/cc/copy.o obj-ppc/ntoskrnl/cc/fs.o obj-ppc/ntoskrnl/cc/mdl.o obj-ppc/ntoskrnl/cc/pin.o obj-ppc/ntoskrnl/cc/view.o obj-ppc/ntoskrnl/cm/import.o obj-ppc/ntoskrnl/cm/ntfunc.o obj-ppc/ntoskrnl/cm/regfile.o obj-ppc/ntoskrnl/cm/registry.o obj-ppc/ntoskrnl/cm/regobj.o obj-ppc/ntoskrnl/dbgk/dbgkutil.o obj-ppc/ntoskrnl/dbgk/debug.o obj-ppc/ntoskrnl/ex/atom.o obj-ppc/ntoskrnl/ex/callback.o obj-ppc/ntoskrnl/ex/dbgctrl.o obj-ppc/ntoskrnl/ex/error.o obj-ppc/ntoskrnl/ex/event.o obj-ppc/ntoskrnl/ex/evtpair.o obj-ppc/ntoskrnl/ex/fmutex.o obj-ppc/ntoskrnl/ex/handle.o obj-ppc/ntoskrnl/ex/init.o obj-ppc/ntoskrnl/ex/lookas.o obj-ppc/ntoskrnl/ex/mutant.o obj-ppc/ntoskrnl/ex/power.o obj-ppc/ntoskrnl/ex/pushlock.o obj-ppc/ntoskrnl/ex/profile.o obj-ppc/ntoskrnl/ex/resource.o obj-ppc/ntoskrnl/ex/rundown.o obj-ppc/ntoskrnl/ex/sem.o obj-ppc/ntoskrnl/ex/sysinfo.o obj-ppc/ntoskrnl/ex/time.o obj-ppc/ntoskrnl/ex/timer.o obj-ppc/ntoskrnl/ex/uuid.o obj-ppc/ntoskrnl/ex/win32k.o obj-ppc/ntoskrnl/ex/work.o obj-ppc/ntoskrnl/ex/zone.o obj-ppc/ntoskrnl/ex/zw.o obj-ppc/ntoskrnl/fs/context.o obj-ppc/ntoskrnl/fs/fastio.o obj-ppc/ntoskrnl/fs/filelock.o obj-ppc/ntoskrnl/fs/mcb.o obj-ppc/ntoskrnl/fs/name.o obj-ppc/ntoskrnl/fs/notify.o obj-ppc/ntoskrnl/fs/oplock.o obj-ppc/ntoskrnl/fs/pool.o obj-ppc/ntoskrnl/fs/tunnel.o obj-ppc/ntoskrnl/fs/unc.o obj-ppc/ntoskrnl/fs/util.o obj-ppc/ntoskrnl/inbv/inbv.o obj-ppc/ntoskrnl/io/adapter.o obj-ppc/ntoskrnl/io/arcname.o obj-ppc/ntoskrnl/io/bootlog.o obj-ppc/ntoskrnl/io/controller.o obj-ppc/ntoskrnl/io/device.o obj-ppc/ntoskrnl/io/deviface.o obj-ppc/ntoskrnl/io/disk.o obj-ppc/ntoskrnl/io/driver.o obj-ppc/ntoskrnl/io/efi.o obj-ppc/ntoskrnl/io/error.o obj-ppc/ntoskrnl/io/event.o obj-ppc/ntoskrnl/io/fs.o obj-ppc/ntoskrnl/io/iocomp.o obj-ppc/ntoskrnl/io/iomgr.o obj-ppc/ntoskrnl/io/iowork.o obj-ppc/ntoskrnl/io/irp.o obj-ppc/ntoskrnl/io/irq.o obj-ppc/ntoskrnl/io/mdl.o obj-ppc/ntoskrnl/io/plugplay.o obj-ppc/ntoskrnl/io/pnpdma.o obj-ppc/ntoskrnl/io/pnpmgr.o obj-ppc/ntoskrnl/io/pnpnotify.o obj-ppc/ntoskrnl/io/pnpreport.o obj-ppc/ntoskrnl/io/pnproot.o obj-ppc/ntoskrnl/io/rawfs.o obj-ppc/ntoskrnl/io/remlock.o obj-ppc/ntoskrnl/io/resource.o obj-ppc/ntoskrnl/io/share.o obj-ppc/ntoskrnl/io/symlink.o obj-ppc/ntoskrnl/io/timer.o obj-ppc/ntoskrnl/io/vpb.o obj-ppc/ntoskrnl/io/wmi.o obj-ppc/ntoskrnl/io/file.o obj-ppc/ntoskrnl/kd/wrappers/bochs.o obj-ppc/ntoskrnl/kd/wrappers/gdbstub.o obj-ppc/ntoskrnl/kd/kdinit.o obj-ppc/ntoskrnl/kd/kdio.o obj-ppc/ntoskrnl/kd/kdmain.o obj-ppc/ntoskrnl/ldr/loader.o obj-ppc/ntoskrnl/ldr/rtl.o obj-ppc/ntoskrnl/lpc/close.o obj-ppc/ntoskrnl/lpc/complete.o obj-ppc/ntoskrnl/lpc/connect.o obj-ppc/ntoskrnl/lpc/create.o obj-ppc/ntoskrnl/lpc/listen.o obj-ppc/ntoskrnl/lpc/port.o obj-ppc/ntoskrnl/lpc/query.o obj-ppc/ntoskrnl/lpc/queue.o obj-ppc/ntoskrnl/lpc/receive.o obj-ppc/ntoskrnl/lpc/reply.o obj-ppc/ntoskrnl/lpc/send.o obj-ppc/ntoskrnl/mm/anonmem.o obj-ppc/ntoskrnl/mm/aspace.o obj-ppc/ntoskrnl/mm/balance.o obj-ppc/ntoskrnl/mm/cont.o obj-ppc/ntoskrnl/mm/drvlck.o obj-ppc/ntoskrnl/mm/freelist.o obj-ppc/ntoskrnl/mm/iospace.o obj-ppc/ntoskrnl/mm/kmap.o obj-ppc/ntoskrnl/mm/marea.o obj-ppc/ntoskrnl/mm/mdl.o obj-ppc/ntoskrnl/mm/mm.o obj-ppc/ntoskrnl/mm/process.o obj-ppc/ntoskrnl/mm/mminit.o obj-ppc/ntoskrnl/mm/mpw.o obj-ppc/ntoskrnl/mm/ncache.o obj-ppc/ntoskrnl/mm/npool.o obj-ppc/ntoskrnl/mm/pagefile.o obj-ppc/ntoskrnl/mm/pageop.o obj-ppc/ntoskrnl/mm/pager.o obj-ppc/ntoskrnl/mm/pagfault.o obj-ppc/ntoskrnl/mm/paging.o obj-ppc/ntoskrnl/mm/pe.o obj-ppc/ntoskrnl/mm/physical.o obj-ppc/ntoskrnl/mm/pool.o obj-ppc/ntoskrnl/mm/ppool.o obj-ppc/ntoskrnl/mm/region.o obj-ppc/ntoskrnl/mm/rmap.o obj-ppc/ntoskrnl/mm/section.o obj-ppc/ntoskrnl/mm/verifier.o obj-ppc/ntoskrnl/mm/virtual.o obj-ppc/ntoskrnl/mm/wset.o obj-ppc/ntoskrnl/mm/elf32.o obj-ppc/ntoskrnl/mm/elf64.o obj-ppc/ntoskrnl/ob/obdir.o obj-ppc/ntoskrnl/ob/obinit.o obj-ppc/ntoskrnl/ob/obhandle.o obj-ppc/ntoskrnl/ob/obname.o obj-ppc/ntoskrnl/ob/oblife.o obj-ppc/ntoskrnl/ob/obref.o obj-ppc/ntoskrnl/ob/sdcache.o obj-ppc/ntoskrnl/ob/symlink.o obj-ppc/ntoskrnl/po/power.o obj-ppc/ntoskrnl/ps/debug.o obj-ppc/ntoskrnl/ps/idle.o obj-ppc/ntoskrnl/ps/job.o obj-ppc/ntoskrnl/ps/kill.o obj-ppc/ntoskrnl/ps/locale.o obj-ppc/ntoskrnl/ps/notify.o obj-ppc/ntoskrnl/ps/process.o obj-ppc/ntoskrnl/ps/psmgr.o obj-ppc/ntoskrnl/ps/query.o obj-ppc/ntoskrnl/ps/quota.o obj-ppc/ntoskrnl/ps/security.o obj-ppc/ntoskrnl/ps/suspend.o obj-ppc/ntoskrnl/ps/thread.o obj-ppc/ntoskrnl/ps/win32.o obj-ppc/ntoskrnl/rtl/libsupp.o obj-ppc/ntoskrnl/rtl/misc.o obj-ppc/ntoskrnl/rtl/nls.o obj-ppc/ntoskrnl/rtl/regio.o obj-ppc/ntoskrnl/rtl/strtok.o obj-ppc/ntoskrnl/se/access.o obj-ppc/ntoskrnl/se/acl.o obj-ppc/ntoskrnl/se/audit.o obj-ppc/ntoskrnl/se/lsa.o obj-ppc/ntoskrnl/se/luid.o obj-ppc/ntoskrnl/se/priv.o obj-ppc/ntoskrnl/se/sd.o obj-ppc/ntoskrnl/se/semgr.o obj-ppc/ntoskrnl/se/sid.o obj-ppc/ntoskrnl/se/token.o obj-ppc/ntoskrnl/ntoskrnl.coff obj-ppc/ntoskrnl/kdbg/kdb_symbols.o obj-ppc/lib/drivers/csq/csq.a obj-ppc/hal/hal/libhal.a obj-ppc/lib/kjs/kjs.a obj-ppc/lib/pseh/pseh.a obj-ppc/lib/rtl/rtl.a obj-ppc/lib/rossym/rossym.a obj-ppc/lib/string/string.a obj-ppc/lib/wdmguid/wdmguid.a -nostartfiles -nostdlib -lgcc -g --end-group +reactos-powerpc-ld \ + -v \ + --subsystem native \ + --entry NtProcessStartup \ + --image-base 0x80000000 \ + --file-alignment 0x1000 \ + --section-alignment 0x1000 \ + -nostartfiles -shared \ + ntoskrnl.temp.exp -o output-ppc/ntoskrnl/ntoskrnl.exe \ + obj-ppc/ntoskrnl/ke/powerpc/main_asm.o \ + obj-ppc/ntoskrnl/ke/apc.o \ + obj-ppc/ntoskrnl/ke/bug.o \ + obj-ppc/ntoskrnl/ke/clock.o \ + obj-ppc/ntoskrnl/ke/device.o \ + obj-ppc/ntoskrnl/ke/dpc.o \ + obj-ppc/ntoskrnl/ke/event.o \ + obj-ppc/ntoskrnl/ke/exception.o \ + obj-ppc/ntoskrnl/ke/gate.o \ + obj-ppc/ntoskrnl/ke/gmutex.o \ + obj-ppc/ntoskrnl/ke/ipi.o \ + obj-ppc/ntoskrnl/ke/kqueue.o \ + obj-ppc/ntoskrnl/ke/kthread.o \ + obj-ppc/ntoskrnl/ke/mutex.o \ + obj-ppc/ntoskrnl/ke/process.o \ + obj-ppc/ntoskrnl/ke/profile.o \ + obj-ppc/ntoskrnl/ke/queue.o \ + obj-ppc/ntoskrnl/ke/sem.o \ + obj-ppc/ntoskrnl/ke/spinlock.o \ + obj-ppc/ntoskrnl/ke/timer.o \ + obj-ppc/ntoskrnl/ke/usercall.o \ + obj-ppc/ntoskrnl/ke/wait.o \ + obj-ppc/ntoskrnl/cc/cacheman.o \ + obj-ppc/ntoskrnl/cc/copy.o \ + obj-ppc/ntoskrnl/cc/fs.o \ + obj-ppc/ntoskrnl/cc/mdl.o \ + obj-ppc/ntoskrnl/cc/pin.o \ + obj-ppc/ntoskrnl/cc/view.o \ + obj-ppc/ntoskrnl/cm/import.o \ + obj-ppc/ntoskrnl/cm/ntfunc.o \ + obj-ppc/ntoskrnl/cm/regfile.o \ + obj-ppc/ntoskrnl/cm/registry.o \ + obj-ppc/ntoskrnl/cm/regobj.o \ + obj-ppc/ntoskrnl/dbgk/dbgkutil.o \ + obj-ppc/ntoskrnl/dbgk/debug.o \ + obj-ppc/ntoskrnl/ex/atom.o \ + obj-ppc/ntoskrnl/ex/callback.o \ + obj-ppc/ntoskrnl/ex/dbgctrl.o \ + obj-ppc/ntoskrnl/ex/error.o \ + obj-ppc/ntoskrnl/ex/event.o \ + obj-ppc/ntoskrnl/ex/evtpair.o \ + obj-ppc/ntoskrnl/ex/fmutex.o \ + obj-ppc/ntoskrnl/ex/handle.o \ + obj-ppc/ntoskrnl/ex/init.o \ + obj-ppc/ntoskrnl/ex/lookas.o \ + obj-ppc/ntoskrnl/ex/mutant.o \ + obj-ppc/ntoskrnl/ex/power.o \ + obj-ppc/ntoskrnl/ex/pushlock.o \ + obj-ppc/ntoskrnl/ex/profile.o \ + obj-ppc/ntoskrnl/ex/resource.o \ + obj-ppc/ntoskrnl/ex/rundown.o \ + obj-ppc/ntoskrnl/ex/sem.o \ + obj-ppc/ntoskrnl/ex/sysinfo.o \ + obj-ppc/ntoskrnl/ex/time.o \ + obj-ppc/ntoskrnl/ex/timer.o \ + obj-ppc/ntoskrnl/ex/uuid.o \ + obj-ppc/ntoskrnl/ex/win32k.o \ + obj-ppc/ntoskrnl/ex/work.o \ + obj-ppc/ntoskrnl/ex/zone.o \ + obj-ppc/ntoskrnl/ex/zw.o \ + obj-ppc/ntoskrnl/fs/context.o \ + obj-ppc/ntoskrnl/fs/fastio.o \ + obj-ppc/ntoskrnl/fs/filelock.o \ + obj-ppc/ntoskrnl/fs/mcb.o \ + obj-ppc/ntoskrnl/fs/name.o \ + obj-ppc/ntoskrnl/fs/notify.o \ + obj-ppc/ntoskrnl/fs/oplock.o \ + obj-ppc/ntoskrnl/fs/pool.o \ + obj-ppc/ntoskrnl/fs/tunnel.o \ + obj-ppc/ntoskrnl/fs/unc.o \ + obj-ppc/ntoskrnl/fs/util.o \ + obj-ppc/ntoskrnl/inbv/inbv.o \ + obj-ppc/ntoskrnl/io/iomgr/*.o \ + obj-ppc/ntoskrnl/io/pnpmgr/*.o \ + obj-ppc/ntoskrnl/kd/wrappers/bochs.o \ + obj-ppc/ntoskrnl/kd/wrappers/gdbstub.o \ + obj-ppc/ntoskrnl/kd/kdinit.o \ + obj-ppc/ntoskrnl/kd/kdio.o \ + obj-ppc/ntoskrnl/kd/kdmain.o \ + obj-ppc/ntoskrnl/ldr/loader.o \ + obj-ppc/ntoskrnl/ldr/rtl.o \ + obj-ppc/ntoskrnl/lpc/close.o \ + obj-ppc/ntoskrnl/lpc/complete.o \ + obj-ppc/ntoskrnl/lpc/connect.o \ + obj-ppc/ntoskrnl/lpc/create.o \ + obj-ppc/ntoskrnl/lpc/listen.o \ + obj-ppc/ntoskrnl/lpc/port.o \ + obj-ppc/ntoskrnl/lpc/query.o \ + obj-ppc/ntoskrnl/lpc/queue.o \ + obj-ppc/ntoskrnl/lpc/receive.o \ + obj-ppc/ntoskrnl/lpc/reply.o \ + obj-ppc/ntoskrnl/lpc/send.o \ + obj-ppc/ntoskrnl/mm/anonmem.o \ + obj-ppc/ntoskrnl/mm/aspace.o \ + obj-ppc/ntoskrnl/mm/balance.o \ + obj-ppc/ntoskrnl/mm/cont.o \ + obj-ppc/ntoskrnl/mm/drvlck.o \ + obj-ppc/ntoskrnl/mm/freelist.o \ + obj-ppc/ntoskrnl/mm/iospace.o \ + obj-ppc/ntoskrnl/mm/kmap.o \ + obj-ppc/ntoskrnl/mm/marea.o \ + obj-ppc/ntoskrnl/mm/mdl.o \ + obj-ppc/ntoskrnl/mm/mm.o \ + obj-ppc/ntoskrnl/mm/process.o \ + obj-ppc/ntoskrnl/mm/mminit.o \ + obj-ppc/ntoskrnl/mm/mpw.o \ + obj-ppc/ntoskrnl/mm/ncache.o \ + obj-ppc/ntoskrnl/mm/npool.o \ + obj-ppc/ntoskrnl/mm/pagefile.o \ + obj-ppc/ntoskrnl/mm/pageop.o \ + obj-ppc/ntoskrnl/mm/pager.o \ + obj-ppc/ntoskrnl/mm/pagfault.o \ + obj-ppc/ntoskrnl/mm/paging.o \ + obj-ppc/ntoskrnl/mm/pe.o \ + obj-ppc/ntoskrnl/mm/physical.o \ + obj-ppc/ntoskrnl/mm/pool.o \ + obj-ppc/ntoskrnl/mm/ppool.o \ + obj-ppc/ntoskrnl/mm/region.o \ + obj-ppc/ntoskrnl/mm/rmap.o \ + obj-ppc/ntoskrnl/mm/section.o \ + obj-ppc/ntoskrnl/mm/verifier.o \ + obj-ppc/ntoskrnl/mm/virtual.o \ + obj-ppc/ntoskrnl/mm/wset.o \ + obj-ppc/ntoskrnl/mm/elf32.o \ + obj-ppc/ntoskrnl/mm/elf64.o \ + obj-ppc/ntoskrnl/ob/obdir.o \ + obj-ppc/ntoskrnl/ob/obinit.o \ + obj-ppc/ntoskrnl/ob/obhandle.o \ + obj-ppc/ntoskrnl/ob/obname.o \ + obj-ppc/ntoskrnl/ob/oblife.o \ + obj-ppc/ntoskrnl/ob/obref.o \ + obj-ppc/ntoskrnl/ob/sdcache.o \ + obj-ppc/ntoskrnl/ob/symlink.o \ + obj-ppc/ntoskrnl/po/power.o \ + obj-ppc/ntoskrnl/ps/*.o \ + obj-ppc/ntoskrnl/rtl/libsupp.o \ + obj-ppc/ntoskrnl/rtl/misc.o \ + obj-ppc/ntoskrnl/rtl/nls.o \ + obj-ppc/ntoskrnl/rtl/regio.o \ + obj-ppc/ntoskrnl/rtl/strtok.o \ + obj-ppc/ntoskrnl/se/access.o \ + obj-ppc/ntoskrnl/se/acl.o \ + obj-ppc/ntoskrnl/se/audit.o \ + obj-ppc/ntoskrnl/se/lsa.o \ + obj-ppc/ntoskrnl/se/luid.o \ + obj-ppc/ntoskrnl/se/priv.o \ + obj-ppc/ntoskrnl/se/sd.o \ + obj-ppc/ntoskrnl/se/semgr.o \ + obj-ppc/ntoskrnl/se/sid.o \ + obj-ppc/ntoskrnl/se/token.o \ + obj-ppc/ntoskrnl/ntoskrnl.coff \ + obj-ppc/ntoskrnl/kdbg/kdb_symbols.o \ + obj-ppc/lib/drivers/csq/csq.a \ + obj-ppc/hal/hal/libhal.a \ + obj-ppc/lib/kjs/kjs.a \ + obj-ppc/lib/pseh/pseh.a \ + obj-ppc/lib/rtl/rtl.a \ + obj-ppc/lib/rossym/rossym.a \ + obj-ppc/lib/string/string.a \ + obj-ppc/lib/wdmguid/wdmguid.a \ + -nostartfiles \ + -nostdlib \ + -lgcc -g