RFR: JDK-8260022: [ppc] os::print_function_and_library_name shall resolve function descriptors transparently [v2]

Martin Doerr mdoerr at openjdk.java.net
Thu Jan 21 09:55:58 UTC 2021


On Thu, 21 Jan 2021 09:36:19 GMT, Thomas Stuefe <stuefe at openjdk.org> wrote:

>> When function descriptors are fed to os::print_function_and_library_name() to get debug output, it would be very helpful to transparently handle the case where the address is not a code pointer but a function descriptor.
>> 
>> Of the official OpenJDK platforms this affects only ppc, but also includes at least ia64 for those who maintain ports to that platform.
>> 
>> Fixing this will also fix the display of signal handlers on linux ppc which still show up without function names after JDK-8258606.
>> 
>> Before:
>> 695 Signal Handlers:
>> 696    SIGSEGV: 0x00000fff8d0f4348 in libjvm.so+34882376, sa_mask[0]=11100100010111111101111111111110, sa_flags=SA_RESTART|SA_SIGINFO
>> 697     SIGBUS: 0x00000fff8d0f4348 in libjvm.so+34882376, sa_mask[0]=11100100010111111101111111111110, sa_flags=SA_RESTART|SA_SIGINFO
>> 698     SIGFPE: 0x00000fff8d0f4348 in libjvm.so+34882376, sa_mask[0]=11100100010111111101111111111110, sa_flags=SA_RESTART|SA_SIGINFO
>> 699    SIGPIPE: 0x00000fff8d0e0158 in libjvm.so+34799960, sa_mask[0]=11100100010111111101111111111110, sa_flags=SA_RESTART|SA_SIGINFO
>> 700    SIGXFSZ: 0x00000fff8d0e0158 in libjvm.so+34799960, sa_mask[0]=11100100010111111101111111111110, sa_flags=SA_RESTART|SA_SIGINFO
>> 701     SIGILL: 0x00000fff8d0f4348 in libjvm.so+34882376, sa_mask[0]=11100100010111111101111111111110, sa_flags=SA_RESTART|SA_SIGINFO
>> 702    SIGUSR2: 0x00000fff8d0e0098 in libjvm.so+34799768, sa_mask[0]=00000000000000000000000000000000, sa_flags=SA_RESTART|SA_SIGINFO
>> 703     SIGHUP: 0x00000fff8d0e0080 in libjvm.so+34799744, sa_mask[0]=11100100010111111101111111111110, sa_flags=SA_RESTART|SA_SIGINFO
>> 704     SIGINT: 0x00000fff8d0e0080 in libjvm.so+34799744, sa_mask[0]=11100100010111111101111111111110, sa_flags=SA_RESTART|SA_SIGINFO
>> 705    SIGTERM: 0x00000fff8d0e0080 in libjvm.so+34799744, sa_mask[0]=11100100010111111101111111111110, sa_flags=SA_RESTART|SA_SIGINFO
>> 706    SIGQUIT: 0x00000fff8d0e0080 in libjvm.so+34799744, sa_mask[0]=11100100010111111101111111111110, sa_flags=SA_RESTART|SA_SIGINFO
>> 707    SIGTRAP: 0x00000fff8d0f4348 in libjvm.so+34882376, sa_mask[0]=11100100010111111101111111111110, sa_flags=SA_RESTART|SA_SIGINFO
>> 
>> Now:
>> 693 Signal Handlers:
>> 694    SIGSEGV: crash_handler in libjvm.so (FD), sa_mask[0]=11100100010111111101111111111110, sa_flags=SA_RESTART|SA_SIGINFO
>> 695     SIGBUS: crash_handler in libjvm.so (FD), sa_mask[0]=11100100010111111101111111111110, sa_flags=SA_RESTART|SA_SIGINFO
>> 696     SIGFPE: crash_handler in libjvm.so (FD), sa_mask[0]=11100100010111111101111111111110, sa_flags=SA_RESTART|SA_SIGINFO
>> 697    SIGPIPE: javaSignalHandler in libjvm.so (FD), sa_mask[0]=11100100010111111101111111111110, sa_flags=SA_RESTART|SA_SIGINFO
>> 698    SIGXFSZ: javaSignalHandler in libjvm.so (FD), sa_mask[0]=11100100010111111101111111111110, sa_flags=SA_RESTART|SA_SIGINFO
>> 699     SIGILL: crash_handler in libjvm.so (FD), sa_mask[0]=11100100010111111101111111111110, sa_flags=SA_RESTART|SA_SIGINFO
>> 700    SIGUSR2: SR_handler in libjvm.so (FD), sa_mask[0]=00000000000000000000000000000000, sa_flags=SA_RESTART|SA_SIGINFO
>> 701     SIGHUP: UserHandler in libjvm.so (FD), sa_mask[0]=11100100010111111101111111111110, sa_flags=SA_RESTART|SA_SIGINFO
>> 702     SIGINT: UserHandler in libjvm.so (FD), sa_mask[0]=11100100010111111101111111111110, sa_flags=SA_RESTART|SA_SIGINFO
>> 703    SIGTERM: UserHandler in libjvm.so (FD), sa_mask[0]=11100100010111111101111111111110, sa_flags=SA_RESTART|SA_SIGINFO
>> 704    SIGQUIT: UserHandler in libjvm.so (FD), sa_mask[0]=11100100010111111101111111111110, sa_flags=SA_RESTART|SA_SIGINFO
>> 705    SIGTRAP: crash_handler in libjvm.so (FD), sa_mask[0]=11100100010111111101111111111110, sa_flags=SA_RESTART|SA_SIGINFO
>> 
>> The patch also adds a little trailing marker `(FD)` as an indication for the developer that this had been a function descriptor.
>
> Thomas Stuefe has updated the pull request incrementally with one additional commit since the last revision:
> 
>   Fix build errors on ppcle and AIX

Hi Thomas, looks correct. I have only one wish.

src/hotspot/os_cpu/linux_ppc/os_linux_ppc.hpp line 35:

> 33:   static bool register_code_area(char *low, char *high) { return true; }
> 34: 
> 35: #ifndef VM_LITTLE_ENDIAN

I'd prefer using #ifndef ABI_ELFv2 because it's directly related to the ABI, not to the endianess. It is used to control function descriptor related code usage in elfFile.cpp. It'd be great if you could use HAVE_FUNCTION_DESCRIPTORS there, too.

-------------

Marked as reviewed by mdoerr (Reviewer).

PR: https://git.openjdk.java.net/jdk/pull/2157


More information about the hotspot-dev mailing list