summaryrefslogtreecommitdiff
path: root/sal
diff options
context:
space:
mode:
Diffstat (limited to 'sal')
-rw-r--r--sal/systools/win32/kill/kill.cxx21
-rw-r--r--sal/systools/win32/uwinapi/SHCreateItemFromParsingName.cpp21
-rw-r--r--sal/systools/win32/uwinapi/makefile.mk19
-rw-r--r--sal/systools/win32/uwinapi/uwinapi.dxp1
-rw-r--r--sal/systools/win32/uwinapi/uwinapi64.dxp22
5 files changed, 77 insertions, 7 deletions
diff --git a/sal/systools/win32/kill/kill.cxx b/sal/systools/win32/kill/kill.cxx
index 76f0b2669d35..ab1cb57d7973 100644
--- a/sal/systools/win32/kill/kill.cxx
+++ b/sal/systools/win32/kill/kill.cxx
@@ -190,6 +190,7 @@ static BOOL RaiseSignalEx( HANDLE hProcess, int sig )
if ( fSuccess )
{
+#if defined(INTEL)
if ( sig )
{
DWORD dwStackBuffer[] =
@@ -207,8 +208,28 @@ static BOOL RaiseSignalEx( HANDLE hProcess, int sig )
}
else
{
+ // FIXME: why? Does AMD64 need it too?
aContext.Ecx = aContext.Eax = aContext.Ebx = aContext.Edx = aContext.Esi = aContext.Edi = 0;
}
+#elif defined(X86_64)
+ if ( sig )
+ {
+ DWORD dwStackBuffer[] =
+ {
+ (DWORD)(aContext.Rip >> 32),
+ (DWORD)(aContext.Rip),
+ SignalToExceptionCode( sig ),
+ EXCEPTION_NONCONTINUABLE,
+ 0,
+ 0,
+ 0
+ };
+
+ aContext.Rsp -= sizeof(dwStackBuffer);
+ WriteProcessMemory( hProcess, (LPVOID)aContext.Rsp, dwStackBuffer, sizeof(dwStackBuffer), NULL );
+ aContext.Rip = (DWORD64) GetProcAddressEx( hProcess, GetModuleHandleA("KERNEL32"), "RaiseException" );
+ }
+#endif
fSuccess = SetThreadContext( hThread, &aContext );
}
diff --git a/sal/systools/win32/uwinapi/SHCreateItemFromParsingName.cpp b/sal/systools/win32/uwinapi/SHCreateItemFromParsingName.cpp
index eb7624ed656c..b59f2972679e 100644
--- a/sal/systools/win32/uwinapi/SHCreateItemFromParsingName.cpp
+++ b/sal/systools/win32/uwinapi/SHCreateItemFromParsingName.cpp
@@ -26,4 +26,23 @@
#include "macros.h"
-DEFINE_DEFAULT_THUNK( shell32, TRYLOAD, HRESULT, WINAPI, SHCreateItemFromParsingName, (PCWSTR pszPath, IBindCtx *pbc, REFIID riid, void **ppv) ) \ No newline at end of file
+static HRESULT WINAPI SHCreateItemFromParsingName_Failure (PCWSTR pszPath, IBindCtx *pbc, REFIID riid, void **ppv)
+{
+ return E_NOTIMPL;
+}
+
+extern HRESULT (WINAPI *pSHCreateItemFromParsingName)(PCWSTR pszPath, IBindCtx *pbc, REFIID riid, void **ppv);
+
+static HRESULT WINAPI SHCreateItemFromParsingName_Thunk (PCWSTR pszPath, IBindCtx *pbc, REFIID riid, void **ppv)
+{
+ ResolveThunk_TRYLOAD( (FARPROC*)&pSHCreateItemFromParsingName, "shell32.dll", "SHCreateItemFromParsingName", 0, (FARPROC)SHCreateItemFromParsingName_Failure);
+ return pSHCreateItemFromParsingName(pszPath, pbc, riid, ppv);
+}
+
+extern "C" HRESULT WINAPI SHCreateItemFromParsingName (PCWSTR pszPath, IBindCtx *pbc, REFIID riid, void **ppv)
+{
+ return pSHCreateItemFromParsingName(pszPath, pbc, riid, ppv);
+}
+
+HRESULT (WINAPI *pSHCreateItemFromParsingName)(PCWSTR pszPath, IBindCtx *pbc, REFIID riid, void **ppv) = SHCreateItemFromParsingName_Thunk;
+
diff --git a/sal/systools/win32/uwinapi/makefile.mk b/sal/systools/win32/uwinapi/makefile.mk
index effeea41f8b3..ff4aa4f24fd8 100644
--- a/sal/systools/win32/uwinapi/makefile.mk
+++ b/sal/systools/win32/uwinapi/makefile.mk
@@ -51,6 +51,14 @@ LINK=$(WRAPCMD) "$(PSDK_HOME)$/Bin$/Win64$/LINK.EXE"
.ENDIF
SLOFILES=\
+ $(SLO)$/ResolveThunk.obj\
+ $(SLO)$/SHCreateItemFromParsingName.obj\
+ $(SLO)$/snprintf.obj\
+ $(SLO)$/snwprintf.obj
+
+
+.IF "$(CPUNAME)"=="INTEL"
+SLOFILES+=\
$(SLO)$/CheckTokenMembership.obj\
$(SLO)$/CommandLineToArgvW.obj\
$(SLO)$/CopyFileExA.obj\
@@ -71,10 +79,7 @@ SLOFILES=\
$(SLO)$/MoveFileExA.obj\
$(SLO)$/MoveFileExW.obj\
$(SLO)$/toolhelp.obj\
- $(SLO)$/ResolveThunk.obj\
$(SLO)$/ResolveUnicows.obj\
- $(SLO)$/snprintf.obj\
- $(SLO)$/snwprintf.obj\
$(SLO)$/FindFirstVolumeA.obj\
$(SLO)$/FindFirstVolumeW.obj\
$(SLO)$/FindNextVolumeA.obj\
@@ -103,8 +108,8 @@ SLOFILES=\
$(SLO)$/PathRemoveExtensionW.obj\
$(SLO)$/PathRemoveFileSpecW.obj\
$(SLO)$/PathSetDlgItemPathW.obj\
- $(SLO)$/PathStripToRootW.obj\
- $(SLO)$/SHCreateItemFromParsingName.obj
+ $(SLO)$/PathStripToRootW.obj
+.ENDIF
SHL1TARGET=$(TARGET)
SHL1IMPLIB=$(SHL1TARGET)
@@ -116,9 +121,13 @@ DEF1EXPORTFILE=\
unicows_mingw.dxp
.ELSE
DEF1EXPORTFILE=\
+ $(SHL1TARGET)64.dxp
+.IF "$(CPUNAME)"=="INTEL"
+DEF1EXPORTFILE+=\
$(SHL1TARGET).dxp\
unicows.dxp
.ENDIF
+.ENDIF
DEF1DEPN=\
$(DEF1EXPORTFILE)\
makefile.mk
diff --git a/sal/systools/win32/uwinapi/uwinapi.dxp b/sal/systools/win32/uwinapi/uwinapi.dxp
index 61583f996bc6..309c47bcfafa 100644
--- a/sal/systools/win32/uwinapi/uwinapi.dxp
+++ b/sal/systools/win32/uwinapi/uwinapi.dxp
@@ -77,4 +77,3 @@ PathRemoveExtensionW
PathRemoveFileSpecW
PathSetDlgItemPathW
PathStripToRootW
-SHCreateItemFromParsingName
diff --git a/sal/systools/win32/uwinapi/uwinapi64.dxp b/sal/systools/win32/uwinapi/uwinapi64.dxp
new file mode 100644
index 000000000000..3212475dbd1a
--- /dev/null
+++ b/sal/systools/win32/uwinapi/uwinapi64.dxp
@@ -0,0 +1,22 @@
+;*************************************************************************
+;
+; Licensed to the Apache Software Foundation (ASF) under one
+; or more contributor license agreements. See the NOTICE file
+; distributed with this work for additional information
+; regarding copyright ownership. The ASF licenses this file
+; to you under the Apache License, Version 2.0 (the
+; "License"); you may not use this file except in compliance
+; with the License. You may obtain a copy of the License at
+;
+; http://www.apache.org/licenses/LICENSE-2.0
+;
+; Unless required by applicable law or agreed to in writing,
+; software distributed under the License is distributed on an
+; "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+; KIND, either express or implied. See the License for the
+; specific language governing permissions and limitations
+; under the License.
+;
+;*************************************************************************
+
+SHCreateItemFromParsingName