I would like someone to look at this and tell me this is an already fixed bug. Or that recent GCC patches may have fixed it. :-)
Or it would also be great to get some advice on building a reproducer without needing to include many megabytes of proprietary code plus Boost. I've been using Fedora 24 Alpha and of course I've somehow managed to write some C++ code even more confusing for GCC than Firefox. Heh. The problem is a crash when std::string tries to free memory from a temporary std::string that was bound to a const reference. And it only crashes when I pass -O2 or -O3 and the -fprofile-generate flags. $ gcc -v Using built-in specs. COLLECT_GCC=/usr/bin/gcc COLLECT_LTO_WRAPPER=/usr/libexec/gcc/x86_64-redhat-linux/6.0.0/lto-wrapper Target: x86_64-redhat-linux Configured with: ../configure --enable-bootstrap --enable-languages=c,c++,objc,obj-c++,fortran,ada,go,lto --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --with-bugurl=http://bugzilla.redhat.com/bugzilla --enable-shared --enable-threads=posix --enable-checking=release --enable-multilib --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions --enable-gnu-unique-object --enable-linker-build-id --with-linker-hash-style=gnu --enable-plugin --enable-initfini-array --disable-libgcj --with-isl --enable-libmpx --enable-gnu-indirect-function --with-tune=generic --with-arch_32=i686 --build=x86_64-redhat-linux Thread model: posix gcc version 6.0.0 20160406 (Red Hat 6.0.0-0.20) (GCC) I collected my findings so far into the attachment. Thanks for reading! -- Knowledge is Power -- Power Corrupts Study Hard -- Be Evil
==== I am working at reducing this to a test case but it is slow going. It seems quite sensitive to how much exists in the headers and templates. The cxxtest code snippit that I am showing in the assembly code below is: static const char* udbname = "urldb-import"; static const char* tname = "tmpmapfile"; class TestURLDatabase_1_Delete : public CxxTest::TestSuite { public: void setUp() { remove(udbname); } void testDelete1() { eSoft::URLDatabaseReaderWriter_1 dbw(udbname); dbw.insert_compress_word("esoft", 1); dbw.insert_url("esoft.com", 0x0AAAAAAAU); TS_ASSERT_EQUALS( dbw.lookup("esoft.com"), 0x0AAAAAAAU ); dbw.remove_url("esoft.com"); TS_ASSERT_EQUALS( dbw.lookup("esoft.com"), 0U ); } [... rest of tests snipped ...] The constructor call looks like: URLDatabaseReaderWriter_1(const std::string &fname, const std::string &id = URLDatabaseReader_1::identifier()) So it ends up generating two temporary std::strings. ==== Assembly code showing the problem I am having with GCC 6.0 and the C++11 ABI std::string. For some reason, in this function, a temporary std::string allocated for a conversion from a const char* to const std::string& is being deleted twice. Once right after the constructor function that is using the temporary string, and again at function exit, probably to cover the case if the constructor throws. The second delete thinks it is using allocated storage instead of local. These are sections of objdump -dCr output. Without -fprofile-generate. Note that at 0x99 %rbx is reloaded from %rax (the result of identifier() I think) and it is then used at 0xb3 to determine if std::string is using local storage or allocated storage. This seems to work and both temporary strings are properly destroyed. ===== Disassembly of section .text._ZN24TestURLDatabase_1_Delete11testDelete1Ev: 0000000000000000 <TestURLDatabase_1_Delete::testDelete1()>: 0: 41 54 push %r12 2: 55 push %rbp 3: 53 push %rbx 4: 48 81 ec 30 02 00 00 sub $0x230,%rsp b: 64 48 8b 04 25 28 00 mov %fs:0x28,%rax 12: 00 00 14: 48 89 84 24 28 02 00 mov %rax,0x228(%rsp) 1b: 00 1c: 31 c0 xor %eax,%eax 1e: e8 00 00 00 00 callq 23 <TestURLDatabase_1_Delete::testDelete1()+0x23> 1f: R_X86_64_PLT32 eSoft::URLDatabaseReader_1::identifier[abi:cxx11]()-0x4 23: 49 89 c4 mov %rax,%r12 26: 48 89 e3 mov %rsp,%rbx 29: 48 8d 44 24 10 lea 0x10(%rsp),%rax 2e: 48 89 04 24 mov %rax,(%rsp) 32: 48 8d 15 00 00 00 00 lea 0x0(%rip),%rdx # 39 <TestURLDatabase_1_Delete::testDelete1()+0x39> 35: R_X86_64_PC32 .LC0+0x8 39: 48 8d 35 00 00 00 00 lea 0x0(%rip),%rsi # 40 <TestURLDatabase_1_Delete::testDelete1()+0x40> 3c: R_X86_64_PC32 .LC0-0x4 40: 48 89 e7 mov %rsp,%rdi 43: e8 00 00 00 00 callq 48 <TestURLDatabase_1_Delete::testDelete1()+0x48> 44: R_X86_64_PC32 .text._ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_M_constructIPcEEvT_S7_St20forward_iterator_tag.isra.57-0x4 48: 48 8d 6c 24 20 lea 0x20(%rsp),%rbp 4d: 4c 89 e2 mov %r12,%rdx 50: 48 89 e6 mov %rsp,%rsi 53: 48 89 ef mov %rbp,%rdi 56: e8 00 00 00 00 callq 5b <TestURLDatabase_1_Delete::testDelete1()+0x5b> 57: R_X86_64_PLT32 eSoft::URLDatabaseReaderWriter_1::URLDatabaseReaderWriter_1(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)-0x4 5b: 48 8b 3c 24 mov (%rsp),%rdi 5f: 48 83 c3 10 add $0x10,%rbx 63: 48 39 df cmp %rbx,%rdi 66: 74 05 je 6d <TestURLDatabase_1_Delete::testDelete1()+0x6d> 68: e8 00 00 00 00 callq 6d <TestURLDatabase_1_Delete::testDelete1()+0x6d> 69: R_X86_64_PLT32 operator delete(void*)-0x4 6d: 48 8d 7d 08 lea 0x8(%rbp),%rdi 71: ba 01 00 00 00 mov $0x1,%edx 76: 48 8d 35 00 00 00 00 lea 0x0(%rip),%rsi # 7d <TestURLDatabase_1_Delete::testDelete1()+0x7d> 79: R_X86_64_PC32 .LC20-0x4 7d: e8 00 00 00 00 callq 82 <TestURLDatabase_1_Delete::testDelete1()+0x82> 7e: R_X86_64_PLT32 eSoft::URLDatabaseWriter_1::insert_compress_word(char const*, unsigned int)-0x4 82: 48 8d 7d 08 lea 0x8(%rbp),%rdi 86: 31 c9 xor %ecx,%ecx 88: ba aa aa aa 0a mov $0xaaaaaaa,%edx 8d: 48 8d 35 00 00 00 00 lea 0x0(%rip),%rsi # 94 <TestURLDatabase_1_Delete::testDelete1()+0x94> 90: R_X86_64_PC32 .LC21-0x4 94: e8 00 00 00 00 callq 99 <TestURLDatabase_1_Delete::testDelete1()+0x99> 95: R_X86_64_PLT32 eSoft::URLDatabaseWriter_1::insert_url(char const*, unsigned int, unsigned short)-0x4 99: 48 89 c3 mov %rax,%rbx 9c: 48 89 ef mov %rbp,%rdi 9f: e8 00 00 00 00 callq a4 <TestURLDatabase_1_Delete::testDelete1()+0xa4> a0: R_X86_64_PC32 eSoft::URLDatabaseReaderWriter_1::~URLDatabaseReaderWriter_1()-0x4 a4: 48 89 df mov %rbx,%rdi a7: e8 00 00 00 00 callq ac <TestURLDatabase_1_Delete::testDelete1()+0xac> a8: R_X86_64_PLT32 _Unwind_Resume-0x4 ac: 48 89 c5 mov %rax,%rbp af: 48 8b 3c 24 mov (%rsp),%rdi b3: 48 83 c3 10 add $0x10,%rbx b7: 48 39 df cmp %rbx,%rdi ba: 74 05 je c1 <TestURLDatabase_1_Delete::testDelete1()+0xc1> bc: e8 00 00 00 00 callq c1 <TestURLDatabase_1_Delete::testDelete1()+0xc1> bd: R_X86_64_PLT32 operator delete(void*)-0x4 c1: 48 89 ef mov %rbp,%rdi c4: e8 00 00 00 00 callq c9 <.LC84> c5: R_X86_64_PLT32 _Unwind_Resume-0x4 ==== With -fprofile-generate. You can see by searching that register %rbx which has 0x10 added at 0x1a1 never got reloaded since it was used to destroy the first temporary string. Which means that it gets 0x10 added twice. The second time makes the comparison fail and std::string thinks it needs to deallocate memory, which of course goes horribly wrong. ==== 0000000000000000 <TestURLDatabase_1_Delete::testDelete1()>: 0: 41 54 push %r12 2: 55 push %rbp 3: 53 push %rbx 4: 48 81 ec 30 02 00 00 sub $0x230,%rsp b: 64 48 8b 04 25 28 00 mov %fs:0x28,%rax 12: 00 00 14: 48 89 84 24 28 02 00 mov %rax,0x228(%rsp) 1b: 00 1c: 31 c0 xor %eax,%eax 1e: 48 8d 35 00 00 00 00 lea 0x0(%rip),%rsi # 25 <TestURLDatabase_1_Delete::testDelete1()+0x25> 21: R_X86_64_PC32 TestURLDatabase_1_Delete::testDelete1()-0x4 25: bf ab 17 6b 50 mov $0x506b17ab,%edi 2a: e8 00 00 00 00 callq 2f <TestURLDatabase_1_Delete::testDelete1()+0x2f> 2b: R_X86_64_PLT32 __gcov_indirect_call_profiler_v2-0x4 2f: 66 48 8d 3d 00 00 00 data16 lea 0x0(%rip),%rdi # 37 <TestURLDatabase_1_Delete::testDelete1()+0x37> 36: 00 33: R_X86_64_TLSGD __gcov_indirect_call_callee-0x4 37: 66 66 48 e8 00 00 00 data16 data16 callq 3f <TestURLDatabase_1_Delete::testDelete1()+0x3f> 3e: 00 3b: R_X86_64_PLT32 __tls_get_addr-0x4 3f: 48 c7 00 00 00 00 00 movq $0x0,(%rax) 46: 48 83 05 00 00 00 00 addq $0x1,0x0(%rip) # 4e <TestURLDatabase_1_Delete::testDelete1()+0x4e> 4d: 01 49: R_X86_64_PC32 .bss.__gcov0._ZN24TestURLDatabase_1_Delete11testDelete1Ev-0x5 4e: 48 8d 3d 00 00 00 00 lea 0x0(%rip),%rdi # 55 <TestURLDatabase_1_Delete::testDelete1()+0x55> 51: R_X86_64_PC32 .bss.__gcov8._ZN24TestURLDatabase_1_Delete11testDelete1Ev-0x4 55: e8 00 00 00 00 callq 5a <TestURLDatabase_1_Delete::testDelete1()+0x5a> 56: R_X86_64_PLT32 __gcov_time_profiler-0x4 5a: e8 00 00 00 00 callq 5f <TestURLDatabase_1_Delete::testDelete1()+0x5f> 5b: R_X86_64_PLT32 eSoft::URLDatabaseReader_1::identifier[abi:cxx11]()-0x4 5f: 49 89 c4 mov %rax,%r12 62: 48 83 05 00 00 00 00 addq $0x1,0x0(%rip) # 6a <TestURLDatabase_1_Delete::testDelete1()+0x6a> 69: 01 65: R_X86_64_PC32 .bss.__gcov0._ZN24TestURLDatabase_1_Delete11testDelete1Ev+0x3 6a: 48 8d 3d 00 00 00 00 lea 0x0(%rip),%rdi # 71 <TestURLDatabase_1_Delete::testDelete1()+0x71> 6d: R_X86_64_PC32 .bss.__gcov8._ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2EPKcRKS3_.isra.50-0x4 71: e8 00 00 00 00 callq 76 <TestURLDatabase_1_Delete::testDelete1()+0x76> 72: R_X86_64_PLT32 __gcov_time_profiler-0x4 76: 48 89 e3 mov %rsp,%rbx 79: 48 8d 44 24 10 lea 0x10(%rsp),%rax 7e: 48 89 04 24 mov %rax,(%rsp) 82: 48 83 05 00 00 00 00 addq $0x1,0x0(%rip) # 8a <TestURLDatabase_1_Delete::testDelete1()+0x8a> 89: 01 85: R_X86_64_PC32 .bss.__gcov0._ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2EPKcRKS3_.isra.50-0x5 8a: 48 8d 3d 00 00 00 00 lea 0x0(%rip),%rdi # 91 <TestURLDatabase_1_Delete::testDelete1()+0x91> 8d: R_X86_64_PC32 .bss.__gcov8._ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_M_constructIPKcEEvT_S8_St20forward_iterator_tag.isra.48-0x4 91: e8 00 00 00 00 callq 96 <TestURLDatabase_1_Delete::testDelete1()+0x96> 92: R_X86_64_PLT32 __gcov_time_profiler-0x4 96: 48 83 05 00 00 00 00 addq $0x1,0x0(%rip) # 9e <TestURLDatabase_1_Delete::testDelete1()+0x9e> 9d: 01 99: R_X86_64_PC32 .bss.__gcov0._ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_M_constructIPKcEEvT_S8_St20forward_iterator_tag.isra.48+0x3 9e: 48 8b 2c 24 mov (%rsp),%rbp a2: 48 83 05 00 00 00 00 addq $0x1,0x0(%rip) # aa <TestURLDatabase_1_Delete::testDelete1()+0xaa> a9: 01 a5: R_X86_64_PC32 .bss.__gcov0._ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_M_constructIPKcEEvT_S8_St20forward_iterator_tag.isra.48+0x23 aa: be 0c 00 00 00 mov $0xc,%esi af: 48 8d 3d 00 00 00 00 lea 0x0(%rip),%rdi # b6 <TestURLDatabase_1_Delete::testDelete1()+0xb6> b2: R_X86_64_PC32 .bss.__gcov3._ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_M_constructIPKcEEvT_S8_St20forward_iterator_tag.isra.48-0x4 b6: e8 00 00 00 00 callq bb <TestURLDatabase_1_Delete::testDelete1()+0xbb> b7: R_X86_64_PLT32 __gcov_one_value_profiler-0x4 bb: be 0c 00 00 00 mov $0xc,%esi c0: 48 8d 3d 00 00 00 00 lea 0x0(%rip),%rdi # c7 <TestURLDatabase_1_Delete::testDelete1()+0xc7> c3: R_X86_64_PC32 .bss.__gcov6._ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_M_constructIPKcEEvT_S8_St20forward_iterator_tag.isra.48-0x4 c7: e8 00 00 00 00 callq cc <TestURLDatabase_1_Delete::testDelete1()+0xcc> c8: R_X86_64_PLT32 __gcov_average_profiler-0x4 cc: 48 89 ee mov %rbp,%rsi cf: 48 8d 3d 00 00 00 00 lea 0x0(%rip),%rdi # d6 <TestURLDatabase_1_Delete::testDelete1()+0xd6> d2: R_X86_64_PC32 .bss.__gcov7._ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_M_constructIPKcEEvT_S8_St20forward_iterator_tag.isra.48-0x4 d6: e8 00 00 00 00 callq db <TestURLDatabase_1_Delete::testDelete1()+0xdb> d7: R_X86_64_PLT32 __gcov_ior_profiler-0x4 db: 48 b8 75 72 6c 64 62 movabs $0x6d692d62646c7275,%rax e2: 2d 69 6d e5: 48 89 45 00 mov %rax,0x0(%rbp) e9: c7 45 08 70 6f 72 74 movl $0x74726f70,0x8(%rbp) f0: 48 83 05 00 00 00 00 addq $0x1,0x0(%rip) # f8 <TestURLDatabase_1_Delete::testDelete1()+0xf8> f7: 01 f3: R_X86_64_PC32 .bss.__gcov0._ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_M_constructIPKcEEvT_S8_St20forward_iterator_tag.isra.48+0x33 f8: 48 c7 44 24 08 0c 00 movq $0xc,0x8(%rsp) ff: 00 00 101: 48 8b 04 24 mov (%rsp),%rax 105: c6 40 0c 00 movb $0x0,0xc(%rax) 109: 48 83 05 00 00 00 00 addq $0x1,0x0(%rip) # 111 <TestURLDatabase_1_Delete::testDelete1()+0x111> 110: 01 10c: R_X86_64_PC32 .bss.__gcov0._ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2EPKcRKS3_.isra.50+0xb 111: 48 83 05 00 00 00 00 addq $0x1,0x0(%rip) # 119 <TestURLDatabase_1_Delete::testDelete1()+0x119> 118: 01 114: R_X86_64_PC32 .bss.__gcov0._ZN24TestURLDatabase_1_Delete11testDelete1Ev+0xb 119: 48 8d 6c 24 20 lea 0x20(%rsp),%rbp 11e: 4c 89 e2 mov %r12,%rdx 121: 48 89 e6 mov %rsp,%rsi 124: 48 89 ef mov %rbp,%rdi 127: e8 00 00 00 00 callq 12c <TestURLDatabase_1_Delete::testDelete1()+0x12c> 128: R_X86_64_PLT32 eSoft::URLDatabaseReaderWriter_1::URLDatabaseReaderWriter_1(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)-0x4 12c: 48 83 05 00 00 00 00 addq $0x1,0x0(%rip) # 134 <TestURLDatabase_1_Delete::testDelete1()+0x134> 133: 01 12f: R_X86_64_PC32 .bss.__gcov0._ZN24TestURLDatabase_1_Delete11testDelete1Ev+0x1b 134: 48 8b 3c 24 mov (%rsp),%rdi 138: 48 83 c3 10 add $0x10,%rbx 13c: 48 39 df cmp %rbx,%rdi 13f: 74 15 je 156 <TestURLDatabase_1_Delete::testDelete1()+0x156> 141: 48 83 05 00 00 00 00 addq $0x1,0x0(%rip) # 149 <TestURLDatabase_1_Delete::testDelete1()+0x149> 148: 01 144: R_X86_64_PC32 .bss.__gcov0._ZN24TestURLDatabase_1_Delete11testDelete1Ev+0x23 149: e8 00 00 00 00 callq 14e <TestURLDatabase_1_Delete::testDelete1()+0x14e> 14a: R_X86_64_PLT32 operator delete(void*)-0x4 14e: 48 83 05 00 00 00 00 addq $0x1,0x0(%rip) # 156 <TestURLDatabase_1_Delete::testDelete1()+0x156> 155: 01 151: R_X86_64_PC32 .bss.__gcov0._ZN24TestURLDatabase_1_Delete11testDelete1Ev+0x2b 156: 48 8d 7d 08 lea 0x8(%rbp),%rdi 15a: ba 01 00 00 00 mov $0x1,%edx 15f: 48 8d 35 00 00 00 00 lea 0x0(%rip),%rsi # 166 <TestURLDatabase_1_Delete::testDelete1()+0x166> 162: R_X86_64_PC32 .LC52-0x4 166: e8 00 00 00 00 callq 16b <TestURLDatabase_1_Delete::testDelete1()+0x16b> 167: R_X86_64_PLT32 eSoft::URLDatabaseWriter_1::insert_compress_word(char const*, unsigned int)-0x4 16b: 48 83 05 00 00 00 00 addq $0x1,0x0(%rip) # 173 <TestURLDatabase_1_Delete::testDelete1()+0x173> 172: 01 16e: R_X86_64_PC32 .bss.__gcov0._ZN24TestURLDatabase_1_Delete11testDelete1Ev+0x3b 173: 48 8d 7d 08 lea 0x8(%rbp),%rdi 177: 31 c9 xor %ecx,%ecx 179: ba aa aa aa 0a mov $0xaaaaaaa,%edx 17e: 48 8d 35 00 00 00 00 lea 0x0(%rip),%rsi # 185 <TestURLDatabase_1_Delete::testDelete1()+0x185> 181: R_X86_64_PC32 .LC53-0x4 185: e8 00 00 00 00 callq 18a <TestURLDatabase_1_Delete::testDelete1()+0x18a> 186: R_X86_64_PLT32 eSoft::URLDatabaseWriter_1::insert_url(char const*, unsigned int, unsigned short)-0x4 18a: 48 83 05 00 00 00 00 addq $0x1,0x0(%rip) # 192 <TestURLDatabase_1_Delete::testDelete1()+0x192> 191: 01 18d: R_X86_64_PC32 .bss.__gcov0._ZN24TestURLDatabase_1_Delete11testDelete1Ev+0x4b 192: 48 89 c5 mov %rax,%rbp 195: 48 83 05 00 00 00 00 addq $0x1,0x0(%rip) # 19d <TestURLDatabase_1_Delete::testDelete1()+0x19d> 19c: 01 198: R_X86_64_PC32 .bss.__gcov0._ZN24TestURLDatabase_1_Delete11testDelete1Ev+0x13 19d: 48 8b 3c 24 mov (%rsp),%rdi 1a1: 48 83 c3 10 add $0x10,%rbx 1a5: 48 39 df cmp %rbx,%rdi 1a8: 74 15 je 1bf <TestURLDatabase_1_Delete::testDelete1()+0x1bf> 1aa: 48 83 05 00 00 00 00 addq $0x1,0x0(%rip) # 1b2 <TestURLDatabase_1_Delete::testDelete1()+0x1b2> 1b1: 01 1ad: R_X86_64_PC32 .bss.__gcov0._ZN24TestURLDatabase_1_Delete11testDelete1Ev+0x53 1b2: e8 00 00 00 00 callq 1b7 <TestURLDatabase_1_Delete::testDelete1()+0x1b7> 1b3: R_X86_64_PLT32 operator delete(void*)-0x4 1b7: 48 83 05 00 00 00 00 addq $0x1,0x0(%rip) # 1bf <TestURLDatabase_1_Delete::testDelete1()+0x1bf> 1be: 01 1ba: R_X86_64_PC32 .bss.__gcov0._ZN24TestURLDatabase_1_Delete11testDelete1Ev+0x5b 1bf: 48 89 ef mov %rbp,%rdi 1c2: e8 00 00 00 00 callq 1c7 <TestURLDatabase_1_Delete::testDelete1()+0x1c7> 1c3: R_X86_64_PLT32 _Unwind_Resume-0x4 1c7: 48 89 c3 mov %rax,%rbx 1ca: 48 83 05 00 00 00 00 addq $0x1,0x0(%rip) # 1d2 <TestURLDatabase_1_Delete::testDelete1()+0x1d2> 1d1: 01 1cd: R_X86_64_PC32 .bss.__gcov0._ZN24TestURLDatabase_1_Delete11testDelete1Ev+0x43 1d2: 48 89 ef mov %rbp,%rdi 1d5: e8 00 00 00 00 callq 1da <TestURLDatabase_1_Delete::testDelete1()+0x1da> 1d6: R_X86_64_PC32 eSoft::URLDatabaseReaderWriter_1::~URLDatabaseReaderWriter_1()-0x4 1da: 48 83 05 00 00 00 00 addq $0x1,0x0(%rip) # 1e2 <TestURLDatabase_1_Delete::testDelete1()+0x1e2> 1e1: 01 1dd: R_X86_64_PC32 .bss.__gcov0._ZN24TestURLDatabase_1_Delete11testDelete1Ev+0x63 1e2: 48 89 df mov %rbx,%rdi 1e5: e8 00 00 00 00 callq 1ea <TestURLDatabase_1_Delete::testDelete1()+0x1ea> 1e6: R_X86_64_PLT32 _Unwind_Resume-0x4 1ea: 48 89 c3 mov %rax,%rbx 1ed: 48 83 05 00 00 00 00 addq $0x1,0x0(%rip) # 1f5 <TestURLDatabase_1_Delete::testDelete1()+0x1f5> 1f4: 01 1f0: R_X86_64_PC32 .bss.__gcov0._ZN24TestURLDatabase_1_Delete11testDelete1Ev+0x33 1f5: eb db jmp 1d2 <TestURLDatabase_1_Delete::testDelete1()+0x1d2>