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

Calvin Cheung calvin.cheung at oracle.com
Fri Nov 7 01:06:57 UTC 2014


I've updated the webrev at the same location:
     http://cr.openjdk.java.net/~ccheung/8060721/webrev/
I also re-ran the tests.

Please take a look.

thanks,
Calvin

On 11/5/2014 8:28 PM, Calvin Cheung wrote:
> 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