< prev index next >
test/native/runtime/test_os.cpp
Print this page
rev 13529 : 8185712: [windows] Improve native symbol decoder
Reviewed-by:
@@ -141,10 +141,63 @@
ASSERT_LT(t, eps) << "bad mean";
t = (variance - 0.3355) < 0.0 ? -(variance - 0.3355) : variance - 0.3355;
ASSERT_LT(t, eps) << "bad variance";
}
+#ifdef _WIN32
+TEST(os, dll_addr_to_function_valid) {
+ char buf[128] = "";
+ int offset = -1;
+ address valid_function_pointer = (address) JNI_CreateJavaVM;
+ ASSERT_TRUE(os::dll_address_to_function_name(valid_function_pointer,
+ buf, sizeof(buf), &offset, true) == true);
+ ASSERT_TRUE(strstr(buf, "JNI_CreateJavaVM") != NULL);
+ ASSERT_TRUE(offset >= 0);
+}
+
+TEST(os, dll_addr_to_function_invalid) {
+ char buf[128];
+ int offset;
+ address invalid_function_pointers[] = { NULL, (address)1, (address)&offset };
+
+ for (int i = 0;
+ i < sizeof(invalid_function_pointers) / sizeof(address);
+ i ++)
+ {
+ address addr = invalid_function_pointers[i];
+ // We should fail but not crash
+ strcpy(buf, "blabla");
+ offset = 12;
+ ASSERT_TRUE(os::dll_address_to_function_name(addr, buf, sizeof(buf),
+ &offset, true) == false);
+ // buffer should contain "", offset should contain -1
+ ASSERT_TRUE(buf[0] == '\0');
+ ASSERT_TRUE(offset == -1);
+ }
+}
+
+#ifdef PLATFORM_PRINT_NATIVE_STACK
+TEST(os, platform_print_native_stack) {
+ bufferedStream bs;
+ // Note: scratch buffer argument to os::platform_print_native_stack is not
+ // optional!
+ char scratch_buffer [255];
+ for (int i = 0; i < 3; i ++) {
+ ASSERT_TRUE(os::platform_print_native_stack(&bs, NULL, scratch_buffer,
+ sizeof(scratch_buffer)));
+ ASSERT_TRUE(bs.size() > 0);
+ // This may depend on debug information files being generated and available
+ // (e.g. not zipped).
+ ASSERT_TRUE(::strstr(bs.base(), "platform_print_native_stack") != NULL);
+#ifdef _WIN32
+ // We have source information on Windows.
+ ASSERT_TRUE(::strstr(bs.base(), "os_windows_x86.cpp") != NULL);
+#endif
+ }
+}
+#endif
+#endif
#ifdef ASSERT
TEST_VM_ASSERT_MSG(os, page_size_for_region_with_zero_min_pages, "sanity") {
size_t region_size = 16 * os::vm_page_size();
os::page_size_for_region_aligned(region_size, 0); // should assert
< prev index next >