diff --git a/reactos/drivers/net/wshtcpip/.cvsignore b/reactos/drivers/net/wshtcpip/.cvsignore new file mode 100644 index 00000000000..140d8f104f0 --- /dev/null +++ b/reactos/drivers/net/wshtcpip/.cvsignore @@ -0,0 +1,6 @@ +wshtcpip.a +wshtcpip.dll +wshtcpip.coff +base.tmp +junk.tmp +temp.exp diff --git a/reactos/drivers/net/wshtcpip/debug.h b/reactos/drivers/net/wshtcpip/debug.h new file mode 100644 index 00000000000..aa0e09ca497 --- /dev/null +++ b/reactos/drivers/net/wshtcpip/debug.h @@ -0,0 +1,71 @@ +/* + * COPYRIGHT: See COPYING in the top level directory + * PROJECT: ReactOS WinSock Helper DLL for TCP/IP + * FILE: include/debug.h + * PURPOSE: Debugging support macros + * DEFINES: DBG - Enable debug output + * NASSERT - Disable assertions + */ +#ifndef __DEBUG_H +#define __DEBUG_H + +#define NORMAL_MASK 0x000000FF +#define SPECIAL_MASK 0xFFFFFF00 +#define MIN_TRACE 0x00000001 +#define MID_TRACE 0x00000002 +#define MAX_TRACE 0x00000003 + +#define DEBUG_ULTRA 0xFFFFFFFF + +#ifdef DBG + +extern DWORD DebugTraceLevel; + +#define Get_DbgPrint(quote...) L##quote + +#define WSH_DbgPrint(_t_, _x_) \ + if (((DebugTraceLevel & NORMAL_MASK) >= _t_) || \ + ((DebugTraceLevel & _t_) > NORMAL_MASK)) { \ + WCHAR _buffer[256]; \ + swprintf(_buffer, L"(%s:%d)(%s) ", __FILE__, __LINE__, __FUNCTION__); \ + OutputDebugStringW(_buffer); \ + swprintf(_buffer, Get_DbgPrint _x_); \ + OutputDebugStringW(_buffer); \ + } + +#ifdef ASSERT +#undef ASSERT +#endif + +#ifdef NASSERT +#define ASSERT(x) +#else /* NASSERT */ +#define ASSERT(x) if (!(x)) { WSH_DbgPrint(MIN_TRACE, ("Assertion "#x" failed at %s:%d\n", __FILE__, __LINE__)); KeBugCheck(0); } +#endif /* NASSERT */ + +#define ASSERT_IRQL(x) ASSERT(KeGetCurrentIrql() <= (x)) + +#else /* DBG */ + +#define WSH_DbgPrint(_t_, _x_) + +#define ASSERT_IRQL(x) +#define ASSERT(x) + +#endif /* DBG */ + + +#define assert(x) ASSERT(x) +#define assert_irql(x) ASSERT_IRQL(x) + + +#define UNIMPLEMENTED \ + WSH_DbgPrint(MIN_TRACE, ("(%s:%d)(%s) is unimplemented, \ + please try again later.\n", __FILE__, __LINE__, __FUNCTION__)); + +#define CHECKPOINT \ + do { WSH_DbgPrint(MIN_TRACE, ("(%s:%d)\n", __FILE__, __LINE__)); } while(0); + +#endif /* __DEBUG_H */ + +/* EOF */ diff --git a/reactos/drivers/net/wshtcpip/makefile b/reactos/drivers/net/wshtcpip/makefile new file mode 100644 index 00000000000..56c862a2ed0 --- /dev/null +++ b/reactos/drivers/net/wshtcpip/makefile @@ -0,0 +1,90 @@ +# Makefile for ReactOS WinSock Helper DLL for TCP/IP + +PATH_TO_TOP = ../../.. + +BASE_CFLAGS = -I./ -I../../../include -DUNICODE + +TARGETNAME=wshtcpip + +MAIN_OBJECTS = $(TARGETNAME).o + +RESOURCE_OBJECT = $(TARGETNAME).coff + +OBJECTS = $(MAIN_OBJECTS) $(RESOURCE_OBJECT) + +LIBS = ../../../lib/ntdll/ntdll.a \ + ../../../lib/kernel32/kernel32.a \ + ../../../lib/ws2_32/ws2_32.a + +ifeq ($(DOSCLI),yes) +CLEAN_FILES = $(TARGETNAME).o $(TARGETNAME).a junk.tmp base.tmp temp.exp \ + $(TARGETNAME).dll $(TARGETNAME).sym $(TARGETNAME).coff +else +CLEAN_FILES = $(TARGETNAME).o $(TARGETNAME).a junk.tmp base.tmp temp.exp \ + $(TARGETNAME).dll $(TARGETNAME).sym $(TARGETNAME).coff +endif + +all: $(TARGETNAME).dll + +$(TARGETNAME).coff: $(TARGETNAME).rc ../../../include/reactos/resource.h + +$(TARGETNAME).dll: $(LIBS) $(OBJECTS) $(TARGETNAME).def + $(DLLTOOL) \ + --dllname $(TARGETNAME).dll \ + --def $(TARGETNAME).def \ + --kill-at \ + --output-lib $(TARGETNAME).a + $(CC) \ + $(TARGETNAME).o \ + $(LIBS) \ + -specs=$(TARGETNAME)_specs \ + -mdll \ + -o junk.tmp \ + -Wl,--base-file,base.tmp + - $(RM) junk.tmp + $(DLLTOOL) \ + --dllname $(TARGETNAME).dll \ + --base-file base.tmp \ + --output-exp temp.exp \ + --def $(TARGETNAME).edf + - $(RM) base.tmp + $(CC) \ + $(OBJECTS) $(LIBS) \ + -specs=$(TARGETNAME)_specs \ + -mdll \ + -o $(TARGETNAME).dll \ + -Wl,--image-base,0x10000 \ + -Wl,--file-alignment,0x1000 \ + -Wl,--section-alignment,0x1000 \ + -Wl,temp.exp + - $(RM) temp.exp + $(NM) --numeric-sort $(TARGETNAME).dll > $(TARGETNAME).sym + + +clean: $(CLEAN_FILES:%=%_clean) + +$(CLEAN_FILES:%=%_clean): %_clean: + - $(RM) $* + +.PHONY: clean $(CLEAN_FILES:%=%_clean) + +install: $(FLOPPY_DIR)/dlls/$(TARGETNAME).dll + +$(FLOPPY_DIR)/dlls/$(TARGETNAME).dll: $(TARGETNAME).dll +ifeq ($(DOSCLI),yes) + $(CP) $(TARGETNAME).dll $(FLOPPY_DIR)\dlls\$(TARGETNAME).dll +else + $(CP) $(TARGETNAME).dll $(FLOPPY_DIR)/dlls/$(TARGETNAME).dll +endif + +dist: $(DIST_DIR)/dlls/$(TARGETNAME).dll + +$(DIST_DIR)/dlls/$(TARGETNAME).dll: $(TARGETNAME).dll +ifeq ($(DOSCLI),yes) + $(CP) $(TARGETNAME).dll ..\..\$(DIST_DIR)\dlls\$(TARGETNAME).dll +else + $(CP) $(TARGETNAME).dll ../../$(DIST_DIR)/dlls/$(TARGETNAME).dll +endif + +include ../../../rules.mak + diff --git a/reactos/drivers/net/wshtcpip/wshtcpip.c b/reactos/drivers/net/wshtcpip/wshtcpip.c new file mode 100644 index 00000000000..25032a9e80a --- /dev/null +++ b/reactos/drivers/net/wshtcpip/wshtcpip.c @@ -0,0 +1,382 @@ +/* + * COPYRIGHT: See COPYING in the top level directory + * PROJECT: ReactOS WinSock Helper DLL for TCP/IP + * FILE: wshtcpip.c + * PURPOSE: DLL entry + * PROGRAMMERS: Casper S. Hornstrup (chorns@users.sourceforge.net) + * REVISIONS: + * CSH 01/09-2000 Created + */ +#include + +#ifdef DBG + +/* See debug.h for debug/trace constants */ +DWORD DebugTraceLevel = MIN_TRACE; + +#endif /* DBG */ + +/* To make the linker happy */ +VOID STDCALL KeBugCheck (ULONG BugCheckCode) {} + + +BOOL +EXPORT +DllMain(PVOID hInstDll, + ULONG dwReason, + PVOID Reserved) +{ + OutputDebugString(_T("Hello from wshtcpip.dll\n")); + WSH_DbgPrint(MIN_TRACE, ("DllMain of wshtcpip.dll\n")); + + switch (dwReason) { + case DLL_PROCESS_ATTACH: + /* Don't need thread attach notifications + so disable them to improve performance */ + DisableThreadLibraryCalls(hInstDll); + break; + + case DLL_THREAD_ATTACH: + break; + + case DLL_THREAD_DETACH: + break; + + case DLL_PROCESS_DETACH: + break; + } + return TRUE; +} + + +INT +EXPORT +WSHAddressToString( + IN LPSOCKADDR Address, + IN INT AddressLength, + IN LPWSAPROTOCOL_INFOW ProtocolInfo OPTIONAL, + OUT LPWSTR AddressString, + IN OUT LPDWORD AddressStringLength) +{ + UNIMPLEMENTED + + return 0; +} + + +INT +EXPORT +WSHEnumProtocols( + IN LPINT lpiProtocols OPTIONAL, + IN LPWSTR lpTransportKeyName, + IN OUT LPVOID lpProtocolBuffer, + IN OUT LPDWORD lpdwBufferLength) +{ + UNIMPLEMENTED + + return 0; +} + + +INT +EXPORT +WSHGetBroadcastSockaddr( + IN PVOID HelperDllSocketContext, + OUT PSOCKADDR Sockaddr, + OUT PINT SockaddrLength) +{ + UNIMPLEMENTED + + return 0; +} + + +INT +EXPORT +WSHGetProviderGuid( + IN LPWSTR ProviderName, + OUT LPGUID ProviderGuid) +{ + UNIMPLEMENTED + + return 0; +} + + +INT +EXPORT +WSHGetSockaddrType( + IN PSOCKADDR Sockaddr, + IN DWORD SockaddrLength, + OUT PSOCKADDR_INFO SockaddrInfo) +{ + UNIMPLEMENTED + + return 0; +} + + +INT +EXPORT +WSHGetSocketInformation( + IN PVOID HelperDllSocketContext, + IN SOCKET SocketHandle, + IN HANDLE TdiAddressObjectHandle, + IN HANDLE TdiConnectionObjectHandle, + IN INT Level, + IN INT OptionName, + OUT PCHAR OptionValue, + OUT INT OptionLength) +{ + UNIMPLEMENTED + + return 0; +} + + +INT +EXPORT +WSHGetWildcardSockaddr( + IN PVOID HelperDllSocketContext, + OUT PSOCKADDR Sockaddr, + OUT PINT SockaddrLength) +{ + UNIMPLEMENTED + + return 0; +} + + +DWORD +EXPORT +WSHGetWinsockMapping( + OUT PWINSOCK_MAPPING Mapping, + IN DWORD MappingLength) +{ + UNIMPLEMENTED + + return 0; +} + + +INT +EXPORT +WSHGetWSAProtocolInfo( + IN LPWSTR ProviderName, + OUT LPWSAPROTOCOL_INFOW *ProtocolInfo, + OUT LPDWORD ProtocolInfoEntries) +{ + UNIMPLEMENTED + + return 0; +} + + +INT +EXPORT +WSHIoctl( + IN PVOID HelperDllSocketContext, + IN SOCKET SocketHandle, + IN HANDLE TdiAddressObjectHandle, + IN HANDLE TdiConnectionObjectHandle, + IN DWORD IoControlCode, + IN LPVOID InputBuffer, + IN DWORD InputBufferLength, + IN LPVOID OutputBuffer, + IN DWORD OutputBufferLength, + OUT LPDWORD NumberOfBytesReturned, + IN LPWSAOVERLAPPED Overlapped, + IN LPWSAOVERLAPPED_COMPLETION_ROUTINE CompletionRoutine, + OUT LPBOOL NeedsCompletion) +{ + UNIMPLEMENTED + + return 0; +} + + +INT +EXPORT +WSHJoinLeaf( + IN PVOID HelperDllSocketContext, + IN SOCKET SocketHandle, + IN HANDLE TdiAddressObjectHandle, + IN HANDLE TdiConnectionObjectHandle, + IN PVOID LeafHelperDllSocketContext, + IN SOCKET LeafSocketHandle, + IN PSOCKADDR Sockaddr, + IN DWORD SockaddrLength, + IN LPWSABUF CallerData, + IN LPWSABUF CalleeData, + IN LPQOS SocketQOS, + IN LPQOS GroupQOS, + IN DWORD Flags) +{ + UNIMPLEMENTED + + return 0; +} + + +INT +EXPORT +WSHNotify( + IN PVOID HelperDllSocketContext, + IN SOCKET SocketHandle, + IN HANDLE TdiAddressObjectHandle, + IN HANDLE TdiConnectionObjectHandle, + IN DWORD NotifyEvent) +{ + UNIMPLEMENTED + + return 0; +} + + +INT +EXPORT +WSHOpenSocket( + IN OUT PINT AddressFamily, + IN OUT PINT SocketType, + IN OUT PINT Protocol, + OUT PUNICODE_STRING TransportDeviceName, + OUT PVOID HelperDllSocketContext, + OUT PDWORD NotificationEvents) +/* + * FUNCTION: Opens a socket + */ +{ + return WSHOpenSocket2(AddressFamily, + SocketType, + Protocol, + 0, + 0, + TransportDeviceName, + HelperDllSocketContext, + NotificationEvents); +} + + +INT +EXPORT +WSHOpenSocket2( + OUT PINT AddressFamily, + IN OUT PINT SocketType, + IN OUT PINT Protocol, + IN GROUP Group, + IN DWORD Flags, + OUT PUNICODE_STRING TransportDeviceName, + OUT PVOID *HelperDllSocketContext, + OUT PDWORD NotificationEvents) +/* + * FUNCTION: Opens a socket + * ARGUMENTS: + * AddressFamily = Address of buffer with address family (updated) + * SocketType = Address of buffer with type of socket (updated) + * Protocol = Address of buffer with protocol number (updated) + * Group = Socket group + * Flags = Socket flags + * TransportDeviceName = Address of buffer to place name of transport device + * HelperDllSocketContext = Address of buffer to place socket context pointer + * NotificationEvents = Address of buffer to place flags for event notification + * RETURNS: + * Status of operation + * NOTES: + * Mapping tripple is returned in an canonicalized form + */ +{ + PSOCKET_CONTEXT Context; + UNICODE_STRING String; + NTSTATUS Status; + + /* FIXME: Raw IP only. Support UDP and TCP */ + ASSERT(*SocketType == SOCK_RAW); + + if (*Protocol < 0 || *Protocol > 255) + return WSAEINVAL; + + RtlInitUnicodeString(&String, DD_RAW_IP_DEVICE_NAME); + + RtlInitUnicodeString(TransportDeviceName, NULL); + + TransportDeviceName->MaximumLength = String.Length + /* Transport device name */ + (4 * sizeof(WCHAR) + /* Separator and protocol */ + sizeof(UNICODE_NULL)); /* Terminating null */ + + TransportDeviceName->Buffer = HeapAlloc( + GetProcessHeap(), + 0, + TransportDeviceName->MaximumLength); + + if (!TransportDeviceName->Buffer) + return WSAENOBUFS; + + /* Append the transport device name */ + Status = RtlAppendUnicodeStringToString(TransportDeviceName, &String); + + /* Append a separator */ + TransportDeviceName->Buffer[TransportDeviceName->Length / sizeof(WCHAR)] = OBJ_NAME_PATH_SEPARATOR; + TransportDeviceName->Length += sizeof(WCHAR); + TransportDeviceName->Buffer[TransportDeviceName->Length / sizeof(WCHAR)] = UNICODE_NULL; + + /* Append the protocol number */ + String.Buffer = TransportDeviceName->Buffer + (TransportDeviceName->Length / sizeof(WCHAR)); + String.Length = 0; + String.MaximumLength = TransportDeviceName->MaximumLength - TransportDeviceName->Length; + + Status = RtlIntegerToUnicodeString((ULONG)*Protocol, 10, &String); + + TransportDeviceName->Length += String.Length; + + /* Setup a socket context area */ + + Context = HeapAlloc(GetProcessHeap(), 0, sizeof(SOCKET_CONTEXT)); + if (!Context) { + RtlFreeUnicodeString(TransportDeviceName); + return WSAENOBUFS; + } + + Context->AddressFamily = *AddressFamily; + Context->SocketType = *SocketType; + Context->Protocol = *Protocol; + Context->Flags = Flags; + + *HelperDllSocketContext = Context; + + return NO_ERROR; +} + + +INT +EXPORT +WSHSetSocketInformation( + IN PVOID HelperDllSocketContext, + IN SOCKET SocketHandle, + IN HANDLE TdiAddressObjectHandle, + IN HANDLE TdiConnectionObjectHandle, + IN INT Level, + IN INT OptionName, + IN PCHAR OptionValue, + IN INT OptionLength) +{ + UNIMPLEMENTED + + return 0; +} + + +INT +EXPORT +WSHStringToAddress( + IN LPWSTR AddressString, + IN DWORD AddressFamily, + IN LPWSAPROTOCOL_INFOW ProtocolInfo OPTIONAL, + OUT LPSOCKADDR Address, + IN OUT LPDWORD AddressStringLength) +{ + UNIMPLEMENTED + + return 0; +} + +/* EOF */ diff --git a/reactos/drivers/net/wshtcpip/wshtcpip.def b/reactos/drivers/net/wshtcpip/wshtcpip.def new file mode 100644 index 00000000000..f4f70d6fef8 --- /dev/null +++ b/reactos/drivers/net/wshtcpip/wshtcpip.def @@ -0,0 +1,23 @@ +; WSHTCPIP.DLL - Windows Sockets Helper DLL for TCP/IP + +LIBRARY wshtcpip.dll + +EXPORTS +WSHAddressToString@20 +WSHEnumProtocols@16 +WSHGetBroadcastSockaddr@12 +WSHGetProviderGuid@8 +WSHGetSockaddrType@12 +WSHGetSocketInformation@32 +WSHGetWildcardSockaddr@12 +WSHGetWinsockMapping@8 +WSHGetWSAProtocolInfo@12 +WSHIoctl@52 +WSHJoinLeaf@52 +WSHNotify@20 +WSHOpenSocket@24 +WSHOpenSocket2@32 +WSHSetSocketInformation@32 +WSHStringToAddress@20 + +; EOF diff --git a/reactos/drivers/net/wshtcpip/wshtcpip.edf b/reactos/drivers/net/wshtcpip/wshtcpip.edf new file mode 100644 index 00000000000..80c9db32a4c --- /dev/null +++ b/reactos/drivers/net/wshtcpip/wshtcpip.edf @@ -0,0 +1,23 @@ +; WSHTCPIP.DLL - Windows Sockets Helper DLL for TCP/IP + +LIBRARY wshtcpip.dll + +EXPORTS +WSHAddressToString=WSHAddressToString@20 +WSHEnumProtocols=WSHEnumProtocols@16 +WSHGetBroadcastSockaddr=WSHGetBroadcastSockaddr@12 +WSHGetProviderGuid=WSHGetProviderGuid@8 +WSHGetSockaddrType=WSHGetSockaddrType@12 +WSHGetSocketInformation=WSHGetSocketInformation@32 +WSHGetWildcardSockaddr=WSHGetWildcardSockaddr@12 +WSHGetWinsockMapping=WSHGetWinsockMapping@8 +WSHGetWSAProtocolInfo=WSHGetWSAProtocolInfo@12 +WSHIoctl=WSHIoctl@52 +WSHJoinLeaf=WSHJoinLeaf@52 +WSHNotify=WSHNotify@20 +WSHOpenSocket=WSHOpenSocket@24 +WSHOpenSocket2=WSHOpenSocket2@32 +WSHSetSocketInformation=WSHSetSocketInformation@32 +WSHStringToAddress=WSHStringToAddress@20 + +; EOF diff --git a/reactos/drivers/net/wshtcpip/wshtcpip.h b/reactos/drivers/net/wshtcpip/wshtcpip.h new file mode 100644 index 00000000000..3f52842a8d8 --- /dev/null +++ b/reactos/drivers/net/wshtcpip/wshtcpip.h @@ -0,0 +1,33 @@ +/* + * COPYRIGHT: See COPYING in the top level directory + * PROJECT: ReactOS WinSock Helper DLL for TCP/IP + * FILE: include/wshtcpip.h + * PURPOSE: WinSock Helper DLL for TCP/IP header + */ +#ifndef __WSHTCPIP_H +#define __WSHTCPIP_H + +#include +#include +#include +#include + +#define EXPORT STDCALL + +#define OBJ_NAME_PATH_SEPARATOR ((WCHAR)L'\\') + +#define DD_TCP_DEVICE_NAME L"\\Device\\Tcp" +#define DD_UDP_DEVICE_NAME L"\\Device\\Udp" +#define DD_RAW_IP_DEVICE_NAME L"\\Device\\RawIp" + + +typedef struct _SOCKET_CONTEXT { + INT AddressFamily; + INT SocketType; + INT Protocol; + DWORD Flags; +} SOCKET_CONTEXT, *PSOCKET_CONTEXT; + +#endif /* __WSHTCPIP_H */ + +/* EOF */ diff --git a/reactos/drivers/net/wshtcpip/wshtcpip.rc b/reactos/drivers/net/wshtcpip/wshtcpip.rc new file mode 100644 index 00000000000..ec734e417a4 --- /dev/null +++ b/reactos/drivers/net/wshtcpip/wshtcpip.rc @@ -0,0 +1,39 @@ +#include +#include + +LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US + +VS_VERSION_INFO VERSIONINFO + FILEVERSION RES_UINT_FV_MAJOR,RES_UINT_FV_MINOR,RES_UINT_FV_REVISION,RES_UINT_FV_BUILD + PRODUCTVERSION RES_UINT_PV_MAJOR,RES_UINT_PV_MINOR,RES_UINT_PV_REVISION,RES_UINT_PV_BUILD + FILEFLAGSMASK 0x3fL +#ifdef _DEBUG + FILEFLAGS 0x1L +#else + FILEFLAGS 0x0L +#endif + FILEOS 0x40004L + FILETYPE 0x2L + FILESUBTYPE 0x0L +BEGIN + BLOCK "StringFileInfo" + BEGIN + BLOCK "040904b0" + BEGIN + VALUE "CompanyName", RES_STR_COMPANY_NAME + VALUE "FileDescription", "Windows Sockets 2 API\0" + VALUE "FileVersion", RES_STR_FILE_VERSION + VALUE "InternalName", "ws2_32\0" + VALUE "LegalCopyright", RES_STR_LEGAL_COPYRIGHT + VALUE "OriginalFilename", "ws2_32.dll\0" + VALUE "ProductName", RES_STR_PRODUCT_NAME + VALUE "ProductVersion", RES_STR_PRODUCT_VERSION + END + END + BLOCK "VarFileInfo" + BEGIN + VALUE "Translation", 0x409, 1200 + END +END + + diff --git a/reactos/drivers/net/wshtcpip/wshtcpip_specs b/reactos/drivers/net/wshtcpip/wshtcpip_specs new file mode 100644 index 00000000000..02ba08d1e79 --- /dev/null +++ b/reactos/drivers/net/wshtcpip/wshtcpip_specs @@ -0,0 +1,78 @@ +*asm: + + +*asm_final: + + +*cpp: +-remap %(cpp_cpu) %{posix:-D_POSIX_SOURCE} + +*cc1: +%(cc1_spec) + +*cc1plus: + + +*endfile: + + +*link: +%{mwindows:--subsystem windows} %{mdll:--dll -e _DllMain@12} + +*lib: + + +*libgcc: +-lgcc + +*startfile: + + +*switches_need_spaces: + + +*signed_char: +%{funsigned-char:-D__CHAR_UNSIGNED__} + +*predefines: +-Di386 -D_WIN32 -DWIN32 -D__WIN32__ -D__MINGW32__ -DWINNT -D_X86_=1 -D__STDC__=1 -D__stdcall=__attribute__((__stdcall__)) -D_stdcall=__attribute__((__stdcall__)) -D__cdecl=__attribute__((__cdecl__)) -D__declspec(x)=__attribute__((x)) -Asystem(winnt) -Acpu(i386) -Amachine(i386) + +*cross_compile: +1 + +*version: +egcs-2.91.57 + +*multilib: +. ; + +*multilib_defaults: + + +*multilib_extra: + + +*multilib_matches: + + +*linker: +collect2 + +*cpp_486: +%{!ansi:-Di486} -D__i486 -D__i486__ + +*cpp_586: +%{!ansi:-Di586 -Dpentium} -D__i586 -D__i586__ -D__pentium -D__pentium__ + +*cpp_686: +%{!ansi:-Di686 -Dpentiumpro} -D__i686 -D__i686__ -D__pentiumpro -D__pentiumpro__ + +*cpp_cpu_default: +%(cpp_586) + +*cpp_cpu: +-Acpu(i386) -Amachine(i386) %{!ansi:-Di386} -D__i386 -D__i386__ %{mcpu=i486:%(cpp_486)} %{m486:%(cpp_486)} %{mpentium:%(cpp_586)} %{mcpu=pentium:%(cpp_586)} %{mpentiumpro:%(cpp_686)} %{mcpu=pentiumpro:%(cpp_686)} %{!mcpu*:%{!m486:%{!mpentium*:%(cpp_cpu_default)}}} + +*cc1_cpu: +%{!mcpu*: %{m386:-mcpu=i386 -march=i386} %{mno-486:-mcpu=i386 -march=i386} %{m486:-mcpu=i486 -march=i486} %{mno-386:-mcpu=i486 -march=i486} %{mno-pentium:-mcpu=i486 -march=i486} %{mpentium:-mcpu=pentium} %{mno-pentiumpro:-mcpu=pentium} %{mpentiumpro:-mcpu=pentiumpro}} +