Skip to content

c2bug bug_line

ceragon edited this page Dec 13, 2021 · 1 revision

C2 崩溃bug

问题

栈信息

Stack: [0x00007fa8a6416000,0x00007fa8a6517000],  sp=0x00007fa8a6513380,  free space=1012k
Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native code)
V  [libjvm.so+0x43c477]  ciObjectFactory::create_new_metadata(Metadata*)+0x327
V  [libjvm.so+0x43c8a5]  ciObjectFactory::get_metadata(Metadata*)+0x85
V  [libjvm.so+0x434397]  ciSpeculativeTrapData::translate_from(ProfileData const*)+0x67
V  [libjvm.so+0x4346a8]  ciMethodData::load_extra_data()+0xa8
V  [libjvm.so+0x436828]  ciMethodData::load_data()+0x268
V  [libjvm.so+0x4295a4]  ciMethod::method_data()+0xb4
V  [libjvm.so+0x959175]  Parse::Parse(JVMState*, ciMethod*, float)+0x645
V  [libjvm.so+0x3f6ed8]  ParseGenerator::generate(JVMState*)+0x88
V  [libjvm.so+0x5709eb]  Parse::do_call()+0x23b
V  [libjvm.so+0x9628e2]  Parse::do_one_bytecode()+0x3382
V  [libjvm.so+0x953688]  Parse::do_one_block()+0x178
V  [libjvm.so+0x9579b7]  Parse::do_all_blocks()+0x127
V  [libjvm.so+0x959379]  Parse::Parse(JVMState*, ciMethod*, float)+0x849
V  [libjvm.so+0x3f6ed8]  ParseGenerator::generate(JVMState*)+0x88
V  [libjvm.so+0x5709eb]  Parse::do_call()+0x23b
V  [libjvm.so+0x9628e2]  Parse::do_one_bytecode()+0x3382
V  [libjvm.so+0x953688]  Parse::do_one_block()+0x178
V  [libjvm.so+0x9579b7]  Parse::do_all_blocks()+0x127
V  [libjvm.so+0x959379]  Parse::Parse(JVMState*, ciMethod*, float)+0x849
V  [libjvm.so+0x3f6ed8]  ParseGenerator::generate(JVMState*)+0x88
V  [libjvm.so+0x4a959a]  Compile::Compile(ciEnv*, C2Compiler*, ciMethod*, int, bool, bool, bool)+0x127a
V  [libjvm.so+0x3f5895]  C2Compiler::compile_method(ciEnv*, ciMethod*, int)+0x1f5
V  [libjvm.so+0x4b3d4a]  CompileBroker::invoke_compiler_on_method(CompileTask*)+0xcba
V  [libjvm.so+0x4b4cf6]  CompileBroker::compiler_thread_loop()+0x5d6
V  [libjvm.so+0xa7f243]  JavaThread::thread_main_inner()+0x103
V  [libjvm.so+0xa7f38c]  JavaThread::run()+0x11c
V  [libjvm.so+0x92e0f8]  java_start(Thread*)+0x108
C  [libpthread.so.0+0x79d1]  start_thread+0xd1

jvm 版本

Java HotSpot(TM) 64-Bit Server VM (25.171-b11) for linux-amd64 JRE (1.8.0_171-b11), built on Mar 28 2018 17:07:08 by "java_re" with gcc 4.3.0 20080428 (Red Hat 4.3.0-8)

源码说明

由于openjdk的源码是hg管理的,我更喜欢用git,下面的地址是原封不动的搬运 openjdk的源码到git上,所以下面的分析基于这个地址

地址

git@github.com:AdoptOpenJDK/openjdk-jdk8u.git

分支信息

之所以选172,是因为没有找到171分支,不过对比了171 和 172 之后,发现此文件没有变更,所以就以172为探究的版本吧

jdk8u172-b11

问题代码

出问题的栈顶方法如下,且以下是完整内容。位于 ciObjectFactory.cpp 文件中

ciMetadata* ciObjectFactory::create_new_metadata(Metadata* o) {
  EXCEPTION_CONTEXT;

  // Hold metadata from unloading by keeping it's holder alive.
  if (_initialized && o->is_klass()) {
    Klass* holder = ((Klass*)o);
    if (holder->oop_is_instance() && InstanceKlass::cast(holder)->is_anonymous()) {
      // Though ciInstanceKlass records class loader oop, it's not enough to keep
      // VM anonymous classes alive (loader == NULL). Klass holder should be used instead.
      // It is enough to record a ciObject, since cached elements are never removed
      // during ciObjectFactory lifetime. ciObjectFactory itself is created for
      // every compilation and lives for the whole duration of the compilation.
      ciObject* h = get(holder->klass_holder());
    }
  }

  if (o->is_klass()) {
    KlassHandle h_k(THREAD, (Klass*)o);
    Klass* k = (Klass*)o;
    if (k->oop_is_instance()) {
      return new (arena()) ciInstanceKlass(h_k);
    } else if (k->oop_is_objArray()) {
      return new (arena()) ciObjArrayKlass(h_k);
    } else if (k->oop_is_typeArray()) {
      return new (arena()) ciTypeArrayKlass(h_k);
    }
  } else if (o->is_method()) {
    methodHandle h_m(THREAD, (Method*)o);
    ciEnv *env = CURRENT_THREAD_ENV;
    ciInstanceKlass* holder = env->get_instance_klass(h_m()->method_holder());
    return new (arena()) ciMethod(h_m, holder);
  } else if (o->is_methodData()) {
    // Hold methodHandle alive - might not be necessary ???
    methodHandle h_m(THREAD, ((MethodData*)o)->method());
    return new (arena()) ciMethodData((MethodData*)o);
  }

  // The Metadata* is of some type not supported by the compiler interface.
  ShouldNotReachHere();
  return NULL;
}

定位出问题的行数

编译源码

编译源码,生成 ciObjectFactory.cpp 文件对应的 ciObjectFactory.o 文件

反汇编

  1. 使用 objdump 对.o 文件进行反汇编
objdump -d -l ciObjectFactory.o > ~/ciObjectFactory.asm
  1. ciObjectFactory.asm 中 create_new_metadata 方法的相关信息如下:
00000000000023f0 <_ZN15ciObjectFactory19create_new_metadataEP8Metadata>:
_ZN15ciObjectFactory19create_new_metadataEP8Metadata():
/home/ceragon/CLionProjects/openjdk-jdk8u/hotspot/src/share/vm/ci/ciObjectFactory.cpp:353
    23f0:	f3 0f 1e fa          	endbr64 
    23f4:	55                   	push   %rbp
    23f5:	48 89 e5             	mov    %rsp,%rbp
    23f8:	41 54                	push   %r12
    23fa:	53                   	push   %rbx
    23fb:	48 81 ec 90 00 00 00 	sub    $0x90,%rsp
    2402:	48 89 bd 68 ff ff ff 	mov    %rdi,-0x98(%rbp)
    2409:	48 89 b5 60 ff ff ff 	mov    %rsi,-0xa0(%rbp)
/home/ceragon/CLionProjects/openjdk-jdk8u/hotspot/src/share/vm/ci/ciObjectFactory.cpp:354
    2410:	e8 00 00 00 00       	callq  2415 <_ZN15ciObjectFactory19create_new_metadataEP8Metadata+0x25>
    2415:	48 89 85 78 ff ff ff 	mov    %rax,-0x88(%rbp)
    241c:	48 8b 85 78 ff ff ff 	mov    -0x88(%rbp),%rax
    2423:	48 89 45 80          	mov    %rax,-0x80(%rbp)
/home/ceragon/CLionProjects/openjdk-jdk8u/hotspot/src/share/vm/ci/ciObjectFactory.cpp:357
    2427:	0f b6 05 00 00 00 00 	movzbl 0x0(%rip),%eax        # 242e <_ZN15ciObjectFactory19create_new_metadataEP8Metadata+0x3e>
    242e:	84 c0                	test   %al,%al
    2430:	74 28                	je     245a <_ZN15ciObjectFactory19create_new_metadataEP8Metadata+0x6a>
/home/ceragon/CLionProjects/openjdk-jdk8u/hotspot/src/share/vm/ci/ciObjectFactory.cpp:357 (discriminator 1)
    2432:	48 8b 85 60 ff ff ff 	mov    -0xa0(%rbp),%rax
    2439:	48 8b 00             	mov    (%rax),%rax
    243c:	48 83 c0 08          	add    $0x8,%rax
    2440:	48 8b 10             	mov    (%rax),%rdx
    2443:	48 8b 85 60 ff ff ff 	mov    -0xa0(%rbp),%rax
    244a:	48 89 c7             	mov    %rax,%rdi
    244d:	ff d2                	callq  *%rdx
    244f:	84 c0                	test   %al,%al
    2451:	74 07                	je     245a <_ZN15ciObjectFactory19create_new_metadataEP8Metadata+0x6a>
/home/ceragon/CLionProjects/openjdk-jdk8u/hotspot/src/share/vm/ci/ciObjectFactory.cpp:357 (discriminator 3)
    2453:	b8 01 00 00 00       	mov    $0x1,%eax
    2458:	eb 05                	jmp    245f <_ZN15ciObjectFactory19create_new_metadataEP8Metadata+0x6f>
/home/ceragon/CLionProjects/openjdk-jdk8u/hotspot/src/share/vm/ci/ciObjectFactory.cpp:357 (discriminator 4)
    245a:	b8 00 00 00 00       	mov    $0x0,%eax
/home/ceragon/CLionProjects/openjdk-jdk8u/hotspot/src/share/vm/ci/ciObjectFactory.cpp:357 (discriminator 6)
    245f:	84 c0                	test   %al,%al
    2461:	74 75                	je     24d8 <_ZN15ciObjectFactory19create_new_metadataEP8Metadata+0xe8>
/home/ceragon/CLionProjects/openjdk-jdk8u/hotspot/src/share/vm/ci/ciObjectFactory.cpp:358
    2463:	48 8b 85 60 ff ff ff 	mov    -0xa0(%rbp),%rax
    246a:	48 89 45 88          	mov    %rax,-0x78(%rbp)
/home/ceragon/CLionProjects/openjdk-jdk8u/hotspot/src/share/vm/ci/ciObjectFactory.cpp:359
    246e:	48 8b 45 88          	mov    -0x78(%rbp),%rax
    2472:	48 89 c7             	mov    %rax,%rdi
    2475:	e8 00 00 00 00       	callq  247a <_ZN15ciObjectFactory19create_new_metadataEP8Metadata+0x8a>
    247a:	84 c0                	test   %al,%al
    247c:	74 1f                	je     249d <_ZN15ciObjectFactory19create_new_metadataEP8Metadata+0xad>
/home/ceragon/CLionProjects/openjdk-jdk8u/hotspot/src/share/vm/ci/ciObjectFactory.cpp:359 (discriminator 1)
    247e:	48 8b 45 88          	mov    -0x78(%rbp),%rax
    2482:	48 89 c7             	mov    %rax,%rdi
    2485:	e8 00 00 00 00       	callq  248a <_ZN15ciObjectFactory19create_new_metadataEP8Metadata+0x9a>
    248a:	48 89 c7             	mov    %rax,%rdi
    248d:	e8 00 00 00 00       	callq  2492 <_ZN15ciObjectFactory19create_new_metadataEP8Metadata+0xa2>
    2492:	84 c0                	test   %al,%al
    2494:	74 07                	je     249d <_ZN15ciObjectFactory19create_new_metadataEP8Metadata+0xad>
/home/ceragon/CLionProjects/openjdk-jdk8u/hotspot/src/share/vm/ci/ciObjectFactory.cpp:359 (discriminator 3)
    2496:	b8 01 00 00 00       	mov    $0x1,%eax
    249b:	eb 05                	jmp    24a2 <_ZN15ciObjectFactory19create_new_metadataEP8Metadata+0xb2>
/home/ceragon/CLionProjects/openjdk-jdk8u/hotspot/src/share/vm/ci/ciObjectFactory.cpp:359 (discriminator 4)
    249d:	b8 00 00 00 00       	mov    $0x0,%eax
/home/ceragon/CLionProjects/openjdk-jdk8u/hotspot/src/share/vm/ci/ciObjectFactory.cpp:359 (discriminator 6)
    24a2:	84 c0                	test   %al,%al
    24a4:	74 32                	je     24d8 <_ZN15ciObjectFactory19create_new_metadataEP8Metadata+0xe8>
/home/ceragon/CLionProjects/openjdk-jdk8u/hotspot/src/share/vm/ci/ciObjectFactory.cpp:365
    24a6:	48 8b 45 88          	mov    -0x78(%rbp),%rax
    24aa:	48 8b 00             	mov    (%rax),%rax
    24ad:	48 05 b0 00 00 00    	add    $0xb0,%rax
    24b3:	48 8b 10             	mov    (%rax),%rdx
    24b6:	48 8b 45 88          	mov    -0x78(%rbp),%rax
    24ba:	48 89 c7             	mov    %rax,%rdi
    24bd:	ff d2                	callq  *%rdx
    24bf:	48 89 c2             	mov    %rax,%rdx
    24c2:	48 8b 85 68 ff ff ff 	mov    -0x98(%rbp),%rax
    24c9:	48 89 d6             	mov    %rdx,%rsi
    24cc:	48 89 c7             	mov    %rax,%rdi
    24cf:	e8 00 00 00 00       	callq  24d4 <_ZN15ciObjectFactory19create_new_metadataEP8Metadata+0xe4>
    24d4:	48 89 45 90          	mov    %rax,-0x70(%rbp)
/home/ceragon/CLionProjects/openjdk-jdk8u/hotspot/src/share/vm/ci/ciObjectFactory.cpp:369
    24d8:	48 8b 85 60 ff ff ff 	mov    -0xa0(%rbp),%rax
    24df:	48 8b 00             	mov    (%rax),%rax
    24e2:	48 83 c0 08          	add    $0x8,%rax
    24e6:	48 8b 10             	mov    (%rax),%rdx
    24e9:	48 8b 85 60 ff ff ff 	mov    -0xa0(%rbp),%rax
    24f0:	48 89 c7             	mov    %rax,%rdi
    24f3:	ff d2                	callq  *%rdx
    24f5:	84 c0                	test   %al,%al
    24f7:	0f 84 46 01 00 00    	je     2643 <_ZN15ciObjectFactory19create_new_metadataEP8Metadata+0x253>
/home/ceragon/CLionProjects/openjdk-jdk8u/hotspot/src/share/vm/ci/ciObjectFactory.cpp:370
    24fd:	48 8b 95 60 ff ff ff 	mov    -0xa0(%rbp),%rdx
    2504:	48 8b 4d 80          	mov    -0x80(%rbp),%rcx
    2508:	48 8d 45 b0          	lea    -0x50(%rbp),%rax
    250c:	48 89 ce             	mov    %rcx,%rsi
    250f:	48 89 c7             	mov    %rax,%rdi
    2512:	e8 00 00 00 00       	callq  2517 <_ZN15ciObjectFactory19create_new_metadataEP8Metadata+0x127>
/home/ceragon/CLionProjects/openjdk-jdk8u/hotspot/src/share/vm/ci/ciObjectFactory.cpp:371
    2517:	48 8b 85 60 ff ff ff 	mov    -0xa0(%rbp),%rax
    251e:	48 89 45 a8          	mov    %rax,-0x58(%rbp)
/home/ceragon/CLionProjects/openjdk-jdk8u/hotspot/src/share/vm/ci/ciObjectFactory.cpp:372
    2522:	48 8b 45 a8          	mov    -0x58(%rbp),%rax
    2526:	48 89 c7             	mov    %rax,%rdi
    2529:	e8 00 00 00 00       	callq  252e <_ZN15ciObjectFactory19create_new_metadataEP8Metadata+0x13e>
    252e:	84 c0                	test   %al,%al
    2530:	74 4f                	je     2581 <_ZN15ciObjectFactory19create_new_metadataEP8Metadata+0x191>
/home/ceragon/CLionProjects/openjdk-jdk8u/hotspot/src/share/vm/ci/ciObjectFactory.cpp:373
    2532:	48 8d 55 b0          	lea    -0x50(%rbp),%rdx
    2536:	48 8d 45 d0          	lea    -0x30(%rbp),%rax
    253a:	48 89 d6             	mov    %rdx,%rsi
    253d:	48 89 c7             	mov    %rax,%rdi
    2540:	e8 00 00 00 00       	callq  2545 <_ZN15ciObjectFactory19create_new_metadataEP8Metadata+0x155>
    2545:	4c 8d 65 d0          	lea    -0x30(%rbp),%r12
    2549:	48 8b 85 68 ff ff ff 	mov    -0x98(%rbp),%rax
    2550:	48 89 c7             	mov    %rax,%rdi
    2553:	e8 00 00 00 00       	callq  2558 <_ZN15ciObjectFactory19create_new_metadataEP8Metadata+0x168>
    2558:	48 89 c6             	mov    %rax,%rsi
    255b:	bf 98 00 00 00       	mov    $0x98,%edi
    2560:	e8 00 00 00 00       	callq  2565 <_ZN15ciObjectFactory19create_new_metadataEP8Metadata+0x175>
    2565:	48 89 c3             	mov    %rax,%rbx
    2568:	48 85 db             	test   %rbx,%rbx
    256b:	0f 84 5d 02 00 00    	je     27ce <_ZN15ciObjectFactory19create_new_metadataEP8Metadata+0x3de>
/home/ceragon/CLionProjects/openjdk-jdk8u/hotspot/src/share/vm/ci/ciObjectFactory.cpp:373 (discriminator 1)
    2571:	4c 89 e6             	mov    %r12,%rsi
    2574:	48 89 df             	mov    %rbx,%rdi
    2577:	e8 00 00 00 00       	callq  257c <_ZN15ciObjectFactory19create_new_metadataEP8Metadata+0x18c>
    257c:	e9 4d 02 00 00       	jmpq   27ce <_ZN15ciObjectFactory19create_new_metadataEP8Metadata+0x3de>
/home/ceragon/CLionProjects/openjdk-jdk8u/hotspot/src/share/vm/ci/ciObjectFactory.cpp:374
    2581:	48 8b 45 a8          	mov    -0x58(%rbp),%rax
    2585:	48 89 c7             	mov    %rax,%rdi
    2588:	e8 00 00 00 00       	callq  258d <_ZN15ciObjectFactory19create_new_metadataEP8Metadata+0x19d>
    258d:	84 c0                	test   %al,%al
    258f:	74 4f                	je     25e0 <_ZN15ciObjectFactory19create_new_metadataEP8Metadata+0x1f0>
/home/ceragon/CLionProjects/openjdk-jdk8u/hotspot/src/share/vm/ci/ciObjectFactory.cpp:375
    2591:	48 8d 55 b0          	lea    -0x50(%rbp),%rdx
    2595:	48 8d 45 d0          	lea    -0x30(%rbp),%rax
    2599:	48 89 d6             	mov    %rdx,%rsi
    259c:	48 89 c7             	mov    %rax,%rdi
    259f:	e8 00 00 00 00       	callq  25a4 <_ZN15ciObjectFactory19create_new_metadataEP8Metadata+0x1b4>
    25a4:	4c 8d 65 d0          	lea    -0x30(%rbp),%r12
    25a8:	48 8b 85 68 ff ff ff 	mov    -0x98(%rbp),%rax
    25af:	48 89 c7             	mov    %rax,%rdi
    25b2:	e8 00 00 00 00       	callq  25b7 <_ZN15ciObjectFactory19create_new_metadataEP8Metadata+0x1c7>
    25b7:	48 89 c6             	mov    %rax,%rsi
    25ba:	bf 50 00 00 00       	mov    $0x50,%edi
    25bf:	e8 00 00 00 00       	callq  25c4 <_ZN15ciObjectFactory19create_new_metadataEP8Metadata+0x1d4>
    25c4:	48 89 c3             	mov    %rax,%rbx
    25c7:	48 85 db             	test   %rbx,%rbx
    25ca:	0f 84 fe 01 00 00    	je     27ce <_ZN15ciObjectFactory19create_new_metadataEP8Metadata+0x3de>
/home/ceragon/CLionProjects/openjdk-jdk8u/hotspot/src/share/vm/ci/ciObjectFactory.cpp:375 (discriminator 1)
    25d0:	4c 89 e6             	mov    %r12,%rsi
    25d3:	48 89 df             	mov    %rbx,%rdi
    25d6:	e8 00 00 00 00       	callq  25db <_ZN15ciObjectFactory19create_new_metadataEP8Metadata+0x1eb>
    25db:	e9 ee 01 00 00       	jmpq   27ce <_ZN15ciObjectFactory19create_new_metadataEP8Metadata+0x3de>
/home/ceragon/CLionProjects/openjdk-jdk8u/hotspot/src/share/vm/ci/ciObjectFactory.cpp:376
    25e0:	48 8b 45 a8          	mov    -0x58(%rbp),%rax
    25e4:	48 89 c7             	mov    %rax,%rdi
    25e7:	e8 00 00 00 00       	callq  25ec <_ZN15ciObjectFactory19create_new_metadataEP8Metadata+0x1fc>
    25ec:	84 c0                	test   %al,%al
    25ee:	0f 84 bf 01 00 00    	je     27b3 <_ZN15ciObjectFactory19create_new_metadataEP8Metadata+0x3c3>
/home/ceragon/CLionProjects/openjdk-jdk8u/hotspot/src/share/vm/ci/ciObjectFactory.cpp:377
    25f4:	48 8d 55 b0          	lea    -0x50(%rbp),%rdx
    25f8:	48 8d 45 d0          	lea    -0x30(%rbp),%rax
    25fc:	48 89 d6             	mov    %rdx,%rsi
    25ff:	48 89 c7             	mov    %rax,%rdi
    2602:	e8 00 00 00 00       	callq  2607 <_ZN15ciObjectFactory19create_new_metadataEP8Metadata+0x217>
    2607:	4c 8d 65 d0          	lea    -0x30(%rbp),%r12
    260b:	48 8b 85 68 ff ff ff 	mov    -0x98(%rbp),%rax
    2612:	48 89 c7             	mov    %rax,%rdi
    2615:	e8 00 00 00 00       	callq  261a <_ZN15ciObjectFactory19create_new_metadataEP8Metadata+0x22a>
    261a:	48 89 c6             	mov    %rax,%rsi
    261d:	bf 40 00 00 00       	mov    $0x40,%edi
    2622:	e8 00 00 00 00       	callq  2627 <_ZN15ciObjectFactory19create_new_metadataEP8Metadata+0x237>
    2627:	48 89 c3             	mov    %rax,%rbx
    262a:	48 85 db             	test   %rbx,%rbx
    262d:	0f 84 9b 01 00 00    	je     27ce <_ZN15ciObjectFactory19create_new_metadataEP8Metadata+0x3de>
/home/ceragon/CLionProjects/openjdk-jdk8u/hotspot/src/share/vm/ci/ciObjectFactory.cpp:377 (discriminator 1)
    2633:	4c 89 e6             	mov    %r12,%rsi
    2636:	48 89 df             	mov    %rbx,%rdi
    2639:	e8 00 00 00 00       	callq  263e <_ZN15ciObjectFactory19create_new_metadataEP8Metadata+0x24e>
    263e:	e9 8b 01 00 00       	jmpq   27ce <_ZN15ciObjectFactory19create_new_metadataEP8Metadata+0x3de>
/home/ceragon/CLionProjects/openjdk-jdk8u/hotspot/src/share/vm/ci/ciObjectFactory.cpp:379
    2643:	48 8b 85 60 ff ff ff 	mov    -0xa0(%rbp),%rax
    264a:	48 8b 00             	mov    (%rax),%rax
    264d:	48 83 c0 10          	add    $0x10,%rax
    2651:	48 8b 10             	mov    (%rax),%rdx
    2654:	48 8b 85 60 ff ff ff 	mov    -0xa0(%rbp),%rax
    265b:	48 89 c7             	mov    %rax,%rdi
    265e:	ff d2                	callq  *%rdx
    2660:	84 c0                	test   %al,%al
    2662:	0f 84 c1 00 00 00    	je     2729 <_ZN15ciObjectFactory19create_new_metadataEP8Metadata+0x339>
/home/ceragon/CLionProjects/openjdk-jdk8u/hotspot/src/share/vm/ci/ciObjectFactory.cpp:380
    2668:	48 8b 95 60 ff ff ff 	mov    -0xa0(%rbp),%rdx
    266f:	48 8b 4d 80          	mov    -0x80(%rbp),%rcx
    2673:	48 8d 45 b0          	lea    -0x50(%rbp),%rax
    2677:	48 89 ce             	mov    %rcx,%rsi
    267a:	48 89 c7             	mov    %rax,%rdi
    267d:	e8 00 00 00 00       	callq  2682 <_ZN15ciObjectFactory19create_new_metadataEP8Metadata+0x292>
/home/ceragon/CLionProjects/openjdk-jdk8u/hotspot/src/share/vm/ci/ciObjectFactory.cpp:381
    2682:	48 8b 85 78 ff ff ff 	mov    -0x88(%rbp),%rax
    2689:	48 89 c7             	mov    %rax,%rdi
    268c:	e8 00 00 00 00       	callq  2691 <_ZN15ciObjectFactory19create_new_metadataEP8Metadata+0x2a1>
    2691:	48 89 45 98          	mov    %rax,-0x68(%rbp)
/home/ceragon/CLionProjects/openjdk-jdk8u/hotspot/src/share/vm/ci/ciObjectFactory.cpp:382
    2695:	48 8d 45 b0          	lea    -0x50(%rbp),%rax
    2699:	48 89 c7             	mov    %rax,%rdi
    269c:	e8 00 00 00 00       	callq  26a1 <_ZN15ciObjectFactory19create_new_metadataEP8Metadata+0x2b1>
    26a1:	48 89 c7             	mov    %rax,%rdi
    26a4:	e8 00 00 00 00       	callq  26a9 <_ZN15ciObjectFactory19create_new_metadataEP8Metadata+0x2b9>
    26a9:	48 89 c2             	mov    %rax,%rdx
    26ac:	48 8b 45 98          	mov    -0x68(%rbp),%rax
    26b0:	48 89 d6             	mov    %rdx,%rsi
    26b3:	48 89 c7             	mov    %rax,%rdi
    26b6:	e8 00 00 00 00       	callq  26bb <_ZN15ciObjectFactory19create_new_metadataEP8Metadata+0x2cb>
    26bb:	48 89 45 a0          	mov    %rax,-0x60(%rbp)
/home/ceragon/CLionProjects/openjdk-jdk8u/hotspot/src/share/vm/ci/ciObjectFactory.cpp:383
    26bf:	48 8d 55 b0          	lea    -0x50(%rbp),%rdx
    26c3:	48 8d 45 d0          	lea    -0x30(%rbp),%rax
    26c7:	48 89 d6             	mov    %rdx,%rsi
    26ca:	48 89 c7             	mov    %rax,%rdi
    26cd:	e8 00 00 00 00       	callq  26d2 <_ZN15ciObjectFactory19create_new_metadataEP8Metadata+0x2e2>
    26d2:	4c 8d 65 d0          	lea    -0x30(%rbp),%r12
    26d6:	48 8b 85 68 ff ff ff 	mov    -0x98(%rbp),%rax
    26dd:	48 89 c7             	mov    %rax,%rdi
    26e0:	e8 00 00 00 00       	callq  26e5 <_ZN15ciObjectFactory19create_new_metadataEP8Metadata+0x2f5>
    26e5:	48 89 c6             	mov    %rax,%rsi
    26e8:	bf b0 00 00 00       	mov    $0xb0,%edi
    26ed:	e8 00 00 00 00       	callq  26f2 <_ZN15ciObjectFactory19create_new_metadataEP8Metadata+0x302>
    26f2:	48 89 c3             	mov    %rax,%rbx
    26f5:	48 85 db             	test   %rbx,%rbx
    26f8:	74 12                	je     270c <_ZN15ciObjectFactory19create_new_metadataEP8Metadata+0x31c>
/home/ceragon/CLionProjects/openjdk-jdk8u/hotspot/src/share/vm/ci/ciObjectFactory.cpp:383 (discriminator 1)
    26fa:	48 8b 45 a0          	mov    -0x60(%rbp),%rax
    26fe:	48 89 c2             	mov    %rax,%rdx
    2701:	4c 89 e6             	mov    %r12,%rsi
    2704:	48 89 df             	mov    %rbx,%rdi
    2707:	e8 00 00 00 00       	callq  270c <_ZN15ciObjectFactory19create_new_metadataEP8Metadata+0x31c>
/home/ceragon/CLionProjects/openjdk-jdk8u/hotspot/src/share/vm/ci/ciObjectFactory.cpp:383 (discriminator 4)
    270c:	48 8d 45 d0          	lea    -0x30(%rbp),%rax
    2710:	48 89 c7             	mov    %rax,%rdi
    2713:	e8 00 00 00 00       	callq  2718 <_ZN15ciObjectFactory19create_new_metadataEP8Metadata+0x328>
/home/ceragon/CLionProjects/openjdk-jdk8u/hotspot/src/share/vm/ci/ciObjectFactory.cpp:380 (discriminator 4)
    2718:	48 8d 45 b0          	lea    -0x50(%rbp),%rax
    271c:	48 89 c7             	mov    %rax,%rdi
    271f:	e8 00 00 00 00       	callq  2724 <_ZN15ciObjectFactory19create_new_metadataEP8Metadata+0x334>
    2724:	e9 a5 00 00 00       	jmpq   27ce <_ZN15ciObjectFactory19create_new_metadataEP8Metadata+0x3de>
/home/ceragon/CLionProjects/openjdk-jdk8u/hotspot/src/share/vm/ci/ciObjectFactory.cpp:384
    2729:	48 8b 85 60 ff ff ff 	mov    -0xa0(%rbp),%rax
    2730:	48 8b 00             	mov    (%rax),%rax
    2733:	48 83 c0 18          	add    $0x18,%rax
    2737:	48 8b 10             	mov    (%rax),%rdx
    273a:	48 8b 85 60 ff ff ff 	mov    -0xa0(%rbp),%rax
    2741:	48 89 c7             	mov    %rax,%rdi
    2744:	ff d2                	callq  *%rdx
    2746:	84 c0                	test   %al,%al
    2748:	74 69                	je     27b3 <_ZN15ciObjectFactory19create_new_metadataEP8Metadata+0x3c3>
/home/ceragon/CLionProjects/openjdk-jdk8u/hotspot/src/share/vm/ci/ciObjectFactory.cpp:386
    274a:	48 8b 85 60 ff ff ff 	mov    -0xa0(%rbp),%rax
    2751:	48 89 c7             	mov    %rax,%rdi
    2754:	e8 00 00 00 00       	callq  2759 <_ZN15ciObjectFactory19create_new_metadataEP8Metadata+0x369>
    2759:	48 89 c2             	mov    %rax,%rdx
    275c:	48 8b 4d 80          	mov    -0x80(%rbp),%rcx
    2760:	48 8d 45 d0          	lea    -0x30(%rbp),%rax
    2764:	48 89 ce             	mov    %rcx,%rsi
    2767:	48 89 c7             	mov    %rax,%rdi
    276a:	e8 00 00 00 00       	callq  276f <_ZN15ciObjectFactory19create_new_metadataEP8Metadata+0x37f>
/home/ceragon/CLionProjects/openjdk-jdk8u/hotspot/src/share/vm/ci/ciObjectFactory.cpp:387
    276f:	48 8b 85 68 ff ff ff 	mov    -0x98(%rbp),%rax
    2776:	48 89 c7             	mov    %rax,%rdi
    2779:	e8 00 00 00 00       	callq  277e <_ZN15ciObjectFactory19create_new_metadataEP8Metadata+0x38e>
    277e:	48 89 c6             	mov    %rax,%rsi
    2781:	bf a8 01 00 00       	mov    $0x1a8,%edi
    2786:	e8 00 00 00 00       	callq  278b <_ZN15ciObjectFactory19create_new_metadataEP8Metadata+0x39b>
    278b:	48 89 c3             	mov    %rax,%rbx
    278e:	48 85 db             	test   %rbx,%rbx
    2791:	74 12                	je     27a5 <_ZN15ciObjectFactory19create_new_metadataEP8Metadata+0x3b5>
/home/ceragon/CLionProjects/openjdk-jdk8u/hotspot/src/share/vm/ci/ciObjectFactory.cpp:387 (discriminator 1)
    2793:	48 8b 85 60 ff ff ff 	mov    -0xa0(%rbp),%rax
    279a:	48 89 c6             	mov    %rax,%rsi
    279d:	48 89 df             	mov    %rbx,%rdi
    27a0:	e8 00 00 00 00       	callq  27a5 <_ZN15ciObjectFactory19create_new_metadataEP8Metadata+0x3b5>
/home/ceragon/CLionProjects/openjdk-jdk8u/hotspot/src/share/vm/ci/ciObjectFactory.cpp:386 (discriminator 4)
    27a5:	48 8d 45 d0          	lea    -0x30(%rbp),%rax
    27a9:	48 89 c7             	mov    %rax,%rdi
    27ac:	e8 00 00 00 00       	callq  27b1 <_ZN15ciObjectFactory19create_new_metadataEP8Metadata+0x3c1>
    27b1:	eb 1b                	jmp    27ce <_ZN15ciObjectFactory19create_new_metadataEP8Metadata+0x3de>
/home/ceragon/CLionProjects/openjdk-jdk8u/hotspot/src/share/vm/ci/ciObjectFactory.cpp:391
    27b3:	be 87 01 00 00       	mov    $0x187,%esi
    27b8:	48 8d 3d 00 00 00 00 	lea    0x0(%rip),%rdi        # 27bf <_ZN15ciObjectFactory19create_new_metadataEP8Metadata+0x3cf>
    27bf:	e8 00 00 00 00       	callq  27c4 <_ZN15ciObjectFactory19create_new_metadataEP8Metadata+0x3d4>
    27c4:	e8 00 00 00 00       	callq  27c9 <_ZN15ciObjectFactory19create_new_metadataEP8Metadata+0x3d9>
/home/ceragon/CLionProjects/openjdk-jdk8u/hotspot/src/share/vm/ci/ciObjectFactory.cpp:392
    27c9:	bb 00 00 00 00       	mov    $0x0,%ebx
    27ce:	48 89 d8             	mov    %rbx,%rax
/home/ceragon/CLionProjects/openjdk-jdk8u/hotspot/src/share/vm/ci/ciObjectFactory.cpp:393 (discriminator 2)
    27d1:	48 81 c4 90 00 00 00 	add    $0x90,%rsp
    27d8:	5b                   	pop    %rbx
    27d9:	41 5c                	pop    %r12
    27db:	5d                   	pop    %rbp
    27dc:	c3                   	retq   
    27dd:	90                   	nop
  1. 再看下问题栈的栈顶方法,从末尾的 +0x327 可知,问题行数相对于 create_new_metadata 函数的起始地址,偏移了 0x327
V  [libjvm.so+0x43c477]  ciObjectFactory::create_new_metadata(Metadata*)+0x327
  1. 根据上面的 asm 文件内容可知,函数起始地址是 0x23F0,那么偏移之后是 0x23F0 + 0x327 = 0x2717。0x2717 附近的内容如下:
/home/ceragon/CLionProjects/openjdk-jdk8u/hotspot/src/share/vm/ci/ciObjectFactory.cpp:383 (discriminator 4)
    270c:	48 8d 45 d0          	lea    -0x30(%rbp),%rax
    2710:	48 89 c7             	mov    %rax,%rdi
    2713:	e8 00 00 00 00       	callq  2718 <_ZN15ciObjectFactory19create_new_metadataEP8Metadata+0x328>
/home/ceragon/CLionProjects/openjdk-jdk8u/hotspot/src/share/vm/ci/ciObjectFactory.cpp:380 (discriminator 4)
    2718:	48 8d 45 b0          	lea    -0x50(%rbp),%rax
    271c:	48 89 c7             	mov    %rax,%rdi
    271f:	e8 00 00 00 00       	callq  2724 <_ZN15ciObjectFactory19create_new_metadataEP8Metadata+0x334>
    2724:	e9 a5 00 00 00       	jmpq   27ce <_ZN15ciObjectFactory19create_new_metadataEP8Metadata+0x3de>
  1. 相关代码和行数对应如下
379: } else if (o->is_method()) {
380:    methodHandle h_m(THREAD, (Method*)o);
381:    ciEnv *env = CURRENT_THREAD_ENV;
382:    ciInstanceKlass* holder = env->get_instance_klass(h_m()->method_holder());
383:    return new (arena()) ciMethod(h_m, holder);

Clone this wiki locally