diff options
| -rw-r--r-- | runtime/openjdkjvmti/ti_class.cc | 2 | ||||
| -rw-r--r-- | runtime/openjdkjvmti/transform.cc | 4 | ||||
| -rwxr-xr-x | test/937-hello-retransform-package/build | 17 | ||||
| -rw-r--r-- | test/937-hello-retransform-package/expected.txt | 2 | ||||
| -rw-r--r-- | test/937-hello-retransform-package/info.txt | 1 | ||||
| -rwxr-xr-x | test/937-hello-retransform-package/run | 17 | ||||
| -rw-r--r-- | test/937-hello-retransform-package/src/Main.java | 73 | ||||
| -rw-r--r-- | test/937-hello-retransform-package/src/Transform.java | 22 | ||||
| -rw-r--r-- | test/ti-agent/common_load.cc | 1 |
9 files changed, 137 insertions, 2 deletions
diff --git a/runtime/openjdkjvmti/ti_class.cc b/runtime/openjdkjvmti/ti_class.cc index b6de592142..d484c98483 100644 --- a/runtime/openjdkjvmti/ti_class.cc +++ b/runtime/openjdkjvmti/ti_class.cc @@ -134,7 +134,7 @@ struct ClassCallback : public art::ClassLoadCallback { // It is a primitive or array. Just return return; } - std::string name(art::PrettyDescriptor(descriptor)); + std::string name(std::string(descriptor).substr(1, strlen(descriptor) - 2)); art::Thread* self = art::Thread::Current(); art::JNIEnvExt* env = self->GetJniEnv(); diff --git a/runtime/openjdkjvmti/transform.cc b/runtime/openjdkjvmti/transform.cc index 3c4cfea19a..2fec631c00 100644 --- a/runtime/openjdkjvmti/transform.cc +++ b/runtime/openjdkjvmti/transform.cc @@ -179,7 +179,9 @@ jvmtiError Transformer::FillInTransformationData(ArtJvmTiEnv* env, } def->klass = klass; def->loader = soa.AddLocalReference<jobject>(hs_klass->GetClassLoader()); - def->name = art::mirror::Class::ComputeName(hs_klass)->ToModifiedUtf8(); + std::string descriptor_store; + std::string descriptor(hs_klass->GetDescriptor(&descriptor_store)); + def->name = descriptor.substr(1, descriptor.size() - 2); // TODO is this always null? def->protection_domain = nullptr; if (def->dex_data.get() == nullptr) { diff --git a/test/937-hello-retransform-package/build b/test/937-hello-retransform-package/build new file mode 100755 index 0000000000..898e2e54a2 --- /dev/null +++ b/test/937-hello-retransform-package/build @@ -0,0 +1,17 @@ +#!/bin/bash +# +# Copyright 2016 The Android Open Source Project +# +# Licensed 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. + +./default-build "$@" --experimental agents diff --git a/test/937-hello-retransform-package/expected.txt b/test/937-hello-retransform-package/expected.txt new file mode 100644 index 0000000000..4774b81b49 --- /dev/null +++ b/test/937-hello-retransform-package/expected.txt @@ -0,0 +1,2 @@ +hello +Goodbye diff --git a/test/937-hello-retransform-package/info.txt b/test/937-hello-retransform-package/info.txt new file mode 100644 index 0000000000..875a5f6ec1 --- /dev/null +++ b/test/937-hello-retransform-package/info.txt @@ -0,0 +1 @@ +Tests basic functions in the jvmti plugin. diff --git a/test/937-hello-retransform-package/run b/test/937-hello-retransform-package/run new file mode 100755 index 0000000000..c6e62ae6cd --- /dev/null +++ b/test/937-hello-retransform-package/run @@ -0,0 +1,17 @@ +#!/bin/bash +# +# Copyright 2016 The Android Open Source Project +# +# Licensed 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. + +./default-run "$@" --jvmti diff --git a/test/937-hello-retransform-package/src/Main.java b/test/937-hello-retransform-package/src/Main.java new file mode 100644 index 0000000000..4b9271b4f4 --- /dev/null +++ b/test/937-hello-retransform-package/src/Main.java @@ -0,0 +1,73 @@ +/* + * Copyright (C) 2016 The Android Open Source Project + * + * Licensed 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. + */ + +import java.util.Base64; + +import testing.*; +public class Main { + + /** + * base64 encoded class/dex file for + * package testing; + * class Transform { + * public void sayHi() { + * System.out.println("Goodbye"); + * } + * } + */ + private static final byte[] CLASS_BYTES = Base64.getDecoder().decode( + "yv66vgAAADQAHAoABgAOCQAPABAIABEKABIAEwcAFAcAFQEABjxpbml0PgEAAygpVgEABENvZGUB" + + "AA9MaW5lTnVtYmVyVGFibGUBAAVzYXlIaQEAClNvdXJjZUZpbGUBAA5UcmFuc2Zvcm0uamF2YQwA" + + "BwAIBwAWDAAXABgBAAdHb29kYnllBwAZDAAaABsBABF0ZXN0aW5nL1RyYW5zZm9ybQEAEGphdmEv" + + "bGFuZy9PYmplY3QBABBqYXZhL2xhbmcvU3lzdGVtAQADb3V0AQAVTGphdmEvaW8vUHJpbnRTdHJl" + + "YW07AQATamF2YS9pby9QcmludFN0cmVhbQEAB3ByaW50bG4BABUoTGphdmEvbGFuZy9TdHJpbmc7" + + "KVYAIQAFAAYAAAAAAAIAAQAHAAgAAQAJAAAAHQABAAEAAAAFKrcAAbEAAAABAAoAAAAGAAEAAAAC" + + "AAEACwAIAAEACQAAACUAAgABAAAACbIAAhIDtgAEsQAAAAEACgAAAAoAAgAAAAQACAAFAAEADAAA" + + "AAIADQ=="); + private static final byte[] DEX_BYTES = Base64.getDecoder().decode( + "ZGV4CjAzNQBhYIi3Gs9Nn/GN1fCzF+aFQ0AbhA1h1WHUAgAAcAAAAHhWNBIAAAAAAAAAADQCAAAO" + + "AAAAcAAAAAYAAACoAAAAAgAAAMAAAAABAAAA2AAAAAQAAADgAAAAAQAAAAABAAC0AQAAIAEAAGIB" + + "AABqAQAAcwEAAIoBAACeAQAAsgEAAMYBAADbAQAA6wEAAO4BAADyAQAABgIAAAsCAAAUAgAAAgAA" + + "AAMAAAAEAAAABQAAAAYAAAAIAAAACAAAAAUAAAAAAAAACQAAAAUAAABcAQAAAwAAAAsAAAAAAAEA" + + "DAAAAAEAAAAAAAAABAAAAAAAAAAEAAAADQAAAAQAAAABAAAAAQAAAAAAAAAHAAAAAAAAACYCAAAA" + + "AAAAAQABAAEAAAAbAgAABAAAAHAQAQAAAA4AAwABAAIAAAAgAgAACQAAAGIAAAAbAQEAAABuIAAA" + + "EAAOAAAAAQAAAAIABjxpbml0PgAHR29vZGJ5ZQAVTGphdmEvaW8vUHJpbnRTdHJlYW07ABJMamF2" + + "YS9sYW5nL09iamVjdDsAEkxqYXZhL2xhbmcvU3RyaW5nOwASTGphdmEvbGFuZy9TeXN0ZW07ABNM" + + "dGVzdGluZy9UcmFuc2Zvcm07AA5UcmFuc2Zvcm0uamF2YQABVgACVkwAEmVtaXR0ZXI6IGphY2st" + + "NC4yMgADb3V0AAdwcmludGxuAAVzYXlIaQACAAcOAAQABw6HAAAAAQECgYAEoAIDAbgCDQAAAAAA" + + "AAABAAAAAAAAAAEAAAAOAAAAcAAAAAIAAAAGAAAAqAAAAAMAAAACAAAAwAAAAAQAAAABAAAA2AAA" + + "AAUAAAAEAAAA4AAAAAYAAAABAAAAAAEAAAEgAAACAAAAIAEAAAEQAAABAAAAXAEAAAIgAAAOAAAA" + + "YgEAAAMgAAACAAAAGwIAAAAgAAABAAAAJgIAAAAQAAABAAAANAIAAA=="); + + public static void main(String[] args) { + doTest(new Transform()); + } + + public static void doTest(Transform t) { + t.sayHi(); + addCommonTransformationResult("testing/Transform", CLASS_BYTES, DEX_BYTES); + enableCommonRetransformation(true); + doCommonClassRetransformation(Transform.class); + t.sayHi(); + } + + // Transforms the class + private static native void doCommonClassRetransformation(Class<?>... target); + private static native void enableCommonRetransformation(boolean enable); + private static native void addCommonTransformationResult(String target_name, + byte[] class_bytes, + byte[] dex_bytes); +} diff --git a/test/937-hello-retransform-package/src/Transform.java b/test/937-hello-retransform-package/src/Transform.java new file mode 100644 index 0000000000..db92612299 --- /dev/null +++ b/test/937-hello-retransform-package/src/Transform.java @@ -0,0 +1,22 @@ +/* + * Copyright (C) 2016 The Android Open Source Project + * + * Licensed 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. + */ + +package testing; +public class Transform { + public void sayHi() { + System.out.println("hello"); + } +} diff --git a/test/ti-agent/common_load.cc b/test/ti-agent/common_load.cc index f5074519b8..c30c2b1118 100644 --- a/test/ti-agent/common_load.cc +++ b/test/ti-agent/common_load.cc @@ -112,6 +112,7 @@ static AgentLib agents[] = { { "932-transform-saves", common_retransform::OnLoad, nullptr }, { "934-load-transform", common_retransform::OnLoad, nullptr }, { "935-non-retransformable", common_transform::OnLoad, nullptr }, + { "937-hello-retransform-package", common_retransform::OnLoad, nullptr }, }; static AgentLib* FindAgent(char* name) { |