mirror of
https://github.com/reactos/reactos.git
synced 2024-07-01 10:20:03 +00:00
[SPEC2DEF]
- Ignore C++ redirects again because they breaks msvcrt CORE-7465 #resolve [FRAMEDYN] - Work around the lack of C++ redirects svn path=/trunk/; revision=60135
This commit is contained in:
parent
b63e09b179
commit
c0099fe498
|
@ -12,7 +12,11 @@ list(APPEND SOURCE
|
||||||
chstring.cpp
|
chstring.cpp
|
||||||
${CMAKE_CURRENT_BINARY_DIR}/framedyn.def)
|
${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)
|
set_module_type(framedyn win32dll UNICODE)
|
||||||
add_importlibs(framedyn oleaut32 msvcrt kernel32 ntdll)
|
add_importlibs(framedyn oleaut32 msvcrt kernel32 ntdll)
|
||||||
|
|
||||||
|
|
48
reactos/dll/win32/framedyn/fix_exports_msvc.s
Normal file
48
reactos/dll/win32/framedyn/fix_exports_msvc.s
Normal file
|
@ -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
|
|
@ -1,43 +1,43 @@
|
||||||
@ thiscall ?AllocBeforeWrite@CHString@@IAEXH@Z(long)
|
@ thiscall ?AllocBeforeWrite@CHString@@IAEXH@Z(long)
|
||||||
@ thiscall ?AllocBuffer@CHString@@IAEXH@Z(long)
|
@ thiscall ?AllocBuffer@CHString@@IAEXH@Z(long)
|
||||||
@ thiscall ?AllocCopy@CHString@@IBEXAAV1@HHH@Z(ptr long long long)
|
@ thiscall ?AllocCopy@CHString@@IBEXAAV1@HHH@Z(ptr long long long)
|
||||||
@ thiscall ?AllocSysString@CHString@@QBEPAGXZ() ?AllocSysString@CHString@@QBEPA_WXZ
|
@ thiscall ?AllocSysString@CHString@@QBEPAGXZ()
|
||||||
@ thiscall ?AssignCopy@CHString@@IAEXHPBG@Z(long wstr) ?AssignCopy@CHString@@IAEXHPB_W@Z
|
@ thiscall ?AssignCopy@CHString@@IAEXHPBG@Z(long wstr)
|
||||||
@ thiscall ??0CHString@@QAE@ABV0@@Z(ptr)
|
@ thiscall ??0CHString@@QAE@ABV0@@Z(ptr)
|
||||||
@ thiscall ??0CHString@@QAE@PBD@Z(str)
|
@ thiscall ??0CHString@@QAE@PBD@Z(str)
|
||||||
@ thiscall ??0CHString@@QAE@PBE@Z(str)
|
@ thiscall ??0CHString@@QAE@PBE@Z(str)
|
||||||
@ thiscall ??0CHString@@QAE@PBG@Z(wstr) ??0CHString@@QAE@PB_W@Z
|
@ thiscall ??0CHString@@QAE@PBG@Z(wstr)
|
||||||
@ thiscall ??0CHString@@QAE@PBGH@Z(wstr long) ??0CHString@@QAE@PB_WH@Z
|
@ thiscall ??0CHString@@QAE@PBGH@Z(wstr long)
|
||||||
@ thiscall ??0CHString@@QAE@GH@Z(long long) ??0CHString@@QAE@_WH@Z
|
@ thiscall ??0CHString@@QAE@GH@Z(long long)
|
||||||
@ thiscall ??0CHString@@QAE@XZ()
|
@ thiscall ??0CHString@@QAE@XZ()
|
||||||
@ thiscall ?Collate@CHString@@QBEHPBG@Z(wstr) ?Collate@CHString@@QBEHPB_W@Z
|
@ thiscall ?Collate@CHString@@QBEHPBG@Z(wstr)
|
||||||
@ thiscall ?Compare@CHString@@QBEHPBG@Z(wstr) ?Compare@CHString@@QBEHPB_W@Z
|
@ thiscall ?Compare@CHString@@QBEHPBG@Z(wstr)
|
||||||
@ thiscall ?CompareNoCase@CHString@@QBEHPBG@Z(wstr) ?CompareNoCase@CHString@@QBEHPB_W@Z
|
@ thiscall ?CompareNoCase@CHString@@QBEHPBG@Z(wstr)
|
||||||
@ thiscall ?ConcatCopy@CHString@@IAEXHPBGH0@Z(long wstr long wstr) ?ConcatCopy@CHString@@IAEXHPB_WH0@Z
|
@ thiscall ?ConcatCopy@CHString@@IAEXHPBGH0@Z(long wstr long wstr)
|
||||||
@ thiscall ?ConcatInPlace@CHString@@IAEXHPBG@Z(long wstr) ?ConcatInPlace@CHString@@IAEXHPB_W@Z
|
@ thiscall ?ConcatInPlace@CHString@@IAEXHPBG@Z(long wstr)
|
||||||
@ thiscall ?CopyBeforeWrite@CHString@@IAEXXZ()
|
@ thiscall ?CopyBeforeWrite@CHString@@IAEXXZ()
|
||||||
@ thiscall ?Empty@CHString@@QAEXXZ()
|
@ thiscall ?Empty@CHString@@QAEXXZ()
|
||||||
@ thiscall ?Find@CHString@@QBEHPBG@Z(wstr) ?Find@CHString@@QBEHPB_W@Z
|
@ thiscall ?Find@CHString@@QBEHPBG@Z(wstr)
|
||||||
@ thiscall ?Find@CHString@@QBEHG@Z(long) ?Find@CHString@@QBEH_W@Z
|
@ thiscall ?Find@CHString@@QBEHG@Z(long)
|
||||||
@ thiscall ?FindOneOf@CHString@@QBEHPBG@Z(wstr) ?FindOneOf@CHString@@QBEHPB_W@Z
|
@ thiscall ?FindOneOf@CHString@@QBEHPBG@Z(wstr)
|
||||||
@ thiscall ?Format@CHString@@QAAXIZZ(long long long)
|
@ 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@@QAAXIZZ(long long long)
|
||||||
@ thiscall ?FormatMessageW@CHString@@QAAXPBGZZ(long ptr long) ?FormatMessageW@CHString@@QAAXPB_WZZ
|
@ thiscall ?FormatMessageW@CHString@@QAAXPBGZZ(long ptr long)
|
||||||
@ thiscall ?FormatV@CHString@@QAEXPBGPAD@Z(wstr long) ?FormatV@CHString@@QAEXPB_WPAD@Z
|
@ thiscall ?FormatV@CHString@@QAEXPBGPAD@Z(wstr long)
|
||||||
@ thiscall ?FreeExtra@CHString@@QAEXXZ()
|
@ thiscall ?FreeExtra@CHString@@QAEXXZ()
|
||||||
@ thiscall ?GetAllocLength@CHString@@QBEHXZ()
|
@ thiscall ?GetAllocLength@CHString@@QBEHXZ()
|
||||||
@ thiscall ?GetAt@CHString@@QBEGH@Z(long) ?GetAt@CHString@@QBE_WH@Z
|
@ thiscall ?GetAt@CHString@@QBEGH@Z(long)
|
||||||
@ thiscall ?GetBuffer@CHString@@QAEPAGH@Z(long) ?GetBuffer@CHString@@QAEPA_WH@Z
|
@ thiscall ?GetBuffer@CHString@@QAEPAGH@Z(long)
|
||||||
@ thiscall ?GetBufferSetLength@CHString@@QAEPAGH@Z(long) ?GetBufferSetLength@CHString@@QAEPA_WH@Z
|
@ thiscall ?GetBufferSetLength@CHString@@QAEPAGH@Z(long)
|
||||||
@ thiscall ?GetData@CHString@@IBEPAUCHStringData@@XZ()
|
@ thiscall ?GetData@CHString@@IBEPAUCHStringData@@XZ()
|
||||||
@ thiscall ?GetLength@CHString@@QBEHXZ()
|
@ thiscall ?GetLength@CHString@@QBEHXZ()
|
||||||
@ thiscall ?Init@CHString@@IAEXXZ()
|
@ thiscall ?Init@CHString@@IAEXXZ()
|
||||||
@ thiscall ?IsEmpty@CHString@@QBEHXZ()
|
@ thiscall ?IsEmpty@CHString@@QBEHXZ()
|
||||||
@ thiscall ?Left@CHString@@QBE?AV1@H@Z(long)
|
@ thiscall ?Left@CHString@@QBE?AV1@H@Z(long)
|
||||||
@ thiscall ?LoadStringW@CHString@@QAEHI@Z(long)
|
@ thiscall ?LoadStringW@CHString@@QAEHI@Z(long)
|
||||||
@ thiscall ?LoadStringW@CHString@@IAEHIPAGI@Z(long wstr long) ?LoadStringW@CHString@@IAEHIPA_WI@Z
|
@ thiscall ?LoadStringW@CHString@@IAEHIPAGI@Z(long wstr long)
|
||||||
@ thiscall ?LockBuffer@CHString@@QAEPAGXZ() ?LockBuffer@CHString@@QAEPA_WXZ
|
@ thiscall ?LockBuffer@CHString@@QAEPAGXZ()
|
||||||
@ thiscall ?MakeLower@CHString@@QAEXXZ()
|
@ thiscall ?MakeLower@CHString@@QAEXXZ()
|
||||||
@ thiscall ?MakeReverse@CHString@@QAEXXZ()
|
@ thiscall ?MakeReverse@CHString@@QAEXXZ()
|
||||||
@ thiscall ?MakeUpper@CHString@@QAEXXZ()
|
@ thiscall ?MakeUpper@CHString@@QAEXXZ()
|
||||||
|
@ -46,31 +46,31 @@
|
||||||
@ thiscall ?Release@CHString@@KGXPAUCHStringData@@@Z(ptr)
|
@ thiscall ?Release@CHString@@KGXPAUCHStringData@@@Z(ptr)
|
||||||
@ thiscall ?Release@CHString@@IAEXXZ()
|
@ thiscall ?Release@CHString@@IAEXXZ()
|
||||||
@ thiscall ?ReleaseBuffer@CHString@@QAEXH@Z(long)
|
@ 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)
|
@ thiscall ?Right@CHString@@QBE?AV1@H@Z(long)
|
||||||
@ stdcall ?SafeStrlen@CHString@@KGHPBG@Z(wstr) ?SafeStrlen@CHString@@KGHPB_W@Z
|
@ stdcall ?SafeStrlen@CHString@@KGHPBG@Z(wstr)
|
||||||
@ thiscall ?SetAt@CHString@@QAEXHG@Z(long long) ?SetAt@CHString@@QAEXH_W@Z
|
@ thiscall ?SetAt@CHString@@QAEXHG@Z(long long)
|
||||||
@ thiscall ?SpanExcluding@CHString@@QBE?AV1@PBG@Z(long wstr) ?SpanExcluding@CHString@@QBE?AV1@PB_W@Z
|
@ thiscall ?SpanExcluding@CHString@@QBE?AV1@PBG@Z(long wstr)
|
||||||
@ thiscall ?SpanIncluding@CHString@@QBE?AV1@PBG@Z(long wstr) ?SpanIncluding@CHString@@QBE?AV1@PB_W@Z
|
@ thiscall ?SpanIncluding@CHString@@QBE?AV1@PBG@Z(long wstr)
|
||||||
@ thiscall ?TrimLeft@CHString@@QAEXXZ()
|
@ thiscall ?TrimLeft@CHString@@QAEXXZ()
|
||||||
@ thiscall ?TrimRight@CHString@@QAEXXZ()
|
@ thiscall ?TrimRight@CHString@@QAEXXZ()
|
||||||
@ thiscall ?UnlockBuffer@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@ABV0@@Z(ptr)
|
||||||
@ thiscall ??YCHString@@QAEABV0@D@Z(long)
|
@ thiscall ??YCHString@@QAEABV0@D@Z(long)
|
||||||
@ thiscall ??YCHString@@QAEABV0@PBG@Z(wstr) ??YCHString@@QAEABV0@PB_W@Z
|
@ thiscall ??YCHString@@QAEABV0@PBG@Z(wstr)
|
||||||
@ thiscall ??YCHString@@QAEABV0@G@Z(long) ??YCHString@@QAEABV0@_W@Z
|
@ thiscall ??YCHString@@QAEABV0@G@Z(long)
|
||||||
@ thiscall ??4CHString@@QAEABV0@PAV0@@Z(ptr)
|
@ thiscall ??4CHString@@QAEABV0@PAV0@@Z(ptr)
|
||||||
@ thiscall ??4CHString@@QAEABV0@ABV0@@Z(ptr)
|
@ thiscall ??4CHString@@QAEABV0@ABV0@@Z(ptr)
|
||||||
@ thiscall ??4CHString@@QAEABV0@PBD@Z(str)
|
@ thiscall ??4CHString@@QAEABV0@PBD@Z(str)
|
||||||
@ thiscall ??4CHString@@QAEABV0@D@Z(long)
|
@ thiscall ??4CHString@@QAEABV0@D@Z(long)
|
||||||
@ thiscall ??4CHString@@QAEABV0@PBE@Z(str)
|
@ thiscall ??4CHString@@QAEABV0@PBE@Z(str)
|
||||||
@ thiscall ??4CHString@@QAEABV0@PBG@Z(wstr) ??4CHString@@QAEABV0@PB_W@Z
|
@ thiscall ??4CHString@@QAEABV0@PBG@Z(wstr)
|
||||||
@ thiscall ??4CHString@@QAEABV0@G@Z(long) ??4CHString@@QAEABV0@_W@Z
|
@ thiscall ??4CHString@@QAEABV0@G@Z(long)
|
||||||
@ thiscall ??ACHString@@QBEGH@Z(long) ??ACHString@@QBE_WH@Z
|
@ thiscall ??ACHString@@QBEGH@Z(long)
|
||||||
@ thiscall ??1CHString@@QAE@XZ()
|
@ thiscall ??1CHString@@QAE@XZ()
|
||||||
@ stdcall ??H@YG?AVCHString@@GABV0@@Z(long ptr) ??H@YG?AVCHString@@_WABV0@@Z
|
@ stdcall ??H@YG?AVCHString@@GABV0@@Z(long ptr)
|
||||||
@ stdcall ??H@YG?AVCHString@@ABV0@G@Z(ptr long) ??H@YG?AVCHString@@ABV0@_W@Z
|
@ stdcall ??H@YG?AVCHString@@ABV0@G@Z(ptr long)
|
||||||
@ stdcall ??H@YG?AVCHString@@ABV0@PBG@Z(ptr wstr) ??H@YG?AVCHString@@ABV0@PB_W@Z
|
@ stdcall ??H@YG?AVCHString@@ABV0@PBG@Z(ptr wstr)
|
||||||
@ stdcall ??H@YG?AVCHString@@PBGABV0@@Z(wstr ptr) ??H@YG?AVCHString@@PB_WABV0@@Z
|
@ stdcall ??H@YG?AVCHString@@PBGABV0@@Z(wstr ptr)
|
||||||
@ stdcall ??H@YG?AVCHString@@ABV0@0@Z(ptr ptr)
|
@ stdcall ??H@YG?AVCHString@@ABV0@0@Z(ptr ptr)
|
||||||
|
|
|
@ -349,11 +349,19 @@ OutputLine_def(FILE *fileDest, EXPORT *pexp)
|
||||||
}
|
}
|
||||||
else if (pexp->pcRedirection)
|
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, '.'));
|
fDeco = ((giArch == ARCH_X86) && !ScanToken(pexp->pcRedirection, '.'));
|
||||||
fprintf(fileDest, "=");
|
fprintf(fileDest, "=");
|
||||||
PrintName(fileDest, pexp, "", 1, fDeco && !gbMSComp);
|
PrintName(fileDest, pexp, "", 1, fDeco && !gbMSComp);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else if (((pexp->uFlags & FL_STUB) || (pexp->nCallingConvention == CC_STUB)) &&
|
else if (((pexp->uFlags & FL_STUB) || (pexp->nCallingConvention == CC_STUB)) &&
|
||||||
(pexp->pcName[0] == '?'))
|
(pexp->pcName[0] == '?'))
|
||||||
|
|
Loading…
Reference in a new issue