NEED REVIEWER RFR(S): JDK-8038392 Generating prelink cache breaks JAVA 'jinfo' utility normal behavior

serguei.spitsyn at oracle.com serguei.spitsyn at oracle.com
Thu Jun 12 10:49:50 UTC 2014


Dmitry,

Thank you for the details!

I have a couple of comments so far.

+    if (word[5][0] == '[') {
+        // not a shared library entry. ignore.
+      if (strncmp(word[5],"[stack",6) == 0) {
+        continue;
+      }
+      if (strncmp(word[5],"[heap]",6) == 0) {
+        continue;
+      }
+
+      // SA don't handle VDSO
+      if (strncmp(word[5],"[vdso]",6) == 0) {
+        continue;
+      }
+      if (strncmp(word[5],"[vsyscall]",6) == 0) {
+        continue;
+      }
+    }

I'd suggest to simplify the fragment above to something like thus:

+    // SA does not handle the lines with patterns:
+    //   "[stack]", "[heap]", "[vdso]","[vsyscall]", etc.
+    if (word[5][0] == '[') {
+      continue;// not a shared library entry, ignore
+    }


This fragment  does not look correct:

+    if (nwords > 6) {
+      // prelink altered mapfile when the program is running.
+      // Entries like one below have to be skipped
+      //  /lib64/libc-2.15.so (deleted)
+      // SO name in entries like one below have to be stripped.
+      //  /lib64/libpthread-2.15.so.#prelink#.EECVts
+      char *s = strstr(word[5],".#prelink#");
+      if (s == NULL) {
+        // No prelink keyword. skip deleted library
+        print_debug("skip shared object %s deleted by prelink\n", word[5]);
+        continue;
+      }
+
+      // Fall through
+      print_debug("rectifing shared object name %s changed by prelink\n", word[5]);
+      *s = 0;
+    }


The line with the pattern "(deleted)" has 7 words, but the line like:
     <addr>  /lib64/libpthread-2.15.so.#prelink#.EECVts

has only 6 words, and so, your code will not process it properly.

I'd expect something like this:

+    if (nwords > 6) {
+      // prelink altered mapfile when the program is running.
+      // Entries like one below have to be skipped:
+      //  /lib64/libc-2.15.so (deleted)
+        print_debug("skip shared object %s deleted by prelink\n", word[5]);
+       continue;
+    } else {
+      char *s = strstr(word[5],".#prelink#");
+      if (s != NULL) {
+        // There is the prelink keyword
+        print_debug("rectifying shared object name %s changed by prelink\n", word[5]);
+        *s = 0;
+      }
+    }


Is it hard to add a unit test for this issue?

Thanks,
Serguei

On 6/12/14 3:10 AM, Dmitry Samersoff wrote:
> Serguei,
>
> *The problem:*
>
> If someone run prelink utility while Java program is running DSO's
> mappings in it's /proc/<pid>/maps become messy.
>
> After prelink it contains entry like
>
> <addr> /lib64/libc-2.15.so (deleted)
> <addr>  /lib64/libpthread-2.15.so.#prelink#.EECVts
>
> instead of normal
>
> <addr> /lib64/libc-2.15.so
>
> Here is the letter from Carlos, describing the problem in details:
> https://bugs.openjdk.java.net/browse/JDK-8038392
>
> *The fix:*
>
> The fix allows SA to handle situation above.
>
> Also I fix longstanding issue - maps file parser in SA doesn't skip
> [stack*, [heap] etc entry and attempts to open it as a DSO
>
> *Testing:*
>
> I tested it manually with a different of prelink options (no prelink,
> prelink all, prelink some libraries only)
>
> -Dmitry
>
>
> On 2014-06-12 13:50, serguei.spitsyn at oracle.com wrote:
>> Hi Dmitry,
>>
>> There is no description of the fix.
>> Could you, please, provide one?
>> What did you basically wanted to achieve?
>> Also, how did the fix been tested?
>> It seems, a unit test would be nice to have.
>>
>> Thanks,
>> Serguei
>>
>> On 6/5/14 12:08 AM, Dmitry Samersoff wrote:
>>> http://cr.openjdk.java.net/~dsamersoff/JDK-8038392/webrev.02/
>>>
>>> On 2014-05-20 17:47, Dmitry Samersoff wrote:
>>>> On 2014-04-07 16:56, Dmitry Samersoff wrote:
>>>>> Hi Everybody,
>>>>>
>>>>> Please review the patch
>>>>>
>>>>> http://cr.openjdk.java.net/~dsamersoff/JDK-8038392/webrev.02/
>>>>>
>>>>> it's based on the patch contributed by Carlos Santos (see CR) and all
>>>>> credentials belong to him.
>>>>>
>>>>> -Dmitry
>>>>>
>

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.openjdk.java.net/pipermail/serviceability-dev/attachments/20140612/8d79520c/attachment.html>


More information about the serviceability-dev mailing list