diff options
author | Stephan Bergmann <sbergman@redhat.com> | 2013-04-18 13:16:41 +0200 |
---|---|---|
committer | Stephan Bergmann <sbergman@redhat.com> | 2013-04-18 13:27:31 +0200 |
commit | 96488510c006785bba22c1039885c03e95ac4832 (patch) | |
tree | 20fdaa3131b63df8c81497cc332ebb105b34db61 /javaunohelper | |
parent | 000d3aaca5e8b0bab4689f753e8025d73e5bcded (diff) |
Let juhx.dll export undecorated symbols on Windows
...otherwise preload.cxx in juh.dll will not be able to find them
via osl_getFunctionSymbol. What apparently happens is that JNICALL expanding
to __stdcall decorates symbol names with _...@NN. This likely was hidden in
pre-gbuild times thanks to the use of def files. (On a side note, the JVM
appears to contain special code to find syms for native methods in both
decorated and undecorated form; that explains why it picks up the decorated
symbols from juh.dll just fine.)
There is no need for the functions in juhx.dll (called from the juh.dll wrapper)
to adhere to JNICALL (in fact, things would likely be easier to maintain if the
juhx.dll functions also used different names than their juh.dll wrappers).
However, what complicates this patch is that for DISABLE_DYNLOADING, the juh
wrapper and its preload.cxx is elided, and the code that would normally go into
the juhx library goes into the juh library (and thus needs to stick to JNICALL,
and also needs to use the right function names).
Change-Id: I66611648f1f79f57f0c1b23fb7a801da2d7b86c5
Diffstat (limited to 'javaunohelper')
-rw-r--r-- | javaunohelper/source/bootstrap.cxx | 5 | ||||
-rw-r--r-- | javaunohelper/source/javaunohelper.cxx | 9 | ||||
-rw-r--r-- | javaunohelper/source/juhx-export-functions.hxx | 44 | ||||
-rw-r--r-- | javaunohelper/source/juhx-export-types.hxx | 52 | ||||
-rw-r--r-- | javaunohelper/source/preload.cxx | 21 |
5 files changed, 112 insertions, 19 deletions
diff --git a/javaunohelper/source/bootstrap.cxx b/javaunohelper/source/bootstrap.cxx index c47b332d9a71..0fa2558c87f1 100644 --- a/javaunohelper/source/bootstrap.cxx +++ b/javaunohelper/source/bootstrap.cxx @@ -17,6 +17,7 @@ * the License at http://www.apache.org/licenses/LICENSE-2.0 . */ +#include "sal/config.h" #include "osl/diagnose.h" @@ -36,9 +37,9 @@ #include "jvmaccess/virtualmachine.hxx" #include "jvmaccess/unovirtualmachine.hxx" +#include "juhx-export-functions.hxx" #include "vm.hxx" - using namespace ::com::sun::star; using namespace ::com::sun::star::uno; @@ -62,7 +63,7 @@ inline OUString jstring_to_oustring( jstring jstr, JNIEnv * jni_env ) } //================================================================================================== -extern "C" SAL_JNI_EXPORT jobject JNICALL Java_com_sun_star_comp_helper_Bootstrap_cppuhelper_1bootstrap( +jobject Java_com_sun_star_comp_helper_Bootstrap_cppuhelper_1bootstrap( JNIEnv * jni_env, SAL_UNUSED_PARAMETER jclass, jstring juno_rc, jobjectArray jpairs, jobject loader ) { diff --git a/javaunohelper/source/javaunohelper.cxx b/javaunohelper/source/javaunohelper.cxx index 68bf90794597..e43023650017 100644 --- a/javaunohelper/source/javaunohelper.cxx +++ b/javaunohelper/source/javaunohelper.cxx @@ -17,6 +17,7 @@ * the License at http://www.apache.org/licenses/LICENSE-2.0 . */ +#include "sal/config.h" #include <osl/diagnose.h> #include <osl/module.h> @@ -35,9 +36,9 @@ #include "jvmaccess/virtualmachine.hxx" #include "jvmaccess/unovirtualmachine.hxx" +#include "juhx-export-functions.hxx" #include "vm.hxx" - using namespace ::com::sun::star; using namespace ::com::sun::star::uno; @@ -46,8 +47,7 @@ using namespace ::com::sun::star::uno; * Method: component_writeInfo * Signature: (Ljava/lang/String;Lcom/sun/star/lang/XMultiServiceFactory;Lcom/sun/star/registry/XRegistryKey;)Z */ -extern "C" SAL_JNI_EXPORT jboolean JNICALL -Java_com_sun_star_comp_helper_SharedLibraryLoader_component_1writeInfo( +jboolean Java_com_sun_star_comp_helper_SharedLibraryLoader_component_1writeInfo( JNIEnv * pJEnv, SAL_UNUSED_PARAMETER jclass, jstring jLibName, jobject jSMgr, jobject jRegKey, jobject loader ) { @@ -133,8 +133,7 @@ Java_com_sun_star_comp_helper_SharedLibraryLoader_component_1writeInfo( * Method: component_getFactory * Signature: (Ljava/lang/String;Ljava/lang/String;Lcom/sun/star/lang/XMultiServiceFactory;Lcom/sun/star/registry/XRegistryKey;)Ljava/lang/Object; */ -extern "C" SAL_JNI_EXPORT jobject JNICALL -Java_com_sun_star_comp_helper_SharedLibraryLoader_component_1getFactory( +jobject Java_com_sun_star_comp_helper_SharedLibraryLoader_component_1getFactory( JNIEnv * pJEnv, SAL_UNUSED_PARAMETER jclass, jstring jLibName, jstring jImplName, jobject jSMgr, jobject jRegKey, jobject loader ) { diff --git a/javaunohelper/source/juhx-export-functions.hxx b/javaunohelper/source/juhx-export-functions.hxx new file mode 100644 index 000000000000..0012cf4832bf --- /dev/null +++ b/javaunohelper/source/juhx-export-functions.hxx @@ -0,0 +1,44 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * 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 . + */ + +#ifndef INCLUDED_JAVAUNOHELPER_SOURCE_JUHX_EXPORT_FUNCTIONS_HXX +#define INCLUDED_JAVAUNOHELPER_SOURCE_JUHX_EXPORT_FUNCTIONS_HXX + +#include "sal/config.h" + +#include "sal/types.h" + +#include "juhx-export-types.hxx" + +extern "C" { + +SAL_JNI_EXPORT javaunohelper::detail::Func_bootstrap +Java_com_sun_star_comp_helper_Bootstrap_cppuhelper_1bootstrap; + +SAL_JNI_EXPORT javaunohelper::detail::Func_getFactory +Java_com_sun_star_comp_helper_SharedLibraryLoader_component_1getFactory; + +SAL_JNI_EXPORT javaunohelper::detail::Func_writeInfo +Java_com_sun_star_comp_helper_SharedLibraryLoader_component_1writeInfo; + +} + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/javaunohelper/source/juhx-export-types.hxx b/javaunohelper/source/juhx-export-types.hxx new file mode 100644 index 000000000000..b58d2e8cff7f --- /dev/null +++ b/javaunohelper/source/juhx-export-types.hxx @@ -0,0 +1,52 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * 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 . + */ + +#ifndef INCLUDED_JAVAUNOHELPER_SOURCE_JUHX_EXPORT_TYPES_HXX +#define INCLUDED_JAVAUNOHELPER_SOURCE_JUHX_EXPORT_TYPES_HXX + +#include "sal/config.h" + +#include "jni.h" + +#if defined DISABLE_DYNLOADING +#define JAVAUNOHELPER_DETAIL_CALLCONV JNICALL +#else +#define JAVAUNOHELPER_DETAIL_CALLCONV +#endif + +extern "C" { + +namespace javaunohelper { namespace detail { + +typedef jobject JAVAUNOHELPER_DETAIL_CALLCONV Func_bootstrap( + JNIEnv *_env, jclass, jstring, jobjectArray, jobject); + +typedef jobject JAVAUNOHELPER_DETAIL_CALLCONV Func_getFactory( + JNIEnv *, jclass, jstring, jstring, jobject, jobject, jobject); + +typedef jboolean JAVAUNOHELPER_DETAIL_CALLCONV Func_writeInfo( + JNIEnv *, jclass, jstring, jobject, jobject, jobject); + +} } + +} + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/javaunohelper/source/preload.cxx b/javaunohelper/source/preload.cxx index 5575af033eda..f7f5fd786d85 100644 --- a/javaunohelper/source/preload.cxx +++ b/javaunohelper/source/preload.cxx @@ -17,12 +17,15 @@ * the License at http://www.apache.org/licenses/LICENSE-2.0 . */ +#include "sal/config.h" #include "jni.h" #include "rtl/ustring.hxx" #include "osl/module.h" +#include "juhx-export-types.hxx" + // In retrospect, the reason to create a juh wrapper around the juhx library was // probably because java.lang.System.loadLibrary uses RTLD_LOCAL, so uniqueness // of GCC RTTI symbols needed for exception handling would not be guaranteed. @@ -34,16 +37,10 @@ extern "C" { -typedef jboolean (JNICALL * fptr_writeInfo)( - JNIEnv *, jclass, jstring, jobject, jobject, jobject ); -typedef jobject (JNICALL * fptr_getFactory)( - JNIEnv *, jclass, jstring, jstring, jobject, jobject, jobject ); -typedef jobject (JNICALL * fptr_bootstrap)( - JNIEnv *_env, jclass, jstring, jobjectArray, jobject ); -static fptr_writeInfo s_writeInfo; -static fptr_getFactory s_getFactory; -static fptr_bootstrap s_bootstrap; +static javaunohelper::detail::Func_writeInfo * s_writeInfo; +static javaunohelper::detail::Func_getFactory * s_getFactory; +static javaunohelper::detail::Func_bootstrap * s_bootstrap; static bool s_inited = false; extern "C" { static void SAL_CALL thisModule() {} } @@ -67,16 +64,16 @@ static bool inited_juhx( JNIEnv * jni_env ) { OUString symbol = "Java_com_sun_star_comp_helper_SharedLibraryLoader_component_1writeInfo"; - s_writeInfo = (fptr_writeInfo)osl_getFunctionSymbol( + s_writeInfo = (javaunohelper::detail::Func_writeInfo *)osl_getFunctionSymbol( hModule, symbol.pData ); symbol = "Java_com_sun_star_comp_helper_SharedLibraryLoader_component_1getFactory"; - s_getFactory = (fptr_getFactory)osl_getFunctionSymbol( + s_getFactory = (javaunohelper::detail::Func_getFactory *)osl_getFunctionSymbol( hModule, symbol.pData ); symbol = "Java_com_sun_star_comp_helper_Bootstrap_cppuhelper_1bootstrap"; s_bootstrap = - (fptr_bootstrap)osl_getFunctionSymbol( hModule, symbol.pData ); + (javaunohelper::detail::Func_bootstrap *)osl_getFunctionSymbol( hModule, symbol.pData ); if (0 == s_writeInfo || 0 == s_getFactory || |