RFR(XS): 8060721: Test runtime/SharedArchiveFile/LimitSharedSizes.java fails in jdk 9 fcs new platforms/compiler

Calvin Cheung calvin.cheung at oracle.com
Thu Nov 6 04:28:34 UTC 2014


On 11/5/2014 4:50 PM, David Holmes wrote:
> On 6/11/2014 5:14 AM, Calvin Cheung wrote:
>> While upgrading the compiler on Mac for jdk9, we found this compiler bug
>> where it skips the following 2 lines of code in metaspaceShared.cpp when
>> optimization is enable (set to -Os) for the fastdebug and product 
>> builds.
>>      strcat(class_list_path_str, os::file_separator());
>>      strcat(class_list_path_str, "classlist");
>>
>> The bug is reproducible with Xcode 5.1.1 and 6.1.
>>
>> A workaround fix is to rewrite an "if" block in the
>> MetaspaceShared::preload_and_dump() method.
>
> Can't you simply replace the strcats with jio_snprintf and do away 
> with the sub_path array?
The following works. I'll do more testing before sending an updated webrev.

--- a/src/share/vm/memory/metaspaceShared.cpp
+++ b/src/share/vm/memory/metaspaceShared.cpp
@@ -713,12 +713,15 @@
      int class_list_path_len = (int)strlen(class_list_path_str);
      if (class_list_path_len >= 3) {
        if (strcmp(class_list_path_str + class_list_path_len - 3, "lib") 
!= 0) {
-        strcat(class_list_path_str, os::file_separator());
-        strcat(class_list_path_str, "lib");
+        jio_snprintf(class_list_path_str + class_list_path_len,
+                     sizeof(class_list_path_str) - class_list_path_len,
+                     "%slib", os::file_separator());
        }
      }
-    strcat(class_list_path_str, os::file_separator());
-    strcat(class_list_path_str, "classlist");
+    class_list_path_len = (int)strlen(class_list_path_str);
+    jio_snprintf(class_list_path_str + class_list_path_len,
+                 sizeof(class_list_path_str) - class_list_path_len,
+                 "%sclasslist", os::file_separator());
      class_list_path = class_list_path_str;
    } else {
      class_list_path = SharedClassListFile;
>
> Or even try strncat instead of strcat?
I think jio_snprintf is better because it null terminates the string.
If I use strncat, I'll need to initialize the entire buffer to null.

thanks,
Calvin
>
> David
>
>> JBS: https://bugs.openjdk.java.net/browse/JDK-8060721
>>
>> webrev: http://cr.openjdk.java.net/~ccheung/8060721/webrev/
>>
>> Testing:
>>      JPRT
>>      The affected testcase with product, fastdebug, and debug builds
>> built with Xcode 5.1.1 and 6.1.
>>
>> thanks,
>> Calvin



More information about the hotspot-runtime-dev mailing list