summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGuillem Jover <guillem@debian.org>2011-12-12 09:54:40 +0100
committerGuillem Jover <guillem@debian.org>2011-12-13 08:13:46 +0100
commit4803403a62716380237fbe074b7ce638b4bf862e (patch)
tree49e297fd9849e885f7b8ca6dd230d3af6fe2198b
parent00f33e41b2c67669b08661885cf85f1cb81c0031 (diff)
downloaddpkg-4803403a62716380237fbe074b7ce638b4bf862e.tar.gz
build: Reintroduce objdump pattern and tag test case data files
Generating these at check time causes several problems. It requires a system supporting versioned symbols and a GNU ld command line compatible linker. Those are not available for example on Mac OS X. Using libtool could have been an option to portably build the shared libraries, although that still does not provide versioned symbols where they are not available. The problem with libtool is that there's no sane way to refer to the actual built shared library on the build tree. Introduce a refresh-test-data target to be able to easily regenerate those files when needed, e.g. when the test suite changes. Reported-by: Stuart Ambler <stuart@zulazon.com>
-rw-r--r--.gitignore1
-rw-r--r--scripts/Makefile.am48
-rw-r--r--scripts/t/200_Dpkg_Shlibs.t13
-rw-r--r--scripts/t/200_Dpkg_Shlibs/objdump.basictags-amd6472
-rw-r--r--scripts/t/200_Dpkg_Shlibs/objdump.basictags-i38673
-rw-r--r--scripts/t/200_Dpkg_Shlibs/objdump.patterns228
6 files changed, 407 insertions, 28 deletions
diff --git a/.gitignore b/.gitignore
index 8052d2a42..42b224d3e 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,6 +1,7 @@
# Inherited ignores
*.a
*.o
+*.so
*.gcno
*.gcda
*.gcov
diff --git a/scripts/Makefile.am b/scripts/Makefile.am
index 98d2950ff..46450d45a 100644
--- a/scripts/Makefile.am
+++ b/scripts/Makefile.am
@@ -49,6 +49,7 @@ EXTRA_DIST = \
CLEANFILES = \
+ $(test_data_objects) \
$(bin_SCRIPTS) $(changelog_SCRIPTS)
perllibdir = $(PERL_LIBDIR)
@@ -191,11 +192,6 @@ test_cases = \
t/850_Dpkg_Compression.t \
t/910_merge_changelogs.t
-check_DATA = \
- $(test_tmpdir)/200_Dpkg_Shlibs/objdump.basictags-amd64 \
- $(test_tmpdir)/200_Dpkg_Shlibs/objdump.basictags-i386 \
- $(test_tmpdir)/200_Dpkg_Shlibs/objdump.patterns
-
test_data = \
t/200_Dpkg_Shlibs/symbols.fake-1 \
t/200_Dpkg_Shlibs/symbols.fake-2 \
@@ -214,6 +210,9 @@ test_data = \
t/200_Dpkg_Shlibs/ld.so.conf.d/inf_recurse.conf \
t/200_Dpkg_Shlibs/ld.so.conf.d/recursive.conf \
t/200_Dpkg_Shlibs/objdump.space \
+ t/200_Dpkg_Shlibs/objdump.basictags-amd64 \
+ t/200_Dpkg_Shlibs/objdump.basictags-i386 \
+ t/200_Dpkg_Shlibs/objdump.patterns \
t/200_Dpkg_Shlibs/objdump.glib-ia64 \
t/200_Dpkg_Shlibs/objdump.libc6-2.3 \
t/200_Dpkg_Shlibs/objdump.libc6-2.6 \
@@ -237,29 +236,36 @@ test_data = \
t/origins/default \
t/origins/ubuntu
-objdump_lib_name = lib`basename $@`.so
+test_data_objects = \
+ t/200_Dpkg_Shlibs/libobjdump.basictags-amd64.so \
+ t/200_Dpkg_Shlibs/libobjdump.basictags-i386.so \
+ t/200_Dpkg_Shlibs/libobjdump.patterns.so
-$(test_tmpdir)/200_Dpkg_Shlibs/objdump.basictags-amd64: $(srcdir)/t/200_Dpkg_Shlibs/basictags.c
- $(mkdir_p) $(test_tmpdir)/200_Dpkg_Shlibs
+$(srcdir)/t/200_Dpkg_Shlibs/libobjdump.basictags-amd64.so: $(srcdir)/t/200_Dpkg_Shlibs/basictags.c
$(CC) $(CFLAGS) -shared -fPIC -Wl,-soname -Wl,libbasictags.so.1 $< \
- -DAMD64 -o $(objdump_lib_name)
- objdump -w -f -p -T -R $(objdump_lib_name) > $@
- rm -f $(objdump_lib_name)
+ -DAMD64 -o $@
-$(test_tmpdir)/200_Dpkg_Shlibs/objdump.basictags-i386: $(srcdir)/t/200_Dpkg_Shlibs/basictags.c
- $(mkdir_p) $(test_tmpdir)/200_Dpkg_Shlibs
+$(srcdir)/t/200_Dpkg_Shlibs/libobjdump.basictags-i386.so: $(srcdir)/t/200_Dpkg_Shlibs/basictags.c
$(CC) $(CFLAGS) -shared -fPIC -Wl,-soname -Wl,libbasictags.so.1 $< \
- -o $(objdump_lib_name)
- objdump -w -f -p -T -R $(objdump_lib_name) > $@
- rm -f $(objdump_lib_name)
+ -o $@
-$(test_tmpdir)/200_Dpkg_Shlibs/objdump.patterns: $(srcdir)/t/200_Dpkg_Shlibs/patterns.cpp $(srcdir)/t/200_Dpkg_Shlibs/patterns.map
- $(mkdir_p) $(test_tmpdir)/200_Dpkg_Shlibs
+$(srcdir)/t/200_Dpkg_Shlibs/libobjdump.patterns.so: $(srcdir)/t/200_Dpkg_Shlibs/patterns.cpp $(srcdir)/t/200_Dpkg_Shlibs/patterns.map
$(CXX) $(CXXFLAGS) -shared -fPIC -Wl,-soname -Wl,libpatterns.so.1 \
-Wl,--version-script=$(srcdir)/t/200_Dpkg_Shlibs/patterns.map $< \
- -o $(objdump_lib_name)
- objdump -w -f -p -T -R $(objdump_lib_name) > $@
- rm -f $(objdump_lib_name)
+ -o $@
+
+.PHONY: refresh-test-data
+
+OBJDUMP = objdump -w -f -p -T -R
+
+refresh-test-data: $(test_data_objects)
+ $(OBJDUMP) $(srcdir)/t/200_Dpkg_Shlibs/libobjdump.basictags-amd64.so \
+ >$(srcdir)/t/200_Dpkg_Shlibs/objdump.basictags-amd64
+ $(OBJDUMP) $(srcdir)/t/200_Dpkg_Shlibs/libobjdump.basictags-i386.so \
+ >$(srcdir)/t/200_Dpkg_Shlibs/objdump.basictags-i386
+ $(OBJDUMP) $(srcdir)/t/200_Dpkg_Shlibs/libobjdump.patterns.so \
+ >$(srcdir)/t/200_Dpkg_Shlibs/objdump.patterns
+ $(OBJDUMP) `which ls` >$(srcdir)/t/200_Dpkg_Shlibs/objdump.ls
include $(top_srcdir)/Makecheck.am
diff --git a/scripts/t/200_Dpkg_Shlibs.t b/scripts/t/200_Dpkg_Shlibs.t
index 8471a43e7..0e7fd413f 100644
--- a/scripts/t/200_Dpkg_Shlibs.t
+++ b/scripts/t/200_Dpkg_Shlibs.t
@@ -31,7 +31,6 @@ my @save_paths = @Dpkg::Shlibs::librarypaths;
my $srcdir = $ENV{srcdir} || '.';
my $datadir = $srcdir . '/t/200_Dpkg_Shlibs';
-my $tmpdir = 't.tmp/200_Dpkg_Shlibs';
# We want relative paths inside the ld.so.conf fragments to work, and $srcdir
# is usually a relative path, so let's temporarily switch directory.
@@ -296,16 +295,16 @@ ok (defined $sym_file->{objects}{'libbasictags.so.1'}{syms}{'symbol21_amd64@Base
# Preload objdumps
my $tags_obj_i386 = Dpkg::Shlibs::Objdump::Object->new();
-open $objdump, '<', "$tmpdir/objdump.basictags-i386"
- or die "$tmpdir/objdump.basictags-i386: $!";
+open $objdump, '<', "$datadir/objdump.basictags-i386"
+ or die "$datadir/objdump.basictags-i386: $!";
$tags_obj_i386->parse_objdump_output($objdump);
close $objdump;
$sym_file->merge_symbols($tags_obj_i386, '100.MISSING');
is_deeply($sym_file, $sym_file_dup, "is objdump.basictags-i386 and basictags.symbols in sync");
my $tags_obj_amd64 = Dpkg::Shlibs::Objdump::Object->new();
-open $objdump, '<', "$tmpdir/objdump.basictags-amd64"
- or die "$tmpdir/objdump.basictags-amd64: $!";
+open $objdump, '<', "$datadir/objdump.basictags-amd64"
+ or die "$datadir/objdump.basictags-amd64: $!";
$tags_obj_amd64->parse_objdump_output($objdump);
close $objdump;
@@ -403,8 +402,8 @@ is ( $sym->{testfield}, 1, 'original field "testfield" not changed' );
############ Test symbol patterns ###########
sub load_patterns_obj {
$obj = Dpkg::Shlibs::Objdump::Object->new();
- open $objdump, '<', "$tmpdir/objdump.patterns"
- or die "$tmpdir/objdump.patterns: $!";
+ open $objdump, '<', "$datadir/objdump.patterns"
+ or die "$datadir/objdump.patterns: $!";
$obj->parse_objdump_output($objdump);
close $objdump;
return $obj;
diff --git a/scripts/t/200_Dpkg_Shlibs/objdump.basictags-amd64 b/scripts/t/200_Dpkg_Shlibs/objdump.basictags-amd64
new file mode 100644
index 000000000..d19561c0c
--- /dev/null
+++ b/scripts/t/200_Dpkg_Shlibs/objdump.basictags-amd64
@@ -0,0 +1,72 @@
+
+./t/200_Dpkg_Shlibs/libobjdump.basictags-amd64.so: file format elf32-i386
+architecture: i386, flags 0x00000150:
+HAS_SYMS, DYNAMIC, D_PAGED
+start address 0x00000410
+
+Program Header:
+ LOAD off 0x00000000 vaddr 0x00000000 paddr 0x00000000 align 2**12
+ filesz 0x00000628 memsz 0x00000628 flags r-x
+ LOAD off 0x00000628 vaddr 0x00001628 paddr 0x00001628 align 2**12
+ filesz 0x00000108 memsz 0x00000110 flags rw-
+ DYNAMIC off 0x0000063c vaddr 0x0000163c paddr 0x0000163c align 2**2
+ filesz 0x000000d0 memsz 0x000000d0 flags rw-
+ NOTE off 0x000000f4 vaddr 0x000000f4 paddr 0x000000f4 align 2**2
+ filesz 0x00000024 memsz 0x00000024 flags r--
+EH_FRAME off 0x00000564 vaddr 0x00000564 paddr 0x00000564 align 2**2
+ filesz 0x00000034 memsz 0x00000034 flags r--
+ STACK off 0x00000000 vaddr 0x00000000 paddr 0x00000000 align 2**2
+ filesz 0x00000000 memsz 0x00000000 flags rw-
+
+Dynamic Section:
+ NEEDED libc.so.6
+ SONAME libbasictags.so.1
+ INIT 0x000003a8
+ FINI 0x00000548
+ HASH 0x00000118
+ GNU_HASH 0x00000160
+ STRTAB 0x00000278
+ SYMTAB 0x000001a8
+ STRSZ 0x000000c5
+ SYMENT 0x00000010
+ PLTGOT 0x00001718
+ PLTRELSZ 0x00000010
+ PLTREL 0x00000011
+ JMPREL 0x00000398
+ REL 0x00000378
+ RELSZ 0x00000020
+ RELENT 0x00000008
+ VERNEED 0x00000358
+ VERNEEDNUM 0x00000001
+ VERSYM 0x0000033e
+ RELCOUNT 0x00000001
+
+Version References:
+ required from libc.so.6:
+ 0x09691f73 0x00 02 GLIBC_2.1.3
+
+DYNAMIC SYMBOL TABLE:
+00000000 w DF *UND* 00000000 GLIBC_2.1.3 __cxa_finalize
+00000000 w D *UND* 00000000 __gmon_start__
+00000000 w D *UND* 00000000 _Jv_RegisterClasses
+00001730 g D *ABS* 00000000 Base _edata
+00001738 g D *ABS* 00000000 Base _end
+000004e0 g DF .text 00000002 Base symbol21_amd64
+00001730 g D *ABS* 00000000 Base __bss_start
+000003a8 g DF .init 00000000 Base _init
+000004f0 g DF .text 00000002 Base symbol31_randomtag
+00000548 g DF .fini 00000000 Base _fini
+00000500 g DF .text 00000002 Base symbol51_untagged
+000004d0 g DF .text 00000002 Base symbol11_optional
+
+
+DYNAMIC RELOCATION RECORDS
+OFFSET TYPE VALUE
+0000172c R_386_RELATIVE *ABS*
+0000170c R_386_GLOB_DAT __cxa_finalize
+00001710 R_386_GLOB_DAT __gmon_start__
+00001714 R_386_GLOB_DAT _Jv_RegisterClasses
+00001724 R_386_JUMP_SLOT __cxa_finalize
+00001728 R_386_JUMP_SLOT __gmon_start__
+
+
diff --git a/scripts/t/200_Dpkg_Shlibs/objdump.basictags-i386 b/scripts/t/200_Dpkg_Shlibs/objdump.basictags-i386
new file mode 100644
index 000000000..a09b57640
--- /dev/null
+++ b/scripts/t/200_Dpkg_Shlibs/objdump.basictags-i386
@@ -0,0 +1,73 @@
+
+./t/200_Dpkg_Shlibs/libobjdump.basictags-i386.so: file format elf32-i386
+architecture: i386, flags 0x00000150:
+HAS_SYMS, DYNAMIC, D_PAGED
+start address 0x00000440
+
+Program Header:
+ LOAD off 0x00000000 vaddr 0x00000000 paddr 0x00000000 align 2**12
+ filesz 0x00000684 memsz 0x00000684 flags r-x
+ LOAD off 0x00000684 vaddr 0x00001684 paddr 0x00001684 align 2**12
+ filesz 0x00000108 memsz 0x00000110 flags rw-
+ DYNAMIC off 0x00000698 vaddr 0x00001698 paddr 0x00001698 align 2**2
+ filesz 0x000000d0 memsz 0x000000d0 flags rw-
+ NOTE off 0x000000f4 vaddr 0x000000f4 paddr 0x000000f4 align 2**2
+ filesz 0x00000024 memsz 0x00000024 flags r--
+EH_FRAME off 0x000005a4 vaddr 0x000005a4 paddr 0x000005a4 align 2**2
+ filesz 0x0000003c memsz 0x0000003c flags r--
+ STACK off 0x00000000 vaddr 0x00000000 paddr 0x00000000 align 2**2
+ filesz 0x00000000 memsz 0x00000000 flags rw-
+
+Dynamic Section:
+ NEEDED libc.so.6
+ SONAME libbasictags.so.1
+ INIT 0x000003dc
+ FINI 0x00000588
+ HASH 0x00000118
+ GNU_HASH 0x00000164
+ STRTAB 0x00000290
+ SYMTAB 0x000001b0
+ STRSZ 0x000000df
+ SYMENT 0x00000010
+ PLTGOT 0x00001774
+ PLTRELSZ 0x00000010
+ PLTREL 0x00000011
+ JMPREL 0x000003cc
+ REL 0x000003ac
+ RELSZ 0x00000020
+ RELENT 0x00000008
+ VERNEED 0x0000038c
+ VERNEEDNUM 0x00000001
+ VERSYM 0x00000370
+ RELCOUNT 0x00000001
+
+Version References:
+ required from libc.so.6:
+ 0x09691f73 0x00 02 GLIBC_2.1.3
+
+DYNAMIC SYMBOL TABLE:
+00000000 w DF *UND* 00000000 GLIBC_2.1.3 __cxa_finalize
+00000000 w D *UND* 00000000 __gmon_start__
+00000000 w D *UND* 00000000 _Jv_RegisterClasses
+0000178c g D *ABS* 00000000 Base _edata
+00001794 g D *ABS* 00000000 Base _end
+00000530 g DF .text 00000002 Base symbol41_i386_and_optional
+00000510 g DF .text 00000002 Base symbol22_i386
+0000178c g D *ABS* 00000000 Base __bss_start
+000003dc g DF .init 00000000 Base _init
+00000520 g DF .text 00000002 Base symbol31_randomtag
+00000588 g DF .fini 00000000 Base _fini
+00000540 g DF .text 00000002 Base symbol51_untagged
+00000500 g DF .text 00000002 Base symbol11_optional
+
+
+DYNAMIC RELOCATION RECORDS
+OFFSET TYPE VALUE
+00001788 R_386_RELATIVE *ABS*
+00001768 R_386_GLOB_DAT __cxa_finalize
+0000176c R_386_GLOB_DAT __gmon_start__
+00001770 R_386_GLOB_DAT _Jv_RegisterClasses
+00001780 R_386_JUMP_SLOT __cxa_finalize
+00001784 R_386_JUMP_SLOT __gmon_start__
+
+
diff --git a/scripts/t/200_Dpkg_Shlibs/objdump.patterns b/scripts/t/200_Dpkg_Shlibs/objdump.patterns
new file mode 100644
index 000000000..775ebfa76
--- /dev/null
+++ b/scripts/t/200_Dpkg_Shlibs/objdump.patterns
@@ -0,0 +1,228 @@
+
+./t/200_Dpkg_Shlibs/libobjdump.patterns.so: file format elf32-i386
+architecture: i386, flags 0x00000150:
+HAS_SYMS, DYNAMIC, D_PAGED
+start address 0x00001880
+
+Program Header:
+ LOAD off 0x00000000 vaddr 0x00000000 paddr 0x00000000 align 2**12
+ filesz 0x00002466 memsz 0x00002466 flags r-x
+ LOAD off 0x00002468 vaddr 0x00003468 paddr 0x00003468 align 2**12
+ filesz 0x000002a4 memsz 0x000002ac flags rw-
+ DYNAMIC off 0x0000259c vaddr 0x0000359c paddr 0x0000359c align 2**2
+ filesz 0x000000f8 memsz 0x000000f8 flags rw-
+ NOTE off 0x000000f4 vaddr 0x000000f4 paddr 0x000000f4 align 2**2
+ filesz 0x00000024 memsz 0x00000024 flags r--
+EH_FRAME off 0x00001f10 vaddr 0x00001f10 paddr 0x00001f10 align 2**2
+ filesz 0x0000014c memsz 0x0000014c flags r--
+ STACK off 0x00000000 vaddr 0x00000000 paddr 0x00000000 align 2**2
+ filesz 0x00000000 memsz 0x00000000 flags rw-
+
+Dynamic Section:
+ NEEDED libstdc++.so.6
+ NEEDED libm.so.6
+ NEEDED libgcc_s.so.1
+ NEEDED libc.so.6
+ SONAME libpatterns.so.1
+ INIT 0x00001738
+ FINI 0x00001e98
+ HASH 0x00000118
+ GNU_HASH 0x0000038c
+ STRTAB 0x00000ba4
+ SYMTAB 0x00000624
+ STRSZ 0x000007de
+ SYMENT 0x00000010
+ PLTGOT 0x000036b8
+ PLTRELSZ 0x00000080
+ PLTREL 0x00000011
+ JMPREL 0x000016b8
+ REL 0x000014f8
+ RELSZ 0x000001c0
+ RELENT 0x00000008
+ VERDEF 0x00001434
+ VERDEFNUM 0x00000003
+ VERNEED 0x00001488
+ VERNEEDNUM 0x00000003
+ VERSYM 0x00001382
+ RELCOUNT 0x00000001
+
+Version definitions:
+1 0x01 0x03e92331 libpatterns.so.1
+2 0x00 0x0e2aa3a1 SYMVER_1
+3 0x00 0x0a4cbc82 SYMVEROPT_2
+
+Version References:
+ required from libc.so.6:
+ 0x09691f73 0x00 07 GLIBC_2.1.3
+ required from libgcc_s.so.1:
+ 0x0b792650 0x00 06 GCC_3.0
+ required from libstdc++.so.6:
+ 0x056bafd3 0x00 05 CXXABI_1.3
+ 0x08922974 0x00 04 GLIBCXX_3.4
+
+DYNAMIC SYMBOL TABLE:
+00000000 w D *UND* 00000000 __gmon_start__
+00000000 w D *UND* 00000000 _Jv_RegisterClasses
+00000000 DF *UND* 00000000 GLIBCXX_3.4 _ZdlPv
+00000000 DO *UND* 00000000 CXXABI_1.3 _ZTVN10__cxxabiv117__class_type_infoE
+00000000 DO *UND* 00000000 CXXABI_1.3 _ZTVN10__cxxabiv121__vmi_class_type_infoE
+00000000 DF *UND* 00000000 CXXABI_1.3 __gxx_personality_v0
+00000000 DF *UND* 00000000 GCC_3.0 _Unwind_Resume
+00000000 w DF *UND* 00000000 GLIBC_2.1.3 __cxa_finalize
+00001ef7 w DO .rodata 00000008 Base _ZTS6ClassC
+000019b0 g DF .text 0000001b Base _ZN6ClassBD1Ev
+00001b70 g DF .text 00000007 Base _ZThn16_N3NSB6ClassDD0Ev
+00001af0 g DF .text 00000036 Base _ZN6ClassCD0Ev
+00001cd0 g DF .text 0000001b Base _ZN3NSA6ClassA8InternalC2Ev
+00001e00 g DF .text 00000002 SYMVER_1 _ZN3NSB6SymverC2Ev
+00001d10 g DF .text 0000001b Base _ZN3NSA6ClassAC2Ev
+00001c50 g DF .text 00000036 Base _ZN3NSA6ClassA7PrivateD0Ev
+00001d70 g DF .text 00000089 Base _ZN3NSB6ClassDC2Ev
+00001cf0 g DF .text 00000002 Base _ZN3NSA6ClassA8Internal16internal_method1Ec
+00000000 g DO *ABS* 00000000 SYMVER_1 SYMVER_1
+00001ad0 g DF .text 00000007 Base _ZThn12_NK3NSB6ClassD11generate_vtEPKc
+000034e8 w DO .data.rel.ro 00000010 Base _ZTVN3NSA6ClassA7PrivateE
+00001e10 g DF .text 00000002 SYMVER_1 _ZN3NSB6SymverD1Ev
+00001e50 g DF .text 00000002 SYMVEROPT_2 _ZN3NSB14SymverOptionalD2Ev
+00001d50 g DF .text 0000001b Base _ZN6ClassCC2Ev
+00001980 g DF .text 0000001b Base _ZN3NSA6ClassAD1Ev
+00001960 g DF .text 0000001b Base _ZN3NSA6ClassA8InternalD1Ev
+00001a30 g DF .text 00000088 Base _ZN3NSB6ClassDD1Ev
+00001c90 g DF .text 0000001b Base _ZN3NSA6ClassA7PrivateC2Ev
+000034f8 w DO .data.rel.ro 00000010 Base _ZTVN3NSA6ClassA8InternalE
+00001cb0 g DF .text 00000002 Base _ZN3NSA6ClassA7Private11privmethod1Ei
+000019b0 g DF .text 0000001b Base _ZN6ClassBD2Ev
+00001a10 g DF .text 00000007 Base _ZThn16_N3NSB6ClassDD1Ev
+00001e98 g DF .fini 00000000 Base _fini
+00001b80 g DF .text 00000007 Base _ZThn12_N3NSB6ClassDD0Ev
+000019e0 g DF .text 0000001b Base _ZN6ClassCD1Ev
+00001940 g DF .text 0000001b Base _ZN3NSA6ClassA7PrivateD1Ev
+00003498 w DO .data.rel.ro 00000008 Base _ZTI6ClassB
+00001738 g DF .init 00000000 Base _init
+000034a0 w DO .data.rel.ro 00000008 Base _ZTI6ClassC
+00001d00 g DF .text 00000002 Base _ZN3NSA6ClassA8Internal16internal_method2Ec
+00001980 g DF .text 0000001b Base _ZN3NSA6ClassAD2Ev
+00001960 g DF .text 0000001b Base _ZN3NSA6ClassA8InternalD2Ev
+00001e10 g DF .text 00000002 SYMVER_1 _ZN3NSB6SymverD2Ev
+00000000 g DO *ABS* 00000000 SYMVEROPT_2 SYMVEROPT_2
+00003560 w DO .data.rel.ro 0000003c Base _ZTVN3NSB6ClassDE
+00003508 w DO .data.rel.ro 00000014 Base _ZTVN3NSA6ClassAE
+000019a0 g DF .text 00000002 Base _ZNK3NSA6ClassA11generate_vtEPKc
+00001cc0 g DF .text 00000002 Base _ZN3NSA6ClassA7Private11privmethod2Ei
+00001a30 g DF .text 00000088 Base _ZN3NSB6ClassDD2Ev
+00001ac0 g DF .text 00000007 Base _ZThn16_NK3NSB6ClassD11generate_vtEPKc
+00001a00 g DF .text 00000002 Base _ZNK6ClassC11generate_vtEPKc
+00001a20 g DF .text 00000007 Base _ZThn12_N3NSB6ClassDD1Ev
+000019e0 g DF .text 0000001b Base _ZN6ClassCD2Ev
+00001e40 g DF .text 00000002 SYMVEROPT_2 _ZN3NSB14SymverOptionalC1Ev
+00001e20 g DF .text 00000002 SYMVER_1 _ZN3NSB6Symver14symver_method1Ev
+00001940 g DF .text 0000001b Base _ZN3NSA6ClassA7PrivateD2Ev
+000019d0 g DF .text 00000002 Base _ZNK6ClassB11generate_vtEPKc
+00001d30 g DF .text 0000001b Base _ZN6ClassBC1Ev
+00003520 w DO .data.rel.ro 00000014 Base _ZTV6ClassB
+00003538 w DO .data.rel.ro 00000014 Base _ZTV6ClassC
+00001eb4 w DO .rodata 00000016 Base _ZTSN3NSA6ClassA7PrivateE
+00001eff w DO .rodata 0000000e Base _ZTSN3NSB6ClassDE
+0000370c g D *ABS* 00000000 Base _edata
+00001ee1 w DO .rodata 0000000e Base _ZTSN3NSA6ClassAE
+00001b30 g DF .text 00000036 Base _ZN6ClassBD0Ev
+00003480 w DO .data.rel.ro 00000008 Base _ZTIN3NSA6ClassA7PrivateE
+00001d10 g DF .text 0000001b Base _ZN3NSA6ClassAC1Ev
+00001e40 g DF .text 00000002 SYMVEROPT_2 _ZN3NSB14SymverOptionalC2Ev
+00001cd0 g DF .text 0000001b Base _ZN3NSA6ClassA8InternalC1Ev
+00003714 g D *ABS* 00000000 Base _end
+00001e00 g DF .text 00000002 SYMVER_1 _ZN3NSB6SymverC1Ev
+00001eca w DO .rodata 00000017 Base _ZTSN3NSA6ClassA8InternalE
+00001e30 g DF .text 00000002 SYMVER_1 _ZN3NSB6Symver14symver_method2Ev
+00001d70 g DF .text 00000089 Base _ZN3NSB6ClassDC1Ev
+00001d30 g DF .text 0000001b Base _ZN6ClassBC2Ev
+00001ae0 g DF .text 00000002 Base _ZNK3NSB6ClassD11generate_vtEPKc
+00001bd0 g DF .text 00000036 Base _ZN3NSA6ClassAD0Ev
+00001d50 g DF .text 0000001b Base _ZN6ClassCC1Ev
+00001c10 g DF .text 00000036 Base _ZN3NSA6ClassA8InternalD0Ev
+00001e50 g DF .text 00000002 SYMVEROPT_2 _ZN3NSB14SymverOptionalD1Ev
+00003488 w DO .data.rel.ro 00000008 Base _ZTIN3NSA6ClassA8InternalE
+0000370c g D *ABS* 00000000 Base __bss_start
+00001eef w DO .rodata 00000008 Base _ZTS6ClassB
+000034c0 w DO .data.rel.ro 00000028 Base _ZTIN3NSB6ClassDE
+00001c90 g DF .text 0000001b Base _ZN3NSA6ClassA7PrivateC1Ev
+00003490 w DO .data.rel.ro 00000008 Base _ZTIN3NSA6ClassAE
+00001b90 g DF .text 00000036 Base _ZN3NSB6ClassDD0Ev
+
+
+DYNAMIC RELOCATION RECORDS
+OFFSET TYPE VALUE
+00003704 R_386_RELATIVE *ABS*
+00003480 R_386_32 _ZTVN10__cxxabiv117__class_type_infoE
+00003488 R_386_32 _ZTVN10__cxxabiv117__class_type_infoE
+00003490 R_386_32 _ZTVN10__cxxabiv117__class_type_infoE
+00003498 R_386_32 _ZTVN10__cxxabiv117__class_type_infoE
+000034a0 R_386_32 _ZTVN10__cxxabiv117__class_type_infoE
+00003484 R_386_32 _ZTSN3NSA6ClassA7PrivateE
+0000348c R_386_32 _ZTSN3NSA6ClassA8InternalE
+00003494 R_386_32 _ZTSN3NSA6ClassAE
+0000349c R_386_32 _ZTS6ClassB
+000034a4 R_386_32 _ZTS6ClassC
+000034c0 R_386_32 _ZTVN10__cxxabiv121__vmi_class_type_infoE
+000034c4 R_386_32 _ZTSN3NSB6ClassDE
+000034d0 R_386_32 _ZTIN3NSA6ClassAE
+0000350c R_386_32 _ZTIN3NSA6ClassAE
+000034d8 R_386_32 _ZTI6ClassB
+00003524 R_386_32 _ZTI6ClassB
+000034e0 R_386_32 _ZTI6ClassC
+0000353c R_386_32 _ZTI6ClassC
+000034ec R_386_32 _ZTIN3NSA6ClassA7PrivateE
+000034f0 R_386_32 _ZN3NSA6ClassA7PrivateD1Ev
+000034f4 R_386_32 _ZN3NSA6ClassA7PrivateD0Ev
+000034fc R_386_32 _ZTIN3NSA6ClassA8InternalE
+00003500 R_386_32 _ZN3NSA6ClassA8InternalD1Ev
+00003504 R_386_32 _ZN3NSA6ClassA8InternalD0Ev
+00003510 R_386_32 _ZN3NSA6ClassAD1Ev
+00003514 R_386_32 _ZN3NSA6ClassAD0Ev
+00003518 R_386_32 _ZNK3NSA6ClassA11generate_vtEPKc
+00003528 R_386_32 _ZN6ClassBD1Ev
+0000352c R_386_32 _ZN6ClassBD0Ev
+00003530 R_386_32 _ZNK6ClassB11generate_vtEPKc
+00003540 R_386_32 _ZN6ClassCD1Ev
+00003544 R_386_32 _ZN6ClassCD0Ev
+00003548 R_386_32 _ZNK6ClassC11generate_vtEPKc
+00003564 R_386_32 _ZTIN3NSB6ClassDE
+00003578 R_386_32 _ZTIN3NSB6ClassDE
+0000358c R_386_32 _ZTIN3NSB6ClassDE
+00003568 R_386_32 _ZN3NSB6ClassDD1Ev
+0000356c R_386_32 _ZN3NSB6ClassDD0Ev
+00003570 R_386_32 _ZNK3NSB6ClassD11generate_vtEPKc
+0000357c R_386_32 _ZThn12_N3NSB6ClassDD1Ev
+00003580 R_386_32 _ZThn12_N3NSB6ClassDD0Ev
+00003584 R_386_32 _ZThn12_NK3NSB6ClassD11generate_vtEPKc
+00003590 R_386_32 _ZThn16_N3NSB6ClassDD1Ev
+00003594 R_386_32 _ZThn16_N3NSB6ClassDD0Ev
+00003598 R_386_32 _ZThn16_NK3NSB6ClassD11generate_vtEPKc
+00003694 R_386_GLOB_DAT _ZTVN3NSB6ClassDE
+00003698 R_386_GLOB_DAT __gmon_start__
+0000369c R_386_GLOB_DAT _Jv_RegisterClasses
+000036a0 R_386_GLOB_DAT _ZTV6ClassB
+000036a4 R_386_GLOB_DAT _ZTVN3NSA6ClassA8InternalE
+000036a8 R_386_GLOB_DAT _ZTVN3NSA6ClassA7PrivateE
+000036ac R_386_GLOB_DAT _ZTVN3NSA6ClassAE
+000036b0 R_386_GLOB_DAT __cxa_finalize
+000036b4 R_386_GLOB_DAT _ZTV6ClassC
+00003708 R_386_32 __gxx_personality_v0
+000036c4 R_386_JUMP_SLOT _ZN3NSA6ClassA7PrivateD1Ev
+000036c8 R_386_JUMP_SLOT _ZN3NSB6ClassDD1Ev
+000036cc R_386_JUMP_SLOT _ZN3NSA6ClassAD2Ev
+000036d0 R_386_JUMP_SLOT __gmon_start__
+000036d4 R_386_JUMP_SLOT _ZdlPv
+000036d8 R_386_JUMP_SLOT _ZN6ClassCD2Ev
+000036dc R_386_JUMP_SLOT _ZN6ClassBD2Ev
+000036e0 R_386_JUMP_SLOT _ZN6ClassBD1Ev
+000036e4 R_386_JUMP_SLOT _ZN6ClassCC2Ev
+000036e8 R_386_JUMP_SLOT _ZN3NSA6ClassAD1Ev
+000036ec R_386_JUMP_SLOT _ZN3NSA6ClassAC2Ev
+000036f0 R_386_JUMP_SLOT _ZN6ClassBC2Ev
+000036f4 R_386_JUMP_SLOT _ZN6ClassCD1Ev
+000036f8 R_386_JUMP_SLOT _ZN3NSA6ClassA8InternalD1Ev
+000036fc R_386_JUMP_SLOT _Unwind_Resume
+00003700 R_386_JUMP_SLOT __cxa_finalize
+
+