Author: peterw
Date: Mon Oct 22 03:12:07 2007
New Revision: 29760
URL:
http://svn.reactos.org/svn/reactos?rev=29760&view=rev
Log:
- Updated patches to the latest ones.
Added:
trunk/tools/RosBE-Windows/Patches/GCC-v4.1-r129382-prerelease-w3seek.patch (with
props)
trunk/tools/RosBE-Windows/Patches/GCC-v4.1-r129382-virtual-stdcall-bug27067.patch
(with props)
trunk/tools/RosBE-Windows/Patches/GCC-v4.1-r129490-CreateFileMapping-Vista-bug30335.patch
(with props)
trunk/tools/RosBE-Windows/Patches/binutils-2.18.50.10-15-2007-snapshot-hpoussin.patch
(with props)
Removed:
trunk/tools/RosBE-Windows/Patches/ld.patch
trunk/tools/RosBE-Windows/Patches/mingw-lazy-port-gcc-4_1-branch.patch
Added: trunk/tools/RosBE-Windows/Patches/GCC-v4.1-r129382-prerelease-w3seek.patch
URL:
http://svn.reactos.org/svn/reactos/trunk/tools/RosBE-Windows/Patches/GCC-v4…
==============================================================================
--- trunk/tools/RosBE-Windows/Patches/GCC-v4.1-r129382-prerelease-w3seek.patch (added)
+++ trunk/tools/RosBE-Windows/Patches/GCC-v4.1-r129382-prerelease-w3seek.patch Mon Oct 22
03:12:07 2007
@@ -1,0 +1,81 @@
+Index: libstdc++-v3/config/os/mingw32/os_defines.h
+===================================================================
+--- libstdc++-v3/config/os/mingw32/os_defines.h (revision 129382)
++++ libstdc++-v3/config/os/mingw32/os_defines.h (working copy)
+@@ -45,6 +45,13 @@
+ #undef NOMINMAX
+ #define NOMINMAX 1
+
++// mingw32 local hack: Override _GLIBCXX_USE_WCHAR_T for wstring
++#define _GLIBCXX_USE_WSTRING 1
++
++// mingw32 local hack: Cast long double to doubles to workaround
++// printf bug.
++#define _GLIBCXX_NO_LONG_DOUBLE_IO 0
++
+ // See libstdc++/20806.
+ #define _GLIBCXX_HAVE_DOS_BASED_FILESYSTEM 1
+
+Index: libstdc++-v3/include/bits/char_traits.h
+===================================================================
+--- libstdc++-v3/include/bits/char_traits.h (revision 129382)
++++ libstdc++-v3/include/bits/char_traits.h (working copy)
+@@ -295,7 +295,7 @@
+ };
+
+
+-#ifdef _GLIBCXX_USE_WCHAR_T
++#if defined (_GLIBCXX_USE_WCHAR_T) || defined (_GLIBCXX_USE_WSTRING)
+ /// @brief 21.1.3.2 char_traits specializations
+ template<>
+ struct char_traits<wchar_t>
+@@ -303,8 +303,10 @@
+ typedef wchar_t char_type;
+ typedef wint_t int_type;
+ typedef streamoff off_type;
++#if defined (_GLIBCXX_USE_WCHAR_T)
+ typedef wstreampos pos_type;
+ typedef mbstate_t state_type;
++#endif
+
+ static void
+ assign(char_type& __c1, const char_type& __c2)
+Index: libstdc++-v3/include/bits/stringfwd.h
+===================================================================
+--- libstdc++-v3/include/bits/stringfwd.h (revision 129382)
++++ libstdc++-v3/include/bits/stringfwd.h (working copy)
+@@ -59,7 +59,7 @@
+
+ typedef basic_string<char> string;
+
+-#ifdef _GLIBCXX_USE_WCHAR_T
++#if defined (_GLIBCXX_USE_WCHAR_T) || defined (_GLIBCXX_USE_WSTRING)
+ template<> struct char_traits<wchar_t>;
+
+ typedef basic_string<wchar_t> wstring;
+Index: libstdc++-v3/include/c_std/std_cwchar.h
+===================================================================
+--- libstdc++-v3/include/c_std/std_cwchar.h (revision 129382)
++++ libstdc++-v3/include/c_std/std_cwchar.h (working copy)
+@@ -138,7 +138,7 @@
+ #undef wprintf
+ #undef wscanf
+
+-#if _GLIBCXX_USE_WCHAR_T
++#if _GLIBCXX_USE_WCHAR_T || _GLIBCXX_USE_WSTRING
+ namespace std
+ {
+ using ::wint_t;
+Index: libstdc++-v3/include/c_std/std_cwctype.h
+===================================================================
+--- libstdc++-v3/include/c_std/std_cwctype.h (revision 129382)
++++ libstdc++-v3/include/c_std/std_cwctype.h (working copy)
+@@ -75,7 +75,7 @@
+ #undef wctrans
+ #undef wctype
+
+-#if _GLIBCXX_USE_WCHAR_T
++#if _GLIBCXX_USE_WCHAR_T || _GLIBCXX_USE_WSTRING
+ namespace std
+ {
+ using ::wint_t; // cwchar
Propchange: trunk/tools/RosBE-Windows/Patches/GCC-v4.1-r129382-prerelease-w3seek.patch
------------------------------------------------------------------------------
svn:eol-style = native
Added: trunk/tools/RosBE-Windows/Patches/GCC-v4.1-r129382-virtual-stdcall-bug27067.patch
URL:
http://svn.reactos.org/svn/reactos/trunk/tools/RosBE-Windows/Patches/GCC-v4…
==============================================================================
--- trunk/tools/RosBE-Windows/Patches/GCC-v4.1-r129382-virtual-stdcall-bug27067.patch
(added)
+++ trunk/tools/RosBE-Windows/Patches/GCC-v4.1-r129382-virtual-stdcall-bug27067.patch Mon
Oct 22 03:12:07 2007
@@ -1,0 +1,137 @@
+Index: gcc/target.h
+===================================================================
+--- gcc/target.h (revision 129382)
++++ gcc/target.h (working copy)
+@@ -186,6 +186,13 @@
+ /* Output a DTP-relative reference to a TLS symbol. */
+ void (*output_dwarf_dtprel) (FILE *file, int size, rtx x);
+
++/* This target hook allows the operating system to modify the extern
++ assembler name
++ of a DECL. For example, windows targets use this to decorate stdcall and
++ fastcall functions
++ with a a trailing '@n'. */
++ void (*change_extern_name) (tree decl);
++
+ } asm_out;
+
+ /* Functions relating to instruction scheduling. */
+Index: gcc/cp/method.c
+===================================================================
+--- gcc/cp/method.c (revision 129382)
++++ gcc/cp/method.c (working copy)
+@@ -350,6 +350,8 @@
+ this translation unit. */
+ TREE_ADDRESSABLE (function) = 1;
+ mark_used (function);
++ /* The DECL_ASSEMBLER_NAME of the thunked function may need modification. */
++ targetm.asm_out.change_extern_name (function);
+ if (!emit_p)
+ return;
+
+Index: gcc/target-def.h
+===================================================================
+--- gcc/target-def.h (revision 129382)
++++ gcc/target-def.h (working copy)
+@@ -205,6 +205,10 @@
+ #define TARGET_ASM_OUTPUT_DWARF_DTPREL NULL
+ #endif
+
++#ifndef TARGET_ASM_CHANGE_EXTERN_NAME
++#define TARGET_ASM_CHANGE_EXTERN_NAME hook_void_tree
++#endif
++
+ #define TARGET_ASM_ALIGNED_INT_OP \
+ {TARGET_ASM_ALIGNED_HI_OP, \
+ TARGET_ASM_ALIGNED_SI_OP, \
+@@ -248,7 +252,8 @@
+ TARGET_ASM_FILE_END, \
+ TARGET_ASM_EXTERNAL_LIBCALL, \
+ TARGET_ASM_MARK_DECL_PRESERVED, \
+- TARGET_ASM_OUTPUT_DWARF_DTPREL}
++ TARGET_ASM_OUTPUT_DWARF_DTPREL, \
++ TARGET_ASM_CHANGE_EXTERN_NAME}
+
+ /* Scheduler hooks. All of these default to null pointers, which
+ haifa-sched.c looks for and handles. */
+Index: gcc/config/i386/cygming.h
+===================================================================
+--- gcc/config/i386/cygming.h (revision 129382)
++++ gcc/config/i386/cygming.h (working copy)
+@@ -335,6 +335,7 @@
+ extern void i386_pe_file_end (void);
+ extern int i386_pe_dllexport_name_p (const char *);
+ extern int i386_pe_dllimport_name_p (const char *);
++extern void i386_pe_decorate_assembler_name (tree);
+
+ /* For Win32 ABI compatibility */
+ #undef DEFAULT_PCC_STRUCT_RETURN
+@@ -412,6 +413,7 @@
+
+ #define TARGET_VALID_DLLIMPORT_ATTRIBUTE_P i386_pe_valid_dllimport_attribute_p
+ #define TARGET_CXX_ADJUST_CLASS_AT_DEFINITION i386_pe_adjust_class_at_definition
++#define TARGET_ASM_CHANGE_EXTERN_NAME i386_pe_decorate_assembler_name
+
+ #undef TREE
+
+Index: gcc/config/i386/winnt.c
+===================================================================
+--- gcc/config/i386/winnt.c (revision 129382)
++++ gcc/config/i386/winnt.c (working copy)
+@@ -335,33 +335,38 @@
+ }
+
+ void
+-i386_pe_encode_section_info (tree decl, rtx rtl, int first)
++i386_pe_decorate_assembler_name (tree decl)
+ {
+- default_encode_section_info (decl, rtl, first);
++ tree type_attributes = TYPE_ATTRIBUTES (TREE_TYPE (decl));
++ tree newid = NULL_TREE;
+
+- if (first && TREE_CODE (decl) == FUNCTION_DECL)
+- {
+- tree type_attributes = TYPE_ATTRIBUTES (TREE_TYPE (decl));
+- tree newid = NULL_TREE;
++ if (lookup_attribute ("stdcall", type_attributes))
++ newid = gen_stdcall_or_fastcall_suffix (decl, false);
++ else if (lookup_attribute ("fastcall", type_attributes))
++ newid = gen_stdcall_or_fastcall_suffix (decl, true);
++ if (newid != NULL_TREE)
++ {
++ rtx rtlname = XEXP (DECL_RTL (decl), 0);
++ if (GET_CODE (rtlname) == MEM)
++ rtlname = XEXP (rtlname, 0);
++ XSTR (rtlname, 0) = IDENTIFIER_POINTER (newid);
+
+- if (lookup_attribute ("stdcall", type_attributes))
+- newid = gen_stdcall_or_fastcall_suffix (decl, false);
+- else if (lookup_attribute ("fastcall", type_attributes))
+- newid = gen_stdcall_or_fastcall_suffix (decl, true);
+- if (newid != NULL_TREE)
+- {
+- rtx rtlname = XEXP (rtl, 0);
+- if (GET_CODE (rtlname) == MEM)
+- rtlname = XEXP (rtlname, 0);
+- XSTR (rtlname, 0) = IDENTIFIER_POINTER (newid);
+- /* These attributes must be present on first declaration,
++ /* These attributes must be present on first declaration,
+ change_decl_assembler_name will warn if they are added
+ later and the decl has been referenced, but duplicate_decls
+ should catch the mismatch before this is called. */
+ change_decl_assembler_name (decl, newid);
+- }
+ }
++ }
+
++void
++i386_pe_encode_section_info (tree decl, rtx rtl, int first)
++{
++ default_encode_section_info (decl, rtl, first);
++
++ if (first && TREE_CODE (decl) == FUNCTION_DECL)
++ i386_pe_decorate_assembler_name (decl);
++
+ /* Mark the decl so we can tell from the rtl whether the object is
+ dllexport'd or dllimport'd. tree.c: merge_dllimport_decl_attributes
+ handles dllexport/dllimport override semantics. */
Propchange:
trunk/tools/RosBE-Windows/Patches/GCC-v4.1-r129382-virtual-stdcall-bug27067.patch
------------------------------------------------------------------------------
svn:eol-style = native
Added:
trunk/tools/RosBE-Windows/Patches/GCC-v4.1-r129490-CreateFileMapping-Vista-bug30335.patch
URL:
http://svn.reactos.org/svn/reactos/trunk/tools/RosBE-Windows/Patches/GCC-v4…
==============================================================================
---
trunk/tools/RosBE-Windows/Patches/GCC-v4.1-r129490-CreateFileMapping-Vista-bug30335.patch
(added)
+++
trunk/tools/RosBE-Windows/Patches/GCC-v4.1-r129490-CreateFileMapping-Vista-bug30335.patch
Mon Oct 22 03:12:07 2007
@@ -1,0 +1,98 @@
+Index: gcc/config/i386/host-mingw32.c
+===================================================================
+--- gcc/config/i386/host-mingw32.c (revision 129490)
++++ gcc/config/i386/host-mingw32.c (working copy)
+@@ -28,6 +28,8 @@
+
+
+ #define WIN32_LEAN_AND_MEAN /* Not so important if we have windows.h.gch. */
++#include <tchar.h>
++#include <stdlib.h>
+ #include <windows.h>
+
+ static void * mingw32_gt_pch_get_address (size_t, int);
+@@ -47,7 +49,7 @@
+ static const size_t pch_VA_max_size = 128 * 1024 * 1024;
+
+ /* Granularity for reserving address space. */
+-static const size_t va_granularity = 0x10000;
++static size_t va_granularity = 0x10000;
+
+ /* Print out the GetLastError() translation. */
+ static inline void
+@@ -70,7 +72,9 @@
+ /* Granularity for reserving address space. */
+ static size_t mingw32_gt_pch_alloc_granularity (void)
+ {
+- return va_granularity;
++ SYSTEM_INFO SysInfo;
++ GetSystemInfo(&SysInfo);
++ return (va_granularity = (size_t)SysInfo.dwAllocationGranularity);
+ }
+
+ /* Identify an address that's likely to be free in a subsequent invocation
+@@ -116,6 +120,9 @@
+ {
+ void * mmap_addr;
+ static HANDLE mmap_handle;
++ TCHAR szMappingName[26];
++ OSVERSIONINFO version_info;
++ int i = 0;
+
+ if (size == 0)
+ return 0;
+@@ -125,16 +132,49 @@
+ if ((offset & (va_granularity - 1)) != 0 || size > pch_VA_max_size)
+ return -1;
+
+- mmap_handle = CreateFileMapping ((HANDLE) _get_osfhandle (fd),
+- NULL, PAGE_WRITECOPY | SEC_COMMIT,
+- 0, 0, NULL);
++ /* Determine the version of Windows we are running on. */
++ version_info.dwOSVersionInfoSize = sizeof (version_info);
++ GetVersionEx (&version_info);
++
++ srand(1);
++ while (1)
++ {
++ /* Generate a unique mapping name. This is neccessary to avoid
++ needing the SeCreateGlobalPrivilege privilege in certain cases.
++ However, the documentation for CreateFileMapping says that on NT4
++ and earlier, backslashes are invalid in object name. So, we need
++ to check if we are on Windows2000 or higher. */
++ _stprintf(szMappingName, _T("Local\\MinGWGCCPCH%08X"), rand());
++ mmap_handle = CreateFileMapping ((HANDLE) _get_osfhandle (fd),
++ NULL, PAGE_WRITECOPY | SEC_COMMIT,
++ 0, 0, (version_info.dwMajorVersion >
++ 4 ? szMappingName : NULL));
++ if (mmap_handle != NULL && GetLastError() == ERROR_ALREADY_EXISTS)
++ CloseHandle(mmap_handle);
++ else
++ break;
++ }
++
+ if (mmap_handle == NULL)
+ {
+ w32_error (__FUNCTION__, __FILE__, __LINE__, "CreateFileMapping");
+ return -1;
+ }
+- mmap_addr = MapViewOfFileEx (mmap_handle, FILE_MAP_COPY, 0, offset,
+- size, addr);
++ /* wait/retry a couple of times if needed.
++ Fixes a race when running multiple gcc's (-j) */
++ for(i = 0; i < 5; i++)
++ {
++ mmap_addr = MapViewOfFileEx (mmap_handle, FILE_MAP_COPY, 0, offset,
++ size, addr);
++ if (mmap_addr != addr)
++ {
++ Sleep(500);
++ }
++ else
++ {
++ break;
++ }
++ }
+ if (mmap_addr != addr)
+ {
+ w32_error (__FUNCTION__, __FILE__, __LINE__, "MapViewOfFileEx");
Propchange:
trunk/tools/RosBE-Windows/Patches/GCC-v4.1-r129490-CreateFileMapping-Vista-bug30335.patch
------------------------------------------------------------------------------
svn:eol-style = native
Added:
trunk/tools/RosBE-Windows/Patches/binutils-2.18.50.10-15-2007-snapshot-hpoussin.patch
URL:
http://svn.reactos.org/svn/reactos/trunk/tools/RosBE-Windows/Patches/binuti…
==============================================================================
--- trunk/tools/RosBE-Windows/Patches/binutils-2.18.50.10-15-2007-snapshot-hpoussin.patch
(added)
+++ trunk/tools/RosBE-Windows/Patches/binutils-2.18.50.10-15-2007-snapshot-hpoussin.patch
Mon Oct 22 03:12:07 2007
@@ -1,0 +1,15 @@
+--- ld/pe-dll.c Mon Aug 06 08:32:08 2007
++++ ld/pe-dll.c Tue Oct 16 18:47:02 2007
+@@ -598,10 +598,9 @@
+ }
+ }
+
+- /* If we are not building a DLL, when there are no exports
++ /* If there are no exports
+ we do not build an export table at all. */
+- if (!pe_dll_export_everything && pe_def_file->num_exports == 0
+- && info->executable)
++ if (!pe_dll_export_everything && pe_def_file->num_exports == 0)
+ return;
+
+ /* Now, maybe export everything else the default way. */
Propchange:
trunk/tools/RosBE-Windows/Patches/binutils-2.18.50.10-15-2007-snapshot-hpoussin.patch
------------------------------------------------------------------------------
svn:eol-style = native
Removed: trunk/tools/RosBE-Windows/Patches/ld.patch
URL:
http://svn.reactos.org/svn/reactos/trunk/tools/RosBE-Windows/Patches/ld.pat…
==============================================================================
--- trunk/tools/RosBE-Windows/Patches/ld.patch (original)
+++ trunk/tools/RosBE-Windows/Patches/ld.patch (removed)
@@ -1,15 +1,0 @@
---- ld/pe-dll.c Thu Jul 19 13:12:24 2007
-+++ ld/pe-dll.c Fri Aug 3 09:53:58 2007
-@@ -524,10 +524,9 @@
- }
- }
-
-- /* If we are not building a DLL, when there are no exports
-+ /* If there are no exports
- we do not build an export table at all. */
-- if (!pe_dll_export_everything && pe_def_file->num_exports == 0
-- && info->executable)
-+ if (!pe_dll_export_everything && pe_def_file->num_exports == 0)
- return;
-
- /* Now, maybe export everything else the default way. */
Removed: trunk/tools/RosBE-Windows/Patches/mingw-lazy-port-gcc-4_1-branch.patch
URL:
http://svn.reactos.org/svn/reactos/trunk/tools/RosBE-Windows/Patches/mingw-…
==============================================================================
--- trunk/tools/RosBE-Windows/Patches/mingw-lazy-port-gcc-4_1-branch.patch (original)
+++ trunk/tools/RosBE-Windows/Patches/mingw-lazy-port-gcc-4_1-branch.patch (removed)
@@ -1,278 +1,0 @@
-Index: gcc/config/i386/cygming.h
-===================================================================
---- gcc/config/i386/cygming.h (revision 125623)
-+++ gcc/config/i386/cygming.h (working copy)
-@@ -335,6 +335,7 @@
- extern void i386_pe_file_end (void);
- extern int i386_pe_dllexport_name_p (const char *);
- extern int i386_pe_dllimport_name_p (const char *);
-+extern void i386_pe_decorate_assembler_name (tree);
-
- /* For Win32 ABI compatibility */
- #undef DEFAULT_PCC_STRUCT_RETURN
-@@ -412,6 +413,7 @@
-
- #define TARGET_VALID_DLLIMPORT_ATTRIBUTE_P i386_pe_valid_dllimport_attribute_p
- #define TARGET_CXX_ADJUST_CLASS_AT_DEFINITION i386_pe_adjust_class_at_definition
-+#define TARGET_ASM_CHANGE_EXTERN_NAME i386_pe_decorate_assembler_name
-
- #undef TREE
-
-Index: gcc/config/i386/host-mingw32.c
-===================================================================
---- gcc/config/i386/host-mingw32.c (revision 125623)
-+++ gcc/config/i386/host-mingw32.c (working copy)
-@@ -28,6 +28,8 @@
-
-
- #define WIN32_LEAN_AND_MEAN /* Not so important if we have windows.h.gch. */
-+#include <tchar.h>
-+#include <stdlib.h>
- #include <windows.h>
-
- static void * mingw32_gt_pch_get_address (size_t, int);
-@@ -47,7 +49,7 @@
- static const size_t pch_VA_max_size = 128 * 1024 * 1024;
-
- /* Granularity for reserving address space. */
--static const size_t va_granularity = 0x10000;
-+static size_t va_granularity = 0x10000;
-
- /* Print out the GetLastError() translation. */
- static inline void
-@@ -70,7 +72,9 @@
- /* Granularity for reserving address space. */
- static size_t mingw32_gt_pch_alloc_granularity (void)
- {
-- return va_granularity;
-+ SYSTEM_INFO SysInfo;
-+ GetSystemInfo(&SysInfo);
-+ return (va_granularity = (size_t)SysInfo.dwAllocationGranularity);
- }
-
- /* Identify an address that's likely to be free in a subsequent invocation
-@@ -125,9 +129,23 @@
- if ((offset & (va_granularity - 1)) != 0 || size > pch_VA_max_size)
- return -1;
-
-- mmap_handle = CreateFileMapping ((HANDLE) _get_osfhandle (fd),
-- NULL, PAGE_WRITECOPY | SEC_COMMIT,
-- 0, 0, NULL);
-+ srand(1);
-+ while (1)
-+ {
-+ TCHAR szMappingName[26];
-+
-+ /* Generate a unique mapping name. This is neccessary to avoid
-+ needing the SeCreateGlobalPrivilege privilege in certain cases */
-+ _stprintf(szMappingName, _T("Local\\MinGWGCCPCH%08X"), rand());
-+ mmap_handle = CreateFileMapping ((HANDLE) _get_osfhandle (fd),
-+ NULL, PAGE_WRITECOPY | SEC_COMMIT,
-+ 0, 0, szMappingName);
-+ if (mmap_handle != NULL && GetLastError() == ERROR_ALREADY_EXISTS)
-+ CloseHandle(mmap_handle);
-+ else
-+ break;
-+ }
-+
- if (mmap_handle == NULL)
- {
- w32_error (__FUNCTION__, __FILE__, __LINE__, "CreateFileMapping");
-Index: gcc/config/i386/winnt.c
-===================================================================
---- gcc/config/i386/winnt.c (revision 125623)
-+++ gcc/config/i386/winnt.c (working copy)
-@@ -335,33 +335,38 @@
- }
-
- void
--i386_pe_encode_section_info (tree decl, rtx rtl, int first)
-+i386_pe_decorate_assembler_name (tree decl)
- {
-- default_encode_section_info (decl, rtl, first);
-+ tree type_attributes = TYPE_ATTRIBUTES (TREE_TYPE (decl));
-+ tree newid = NULL_TREE;
-
-- if (first && TREE_CODE (decl) == FUNCTION_DECL)
-- {
-- tree type_attributes = TYPE_ATTRIBUTES (TREE_TYPE (decl));
-- tree newid = NULL_TREE;
-+ if (lookup_attribute ("stdcall", type_attributes))
-+ newid = gen_stdcall_or_fastcall_suffix (decl, false);
-+ else if (lookup_attribute ("fastcall", type_attributes))
-+ newid = gen_stdcall_or_fastcall_suffix (decl, true);
-+ if (newid != NULL_TREE)
-+ {
-+ rtx rtlname = XEXP (DECL_RTL (decl), 0);
-+ if (GET_CODE (rtlname) == MEM)
-+ rtlname = XEXP (rtlname, 0);
-+ XSTR (rtlname, 0) = IDENTIFIER_POINTER (newid);
-
-- if (lookup_attribute ("stdcall", type_attributes))
-- newid = gen_stdcall_or_fastcall_suffix (decl, false);
-- else if (lookup_attribute ("fastcall", type_attributes))
-- newid = gen_stdcall_or_fastcall_suffix (decl, true);
-- if (newid != NULL_TREE)
-- {
-- rtx rtlname = XEXP (rtl, 0);
-- if (GET_CODE (rtlname) == MEM)
-- rtlname = XEXP (rtlname, 0);
-- XSTR (rtlname, 0) = IDENTIFIER_POINTER (newid);
-- /* These attributes must be present on first declaration,
-+ /* These attributes must be present on first declaration,
- change_decl_assembler_name will warn if they are added
- later and the decl has been referenced, but duplicate_decls
- should catch the mismatch before this is called. */
- change_decl_assembler_name (decl, newid);
-- }
- }
-+ }
-
-+void
-+i386_pe_encode_section_info (tree decl, rtx rtl, int first)
-+{
-+ default_encode_section_info (decl, rtl, first);
-+
-+ if (first && TREE_CODE (decl) == FUNCTION_DECL)
-+ i386_pe_decorate_assembler_name (decl);
-+
- /* Mark the decl so we can tell from the rtl whether the object is
- dllexport'd or dllimport'd. tree.c: merge_dllimport_decl_attributes
- handles dllexport/dllimport override semantics. */
-Index: gcc/cp/method.c
-===================================================================
---- gcc/cp/method.c (revision 125623)
-+++ gcc/cp/method.c (working copy)
-@@ -350,6 +350,8 @@
- this translation unit. */
- TREE_ADDRESSABLE (function) = 1;
- mark_used (function);
-+ /* The DECL_ASSEMBLER_NAME of the thunked function may need modification. */
-+ targetm.asm_out.change_extern_name (function);
- if (!emit_p)
- return;
-
-Index: gcc/target-def.h
-===================================================================
---- gcc/target-def.h (revision 125623)
-+++ gcc/target-def.h (working copy)
-@@ -205,6 +205,10 @@
- #define TARGET_ASM_OUTPUT_DWARF_DTPREL NULL
- #endif
-
-+#ifndef TARGET_ASM_CHANGE_EXTERN_NAME
-+#define TARGET_ASM_CHANGE_EXTERN_NAME hook_void_tree
-+#endif
-+
- #define TARGET_ASM_ALIGNED_INT_OP \
- {TARGET_ASM_ALIGNED_HI_OP, \
- TARGET_ASM_ALIGNED_SI_OP, \
-@@ -248,7 +252,8 @@
- TARGET_ASM_FILE_END, \
- TARGET_ASM_EXTERNAL_LIBCALL, \
- TARGET_ASM_MARK_DECL_PRESERVED, \
-- TARGET_ASM_OUTPUT_DWARF_DTPREL}
-+ TARGET_ASM_OUTPUT_DWARF_DTPREL, \
-+ TARGET_ASM_CHANGE_EXTERN_NAME}
-
- /* Scheduler hooks. All of these default to null pointers, which
- haifa-sched.c looks for and handles. */
-Index: gcc/target.h
-===================================================================
---- gcc/target.h (revision 125623)
-+++ gcc/target.h (working copy)
-@@ -186,6 +186,13 @@
- /* Output a DTP-relative reference to a TLS symbol. */
- void (*output_dwarf_dtprel) (FILE *file, int size, rtx x);
-
-+/* This target hook allows the operating system to modify the extern
-+ assembler name
-+ of a DECL. For example, windows targets use this to decorate stdcall and
-+ fastcall functions
-+ with a a trailing '@n'. */
-+ void (*change_extern_name) (tree decl);
-+
- } asm_out;
-
- /* Functions relating to instruction scheduling. */
-Index: libstdc++-v3/config/os/mingw32/os_defines.h
-===================================================================
---- libstdc++-v3/config/os/mingw32/os_defines.h (revision 125623)
-+++ libstdc++-v3/config/os/mingw32/os_defines.h (working copy)
-@@ -45,6 +45,13 @@
- #undef NOMINMAX
- #define NOMINMAX 1
-
-+// mingw32 local hack: Override _GLIBCXX_USE_WCHAR_T for wstring
-+#define _GLIBCXX_USE_WSTRING 1
-+
-+// mingw32 local hack: Cast long double to doubles to workaround
-+// printf bug.
-+#define _GLIBCXX_NO_LONG_DOUBLE_IO 0
-+
- // See libstdc++/20806.
- #define _GLIBCXX_HAVE_DOS_BASED_FILESYSTEM 1
-
-Index: libstdc++-v3/include/bits/char_traits.h
-===================================================================
---- libstdc++-v3/include/bits/char_traits.h (revision 125623)
-+++ libstdc++-v3/include/bits/char_traits.h (working copy)
-@@ -295,7 +295,7 @@
- };
-
-
--#ifdef _GLIBCXX_USE_WCHAR_T
-+#if defined (_GLIBCXX_USE_WCHAR_T) || defined (_GLIBCXX_USE_WSTRING)
- /// @brief 21.1.3.2 char_traits specializations
- template<>
- struct char_traits<wchar_t>
-@@ -303,8 +303,10 @@
- typedef wchar_t char_type;
- typedef wint_t int_type;
- typedef streamoff off_type;
-+#if defined (_GLIBCXX_USE_WCHAR_T)
- typedef wstreampos pos_type;
- typedef mbstate_t state_type;
-+#endif
-
- static void
- assign(char_type& __c1, const char_type& __c2)
-Index: libstdc++-v3/include/bits/stringfwd.h
-===================================================================
---- libstdc++-v3/include/bits/stringfwd.h (revision 125623)
-+++ libstdc++-v3/include/bits/stringfwd.h (working copy)
-@@ -59,7 +59,7 @@
-
- typedef basic_string<char> string;
-
--#ifdef _GLIBCXX_USE_WCHAR_T
-+#if defined (_GLIBCXX_USE_WCHAR_T) || defined (_GLIBCXX_USE_WSTRING)
- template<> struct char_traits<wchar_t>;
-
- typedef basic_string<wchar_t> wstring;
-Index: libstdc++-v3/include/c_std/std_cwchar.h
-===================================================================
---- libstdc++-v3/include/c_std/std_cwchar.h (revision 125623)
-+++ libstdc++-v3/include/c_std/std_cwchar.h (working copy)
-@@ -138,7 +138,7 @@
- #undef wprintf
- #undef wscanf
-
--#if _GLIBCXX_USE_WCHAR_T
-+#if _GLIBCXX_USE_WCHAR_T || _GLIBCXX_USE_WSTRING
- namespace std
- {
- using ::wint_t;
-Index: libstdc++-v3/include/c_std/std_cwctype.h
-===================================================================
---- libstdc++-v3/include/c_std/std_cwctype.h (revision 125623)
-+++ libstdc++-v3/include/c_std/std_cwctype.h (working copy)
-@@ -75,7 +75,7 @@
- #undef wctrans
- #undef wctype
-
--#if _GLIBCXX_USE_WCHAR_T
-+#if _GLIBCXX_USE_WCHAR_T || _GLIBCXX_USE_WSTRING
- namespace std
- {
- using ::wint_t; // cwchar