Censorship, Freedom of Speech, Privacy
Governments, the Music and Movie industries, and others are attempting to disable the internet, truncate freedom of speech, and eliminate internet privacy. Now, in 2013. US residents: please join the Electronic Frontier Foundation (EFF.org) to join the fight for your rights. Everyone: learn what TPP is and why it is really really bad.
For a few details see my censorship/privacy/freedom web page with its links to attempts to censor us all.
 
HOME Software  Palm  DWARF  Lotus Cars  RPM Building  eeepc  kindle 
graphic with lotus europa and lotus elan

David A's DWARF Page

Introduction

libdwarf and dwarfdump are Free Software, but if you find either useful you can support their development via the Paypal button:

The distribution consists of C and C++ source code that you compile with your C/C++ compiler (documentation is included).

The DWARF Debugging Information Format is of interest to programmers working on compilers and debuggers (and anyone interested in reading or writing DWARF information). It was developed by a committee (known as the PLSIG at the time) starting around 1991. Starting around 1991 SGI developed the libdwarf and dwarfdump tools for internal use and as part of SGI IRIX developer tools. Since that time dwarfdump and libdwarf have been shipped (as an executable and archive respectively, not source) with every release of the SGI MIPS/IRIX C compiler. In 1994 (I think the correct year) SGI agreed (at my request) to open-source libdwarf (and in 1999 to open-source dwarfdump) so anyone could use them.

License terms are GPL (version 2) /LGPL (version 2.1). The details are discussed in the license page

DWARF specifications and the dwarf email forums are at http://www.dwarfstd.org. Sign up for the email discussion list there.

Email about libdwarf and dwarfdump may be sent to libdwarf-list -at- earthlink -dot- net (replace -at- and -dot- with the normal single characters to form the email address).

Incompatible Change June 2013

[top]

January 31, 2013: Announcing this incompatible change!

In June 2013 there will be an incompatible change to libdwarf.h which will mean those compiling against the producer code in libdwarf will encounter an error. The Callback function prototype will add 'const' to a char * argument in the Callback functions whose types are named below. This is not a binary incompatibility it is a source compile time incompatibility.

Generally the only people affected are those compiling a compiler that uses libdwarf to generate DWARF2. The function prototypes in libdwarf.h are named Dwarf_Callback_Func_c, Dwarf_Callback_Func_b, and Dwarf_Callback_Func.

It will not affect folks linking against libdwarf but not recompiling the code calling libdwarf.

The fix is simple: add 'const' to the char* argument to your libdwarf callback prototypes and implementation.

This change will let us eliminate several compiler warning messages from the build of libdwarf. It will not affect folks calling only the consumer interfaces of libdwarf. Only those who coded callback functions using the libdwarf producer callbacks are affected.

Request for test objects

[top]

Request for .rela test objects

While I have a collection of various ELF object files containing DWARF information I have very few with .rela relocations (something libdwarf now supports). If you could create any such different from the following table entries (with rela relocations and DWARF2/3/4 debugging information, please) I would appreciate it. I don't need multiple relocatable objects with any given combination of characteristics (as listed in the following table). LE meaning little-endian, BE meaning big endian, of course. The following source and build script shows what I want. These exact files suffice (if your compiler generates rela sections).

quasar 1091: cat t1.c
extern  int foo();
int main()
{
    int x = 1;
    x = foo();
    return x;    
}
quasar 1092: cat t2.c
int foo()
{
     int y = 3;
     y = y + 8;
     return y;
}
quasar 1093: cat build.sh
cc -c -g t1.c
cc -c -g t2.c
ld -r t1.o t2.o -o tcombined.o
#The following shows if rela sections are generated.
readelf -S tcombined.o | grep rela.debug_info

The ones I already have as of March 18,2010 are:

32/64 CPU LE/BE
Elf32 SPU(cell) BE
Elf32 PPC BE
Elf64 AMD64 LE
Elf64 PPC BE
Elf64 SPARC BE
Elf32 SPARC V8+ BE
Elf64 MIPS LE
Elf64 MIPS BE

Note about distribution contents

All libdwarf distributions contain C source plus the DWARF2 specification plus libdwarf specifications. Implementors often extend DWARF by adding new attributes and other things. Those that we are aware of are defined in dwarf.h which is provided here for reference. If you have corrections or additions, please let me know! The file is in every distribution of libdwarf.

Compiler/Release Issues

[top]

Clang Compiler Issues, January 2012

The new clang C/C++ compiler has some issues in the generated dwarf that dwarfdump notices. We make no claim that the issues list here is complete.

Known DWARF issues with clang 2.9: The "dwarf_srclines: DW_DLE_BAD_REF_FORM" error arises due to a bug in the FORM of the DW_AT_stmt_list attribute. This rather severe error causes dwarfdump to stop executing. ( http://llvm.org/bugs/show_bug.cgi?id=9995). The DW_TAG_friend does not have a correct list of attributes. ( http://llvm.org/bugs/show_bug.cgi?id=11695). The DW_AT_containing_type does not appear in the right place. ( http://llvm.org/bugs/show_bug.cgi?id=11700).

Known DWARF issues with clang 3.0: Bug 9995 is fixed. Bugs 11695 and 11700 are not fixed.

Known DWARF issues with clang HEAD January 2012: Bugs 11695 and 11700 are not fixed.

Arm issues, March 2010

ARM C/C++ Compiler, RVCT4.0 [Build 650] can emit DWARF3 with a .debug_frame cie length of 46, which is not a multiple of the address_size (which is 4) and thus violates the rules of DWARF (libdwarf generates an error). That compiler also generates a .debug_frame augmentation string of "armcc+" which libdwarf does not understand and so libdwarf generates an error for that too. http://sourceware.org/ml/gdb-patches/2006-12/msg00249.html has information about interpreting Arm .debug_frame information. Update 17 March 2010 The sourceware.org web page is more complete than I initially grasped and has been confirmed by a compiler-maintainer at Arm. Basically the augmentation string of "armcc+" means the CFA has the standard meaning, whereas the empty augmentation string means the CFA has a non-standard definition. See the sourceware.org page for details. The cie_length bug has been reported to an Arm compiler-maintainer. Update 04 April 2010 The 20100404 release lets libdwarf work properly on Arm.

Compilation and off64_t

Beginning in 2007 libelf.h may be distributed with a use of off64_t as a data type. In 32bit Linux with some distributions either _GNU_SOURCE or __USE_LARGEFILE64 must be defined before including either sys/types.h or libelf.h: a plain include of libelf.h will not compile. The configure scripts and some coding in libdwarf/dwarfdump headers attempt to deal with this as of December 2007 so that older and newer libelf.h will work transparently (allowing libdwarf/dwarfump to build). As a result of the 2007 libelf.h off64_t type you may see a warning from configure when plain libelf.h does not compile: ignore that configure warning.

Line table header length bug in a gcc distribution

This issue was discovered 29 September 2008. A gcc version (GNU C 4.1.2 (Gentoo 4.1.2) -g) when generating 64-bit-offset-dwarf targeting a MIPS64 little-endian platform (and perhaps other targets), generates line table prologue header_length field with a value which is exactly 12 too large. A dwarfdump/libdwarf error of DW_DLE_LINE_PROLOG_LENGTH_BAD (most libdwarf releases) or a Warning from dwarfdump -l -v -v -v -v (libdwarf 20080929) indicates this error was encountered. Almost all gcc DWARF2 generation involves 32-bit-offset DWARF2 (even if the target machine has 64 bit pointers) so it's very unlikely this bug will affect you. As of the 20081012 release libdwarf works around this bug. Looking at gcc source of 4.1.2 I don't see how that bug is possible (gcc source looks correct in this regard).

Dwarfdump2 vs dwarfdump

I created dwarfdump2 in C++ (first released in March 2009). dwarfdump2 operates the same as the dwarfdump but dwarfdump2 is easier to read (I hope). Dwarfdump as of 20100404 has the same features as dwarfdump2, but dwarfdump uses a GNU C library routine (tdestroy()) (if present) that may not exist on all systems. I hope all can use dwarfdump2 instead of dwarfdump. I would love to hear why you have to stay with dwarfdump (if you do).

Dwarfdump Performance issue

There is an issue with dwarfdump performance due to the number of function-instances when the number of registers (frame rules) is set higher than necessary.

dwarfdump -R  -f libpt_linux_x86_r.so.1 

can take more than an hour to run. The -R defaults to 1200 registers, but x86 has only a few registers. There are 48382 subprogram instances in this shared object (with just 9191 FDEs (multiples of them have the same low_pc addresses,which is a g++ bug, see below)).

With
 dwarfdump -x abi=x86 -f 
the dump takes just 1 minute.

So use -R only when you need it. The 10 May 2009 release has additional abi dwarfdump.conf entries named generic500 and generic100 so cpus with register counts well under 1000 (and no specific correct abi in dwarfdump.conf) have better choices than -R. Update: As of the 10 May 2009 release dwarfdump2 has a new implementation of -f (and -F) which avoids the -R multiplier effect. It uses a different libdwarf interface function. This reduces run time of -R -f on this test case to under 2 minutes and the code is a bit easier to understand (I hope). Libdwarf has a couple tiny new functions that make possible fully correct reporting of frame information to libdwarf (there was a dependency on DW_FRAME_CFA_COL3 as a constant which could break down for an ABI with over 1034 registers, and the new functions enable libdwarf to behave correctly).

Gcc 4.3.0 frame information bug

There is also an apparent g++ bug because with g++ version 4.3.0 20080428 (Red Hat 4.3.0-8) (GCC) emits many fdes with identical low_pc addresses (often low_pc of zero) --- which makes no sense to me. I noticed this building dwarfdump2 with that g++. Dwarfdump warns about the situation of duplicate-low-pc fdes. The same problem occurs with earlier gcc: GNU C++ 4.1.1 20070105 (Red Hat 4.1. 1-51). Some of these duplicate FDE reports were erroneous (a bug in libdwarf which fixed in 20100808). A .debug_loc oddity with that same version of g++ is some bytes in .debug_loc that do not seem to be referenced from .debug_info. This is not a bug in g++ because the DWARF specification does not forbid such, but it does mean printing the .debug_loc section (dwarfdump -c or dwarfdump -a) fails with a "dwarf_get_loclist_from_expr: DW_DLE_LOC_EXPR_BAD (128)" error. Update: The 20100930 release removes the implied -c from -a so this .debug_loc oddity won't interfere with -a use now.

Gcc 4.5.1 .debug_pubtypes section bug

g++ generated bad .debug_pubtypes data in an example executable (a build of dwarfdump2 using "GNU C++ 4.5.1") I was sent. The error message "dwarfdump NO ENTRY: pubtype dwarf_offdie : die offset does not reference valid DIE." is indicating a real error in the section data. Some of the DIE offsets are nonsense. A workaround is to avoid attempting to print .debug_pubtypes.

Redhat 9 compilation and libelf.h

Compilation will fail if libelf.h is missing (it's missing from RedHat 9.0, for example, though libelf.a/.so is present). In that case find a libelf distribution to get libelf.h.

Anonymous Git Access

[top]

Beginning 19 March 2011 libdwarf source code is available via anonymous access with git.
Beginning 15 October 2012, the repository is under Sourceforge's new setup so the anonymous clone commands have changed.

"git clone git://git.code.sf.net/p/libdwarf/code"
initializes a git repository in the local directory it will create named "code" and populates it with the most up to date libdwarf source.

The regression tests (which you really don't need or want) are available in
"git clone git://git.code.sf.net/p/libdwarf/regressiontests" .

A small indent-checking tool in case you make changes and want to preserve proper libdwarf indentation is in
"git clone git://git.code.sf.net/p/dicheck-da/code"
but since this one also creates a directory named "code" do this command in a different directory from the one used to hold libdwarf "code".

Building and testing libdwarf

[top]

Building libdwarf

The libdwarf build process involves a simple traditional approach (at least for personal use, people generating binary releases or a corporate library will have their own internal requirements to consider). In the base directory of the source distribution (either expanded from a tar.gz or from git) do the following:

./configure
make

If all goes well, this will build libdwarf, dwarfdump, dwarfdump2, dwarfgen, and dwarfexample in a minute or two. You don't really need dwarfgen or dwarfexample, so if the compile fails in one of those don't worry about it. If libdwarf and dwarfdump complete their build you have most of the functionality you need. dwarfdump (written in C) and dwarfdump2 (written in C++) do the same job, they let you dump out, in readable form, the DWARF2,DWARF3, or DWARF4 data from an object file, but dwarfdump2 does a better job in some respects.

There are some prerequisites you must have installed on your build machine:

C compiler (conformant with, at mininum, the 1989 C standard)
C++ compiler (for dwarfdump2)
libelf (for libdwarf and dwarfdump and dwarfdump2)
libc should have tsearch() and hopefully tdestroy() functions.
If libc does not have the tsearch() function dwarfdump will not show most function names in printing frame information (dwarfdump2 has no dependency on tsearch). If libc is not GNU libc you probably do not have the tdestroy() function so dwarfdump can leak memory while running (dwarfdump2 has no dependency on tdestroy()).

None of this understands the object files in Apple MacOSX. I don't have time to provide such, and no one else has proposed contributing such support. Contact the libdwarf-list email address before attempting to contribute any code.

None of this understands the object files in Microsoft Windows. A few people have made libdwarf and dwarfdump work on Windows, but none have contributed any support code. Contact the libdwarf-list email address before attempting to contribute any code. Note that libdwarf has specific design features that enable reading of non-Elf object files without very much difficulty, but you will have to write your own code to read those files and will need to do a special build of libdwarf that does not use Elf related headers (which should be relatively easy). Use of one of the POSIX-like environments like mingw or cygwin or the like will likely ease your way considerably.

Testing libdwarf

The regression test build process involves rather more work, and few will want to bother with it. There is no tar.gz available, you have to use git. In the base directory of the regressiontests distribution do the following (if the base of the libdwarf source tree is at ../code this should work, but if not see the regressiontests/README.txt file):

To run the dwarfextract test successfully, bfd.h needs to be installed in a standard place, so install binutils-dev (or the equivalent for your release) to get bfd.h.

./configure
make
On a modern machine this should run in about 100 minutes and the final message should say PASS. Unless *all* the components in the libdwarf source build correctly the tests cannot pass. Unless you are running Ubuntu GNU/Linux or FreeBSD 9.1 you will have more work to do to run the tests. Partly because the tests depend on having a known-good version of dwarfdump and dwarfdump2 in the distribution (though you can substitute your just-built dwarfdump and dwarfdump2 to bootstrap the tests).

Releases

[top]
filename, download-link Bytes Reason for release
libdwarf-20130207.tar.gz 1534527

Now with a simplified build (see README) and with checks for most compiler errors in producing DW_AT_sibling attributes. Verified on Ubuntu 12.10 and FreeBSD 9.1.

md5sum: 64b42692e947d5180e162e46c689dfbf

sha512sum (remove spaces following colon): 1cb272f80745a789d592d57e6a64b1b4ec6e1b646653 da2f19c2e2d803b8e90b52f5c69597360bf1703b1c25 7844c53c3f43a80cd9f45a2adb314ad2511c19e9

libdwarf-20130126.tar.gz 1488410

A mistake in handling DW_OP_GNU_const_type could lead to a libdwarf coredump at times, and even when it appeared to work the value printed was wrong. Thanks to Tom Hughes and Andrew Bernat for pointing out the DW_OP_GNU_const_type problem. This release has libdwarf interfaces compatible with releases before 20130125. Compared to 20130125 this restores the libdwarf.h interface Dwarf_Loc structure and changes the way the lr_number2 member is used for the new location expression operator DW_OP_GNU_const_type.

md5sum: ded74a5e90edb5a12aac3c29d260c5db

sha512sum (remove spaces following colon): c9911ce0b9725400ec1a70e809e185b122095c534f05687 ea0be16a0e9bfe3b8128e353834c43b5fe80e1b149b11 f113fcce53c57bad0a12b3b091dd0e31d043

libdwarf-20130125.tar.gz 0

WITHDRAWN: this release is fine for personal use if you picked it up while it was available, but a change in libdwarf.h introduced a binary incompatibility which we realized (the next day) was an unnecessary incompatibility. Client code using that structure must be recompiled to use the new libdwarf, but see 20130126 for a new release that has the same fixes but removes the recompilation requirement vis-a-vis releases prior to 2013-01-25.

libdwarf-20121130.tar.gz 1489530

New checking options to dwarfdump can help find wasted space in DWARF's .debug_info section (useful to compiler writers). Thanks to Carlos Alberto Enciso for designing, coding, and documenting the new options. Added a refinement to handling a new GNU/gcc expression operator which prevents a 64-bit-pointer object from causing libdwarf difficulty. Thanks to Akos Pasztory for providing a concise testcase.

md5sum: 83ab49c58439254729f543be6977692b

sha512sum (remove spaces following colon): 986bb4cfb92b32da5eab8ae6fde24c5ac9f8b9503feec3 f28e855d9aaf9ad54ab4e3de19d3fc99912ef5b3b2d61d 993c1ca4e62629a41afc764bc4c931685ce5

libdwarf-20121127.tar.gz 0

Withdrawn due to a bug in the release.

libdwarf-20120410.tar.gz 1465839

Ken W. and J. Spencer reported a few C99 dependency issues and commentary mistakes in libdwarf and dwarfgen, and those are now fixed. Thanks for bringing these to my attention. The md5sum for this release is "77c8b351f11738bc9fa50474a69d5b36".

libdwarf-20111214.tar.gz 1479396

dwarfdump[2]: Added support for DW_OP_GNU operators. Enhanced the extended-extensions table so known GNU tag-attr dependencies get no warning. Added support for DWARF3/4 line table values. libdwarf: Added support for DW_OP_GNU operators. Added dwarf_lineoff_b() function making dwarf_lineoff() obsolete (but still present). Added dwarf_add_lineentry_b() as part of preparation for creating DWARF3/4 line output (including isa and discriminator fields). Added dwarf_prologue_end_etc() function to access line entry new fields. The consumer documentation is now at version 2.02 and producer doc at version 1.32 . dwarfgen: Added example code generating line tables. The md5sum for this release is "573b49b94e38a0e65ff337768f003d33".

libdwarf-20111030.tar.gz 1467164

Now libdwarf and dwarfdump/dwarfdump2 support reading and printing the DWARF4 .debug_types section. The md5sum for this release is "c4eee0c099d19c84f24e0d1634f0d8e7"

libdwarf-20111009.tar.gz 1446042

dwarfdump2: Major change! Now works just like dwarfdump -- with the same options and capabilities as dwarfdump but by taking advantage of C++ features it is simpler to read and a bit faster than C dwarfdump. dwarfdump: Fixed some (minor) problems in detecting compilation units and showing errors. libdwarf: Now a bit more robust in detecting errors in object files. md5sum on this gzip file yields "f1064abf7bea6a0ad8ec74d7d4218ec6". Thanks to Paul Marinescu and Carlos Alberto Enciso and Sharma Shailesh and Gerald Rigdon for their help and comments.

libdwarf-20110908.tar.gz 1405391

Some minor changes. libdwarf: added -fPIC to enable-shared builds, and implemented the ability to declare (in dwarfdump.conf) that address-size is 4 or 8. dwarfdump: Fixed tsearch related call with a memory leak, added a dwarfdump.conf example showing new includeabi: and address_size: command lines, configure now sets HAVE_STDAFX_H if that header (non-Linux) exists, verify checking is on before doing a duplicate-fde check. dwarfdump2: verify checking is on before doing a duplicate-fde check. md5sum on this gzip file yields "833a9ad58367d817db1c704d468acbee".

libdwarf-20110612.tar.gz 1399564

A function is in the producer: dwarf_producer_init_c(). This provides a user-defined void* pointer passed through from dwarf_producer_init_c() to the callback so the user code can provide whatever data it wishes to itself (in the callback). The library does not inspect the value in any way. md5sum on this gzip file yields "4bcebf3b9876eaec0916769f8a6864f3"

libdwarf-20110607.tar.gz 1456749

Issues addressed, libdwarf: Now DW_FORM_sdata/udata allowed for DW_AT_data_member_location. A very old bug (looking past the end of .debug_abbrev) fixed. Added a new function making it easier to get the 'class' of an attribute. Issues addressed, dwarfdump: Corrected some line-table error checking and made the options work more like they are described in a few cases. md5sum on this gzip file yields "7d3f6921dfe1c47007f55a60cf89ea53"

libdwarf-20110605.tar.gz 1450661

Issues addressed: libdwarf was missing a % in line printing and the producer code and had several indentation errors and omitted checks for empty sections in several places. dwarfdump had unused local variables and critical missing () in two tests made if statements incorrect. One place = was used in a test erroneously. The dwarfdump.1 man page is more informative about the -k options now. md5sum on this gzip file yields "0d2718414c3be33b8f19317c979ac5f4" .

libdwarf-20110113.tar.gz 1392725

The dwarfdump reader now handles DWARF4, at least in the areas I have test cases. gcc-4.5 -gdwarf-4 generates DWARF2 line tables (for example) so there are some untested areas of DWARF4 handling.

libdwarf-20100930.tar.gz 1386039

dwarfdump -a no longer implies -c so the DW_DLE_LOC_EXPR_BAD won't appear for valid DWARF any longer. The make install targets are pretty useless, the various README files now explain installation (if you want to install) in more detail. This has an initial release of dwarfgen, which generates DWARF using the libdwarf producer code. Be aware dwarfgen is seriously incomplete and has serious bugs.

libdwarf-20100808.tar.gz 1313115

With -f and -F dwarfdump was counting eh_frame low-pc as a duplicate of .debug_frame low-pc. This was a bug and lead to many DWARF_CHECK error messages. Now duplicate fdes in .eh_frame are checked separately from those in .debug_frame.

libdwarf-20100629.tar.gz 1313016

Fixes some CFA_expression handling in libdwarf and allows some compiler mistakes a bit more leeway in dwarfdump (so the dump continues in the face of certain errors). Thanks to Todd Allen for noticing the libdwarf bug and providing a test case.

libdwarf-20100404.tar.gz 1310772

Fixes Arm handling. Fixes MIPS 64 BigEndian .rela handling. Improves dwarfdump fde function name handling and error detection. Fixes aranges handling. Fixes some counts from -k error checking reports. Adds example code to one example source file. Thanks to Peter Lloyd and shihhuangti for providing non-proprietary test objects.

libdwarf-20100328.tar.gz 1304516

Recent Arm compiler frames were not understood by libdwarf, now they may be successfully read. A new class of 'harmless errors' is now created by libdwarf, but clients may freely ignore this new error class. Dwarfdump now has an abi 'arm' so that frames may print register names for Arm objects.

libdwarf-20100214.tar.gz 1292355

libdwarf and dwarfdump were not handling all DW_OP operators correctly. When the elf object type (elf64) did not match the compilation unit type (32bit) libdwarf and dwarfdump failed to work correctly (gave an error and quit). The dwarfdump -M option was not actually printing all FORMs, now it does. Thanks to Carlos Alberto Enciso for providing a test case.

libdwarf-20100204.tar.gz 1286741

Added a new libdwarf configure option --enable-oldframecol. See libdwarf/NEWS and libdwarf/libdwarf2.1.pdf for details. Dwarfdump now prints generic register names in frame printing instead of using MIPS register names as the default. Thanks to Younghyung Cho for pointing out a bug in dwarf_frame.c.

libdwarf-20091230.tar.gz 1164606

Fixed a bug in the --disable-nonshared libdwarf configure option. Removed config.guess and config.sub from the release (they never really belonged in the release). Removed debug printf from libdwarf/pro_reloc_symbolic.c Regenerated configure with autoconf 2.64 for libdwarf, dwarfdump, and dwarfdump2. A printf in gennames.c needed a cast for portability. Thanks to Zeev Tarantov for pointing out the libdwarf configure problem and the portability problem.

libdwarf-20091226.tar.gz withdrawn

Fixed the special test for a Windows root path (when configure --enable-windowspath) to do case-independent checking. Added dwarf_get_form_class() so client code can easily know how the DWARF standard classifies a form regardless of which DWARF version was used to create a compilation-unit. Added support for DW_FORM_exprloc and corrected DW_FORM_sec_offset (these new in as-yet-unreleased DWARF4 standard). Withdrawn, use libdwarf-20091230.tar.gz instead, it incorporates the fixes here.

libdwarf-20091118.tar.gz 1334298

Dwarfdump -u now works again, and -u is now tested in my regression tests. Thanks to Carlos Alberto Enciso for pointing out it was broken.

libdwarf-20091012.tar.gz 1331524

Updates some of the documentation (mm, pdf) to make it clearer. Fixes a bug in simplereader.c example code. Adds DWARF4 dwarf.h values (but no real support yet) and corrected a typo: DW_CFA_cfa_offset_extended_sf was never a correct spelling, DW_CFA_offset_extended_sf is correct. Fixed an omission in the libdwarf aranges reading code that could lead to a coredump. Those needing to recognize Windows 'root paths' like C: will want to build libdwarf with the new --enable-windowspath configure option (this lets the line table code build full paths correctly for Windows).

libdwarf-20090716.tar.gz 1318894

Small bugs in .rela handling have been fixed. In addition, when a section is relocated it is first copied to malloc space because some versions of libelf may return read-only data to the user (so applying relocations would generate a segmentation violation). Thanks to Maxim Kartashev for his help.

libdwarf-20090710.tar.gz 1317712

A new directory, dwarfexample, has a code example of how to use libdwarf to read dwarf information. Added two new functions added to libdwarf:the important one makes it easy for a consumer application to derive the applicable CU level die given any die derived in the object being read (an example of use is in libdwarf2.1.mm and libdwarf2.1.pdf. The libdwarf consumer interface now does .rela relocations automatically so more .o files are easily readable. The libdwarf consumer document has more examples. Anyone supporting reading DWARF from non-elf objects will find libdwarf.h changes require them to add a null pointer as a new member of the Dwarf_Obj_Access_Methods_s instance they create. Thanks to Daniel Gollub for his help with relocation information. One problem: If your libelf results in .debug_info (or other such dwarf section) being marked read-only in memory (and has rela relocations applicable) the attempt to apply the relocations will fail with a segv error. Oops. On the other hand, if rela relocations apply then not doing the relocations will result in dwarf data which is not correct, so you will get other errors or bad data from dwarfdump/libdwarf. We are considering possible solutions. A few cases in libdwarf/dwarf_elf_access.c say return type = whereas return type == is needed.

libdwarf-20090622.tar.gz 1304571

Libdwarf has new generated-at-libdwarf-build functions so consumer apps can print a tag-name given a tag number: dwarf_get_TAG_name(). Similarly for all the various dwarf defines. dwarfdump and dwarfdump2 now use those functions. dwarfdump and dwarfdump2 have a new -S option selecting which die(s) to print by string comparisons to attributes of each die. And when a die selected its parents print also so the context of the selected die is clear. Thanks to Carlos Alberto Enciso for proposing and helping-create -S. Removed libdwarf code that erroneously put data in the DW_FRAME_CFA_COL row (in the preferred new form that row is separate, not part of the main table) and fixed dwarfdump to handle the properly setup data. Thanks to Stoyan Shopov for providing a simple test case showing the libdwarf botch.

libdwarf-20090510.tar.gz 1291993

Dwarfdump now uses new c/c++ applications rather than awk to build some source files. Added new functions to libdwarf to allow correct handling of objects with address_size that varies by compilation unit. Added new functions to libdwarf to allow correct handling of the 'same value' and 'undefined value' pseudo-registers. See libdwarf2.1.pdf for the details (the new functions are listed in the Changes section). Thanks to Carlos Alberto Enciso for his help.

libdwarf-20090330.tar.gz 1290743

Made minor corrections to dwarfdump. Used C++ destructors to clarify lifetimes of some data with simpler code in dwarfdump2. No changes to libdwarf.

libdwarf-20090324.tar.gz 1289278

Added a new source directory to this release: dwarfdump2. It contains a revamped (to C++) dwarfdump. Existing dwarfdump remains part of the distribution! Use either dwarfdump or dwarfdump2, though I hope you can use dwarfdump2. libdwarf: fixed indentation in a few places. dwarfdump: Various formatting botches were fixed and the main section print routines moved to individual source files (moved out of print_sections.c). dwarfdump2: New, with improved error-detection and output in frame printing (a better dwarfdump). Fixed the install of dwarfdump so dwarfdump.1 will actually install. One bug in this release: about line 710 in dwarfdump.cc of dwarfdump2 should have a continue that was unfortunately omitted :

             if(should_skip_this_cu(dbg,cu_die,err)) {
                   dwarf_dealloc(dbg, cu_die, DW_DLA_DIE);
+                  continue;
             }
libdwarf-20090217.tar.gz 1132942

A small number of C99 // comments and in-line declarations are in 20090216. This removes those C99-isms (and a comment or two that did not belong). If your compiler does not care about such, 20090216 is fine to use. Thanks to Remko Troncon for informing me this happened. Thanks to gcc -pedantic for pinpointing the instances.

libdwarf-20090216.tar.gz 1132878

Added dwarfdump -C option. With -C dwarfdump reports some common extensions in warnings. Without it these common extensions are silently accepted. In addition, a couple generated dwarfdump .c .h files are now in the release, completely eliminating the need for anyone to use awk (though the Makefile can regenerate these files). Thanks to Carlos Alberto Enciso for his help.

libdwarf-20090214.tar.gz 1119572

Now works around some line-table-header compiler mistakes, and dwarfdump checking reports them. The dwarf-checking tables have been improved. It's now possible to port dwarfdump a bit more easily, as printf for Dwarf_Unsigned and the like are handled via easily modified macros in libdwarf.h (as opposed to lots of fiddling with printf lines directly). Configure was regenerated with the latest config.guess and config.sub. Thanks to Remko Troncon, Carlos Alberto Enciso, and shihhuangti for helpful comments and test cases.

libdwarf-20081231.tar.gz 1108723

The .debug_ranges section was not handled by libdwarf. Now there are libdwarf interfaces and dwarfdump prints the section data. Thanks to shihhuangti for pointing out the omission.

libdwarf-20081119.tar.gz 1102362

A compiler was using DW_FORM_ref_addr form with a DW_AT_sibling attribute, which was a surprise. Now we handle it and with dwarfdump-ka we check the offset for correctness. Added the -M option to dwarfdump which adds the name of each attribute's form to the existing output. Thanks to Davide Parodi for mentioning the DW_AT_sibling problem and providing a non-proprietary test case.

libdwarf-20081013.tar.gz 1099626

Libdwarf gave DW_DLE_CIE_RET_ADDR_REG_ERROR when it should not have gotten an error at all. Thanks to shihhuangti for providing an executable that showed the libdwarf error.

libdwarf-20081012.tar.gz 1099664

Now a dwarf-64 bug in gcc is worked-around properly in libdwarf and the warning from dwarfdump is more correctly phrased. A new dwarfdump configuration '-x abi=ppc' provides specific sizing and names for power pc registers. Thanks to Phil Mucci for providing a test case.

libdwarf-20080929.tar.gz 1097528

Fixed: Mixing eh and non-eh frame sections access could result in a bogus error-return. Documented that dwarf_get_fde_n() and dwarf_get_fde_at_pc() require a real (non-empty) fde table. That was (sort of) always true, but was not documented. Fixed bogus error code in reading line tables. Added a warning (removing error return) when there are bytes of 'unused data' after a line table prolog (it's strange but legal when done properly in DWARF).

libdwarf-20080818.tar.gz 1091066

Minor improvements: dwarfdump print_reloc.c referred to sym_data_entry_count in one place where sym_data_64_entry_count should have been tested. DW_DLA_PUBTYPE_CONTEXT was a typo, DW_DLE_PUBTYPE_CONTEXT was intended. Fixed indentation and removed some tabs in favor of spaces (in five files). A couple files had a couple lines with CR-LF line endings, the CR is now gone. Corrected minor typographical errors in libdwarf2p.1.mm and libdwarf2.1.mm and regenerated the pdfs.

libdwarf-20080615.tar.gz 1092542

Removed __SGI_FAST_LIBELF code, no one could use it anyway. Fixed an off-by-one in dwarfdump which could reference off the end of an array in a specific circumstance and verify string table index refers to inside the table when printing relocations. Corrected return code from libdwarf when there is no dwarf information. Thanks to Carlos Alberto Enciso for noticing the bugs. Fixed indentation and removed some tabs in favor of spaces (in a few files).

libdwarf-20080613.tar.gz ---

Withdrawn. A typo meant the main directory extracted from the tarball had the wrong name (it had 2006 in the name, not 2008). See libdwarf-20080615.tar.gz for the corrected tarfile.

libdwarf-20080409.tar.gz 1091778

A giant a.out exposed an inflexible (slow) handling of abbreviations in libdwarf as well as showing that one (internal) field was too small to accommodate over 64K abbreviations in one compilation unit. The relevant hash table adapts now and the field is 'large enough'. Added -H and -n options to dwarfdump. Added a dwarfdump -ka new check for correctness.

libdwarf-20080228.tar.gz 1086598

This changes the libdwarf-internal implementation of reading libelf so that the reader is not directly tied to libelf or even elf. Meaning a libdwarf can be built that reads other object file types or that uses some library other than libelf to do the reading (subject only to simple constraints, see libdwarf.h). Thanks to Josh Fuhs for designing and implementing the object-file-reader revisions.

libdwarf-20080208.tar.gz 1079230

Due to a typo, calling _dwarf_fde_section_offset() (a interface which is still supported) would lead to an infinite loop in libdwarf-20071209 and libdwarf-20080125. The libdwarf producer forms code now allows more of the newer attributes (so is more complete). Alloca is no longer used anywhere (it was really only used one place). The libdwarf producer code controlling the offset-size is more sensible: standard DWARF (32 bit offsets) is the default, use configure --enable-dwarf-format-sgi-irix to get IRIX 64bit offsets. See the libdwarf README and libdwarf2p.1.pdf for details. Thanks to Carlos Alberto Enciso and Melanie Zumwalde for noticing some of these errors.

libdwarf-20080125.tar.gz 1074859

In the producer library code dwarf_die_link() is now O(1) where it was O(N) before. Thanks to Daniel Gollub for finding this performance improvement. dwarf_die_link() now back-links siblings (in its internal lists) correctly. The back link bug had no (known) effect on dwarf generated by libdwarf.

libdwarf-20071209.tar.gz 1073568

Renamed 4 functions so they are now exported by libdwarf as dwarf_*. dwarf_fde_section_offset(), dwarf_cie_section_offset(), dwarf_print_lines(), and dwarf_ld_sort_lines() are the new names. The old _dwarf_* names are still supported in libdwarf.h but anyone building a shared library could choose to export only dwarf_* names and dwarfdump will now compile and link successfully with that shared library. The changes in libdwarf-20071208.tar.gz are incorporated in this release.

libdwarf-20071208.tar.gz withdrawn

Added acceptance of .eh_frame S augmentation. Updated config.guess config.sub to latest (2006-11-15). Added configure tests and some code in dwarf_incl.h and globals.h to define _GNU_SOURCE so that it will all compile with recent libelf.h use of off64_t (yet still compile with earlier libelf.h). Regenerated configure. Withdrawn in favor of the December 9 version above. Two nearly identical releases a single day apart seemed silly.

libdwarf-20071016.tar.gz 1069958

Two fixes. dwarf_siblingof() could try to access a byte past the end of an Elf section leading to a coredump. The dwarf macro reading code could (in the DWARF_SIMPLE_MALLOC case only) allocate and free memory inconsistently leading to malloc arena corruption. Thanks to Cristi Vlasceanu for providing a tiny testcase showing the problems.

libdwarf-20071015.tar.gz 1069600

The special build macro DWARF_SIMPLE_MALLOC was incorrectly implemented (now fixed): it could lead builds employing that macro to coredump in libdwarf. Now (just before exit) dwarfdump free()s some space it previously left mallocd.

libdwarf-20070904.tar.gz 1068927

Updated FSF address everywhere. Added qualifier for DWARF4 DW_AT_high_pc where applicable in dwarfdump output. Deleted 2 files which were never used. Added documentation of new producer functions in libdwarf.

libdwarf-20070703.tar.gz 1064669

Adding new libdwarf function dwarf_get_loclist_entry() to extract CFA val_expression bytes usefully. dwarfdump now uses that info to print those expression bytes with -v. Corrected incorrect output new in 20070702.

libdwarf-20070702.tar.gz withdrawn

Withdrawn: see newer release. Adding -R option to dwarfdump: a 'generic' register set for frames which prints registers as r<n> ('r35' for example) and allows register numbers up to 1000.

libdwarf-20070701.tar.gz 1060269

DW_CFA_val_expression was handled wrong in libdwarf leading eventually to an invalid register number reading a GNU .eh_frame section (dwarfdump reported an error). Once again thanks to Cristian Vlasceanu for noticing libdwarf was broken and for providing a test case.

libdwarf-20070525.tar.gz 1059960

Now the documentation is in pdf form (instead of postscript) as most people expect documents to be pdf. Corrected libdwarf and dwarfdump bugs that prevented dumping GNU eh_frame built with gcc 4.1.2. Thanks to Cristian Vlasceanu for noticing libdwarf was broken and for providing a test case.

libdwarf-20070508.tar.gz 934034

Incorporates Sun Microsystems additions including cleanups of the producer code so it no longer leaks memory and the -G option to dwarfdump. Thanks to Chris Quenelle for his help. Minor cleanups to the producer library document and the copyright documents (no change in terms is intended).

libdwarf-20070412.tar.gz 907541

Lists Sun Microsystems extensions (dwarf.h), so dwarfdump on Sun executables shows readable output. Thanks to Chris Quenelle for his help. The old sgi-specific -mm-to-ps document build now uses groff instead (regenerated documents with groff). Increased the static size of the dwarfdump die-stack (dwarfdump now exits with an error if the stack overflows).

libdwarf-20070223.tar.gz 902453

Some formatting was a bit off because of macros without terminating semicolons. Changed all the libdwarf/dwarf_util.h macros so now all uses require terminating semicolons and re-indented libdwarf. Fixed an output bug in dwarfdump frame output (was missing a newline in some cases).

libdwarf-20070220.tar.gz 902042

dwarf_get_macro_details() was leaking memory and had thread-unfriendly static data. libdwarf/README has words about thread safety now. The dwarf_frame printing code was off-by-one so it printed some bytes wrong in val-expressions.

libdwarf-20070209.tar.gz 886341

dwarf_srclines() was leaking memory.

libdwarf-20061206.tar.gz 886388

dwarf_frame.c _dwarf_exec_frame_instr() was still using fixed register table sizes. Now uses run-time sizing. Thanks to Peter Lloyd for noticing a <= where a < was wanted in that routine.

libdwarf-20061108.tar.gz 885908

Previously, producer code would coredump if dwarf_add_expr_gen() called with DW_OP_deref_size, DW_OP_xderef_size, or DW_OP_pick as the operator.

libdwarf-20060925.tar.gz 893251

An unusual sequence of dwarf_next_cu_header() calls could result in dwarf_offdie() returning the wrong die. The problem is not visible in dwarfdump output as dwarfdump does not use a call sequence that could show the problem.

libdwarf-20060614.tar.gz 892429

dwarfdump: Minor cleanup of gnu eh_frame augmentation data output. libdwarf: Correct the handling of DW_EH_PE_pcrel flag in code dealing with gnu eh_frame z augmentation (errors were noticed in .eh_frame output by libdwarf/dwarfdump for x86_64). The 'clean' rule of the Makefile now removes libdwarf.so if libdwarf.so is present in the build directory.

libdwarf-20060612.tar.gz 878865

dwarfdump: When (as for DW_FORM_data1) the form does not indicate signedness and dwarfdump does not keep track of enough context to determine signedness and the value is such the signedness is unclear, print the value as unsigned followed by signed. An example is "182(as signed = -74)".

libdwarf-20060421.tar.gz 877722

libdwarf: fixed bad initialization in dwarf_get_fde_info_for_all_regs(). Thanks to Cristi Vlasceanu for noticing it was broken.

libdwarf-20060419.tar.gz 877465

dwarfdump: added fclose() on configuration file. dwarfdump and libdwarf: all .c files now formatted with GNU indent default formatting.

libdwarf-20060418.tar.gz 878784

dwarfdump (and libdwarf frame reader) are now configurable at run time to print frame data appropriately. So -f and -F will print register names appropriate for the ABI, and handle large or small register sets sensibly. (A single dwarfdump executable can print any number of different ABIs frame data appropriately without recompiling libdwarf or dwarfdump -- and you can add your favorite ABI/instruction set into a configuration file.) See -x abi=<name> and the dwarfdump.conf file to get started. New frame interfaces are in libdwarf. See libdwarf2.1.ps (postscript) for details on the new DWARF3 libdwarf frame interfaces.

libdwarf-20060327.tar.gz 844193

Initializes file_entry_count in dwarf_line.c now.

libdwarf-20060324.tar.gz 844113

Corrects line table problems handling gcc3/gcc4 output. Refactored line-table-header reading into a single routine. Fixed typo that made access to .eh_frame impossible. 844110 byte version of this file was missing dwarf.h fixes (nothing substantive, just moving things for human readers). 844149 byte version is correct but rcs version strings not all updated. 844113 byte version is the 'final' version. file_entry_count in dwarf_line.c is uninitialized (BUG!). Initialize it to 0 for correct operation. Thanks to Mikael Vidstedt for noticing. WITHDRAWN.

libdwarf-20060317.tar.gz 841545

Now handles gcc's DWARF3 and eh_frame sensibly. Parts are untested as I have no test cases for various DWARF3 constructs.

libdwarf-20060308.tar.gz 834474

The crucial dwarf_child() code could dereference a byte off the end of a CU. Fixed. Refactored .debug_frame code for clarity, performance, elimination of duplicate code, and preparing to handle GNU eh_frame (support for latest eh_frame not yet present). Moved some sgi/irix only functions to separate source files so most apps will get fewer bytes of libdwarf linked in. If you have 834453 byte version, it is broken, delete it: revised to 834474 byte version.

libdwarf-20060224.tar.gz 827906

Added dwarf_line_srcfileno() function and documented it.

libdwarf-20051201.tar.gz 826422

Corrected validity-checking tables and made creation of internal tables more robust for dwarfdump -k.

libdwarf-20051128.tar.gz 824714

Corrected dwarf.h (per public review document). Added DWARF3 tags, attrs to validity-checking tables in dwarfdump (-k? options). WITHDRAWN. Bugs in -k output.

libdwarf-20051108.tar.gz 822758

Removed non-standard malloc.h includes (stdlib.h suffices). Corrected a couple dwarf3 omissions in dwarf.h.

libdwarf-20051024.tar.gz 822665

Added in the new DWARF3 codes specified in the DWARF3 public review document just published on the free standards website.

libdwarf-20051003.tar.gz 821184

Fixed an incompatibility: the July/August versions did not support exactly the same dealloc code as earlier versions for SGI-only dwarf sections like .debug_weaks. Full compatibility is restored, and the new more-complete-dealloc interfaces from July are kept.

libdwarf-20050801.tar.gz 820895

dwarfdump could coredump due to fixed length buffer overrun for location list printing. Buffer now expands as needed. And dwarfdump sprintf calls changed to snprintf for further safety.

libdwarf-20050722.tar.gz 819084

New deallocation routines for dwarf_srclines() and all the pubnames-like sections. New (optional at library-compile) full checking of dealloc calls. New support for .debug_pubtypes section (DWARF 3 section). All deallocation code verified, so all libdwarf memory leaks plugged (but client code must change to get full dealloc properly). dwarf_formstring() documentation was wrong: no dealloc required or allowed (documentation fixed).

libdwarf-20050714.tar.gz 807304

[This release not recommended. Certain memory leaks have been fixed. Use 20050722 instead]

libdwarf-20050503.tar.gz 801031

Moved common code into subroutine (for .debug_pubnames and like sections). Added checks for new gcc z* .eh_frame augmentation strings (which we don't yet handle, but do recognize now). Added -F flag for .eh_frame (making its handling a distinct flag (from -f)).

libdwarf-20050318.tar.gz 794541

Corrected handling of .eh_frame and .debug_macro. Radically changed the formatting of .debug_macro to make it more complete. Still lacking support for dwarf3 frame operations.

libdwarf-20050216.tar.gz 792579

Beginning of support for dwarf3 reading. Added #elif in pro_incl.h so another platform builds out-of-the-box, even missing elf.h. (The library remains firmly Elf specific though. In this specific added allowance libelf.h fills in the types.)

libdwarf-20041122.tar.gz 792298

Updated configury for debian/mips.

libdwarf20041027.tar.gz 791001

Updated dwarf.h, adding #define for HP and GNU attributes/tags.

libdwarf20041026.tar.gz 790070

Regenerate configure config.h.in (using autoconf 2.58). Update config.guess config.sub.

libdwarf20041011.tar.gz 785822

Sets ru_offset (libdwarf) now when it was overlooked before. Avoids recursion in favor of iteration (dwarfdump) on siblings.

libdwarf20040507.tar.gz 785289

dwarfdump -k a would coredump dwarfdump: getopt arg list was wrong.

libdwarf20040315.tar.gz 785268

For DW_CFA_def_cfa_register, the dwarf reader was setting more than just the register: was zeroing offset. Now it just sets the register value.

libdwarf20040203.tar.gz 785224

If compiled with Dwarf_Word 64 bits, upper bits of values from two 'optimization' macros were erroneous. Revised the macros to call already existing routines.

libdwarf20040115.tar.gz 785181

Changed from bzero() to memset() calls for portability. Removed #include of bstring.h, no longer needed. Added check for alloca.h in configure. Temporarily unavailable.

libdwarf20040102.tar.gz 784278

Updated configure scripts and added README hints. Recent RedHat and Debian don't ship with libelf.h giving folks trouble. And anyway the configure stuff was really old/obsolete.

libdwarf20031230.tar.gz 733009

Corrected typo in comment, fixed botch in .eh_frame section recognition.

libdwarf20031006.tar.gz 732757

Applied indent(1) to recently changed files.

libdwarf20031002.tar.gz 733758

Adds support for the .debug_loc section. DW_FORM_indirect support fixed. Allows padding at the end of .debug_pubnames .debug_aranges and the like (the data has a 'terminator' and the header has a length, and if the length allows a bit of padding after the terminator that's ok).

libdwarf2003Apr06.tar.gz 717884

Now delays loading sections till really required. Supporting the DWARF2 Debugging Information Format produced by a variety of compilers, with some limited support for some aspects of DWARF3.

libdwarf2002Nov22.tar.gz 722257 Adds support for printing macro sections. Corrects spellings of a couple TAGs. Adds UPC (Universal Parallel C) user-space defines. The awk scripts in dwarfdump now allow multiple TAG names with the same value to be handled: the first such encountered is taken as the name dwarfdump uses. For example, DW_TAG_template_type_parameter and DW_TAG_template_type_param were both used in the DWARF2 spec, and now dwarf.h allows both spellings by having two #defines with the same value (DWARF3 specifies that DW_TAG_template_type_parameter is the correct spelling).
libdwarf2002Oct23.tar.gz 721083 Bug fixes (to consumer and producer libraries) plus making dwarf_get_str() in the library work sensibly (revision of the functional interface).
libdwarf2002April28.tar.gz 717884 Many bug fixes...
libdwarf2001Aug29.tar.gz 721452 Early release with dwarfdump.
libdwarf2000Jun12.tar.gz 713543 Early release with dwarfdump.
libdwarf2001Jun07.tar.gz 716508 Early release with dwarfdump.
libdwarf2001May23.tar.gz 716027 Early release with dwarfdump.
libdwarf2000Jul25.tar.gz 712694 The source changed from original SGI release terms to LGPL terms (standard GPL/LGPL but naming SGI as copyright holder) in April 2000, so this is the first public release (that I know of/have a copy of) with the new terms.
libdwarf1999Dec14.tar.gz 712252 Early release with dwarfdump.
1999 ? First libdwarf with configure script, late June 1999.
1999 ? First release including dwarfdump sometime after March 1999.
1994 ? Initial release of libdwarf (no dwarfdump, no configure script), likely was in June 1994. The original copyright terms were unique to SGI and required certain acknowledgements in documentation by organizations shipping libdwarf.

For a few obsolete releases of libdwarf see ftp://ftp.sgi.com/sgi/dev/davea. Copies of the libdwarf releases on ftp.sgi.com are available in the list above.

Another Document

A comparison of DWARF3 with DWARF2 updated December 1, 2005, titled "DWARF3: Better than DWARF2" (pdf, 81736 bytes) might be of historical interest. The source code is available here written in lyx ( using lyx as an experiment in evaluating the lyx document preparation system).

[top]

Testing

Every release of libdwarf/dwarfdump is tested with many options and option-combinations. There is no real reason libdwarf/dwarfdump users should need to redo this testing work. However, if you do wish to try running the regression tests, you will find them in git in sourceforge via anonymous access "git clone git://libdwarf.git.sourceforge.net/gitroot/libdwarf/regressiontests". See the file README.txt in the base directory of the tests for an overview of the test process. We no longer provide a tar file of the regression tests as it does not seem useful. The regression tests are updated with every libdwarf release.

Additional tests (simple object files or shared-objects or executables) are accepted here should you wish to submit such, but the goal is to add tests that represent previously-untested aspects of DWARF/libdwarf, not to duplicate existing tests. Smallish object files are preferred. No source need be provided. The submitter has to be sure, and state, that releasing the objects here is appropriate.

Nothing in libdwarf looks at very many sections of an Elf file: the other section contents can be zeroed out without affecting the object use for testing libdwarf (see the directory named 'zero' in the testing distribution for a convenient byte-zeroing helper application in C++ source). Sections like .text and .data (and closely related sections) are of no value for testing libdwarf. It may be that otherwise-proprietary objects can be released for use in this test suite once the instruction and data sections are zeroed out.

[top]