Repository navigation
c2bug bug_line
ceragon edited this page Dec 13, 2021
·
1 revision
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
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 文件
- 使用 objdump 对.o 文件进行反汇编
objdump -d -l ciObjectFactory.o > ~/ciObjectFactory.asm- 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- 再看下问题栈的栈顶方法,从末尾的 +0x327 可知,问题行数相对于 create_new_metadata 函数的起始地址,偏移了 0x327
V [libjvm.so+0x43c477] ciObjectFactory::create_new_metadata(Metadata*)+0x327
- 根据上面的 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>- 相关代码和行数对应如下
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);