I got a SIGILL and JVM crashed when I booted a java application with --agentpath:libxxx.so on AIX 7.1

0

My dynamic shared library complied with CPPFlAGS: -q64 -G. The compiler version is

IBM XL C/C++ for AIX, V11.1 (5724-X13)
Version: 11.01.0000.0024

when it was started, then crashed, here is part of information in hs_err*.log. It seems that this error occurred by dlopen

#
# A fatal error has been detected by the Java Runtime Environment:
#
#  SIGILL (0x4) at pc=0x0000000000000000, pid=4194314, tid=0x0000000000000102
#
# JRE version:  (8.0) (build )
# Java VM: OpenJDK 64-Bit Server VM (0x8898-b00 mixed mode aix-ppc64 compressed oops)
# Problematic frame:
# C  [libC.a+0xffffffff]  std::char_traits<char>::length(const char*)+0x10

Here is the complete stack when crashed.

Stack: [0x000000011001b000,0x000000011021a000],  sp=0x0000000110217a80,  free space=2034k
Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native code)
C  [libC.a+0xffffffff]  std::char_traits<char>::length(const char*)+0x10
C  [libC.a+0xffffffff]  std::basic_ostream<char,std::char_traits<char> >& std::operator<<<std::char_traits<char> >(std::basic_ostream<char,std::char_traits<char> >&,const char*)+0x1cc
C  0x090000000c793038
C  0x090000000c78e3b8
C  0x090000000c78dfec
C  0x090000000c784498
C  [libC.a+0xffffffff]  <nameless function>+0x64
C  [libc.a+0xffffffff]  initialize_one_library+0x1c0
C  [libc.a+0xffffffff]  initialize_libs+0x98
C  [libc.a+0xffffffff]  load_libs+0x438
C  [libc.a+0xffffffff]  loadAndInit+0x260
C  [libc.a+0xffffffff]  dlopen+0x3a4
V  [libjvm.so+0xffffffff]  os::dll_load(const char*,char*,int)+0x130
V  [libjvm.so+0xffffffff]  lookup_on_load(AgentLibrary*,const char**,unsigned long)+0x94
V  [libjvm.so+0xffffffff]  Threads::create_vm(JavaVMInitArgs*,bool*)+0x1708
V  [libjvm.so+0xffffffff]  JNI_CreateJavaVM+0xac
C  [java+0xffffffff]  <nameless function>+0x94
C  [java+0xffffffff]  <nameless function>+0x88
C  [libpthreads.a+0xffffffff]  _pthread_body+0xf4

Xiluo

Posted 2019-08-27T07:28:37.057

Reputation: 1

You sure it has to be C++ ? You have to realize that C++ doesn't work well together with dynamic linking. Or with exotic platforms like AIX. Or used together with other languages like Java. Anyways, did you compile with pthread-support? Java is massively multi-threaded. – Lorinczy Zsigmond – 2019-08-27T07:35:39.127

1Yes it should be C++, and complied with -lpthread. I have solved this problem by compiling it with GNU-g++ compiler. It works well now, thanks anyway. – Xiluo – 2019-08-29T01:40:00.180

No answers