[SPEC2DEF]
authorThomas Faber <thomas.faber@reactos.org>
Sun, 15 Sep 2013 14:33:33 +0000 (14:33 +0000)
committerThomas Faber <thomas.faber@reactos.org>
Sun, 15 Sep 2013 14:33:33 +0000 (14:33 +0000)
- Ignore C++ redirects again because they breaks msvcrt
CORE-7465 #resolve
[FRAMEDYN]
- Work around the lack of C++ redirects

svn path=/trunk/; revision=60135

reactos/dll/win32/framedyn/CMakeLists.txt
reactos/dll/win32/framedyn/fix_exports_msvc.s [new file with mode: 0644]
reactos/dll/win32/framedyn/framedyn_msvc.spec
reactos/tools/spec2def/spec2def.c

index 55716bb..36aa5fd 100644 (file)
@@ -12,7 +12,11 @@ list(APPEND SOURCE
     chstring.cpp
     ${CMAKE_CURRENT_BINARY_DIR}/framedyn.def)
 
-add_library(framedyn SHARED ${SOURCE})
+if(MSVC)
+    add_asm_files(framedyn_asm fix_exports_msvc.s)
+endif()
+
+add_library(framedyn SHARED ${SOURCE} ${framedyn_asm})
 set_module_type(framedyn win32dll UNICODE)
 add_importlibs(framedyn oleaut32 msvcrt kernel32 ntdll)
 
diff --git a/reactos/dll/win32/framedyn/fix_exports_msvc.s b/reactos/dll/win32/framedyn/fix_exports_msvc.s
new file mode 100644 (file)
index 0000000..8e67a05
--- /dev/null
@@ -0,0 +1,48 @@
+#include <asm.inc>
+
+.code64
+.align 4
+
+MACRO(DEFINE_ALIAS, alias, orig)
+EXTERN &orig:ABS
+ALIAS <&alias> = <&orig>
+ENDM
+
+DEFINE_ALIAS ?AllocSysString@CHString@@QBEPAGXZ, ?AllocSysString@CHString@@QBEPA_WXZ
+DEFINE_ALIAS ?AssignCopy@CHString@@IAEXHPBG@Z, ?AssignCopy@CHString@@IAEXHPB_W@Z
+DEFINE_ALIAS ??0CHString@@QAE@PBG@Z, ??0CHString@@QAE@PB_W@Z
+DEFINE_ALIAS ??0CHString@@QAE@PBGH@Z, ??0CHString@@QAE@PB_WH@Z
+DEFINE_ALIAS ??0CHString@@QAE@GH@Z, ??0CHString@@QAE@_WH@Z
+DEFINE_ALIAS ?Collate@CHString@@QBEHPBG@Z, ?Collate@CHString@@QBEHPB_W@Z
+DEFINE_ALIAS ?Compare@CHString@@QBEHPBG@Z, ?Compare@CHString@@QBEHPB_W@Z
+DEFINE_ALIAS ?CompareNoCase@CHString@@QBEHPBG@Z, ?CompareNoCase@CHString@@QBEHPB_W@Z
+DEFINE_ALIAS ?ConcatCopy@CHString@@IAEXHPBGH0@Z, ?ConcatCopy@CHString@@IAEXHPB_WH0@Z
+DEFINE_ALIAS ?ConcatInPlace@CHString@@IAEXHPBG@Z, ?ConcatInPlace@CHString@@IAEXHPB_W@Z
+DEFINE_ALIAS ?Find@CHString@@QBEHPBG@Z, ?Find@CHString@@QBEHPB_W@Z
+DEFINE_ALIAS ?Find@CHString@@QBEHG@Z, ?Find@CHString@@QBEH_W@Z
+DEFINE_ALIAS ?FindOneOf@CHString@@QBEHPBG@Z, ?FindOneOf@CHString@@QBEHPB_W@Z
+DEFINE_ALIAS ?Format@CHString@@QAAXPBGZZ, ?Format@CHString@@QAAXPB_WZZ
+DEFINE_ALIAS ?FormatMessageW@CHString@@QAAXPBGZZ, ?FormatMessageW@CHString@@QAAXPB_WZZ
+DEFINE_ALIAS ?FormatV@CHString@@QAEXPBGPAD@Z, ?FormatV@CHString@@QAEXPB_WPAD@Z
+DEFINE_ALIAS ?GetAt@CHString@@QBEGH@Z, ?GetAt@CHString@@QBE_WH@Z
+DEFINE_ALIAS ?GetBuffer@CHString@@QAEPAGH@Z, ?GetBuffer@CHString@@QAEPA_WH@Z
+DEFINE_ALIAS ?GetBufferSetLength@CHString@@QAEPAGH@Z, ?GetBufferSetLength@CHString@@QAEPA_WH@Z
+DEFINE_ALIAS ?LoadStringW@CHString@@IAEHIPAGI@Z, ?LoadStringW@CHString@@IAEHIPA_WI@Z
+DEFINE_ALIAS ?LockBuffer@CHString@@QAEPAGXZ, ?LockBuffer@CHString@@QAEPA_WXZ
+DEFINE_ALIAS ?ReverseFind@CHString@@QBEHG@Z, ?ReverseFind@CHString@@QBEH_W@Z
+DEFINE_ALIAS ?SafeStrlen@CHString@@KGHPBG@Z, ?SafeStrlen@CHString@@KGHPB_W@Z
+DEFINE_ALIAS ?SetAt@CHString@@QAEXHG@Z, ?SetAt@CHString@@QAEXH_W@Z
+DEFINE_ALIAS ?SpanExcluding@CHString@@QBE?AV1@PBG@Z, ?SpanExcluding@CHString@@QBE?AV1@PB_W@Z
+DEFINE_ALIAS ?SpanIncluding@CHString@@QBE?AV1@PBG@Z, ?SpanIncluding@CHString@@QBE?AV1@PB_W@Z
+DEFINE_ALIAS ??BCHString@@QBEPBGXZ, ??BCHString@@QBEPB_WXZ
+DEFINE_ALIAS ??YCHString@@QAEABV0@PBG@Z, ??YCHString@@QAEABV0@PB_W@Z
+DEFINE_ALIAS ??YCHString@@QAEABV0@G@Z, ??YCHString@@QAEABV0@_W@Z
+DEFINE_ALIAS ??4CHString@@QAEABV0@PBG@Z, ??4CHString@@QAEABV0@PB_W@Z
+DEFINE_ALIAS ??4CHString@@QAEABV0@G@Z, ??4CHString@@QAEABV0@_W@Z
+DEFINE_ALIAS ??ACHString@@QBEGH@Z, ??ACHString@@QBE_WH@Z
+DEFINE_ALIAS ??H@YG?AVCHString@@GABV0@@Z, ??H@YG?AVCHString@@_WABV0@@Z
+DEFINE_ALIAS ??H@YG?AVCHString@@ABV0@G@Z, ??H@YG?AVCHString@@ABV0@_W@Z
+DEFINE_ALIAS ??H@YG?AVCHString@@ABV0@PBG@Z, ??H@YG?AVCHString@@ABV0@PB_W@Z
+DEFINE_ALIAS ??H@YG?AVCHString@@PBGABV0@@Z, ??H@YG?AVCHString@@PB_WABV0@@Z
+
+END
index 9b72f1e..1fcb0b8 100644 (file)
@@ -1,43 +1,43 @@
 @ thiscall ?AllocBeforeWrite@CHString@@IAEXH@Z(long)
 @ thiscall ?AllocBuffer@CHString@@IAEXH@Z(long)
 @ thiscall ?AllocCopy@CHString@@IBEXAAV1@HHH@Z(ptr long long long)
-@ thiscall ?AllocSysString@CHString@@QBEPAGXZ() ?AllocSysString@CHString@@QBEPA_WXZ
-@ thiscall ?AssignCopy@CHString@@IAEXHPBG@Z(long wstr) ?AssignCopy@CHString@@IAEXHPB_W@Z
+@ thiscall ?AllocSysString@CHString@@QBEPAGXZ()
+@ thiscall ?AssignCopy@CHString@@IAEXHPBG@Z(long wstr)
 @ thiscall ??0CHString@@QAE@ABV0@@Z(ptr)
 @ thiscall ??0CHString@@QAE@PBD@Z(str)
 @ thiscall ??0CHString@@QAE@PBE@Z(str)
-@ thiscall ??0CHString@@QAE@PBG@Z(wstr) ??0CHString@@QAE@PB_W@Z
-@ thiscall ??0CHString@@QAE@PBGH@Z(wstr long) ??0CHString@@QAE@PB_WH@Z
-@ thiscall ??0CHString@@QAE@GH@Z(long long) ??0CHString@@QAE@_WH@Z
+@ thiscall ??0CHString@@QAE@PBG@Z(wstr)
+@ thiscall ??0CHString@@QAE@PBGH@Z(wstr long)
+@ thiscall ??0CHString@@QAE@GH@Z(long long)
 @ thiscall ??0CHString@@QAE@XZ()
-@ thiscall ?Collate@CHString@@QBEHPBG@Z(wstr) ?Collate@CHString@@QBEHPB_W@Z
-@ thiscall ?Compare@CHString@@QBEHPBG@Z(wstr) ?Compare@CHString@@QBEHPB_W@Z
-@ thiscall ?CompareNoCase@CHString@@QBEHPBG@Z(wstr) ?CompareNoCase@CHString@@QBEHPB_W@Z
-@ thiscall ?ConcatCopy@CHString@@IAEXHPBGH0@Z(long wstr long wstr) ?ConcatCopy@CHString@@IAEXHPB_WH0@Z
-@ thiscall ?ConcatInPlace@CHString@@IAEXHPBG@Z(long wstr) ?ConcatInPlace@CHString@@IAEXHPB_W@Z
+@ thiscall ?Collate@CHString@@QBEHPBG@Z(wstr)
+@ thiscall ?Compare@CHString@@QBEHPBG@Z(wstr)
+@ thiscall ?CompareNoCase@CHString@@QBEHPBG@Z(wstr)
+@ thiscall ?ConcatCopy@CHString@@IAEXHPBGH0@Z(long wstr long wstr)
+@ thiscall ?ConcatInPlace@CHString@@IAEXHPBG@Z(long wstr)
 @ thiscall ?CopyBeforeWrite@CHString@@IAEXXZ()
 @ thiscall ?Empty@CHString@@QAEXXZ()
-@ thiscall ?Find@CHString@@QBEHPBG@Z(wstr) ?Find@CHString@@QBEHPB_W@Z
-@ thiscall ?Find@CHString@@QBEHG@Z(long) ?Find@CHString@@QBEH_W@Z
-@ thiscall ?FindOneOf@CHString@@QBEHPBG@Z(wstr) ?FindOneOf@CHString@@QBEHPB_W@Z
+@ thiscall ?Find@CHString@@QBEHPBG@Z(wstr)
+@ thiscall ?Find@CHString@@QBEHG@Z(long)
+@ thiscall ?FindOneOf@CHString@@QBEHPBG@Z(wstr)
 @ thiscall ?Format@CHString@@QAAXIZZ(long long long)
-@ thiscall ?Format@CHString@@QAAXPBGZZ(long wstr long) ?Format@CHString@@QAAXPB_WZZ
+@ thiscall ?Format@CHString@@QAAXPBGZZ(long wstr long)
 @ thiscall ?FormatMessageW@CHString@@QAAXIZZ(long long long)
-@ thiscall ?FormatMessageW@CHString@@QAAXPBGZZ(long ptr long) ?FormatMessageW@CHString@@QAAXPB_WZZ
-@ thiscall ?FormatV@CHString@@QAEXPBGPAD@Z(wstr long) ?FormatV@CHString@@QAEXPB_WPAD@Z
+@ thiscall ?FormatMessageW@CHString@@QAAXPBGZZ(long ptr long)
+@ thiscall ?FormatV@CHString@@QAEXPBGPAD@Z(wstr long)
 @ thiscall ?FreeExtra@CHString@@QAEXXZ()
 @ thiscall ?GetAllocLength@CHString@@QBEHXZ()
-@ thiscall ?GetAt@CHString@@QBEGH@Z(long) ?GetAt@CHString@@QBE_WH@Z
-@ thiscall ?GetBuffer@CHString@@QAEPAGH@Z(long) ?GetBuffer@CHString@@QAEPA_WH@Z
-@ thiscall ?GetBufferSetLength@CHString@@QAEPAGH@Z(long) ?GetBufferSetLength@CHString@@QAEPA_WH@Z
+@ thiscall ?GetAt@CHString@@QBEGH@Z(long)
+@ thiscall ?GetBuffer@CHString@@QAEPAGH@Z(long)
+@ thiscall ?GetBufferSetLength@CHString@@QAEPAGH@Z(long)
 @ thiscall ?GetData@CHString@@IBEPAUCHStringData@@XZ()
 @ thiscall ?GetLength@CHString@@QBEHXZ()
 @ thiscall ?Init@CHString@@IAEXXZ()
 @ thiscall ?IsEmpty@CHString@@QBEHXZ()
 @ thiscall ?Left@CHString@@QBE?AV1@H@Z(long)
 @ thiscall ?LoadStringW@CHString@@QAEHI@Z(long)
-@ thiscall ?LoadStringW@CHString@@IAEHIPAGI@Z(long wstr long) ?LoadStringW@CHString@@IAEHIPA_WI@Z
-@ thiscall ?LockBuffer@CHString@@QAEPAGXZ() ?LockBuffer@CHString@@QAEPA_WXZ
+@ thiscall ?LoadStringW@CHString@@IAEHIPAGI@Z(long wstr long)
+@ thiscall ?LockBuffer@CHString@@QAEPAGXZ()
 @ thiscall ?MakeLower@CHString@@QAEXXZ()
 @ thiscall ?MakeReverse@CHString@@QAEXXZ()
 @ thiscall ?MakeUpper@CHString@@QAEXXZ()
 @ thiscall ?Release@CHString@@KGXPAUCHStringData@@@Z(ptr)
 @ thiscall ?Release@CHString@@IAEXXZ()
 @ thiscall ?ReleaseBuffer@CHString@@QAEXH@Z(long)
-@ thiscall ?ReverseFind@CHString@@QBEHG@Z(long) ?ReverseFind@CHString@@QBEH_W@Z
+@ thiscall ?ReverseFind@CHString@@QBEHG@Z(long)
 @ thiscall ?Right@CHString@@QBE?AV1@H@Z(long)
-@ stdcall ?SafeStrlen@CHString@@KGHPBG@Z(wstr) ?SafeStrlen@CHString@@KGHPB_W@Z
-@ thiscall ?SetAt@CHString@@QAEXHG@Z(long long) ?SetAt@CHString@@QAEXH_W@Z
-@ thiscall ?SpanExcluding@CHString@@QBE?AV1@PBG@Z(long wstr) ?SpanExcluding@CHString@@QBE?AV1@PB_W@Z
-@ thiscall ?SpanIncluding@CHString@@QBE?AV1@PBG@Z(long wstr) ?SpanIncluding@CHString@@QBE?AV1@PB_W@Z
+@ stdcall ?SafeStrlen@CHString@@KGHPBG@Z(wstr)
+@ thiscall ?SetAt@CHString@@QAEXHG@Z(long long)
+@ thiscall ?SpanExcluding@CHString@@QBE?AV1@PBG@Z(long wstr)
+@ thiscall ?SpanIncluding@CHString@@QBE?AV1@PBG@Z(long wstr)
 @ thiscall ?TrimLeft@CHString@@QAEXXZ()
 @ thiscall ?TrimRight@CHString@@QAEXXZ()
 @ thiscall ?UnlockBuffer@CHString@@QAEXXZ()
-@ thiscall ??BCHString@@QBEPBGXZ(ptr) ??BCHString@@QBEPB_WXZ
+@ thiscall ??BCHString@@QBEPBGXZ(ptr)
 @ thiscall ??YCHString@@QAEABV0@ABV0@@Z(ptr)
 @ thiscall ??YCHString@@QAEABV0@D@Z(long)
-@ thiscall ??YCHString@@QAEABV0@PBG@Z(wstr) ??YCHString@@QAEABV0@PB_W@Z
-@ thiscall ??YCHString@@QAEABV0@G@Z(long) ??YCHString@@QAEABV0@_W@Z
+@ thiscall ??YCHString@@QAEABV0@PBG@Z(wstr)
+@ thiscall ??YCHString@@QAEABV0@G@Z(long)
 @ thiscall ??4CHString@@QAEABV0@PAV0@@Z(ptr)
 @ thiscall ??4CHString@@QAEABV0@ABV0@@Z(ptr)
 @ thiscall ??4CHString@@QAEABV0@PBD@Z(str)
 @ thiscall ??4CHString@@QAEABV0@D@Z(long)
 @ thiscall ??4CHString@@QAEABV0@PBE@Z(str)
-@ thiscall ??4CHString@@QAEABV0@PBG@Z(wstr) ??4CHString@@QAEABV0@PB_W@Z
-@ thiscall ??4CHString@@QAEABV0@G@Z(long) ??4CHString@@QAEABV0@_W@Z
-@ thiscall ??ACHString@@QBEGH@Z(long) ??ACHString@@QBE_WH@Z
+@ thiscall ??4CHString@@QAEABV0@PBG@Z(wstr)
+@ thiscall ??4CHString@@QAEABV0@G@Z(long)
+@ thiscall ??ACHString@@QBEGH@Z(long)
 @ thiscall ??1CHString@@QAE@XZ()
-@ stdcall ??H@YG?AVCHString@@GABV0@@Z(long ptr) ??H@YG?AVCHString@@_WABV0@@Z
-@ stdcall ??H@YG?AVCHString@@ABV0@G@Z(ptr long) ??H@YG?AVCHString@@ABV0@_W@Z
-@ stdcall ??H@YG?AVCHString@@ABV0@PBG@Z(ptr wstr) ??H@YG?AVCHString@@ABV0@PB_W@Z
-@ stdcall ??H@YG?AVCHString@@PBGABV0@@Z(wstr ptr) ??H@YG?AVCHString@@PB_WABV0@@Z
+@ stdcall ??H@YG?AVCHString@@GABV0@@Z(long ptr)
+@ stdcall ??H@YG?AVCHString@@ABV0@G@Z(ptr long)
+@ stdcall ??H@YG?AVCHString@@ABV0@PBG@Z(ptr wstr)
+@ stdcall ??H@YG?AVCHString@@PBGABV0@@Z(wstr ptr)
 @ stdcall ??H@YG?AVCHString@@ABV0@0@Z(ptr ptr)
index 470eee6..644aa33 100644 (file)
@@ -349,11 +349,19 @@ OutputLine_def(FILE *fileDest, EXPORT *pexp)
     }
     else if (pexp->pcRedirection)
     {
-        int fDeco;
+        if (gbMSComp && (pexp->pcName[0] == '?'))
+        {
+            fprintf(stderr, "warning: ignoring C++ redirection %.*s -> %.*s\n",
+                    pexp->nNameLength, pexp->pcName, pexp->nRedirectionLength, pexp->pcRedirection);
+        }
+        else
+        {
+            int fDeco;
 
-        fDeco = ((giArch == ARCH_X86) && !ScanToken(pexp->pcRedirection, '.'));
-        fprintf(fileDest, "=");
-        PrintName(fileDest, pexp, "", 1, fDeco && !gbMSComp);
+            fDeco = ((giArch == ARCH_X86) && !ScanToken(pexp->pcRedirection, '.'));
+            fprintf(fileDest, "=");
+            PrintName(fileDest, pexp, "", 1, fDeco && !gbMSComp);
+        }
     }
     else if (((pexp->uFlags & FL_STUB) || (pexp->nCallingConvention == CC_STUB)) &&
              (pexp->pcName[0] == '?'))