diff options
author | torne <torne@chromium.org> | 2015-02-24 04:55:02 -0800 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2015-02-24 12:55:37 +0000 |
commit | cab875835ac9e39183ba0ac4fe30e96d1bdfec45 (patch) | |
tree | c8427bf36027a17f3c51614506b51e55afe7ea3d /base/android | |
parent | a755ee0ae677fe872fc83b52752a7c11f0a70cde (diff) | |
download | chromium_src-cab875835ac9e39183ba0ac4fe30e96d1bdfec45.zip chromium_src-cab875835ac9e39183ba0ac4fe30e96d1bdfec45.tar.gz chromium_src-cab875835ac9e39183ba0ac4fe30e96d1bdfec45.tar.bz2 |
Make combined native/manual JNI registration work for clang.
Since clang has trouble with aliases for static functions, go back to
using a trivial wrapper function instead of an alias. Since there is
only one caller of the wrapped, static function, and its address is no
longer taken to generate the manual JNI registration table (the
wrapper's address is already being taken instead), there's no actual
benefit to using an alias anyway, since the compiler will simply inline
the static function into the wrapper.
BUG=442327,460857
TBR=cjhopman@chromium.org
Review URL: https://codereview.chromium.org/953523003
Cr-Commit-Position: refs/heads/master@{#317787}
Diffstat (limited to 'base/android')
3 files changed, 20 insertions, 10 deletions
diff --git a/base/android/jni_generator/jni_generator.py b/base/android/jni_generator/jni_generator.py index 54fea6b..3182036 100755 --- a/base/android/jni_generator/jni_generator.py +++ b/base/android/jni_generator/jni_generator.py @@ -1073,8 +1073,10 @@ static ${RETURN} ${NAME}(JNIEnv* env, ${PARAMS}); """ if self.options.native_exports: template_str += """ -__attribute__((visibility("default"), alias("${NAME}"))) -${RETURN} ${STUB_NAME}(JNIEnv* env, ${PARAMS}); +__attribute__((visibility("default"))) +${RETURN} ${STUB_NAME}(JNIEnv* env, ${PARAMS}) { + return ${NAME}(${PARAMS_IN_CALL}); +} """ template = Template(template_str) params_in_call = [] diff --git a/base/android/jni_generator/testNativeExportsOption.golden b/base/android/jni_generator/testNativeExportsOption.golden index a4953cc..bfed0e3 100644 --- a/base/android/jni_generator/testNativeExportsOption.golden +++ b/base/android/jni_generator/testNativeExportsOption.golden @@ -30,17 +30,21 @@ extern "C" { static jint Init(JNIEnv* env, jobject jcaller); -__attribute__((visibility("default"), alias("Init"))) +__attribute__((visibility("default"))) jint Java_org_chromium_example_jni_1generator_SampleForTests_00024MyInnerClass_nativeInit(JNIEnv* - env, jobject jcaller); + env, jobject jcaller) { + return Init(env, jcaller); +} static jint Init(JNIEnv* env, jobject jcaller); -__attribute__((visibility("default"), alias("Init"))) +__attribute__((visibility("default"))) jint Java_org_chromium_example_jni_1generator_SampleForTests_00024MyOtherInnerClass_nativeInit(JNIEnv* - env, jobject jcaller); + env, jobject jcaller) { + return Init(env, jcaller); +} }; // extern "C" diff --git a/base/android/jni_generator/testNativeExportsOptionalOption.golden b/base/android/jni_generator/testNativeExportsOptionalOption.golden index 2a3b172..ae2d799 100644 --- a/base/android/jni_generator/testNativeExportsOptionalOption.golden +++ b/base/android/jni_generator/testNativeExportsOptionalOption.golden @@ -30,17 +30,21 @@ extern "C" { static jint Init(JNIEnv* env, jobject jcaller); -__attribute__((visibility("default"), alias("Init"))) +__attribute__((visibility("default"))) jint Java_org_chromium_example_jni_1generator_SampleForTests_00024MyInnerClass_nativeInit(JNIEnv* - env, jobject jcaller); + env, jobject jcaller) { + return Init(env, jcaller); +} static jint Init(JNIEnv* env, jobject jcaller); -__attribute__((visibility("default"), alias("Init"))) +__attribute__((visibility("default"))) jint Java_org_chromium_example_jni_1generator_SampleForTests_00024MyOtherInnerClass_nativeInit(JNIEnv* - env, jobject jcaller); + env, jobject jcaller) { + return Init(env, jcaller); +} }; // extern "C" |