Skip to content

Instantly share code, notes, and snippets.

@scottt
Created November 16, 2012 17:37
Show Gist options
  • Save scottt/4089283 to your computer and use it in GitHub Desktop.
Save scottt/4089283 to your computer and use it in GitHub Desktop.
C++ abstract base class and destructors
.file "b.cpp"
.section .text._ZN1BD2Ev,"axG",@progbits,B::~B(),comdat
.align 2
.weak B::~B()
.type B::~B(), @function
B::~B():
.LFB9:
.cfi_startproc
movq vtable for B+16, (%rdi)
jmp A::~A()
.cfi_endproc
.LFE9:
.size B::~B(), .-B::~B()
.weak B::~B()
.set B::~B(),B::~B()
.section .text._ZN1BD0Ev,"axG",@progbits,B::~B(),comdat
.align 2
.weak B::~B()
.type B::~B(), @function
B::~B():
.LFB11:
.cfi_startproc
pushq %rbx
.cfi_def_cfa_offset 16
.cfi_offset 3, -16
movq %rdi, %rbx
call B::~B()
movq %rbx, %rdi
popq %rbx
.cfi_def_cfa_offset 8
jmp operator delete(void*)
.cfi_endproc
.LFE11:
.size B::~B(), .-B::~B()
.text
.align 2
.globl B::Create()
.type B::Create(), @function
B::Create():
.LFB0:
.cfi_startproc
pushq %rax
.cfi_def_cfa_offset 16
movl $8, %edi
call operator new(unsigned long)
movq vtable for B+16, (%rax)
popq %rdx
.cfi_def_cfa_offset 8
ret
.cfi_endproc
.LFE0:
.size B::Create(), .-B::Create()
.section .text.startup,"ax",@progbits
.globl main
.type main, @function
main:
.LFB7:
.cfi_startproc
pushq %rcx
.cfi_def_cfa_offset 16
call B::Create()
xorl %eax, %eax
popq %rsi
.cfi_def_cfa_offset 8
ret
.cfi_endproc
.LFE7:
.size main, .-main
.weak vtable for A
.section .rodata._ZTV1A,"aG",@progbits,vtable for A,comdat
.align 16
.type vtable for A, @object
.size vtable for A, 32
vtable for A:
.quad 0
.quad typeinfo for A
.quad __cxa_pure_virtual
.quad __cxa_pure_virtual
.weak vtable for B
.section .rodata._ZTV1B,"aG",@progbits,vtable for B,comdat
.align 16
.type vtable for B, @object
.size vtable for B, 32
vtable for B:
.quad 0
.quad typeinfo for B
.quad B::~B()
.quad B::~B()
.weak typeinfo for A
.section .rodata._ZTI1A,"aG",@progbits,typeinfo for A,comdat
.align 16
.type typeinfo for A, @object
.size typeinfo for A, 16
typeinfo for A:
.quad vtable for __cxxabiv1::__class_type_info+16
.quad typeinfo name for A
.weak typeinfo for B
.section .rodata._ZTI1B,"aG",@progbits,typeinfo for B,comdat
.align 16
.type typeinfo for B, @object
.size typeinfo for B, 24
typeinfo for B:
.quad vtable for __cxxabiv1::__si_class_type_info+16
.quad typeinfo name for B
.quad typeinfo for A
.weak typeinfo name for A
.section .rodata._ZTS1A,"aG",@progbits,typeinfo name for A,comdat
.type typeinfo name for A, @object
.size typeinfo name for A, 3
typeinfo name for A:
.string "1A"
.weak typeinfo name for B
.section .rodata._ZTS1B,"aG",@progbits,typeinfo name for B,comdat
.type typeinfo name for B, @object
.size typeinfo name for B, 3
typeinfo name for B:
.string "1B"
.ident "GCC: (GNU) 4.7.2 20120921 (Red Hat 4.7.2-2)"
.section .note.GNU-stack,"",@progbits
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment