Uploaded image for project: 'JDK'
  1. JDK
  2. JDK-8369994

Mixed mode jhsdb jstack cannot resolve symbol with cold attribute

XMLWordPrintable

    • Icon: Bug Bug
    • Resolution: Unresolved
    • Icon: P4 P4
    • 26
    • 26
    • hotspot
    • None

      `jhsdb jstack --mixed` with coredump cannot resolve function symbol which has `.cold` attribute.

      ```
      ----------------- 120485 -----------------
      "Thread-0" #24 prio=5 tid=0x00007f50dc1aa7c0 nid=120485 waiting on condition [0x00007f50c0d1a000]
         java.lang.Thread.State: TIMED_WAITING (sleeping)
         JavaThread state: _thread_blocked
      0x00007f50e4710735 __GI_abort + 0x8b
      0x00007f50e1e01f33 ????????
      ```

      0x7f50e1e01f33 was `os::abort(bool, void const*, void const*) [clone .cold]` and I could see it in GDB. However it has `.cold` suffix, it means the code has been relocated as "cold" function [1]. In GDB, we can see the code in another area from function body as following:

      ```
      (gdb) disas 0x7f50e1e01f2e, 0x7f50e1e01f34
      Dump of assembler code from 0x7f50e1e01f2e to 0x7f50e1e01f34:
         0x00007f50e1e01f2e <_ZN2os5abortEbPKvS1_.cold+0>: call 0x7f50e1e01010 <abort@plt>
      => 0x00007f50e1e01f33: nop
      End of assembler dump.
      ```

      libsaproc.so checks address range to resolve symbol whether the address is in between `start` and `start + size - 1`. As you can see in assembler dump, the code in `.cold` section is `call` instruction, thus IP points next `nop`, thus we should allow address range between `start` and `start + size`.

      [1] https://gcc.gnu.org/onlinedocs/gcc/Common-Function-Attributes.html#index-cold-function-attribute

            ysuenaga Yasumasa Suenaga
            ysuenaga Yasumasa Suenaga
            Votes:
            0 Vote for this issue
            Watchers:
            2 Start watching this issue

              Created:
              Updated: