Signed-off-by: Esme Povirk esme@codeweavers.com --- dlls/diasymreader/writer.c | 145 ++++++++++++++++++++++++++++--------- include/corsym.idl | 51 +++++++++++++ 2 files changed, 160 insertions(+), 36 deletions(-)
diff --git a/dlls/diasymreader/writer.c b/dlls/diasymreader/writer.c index dc4c3fb0d2b..dfc3cc47cbe 100644 --- a/dlls/diasymreader/writer.c +++ b/dlls/diasymreader/writer.c @@ -32,24 +32,28 @@ WINE_DEFAULT_DEBUG_CHANNEL(diasymreader);
typedef struct SymWriter { - ISymUnmanagedWriter iface; + ISymUnmanagedWriter5 iface; LONG ref; } SymWriter;
-static inline SymWriter *impl_from_ISymUnmanagedWriter(ISymUnmanagedWriter *iface) +static inline SymWriter *impl_from_ISymUnmanagedWriter5(ISymUnmanagedWriter5 *iface) { return CONTAINING_RECORD(iface, SymWriter, iface); }
-static HRESULT WINAPI SymWriter_QueryInterface(ISymUnmanagedWriter *iface, REFIID iid, +static HRESULT WINAPI SymWriter_QueryInterface(ISymUnmanagedWriter5 *iface, REFIID iid, void **ppv) { - SymWriter *This = impl_from_ISymUnmanagedWriter(iface); + SymWriter *This = impl_from_ISymUnmanagedWriter5(iface);
TRACE("(%p,%s,%p)\n", iface, debugstr_guid(iid), ppv);
if (IsEqualIID(&IID_IUnknown, iid) || - IsEqualIID(&IID_ISymUnmanagedWriter, iid)) + IsEqualIID(&IID_ISymUnmanagedWriter, iid) || + IsEqualIID(&IID_ISymUnmanagedWriter2, iid) || + IsEqualIID(&IID_ISymUnmanagedWriter3, iid) || + IsEqualIID(&IID_ISymUnmanagedWriter4, iid) || + IsEqualIID(&IID_ISymUnmanagedWriter5, iid)) { *ppv = &This->iface; } @@ -64,9 +68,9 @@ static HRESULT WINAPI SymWriter_QueryInterface(ISymUnmanagedWriter *iface, REFII return S_OK; }
-static ULONG WINAPI SymWriter_AddRef(ISymUnmanagedWriter *iface) +static ULONG WINAPI SymWriter_AddRef(ISymUnmanagedWriter5 *iface) { - SymWriter *This = impl_from_ISymUnmanagedWriter(iface); + SymWriter *This = impl_from_ISymUnmanagedWriter5(iface); ULONG ref = InterlockedIncrement(&This->ref);
TRACE("(%p) refcount=%u\n", iface, ref); @@ -74,9 +78,9 @@ static ULONG WINAPI SymWriter_AddRef(ISymUnmanagedWriter *iface) return ref; }
-static ULONG WINAPI SymWriter_Release(ISymUnmanagedWriter *iface) +static ULONG WINAPI SymWriter_Release(ISymUnmanagedWriter5 *iface) { - SymWriter *This = impl_from_ISymUnmanagedWriter(iface); + SymWriter *This = impl_from_ISymUnmanagedWriter5(iface); ULONG ref = InterlockedDecrement(&This->ref);
TRACE("(%p) refcount=%u\n", iface, ref); @@ -89,7 +93,7 @@ static ULONG WINAPI SymWriter_Release(ISymUnmanagedWriter *iface) return ref; }
-static HRESULT WINAPI SymWriter_DefineDocument(ISymUnmanagedWriter *iface, const WCHAR *url, +static HRESULT WINAPI SymWriter_DefineDocument(ISymUnmanagedWriter5 *iface, const WCHAR *url, const GUID *language, const GUID *languageVendor, const GUID *documentType, ISymUnmanagedDocumentWriter** pRetVal) { @@ -98,45 +102,45 @@ static HRESULT WINAPI SymWriter_DefineDocument(ISymUnmanagedWriter *iface, const return E_NOTIMPL; }
-static HRESULT WINAPI SymWriter_SetUserEntryPoint(ISymUnmanagedWriter *iface, mdMethodDef entryMethod) +static HRESULT WINAPI SymWriter_SetUserEntryPoint(ISymUnmanagedWriter5 *iface, mdMethodDef entryMethod) { FIXME("(%p,0x%x)\n", iface, entryMethod); return E_NOTIMPL; }
-static HRESULT WINAPI SymWriter_OpenMethod(ISymUnmanagedWriter *iface, mdMethodDef method) +static HRESULT WINAPI SymWriter_OpenMethod(ISymUnmanagedWriter5 *iface, mdMethodDef method) { FIXME("(%p,0x%x)\n", iface, method); return E_NOTIMPL; }
-static HRESULT WINAPI SymWriter_CloseMethod(ISymUnmanagedWriter *iface) +static HRESULT WINAPI SymWriter_CloseMethod(ISymUnmanagedWriter5 *iface) { FIXME("(%p)\n", iface); return E_NOTIMPL; }
-static HRESULT WINAPI SymWriter_OpenScope(ISymUnmanagedWriter *iface, ULONG32 startOffset, +static HRESULT WINAPI SymWriter_OpenScope(ISymUnmanagedWriter5 *iface, ULONG32 startOffset, ULONG32 *pRetVal) { FIXME("(%p,%u,%p)\n", iface, startOffset, pRetVal); return E_NOTIMPL; }
-static HRESULT WINAPI SymWriter_CloseScope(ISymUnmanagedWriter *iface, ULONG32 endOffset) +static HRESULT WINAPI SymWriter_CloseScope(ISymUnmanagedWriter5 *iface, ULONG32 endOffset) { FIXME("(%p,%u)\n", iface, endOffset); return E_NOTIMPL; }
-static HRESULT WINAPI SymWriter_SetScopeRange(ISymUnmanagedWriter *iface, ULONG32 scopeID, ULONG32 startOffset, +static HRESULT WINAPI SymWriter_SetScopeRange(ISymUnmanagedWriter5 *iface, ULONG32 scopeID, ULONG32 startOffset, ULONG32 endOffset) { FIXME("(%p,%u,%u,%u)\n", iface, scopeID, startOffset, endOffset); return E_NOTIMPL; }
-static HRESULT WINAPI SymWriter_DefineLocalVariable(ISymUnmanagedWriter *iface, const WCHAR *name, +static HRESULT WINAPI SymWriter_DefineLocalVariable(ISymUnmanagedWriter5 *iface, const WCHAR *name, ULONG32 attributes, ULONG32 cSig, unsigned char signature[], ULONG32 addrKind, ULONG32 addr1, ULONG32 addr2, ULONG32 addr3, ULONG32 startOffset, ULONG32 endOffset) { @@ -144,7 +148,7 @@ static HRESULT WINAPI SymWriter_DefineLocalVariable(ISymUnmanagedWriter *iface, return E_NOTIMPL; }
-static HRESULT WINAPI SymWriter_DefineParameter(ISymUnmanagedWriter *iface, const WCHAR *name, +static HRESULT WINAPI SymWriter_DefineParameter(ISymUnmanagedWriter5 *iface, const WCHAR *name, ULONG32 attributes, ULONG32 sequence, ULONG32 addrKind, ULONG32 addr1, ULONG32 addr2, ULONG32 addr3) { @@ -152,7 +156,7 @@ static HRESULT WINAPI SymWriter_DefineParameter(ISymUnmanagedWriter *iface, cons return E_NOTIMPL; }
-static HRESULT WINAPI SymWriter_DefineField(ISymUnmanagedWriter *iface, mdTypeDef parent, +static HRESULT WINAPI SymWriter_DefineField(ISymUnmanagedWriter5 *iface, mdTypeDef parent, const WCHAR *name, ULONG32 attributes, ULONG32 cSig, unsigned char signature[], ULONG32 addrKind, ULONG32 addr1, ULONG32 addr2, ULONG32 addr3) { @@ -160,7 +164,7 @@ static HRESULT WINAPI SymWriter_DefineField(ISymUnmanagedWriter *iface, mdTypeDe return E_NOTIMPL; }
-static HRESULT WINAPI SymWriter_DefineGlobalVariable(ISymUnmanagedWriter *iface, const WCHAR *name, +static HRESULT WINAPI SymWriter_DefineGlobalVariable(ISymUnmanagedWriter5 *iface, const WCHAR *name, ULONG32 attributes, ULONG32 cSig, unsigned char signature[], ULONG32 addrKind, ULONG32 addr1, ULONG32 addr2, ULONG32 addr3) { @@ -168,92 +172,152 @@ static HRESULT WINAPI SymWriter_DefineGlobalVariable(ISymUnmanagedWriter *iface, return E_NOTIMPL; }
-static HRESULT WINAPI SymWriter_Close(ISymUnmanagedWriter *iface) +static HRESULT WINAPI SymWriter_Close(ISymUnmanagedWriter5 *iface) { FIXME("(%p)\n", iface); return E_NOTIMPL; }
-static HRESULT WINAPI SymWriter_SetSymAttributes(ISymUnmanagedWriter *iface, mdToken parent, +static HRESULT WINAPI SymWriter_SetSymAttributes(ISymUnmanagedWriter5 *iface, mdToken parent, const WCHAR *name, ULONG32 cData, unsigned char data[]) { FIXME("(%p,0x%x,%s,%u)\n", iface, parent, debugstr_w(name), cData); return E_NOTIMPL; }
-static HRESULT WINAPI SymWriter_OpenNamespace(ISymUnmanagedWriter *iface, const WCHAR *name) +static HRESULT WINAPI SymWriter_OpenNamespace(ISymUnmanagedWriter5 *iface, const WCHAR *name) { FIXME("(%p,%s)\n", iface, debugstr_w(name)); return E_NOTIMPL; }
-static HRESULT WINAPI SymWriter_CloseNamespace(ISymUnmanagedWriter *iface) +static HRESULT WINAPI SymWriter_CloseNamespace(ISymUnmanagedWriter5 *iface) { FIXME("(%p)\n", iface); return E_NOTIMPL; }
-static HRESULT WINAPI SymWriter_UsingNamespace(ISymUnmanagedWriter *iface, const WCHAR *fullName) +static HRESULT WINAPI SymWriter_UsingNamespace(ISymUnmanagedWriter5 *iface, const WCHAR *fullName) { FIXME("(%p,%s)\n", iface, debugstr_w(fullName)); return E_NOTIMPL; }
-static HRESULT WINAPI SymWriter_SetMethodSourceRange(ISymUnmanagedWriter *iface, ISymUnmanagedDocumentWriter *startDoc, +static HRESULT WINAPI SymWriter_SetMethodSourceRange(ISymUnmanagedWriter5 *iface, ISymUnmanagedDocumentWriter *startDoc, ULONG32 startLine, ULONG32 startColumn, ISymUnmanagedDocumentWriter *endDoc, ULONG32 endLine, ULONG32 endColumn) { FIXME("(%p,%p,%u,%u,%p,%u,%u)\n", iface, startDoc, startLine, startColumn, endDoc, endLine, endColumn); return E_NOTIMPL; }
-static HRESULT WINAPI SymWriter_Initialize(ISymUnmanagedWriter *iface, IUnknown *emitter, const WCHAR *filename, +static HRESULT WINAPI SymWriter_Initialize(ISymUnmanagedWriter5 *iface, IUnknown *emitter, const WCHAR *filename, IStream *pIStream, BOOL fFullBuild) { FIXME("(%p,%p,%s,%p,%u)\n", iface, emitter, debugstr_w(filename), pIStream, fFullBuild); return E_NOTIMPL; }
-static HRESULT WINAPI SymWriter_GetDebugInfo(ISymUnmanagedWriter *iface, IMAGE_DEBUG_DIRECTORY *pIDD, DWORD cData, +static HRESULT WINAPI SymWriter_GetDebugInfo(ISymUnmanagedWriter5 *iface, IMAGE_DEBUG_DIRECTORY *pIDD, DWORD cData, DWORD *pcData, BYTE data[]) { FIXME("(%p,%p,%u,%p,%p)\n", iface, pIDD, cData, pcData, data); return E_NOTIMPL; }
-static HRESULT WINAPI SymWriter_DefineSequencePoints(ISymUnmanagedWriter *iface, ISymUnmanagedDocumentWriter *document, +static HRESULT WINAPI SymWriter_DefineSequencePoints(ISymUnmanagedWriter5 *iface, ISymUnmanagedDocumentWriter *document, ULONG32 spCount, ULONG32 offsets[], ULONG32 lines[], ULONG32 columns[], ULONG32 endLines[], ULONG32 endColumns[]) { FIXME("(%p,%p,%u)\n", iface, document, spCount); return E_NOTIMPL; }
-static HRESULT WINAPI SymWriter_RemapToken(ISymUnmanagedWriter *iface, mdToken oldToken, mdToken newToken) +static HRESULT WINAPI SymWriter_RemapToken(ISymUnmanagedWriter5 *iface, mdToken oldToken, mdToken newToken) { FIXME("(%p,0x%x,0x%x)\n", iface, oldToken, newToken); return E_NOTIMPL; }
-static HRESULT WINAPI SymWriter_Initialize2(ISymUnmanagedWriter *iface, IUnknown *emitter, const WCHAR *tempFilename, +static HRESULT WINAPI SymWriter_Initialize2(ISymUnmanagedWriter5 *iface, IUnknown *emitter, const WCHAR *tempFilename, IStream *pIStream, BOOL fFullBuild, const WCHAR *finalFilename) { FIXME("(%p,%p,%s,%p,%u,%s)\n", iface, emitter, debugstr_w(tempFilename), pIStream, fFullBuild, debugstr_w(finalFilename)); return E_NOTIMPL; }
-static HRESULT WINAPI SymWriter_DefineConstant(ISymUnmanagedWriter *iface, const WCHAR *name, VARIANT value, ULONG32 cSig, +static HRESULT WINAPI SymWriter_DefineConstant(ISymUnmanagedWriter5 *iface, const WCHAR *name, VARIANT value, ULONG32 cSig, unsigned char signature[]) { FIXME("(%p,%s,%s,%u,%p)\n", iface, debugstr_w(name), debugstr_variant(&value), cSig, signature); return E_NOTIMPL; }
-static HRESULT WINAPI SymWriter_Abort(ISymUnmanagedWriter *iface) +static HRESULT WINAPI SymWriter_Abort(ISymUnmanagedWriter5 *iface) { FIXME("(%p)\n", iface); return E_NOTIMPL; }
-static const ISymUnmanagedWriterVtbl SymWriter_Vtbl = { +static HRESULT WINAPI SymWriter_DefineLocalVariable2(ISymUnmanagedWriter5 *iface, const WCHAR *name, ULONG32 attributes, + mdSignature sigToken, ULONG32 addrKind, ULONG32 addr1, ULONG32 addr2, ULONG32 addr3, + ULONG32 startOffset, ULONG32 endOffset) +{ + FIXME("(%p,%s,0x%x,0x%x,%u)\n", iface, debugstr_w(name), attributes, sigToken, addrKind); + return E_NOTIMPL; +} + +static HRESULT WINAPI SymWriter_DefineGlobalVariable2(ISymUnmanagedWriter5 *iface, const WCHAR *name, ULONG32 attributes, + mdSignature sigToken, ULONG32 addrKind, ULONG32 addr1, ULONG32 addr2, ULONG32 addr3) +{ + FIXME("(%p,%s,0x%x,0x%x,%u)\n", iface, debugstr_w(name), attributes, sigToken, addrKind); + return E_NOTIMPL; +} + +static HRESULT WINAPI SymWriter_DefineConstant2(ISymUnmanagedWriter5 *iface, const WCHAR *name, VARIANT value, mdSignature sigToken) +{ + FIXME("(%p,%s,%s,0x%x)\n", iface, debugstr_w(name), debugstr_variant(&value), sigToken); + return E_NOTIMPL; +} + +static HRESULT WINAPI SymWriter_OpenMethod2(ISymUnmanagedWriter5 *iface, mdMethodDef method, ULONG32 isect, ULONG32 offset) +{ + FIXME("(%p,0x%x,%u,%u)\n", iface, method, isect, offset); + return E_NOTIMPL; +} + +static HRESULT WINAPI SymWriter_Commit(ISymUnmanagedWriter5 *iface) +{ + FIXME("(%p)\n", iface); + return E_NOTIMPL; +} + +static HRESULT WINAPI SymWriter_GetDebugInfoWithPadding(ISymUnmanagedWriter5 *iface, IMAGE_DEBUG_DIRECTORY *pIDD, DWORD cbData, + DWORD* pcData, BYTE data[]) +{ + FIXME("(%p,%p,%u,%p,%p)\n", iface, pIDD, cbData, pcData, data); + return E_NOTIMPL; +} + +static HRESULT WINAPI SymWriter_OpenMapTokensToSourceSpans(ISymUnmanagedWriter5 *iface) +{ + FIXME("(%p)\n", iface); + return E_NOTIMPL; +} + +static HRESULT WINAPI SymWriter_CloseMapTokensToSourceSpans(ISymUnmanagedWriter5 *iface) +{ + FIXME("(%p)\n", iface); + return E_NOTIMPL; +} + +static HRESULT WINAPI SymWriter_MapTokenToSourceSpan(ISymUnmanagedWriter5 *iface, mdToken token, ISymUnmanagedDocumentWriter* document, + ULONG32 line, ULONG32 column, ULONG32 endLine, ULONG32 endColumn) +{ + FIXME("(%p,%x,%p,%u,%u,%u,%u)\n", iface, token, document, line, column, endLine, endColumn); + return E_NOTIMPL; +} + + +static const ISymUnmanagedWriter5Vtbl SymWriter_Vtbl = { SymWriter_QueryInterface, SymWriter_AddRef, SymWriter_Release, @@ -280,7 +344,16 @@ static const ISymUnmanagedWriterVtbl SymWriter_Vtbl = { SymWriter_RemapToken, SymWriter_Initialize2, SymWriter_DefineConstant, - SymWriter_Abort + SymWriter_Abort, + SymWriter_DefineLocalVariable2, + SymWriter_DefineGlobalVariable2, + SymWriter_DefineConstant2, + SymWriter_OpenMethod2, + SymWriter_Commit, + SymWriter_GetDebugInfoWithPadding, + SymWriter_OpenMapTokensToSourceSpans, + SymWriter_CloseMapTokensToSourceSpans, + SymWriter_MapTokenToSourceSpan };
HRESULT SymWriter_CreateInstance(REFIID iid, void **ppv) @@ -297,7 +370,7 @@ HRESULT SymWriter_CreateInstance(REFIID iid, void **ppv)
hr = IUnknown_QueryInterface(&This->iface, iid, ppv);
- ISymUnmanagedWriter_Release(&This->iface); + ISymUnmanagedWriter5_Release(&This->iface);
return hr; } diff --git a/include/corsym.idl b/include/corsym.idl index f46b1f5a78a..8edf92d5146 100644 --- a/include/corsym.idl +++ b/include/corsym.idl @@ -25,6 +25,7 @@ cpp_quote("#if 0") typedef UINT32 mdToken; typedef mdToken mdMethodDef; typedef mdToken mdTypeDef; +typedef mdToken mdSignature; /* defined in winnt.h */ typedef SIZE_T IMAGE_DEBUG_DIRECTORY; cpp_quote("#endif") @@ -93,4 +94,54 @@ interface ISymUnmanagedWriter : IUnknown HRESULT Abort(); }
+[ + object, + uuid(0b97726e-9e6d-4f05-9a26-424022093caa), + pointer_default(unique) +] +interface ISymUnmanagedWriter2 : ISymUnmanagedWriter +{ + HRESULT DefineLocalVariable2([in] const WCHAR *name, [in] ULONG32 attributes, [in] mdSignature sigToken, + [in] ULONG32 addrKind, [in] ULONG32 addr1, [in] ULONG32 addr2, [in] ULONG32 addr3, + [in] ULONG32 startOffset, [in] ULONG32 endOffset); + HRESULT DefineGlobalVariable2([in] const WCHAR *name, [in] ULONG32 attributes, [in] mdSignature sigToken, + [in] ULONG32 addrKind, [in] ULONG32 addr1, [in] ULONG32 addr2, [in] ULONG32 addr3); + HRESULT DefineConstant2([in] const WCHAR *name, [in] VARIANT value, [in] mdSignature sigToken); +} + +[ + object, + uuid(12f1e02c-1e05-4b0e-9468-ebc9d1bb040f), + pointer_default(unique) +] +interface ISymUnmanagedWriter3 : ISymUnmanagedWriter2 +{ + HRESULT OpenMethod2([in] mdMethodDef method, [in] ULONG32 isect, [in] ULONG32 offset); + HRESULT Commit(); +} + +[ + object, + uuid(bc7e3f53-f458-4c23-9dbd-a189e6e96594), + pointer_default(unique) +] +interface ISymUnmanagedWriter4 : ISymUnmanagedWriter3 +{ + HRESULT GetDebugInfoWithPadding([in, out] IMAGE_DEBUG_DIRECTORY *pIDD, [in] DWORD cbData, [out] DWORD* pcData, + [out, size_is(cbData), length_is(*pcData)] BYTE data[]); +} + +[ + object, + uuid(dcf7780d-bde9-45df-acfe-21731a32000c), + pointer_default(unique) +] +interface ISymUnmanagedWriter5 : ISymUnmanagedWriter4 +{ + HRESULT OpenMapTokensToSourceSpans(); + HRESULT CloseMapTokensToSourceSpans(); + HRESULT MapTokenToSourceSpan([in] mdToken token, [in] ISymUnmanagedDocumentWriter* document, + [in] ULONG32 line, [in] ULONG32 column, [in] ULONG32 endLine, [in] ULONG32 endColumn); +} + cpp_quote("DEFINE_GUID(CLSID_CorSymWriter_SxS, 0x0ae2deb0,0xf901,0x478b,0xbb,0x9f,0x88,0x1e,0xe8,0x06,0x67,0x88);")