summaryrefslogtreecommitdiff
path: root/README
diff options
context:
space:
mode:
Diffstat (limited to 'README')
-rw-r--r--README332
1 files changed, 332 insertions, 0 deletions
diff --git a/README b/README
new file mode 100644
index 0000000..b4f9d95
--- /dev/null
+++ b/README
@@ -0,0 +1,332 @@
+This is the public release of libelf-0.8.13, a free ELF object
+file access library. If you have problems with applications
+that use libelf and work with the commercial (SVR4, Solaris)
+version but not with this one, please contact me.
+
+IMPORTANT NOTE: If you have libelf-0.5.2 installed, you probably
+have a file .../include/elf.h that contains the single line
+``#include <libelf/elf.h>''. REMOVE THIS FILE BEFORE YOU RUN
+configure.
+
+Installation is straightforward - the package is autoconf'ed. Just do
+``cd libelf-0.8.13; ./configure; make; make install''. Header files
+will be installed in .../include/libelf/. If your system does not
+provide its own versions of libelf.h, nlist.h or gelf.h, ``make
+install'' will add the missing headers. If you prefer not to have
+these files installed in /usr/include, use ``--disable-compat'' and
+add ``-I /usr/include/libelf'' to your CFLAGS when compiling
+libelf-based programs.
+
+Note to distribution makers: You can install libelf in a separate root
+hierarchy by using the command ``make instroot=/my/root install''.
+You should also use the ``--enable-compat'' configure option in that
+case, or run ``make instroot=/my/root install-compat'' manually, to
+install all the required header files.
+
+If you are running Linux with libc 5.* as the default C library,
+and you plan to use the 64-bit functions, you must either use
+``-I.../include/libelf'', or remove /usr/include/libelf.h and use
+``--enable-compat'' when running configure. Libc 6.* (aka glibc2)
+doesn't have its own <libelf.h>, <nlist.h> or <gelf.h>.
+
+You need an ANSI/ISO C compiler to build libelf. Gcc is optimal.
+
+On some systems (in particular, Solaris and all variants of Linux),
+``make'' will try to build a shared library. If you run into problems
+on your system, please pass ``--disable-shared'' to configure.
+If you build a shared library and want it to be installed as
+``libelf-0.8.13.so'' rather than ``libelf.so.0.8.13'', please use
+``./configure --enable-gnu-names''. Other files, e.g. ``libelf.so'' and
+``libelf.so.0'' are NOT affected.
+
+Another configure option, ``--enable-debug'', adds debugging code to
+libelf; if you don't run into problems, you will probably not need it.
+
+When creating an ELF shared library, it is possible to add references
+to other shared libraries in the DYNAMIC section of the resulting
+file. The make variable DEPSHLIBS contains a list of libraries to add.
+It is set to ``-lc'' on Linux systems, and empty otherwise. To
+override this setting, use something like ``make DEPSHLIBS="-la -lb"''.
+For Linux, `-lc' is included automagically.
+
+NLS is available and enabled by default. To turn it off, pass the
+``--disable-nls'' option to configure.
+
+Libelf can use gettext or catgets for accessing message
+catalogs. If gettext is available AND is part of libc (i.e. not
+in a separate library), it will be used. Otherwise, configure
+will look for catgets. If you have gettext in a separate
+library and want to use it, you should pass the library's name
+to configure, e.g. ``LIBS=-lintl ./configure''. Note that you
+MUST link your libelf-based applications with -lintl then,
+which is probably not what you want, or change the DEPSHLIBS variable
+described above (in case you're building a shared library).
+
+If you have GNU gettext 0.10 installed on your system, and if GNU gettext
+runs on top of the catgets interface (rather old Linux systems, using
+libc5), configure will refuse to use it and use catgets instead. If you
+absolutely want to use GNU gettext, go ahead and rebuild it (which is
+IMHO a good idea in general in this case):
+
+ cd .../gettext-0.10
+ ac_cv_func_catgets=no ac_cv_func_gettext=no ./configure
+ make
+ make install
+
+After that, return to the libelf build directory, remove
+config.cache, and start over.
+
+*** Large File Support (LFS) applications ***
+
+Some 32-bit systems support files that are larger than the address space
+of the architecture. On these, the `off_t' data type may have 32 or
+64 bits, depending on the API you choose. Since off_t is also part of
+the libelf API, in particular the Elf_Data and Elf_Arhdr structures,
+an application compiled with large file support will need a version of
+libelf that has also been compiled with LFS; otherwise, it won't work
+correctly. Similarly, a program compiled without LFS needs a library
+compiled without LFS.
+
+Note that libelf is currently unable to process large files on 32-bit
+architectures, whether you compile it for LFS or not, for the simple
+reason that the files won't fit into the processes' address space.
+Therefore, libelf is compiled without LFS by default. It can of course
+read and write ELF files for 64-bit architectures, but they will be
+limited in length on a 32-bit system.
+
+You may compile libelf with large file support by setting CPPFLAGS at
+configuration time:
+
+ CPPFLAGS=`getconf LFS_CFLAGS` ./configure
+
+But I really, really recommend you don't, because it breaks binary
+compatibility with existing libelf based applications.
+
+*** 64-bit support ***
+
+Starting with libelf-0.7.0, libelf also supports 64-bit ELF files.
+This is enabled by default unless your system (or your compiler) does
+not support 64-bit integers, or lacks 64-bit declarations in <elf.h>.
+If you have problems building with 64-bit support, please do
+
+ ./configure --disable-elf64
+
+for the moment, and contact me. Please note that I haven't tested 64-bit
+support much. There are still some unresolved problems, e.g. IRIX
+uses different Elf64_Rel and Elf64_Rela structures (they replaced the
+r_info member), and the enumeration values for Elf_Type differ from
+the commercial (SVR4) implementation of libelf - they broke binary
+compatibility for no good reason, and I'm not willing to follow their
+footsteps. The result is that libelf-0.7.* ist upward compatible with
+libelf-0.6.4 (as it should be) but INCOMPATIBLE WITH SVR4 LIBELF. If you
+have both versions installed, you'd better make sure that you link with
+the library that matches the <libelf.h> you're #include'ing.
+
+*** Symbol Versioning ***
+
+Libelf >= 0.8.0 supports the data structures and definitions used for
+symbol versioning on Solaris and Linux, in particular, the Elfxx_Verdef,
+Elfxx_Verdaux, Elfxx_Verneed, Elfxx_Vernaux and Elfxx_Versym structures
+and the SHT_XXX_verdef, SHT_XXX_verneed and SHT_XXX_versym section types
+(where `xx' is either `32' or `64', and `XXX' is either `SUNW' or `GNU').
+Libelf now translates versioning sections to/from their external
+representation properly (earlier versions left them in `raw' format,
+with the data type set to ELF_T_BYTE). This may cause problems on
+systems which use the same (OS-specific) section types for different
+purposes. The configure program tries to figure out if your OS uses
+versioning; if that check fails, you can use
+
+ ./configure --disable-versioning
+
+to turn off versioning translation support.
+
+*** W32 Support ***
+
+There is now some support for building on W32 systems (requires Microsoft
+VC++). In order to build a W32 DLL, cd into the `lib' subdirectory, edit
+build.bat if necessary (it needs the path to your compiler binaries) and
+run it. If you're lucky, libelf.dll and the import/export libraries will
+be built. If not, please drop me a line.
+
+I tested it on XP Pro (SP2), using VC++ 2005 Express Edition.
+Apparently, Visual Studio .NET 2003 works fine as well.
+
+Various notes regarding the W32 port:
+
+ - When you open() an ELF file, remember to use the O_BINARY flag.
+ - You may have to add /MD to the linker command line.
+
+*** Missing things ***
+
+ * There is no documentation. You can use the Solaris
+ manpages instead (available at http://docs.sun.com/).
+ The ELF file format is described in several places;
+ among them Suns "Linker and Libraries Guide" and the
+ "System V Application Binary Interface" documents;
+ http://www.caldera.com/developer/devspecs/gabi41.pdf and
+ http://www.caldera.com/developer/gabi/ are probably good
+ starting points. Processor-specific documentation is spread
+ across a number of `Processor Supplement' documents, one
+ for each architecture; you'll have to use a search engine to
+ find them.
+
+ * The COFF file format is not understood. This is so obsolete
+ that it will probably never be implemented.
+
+ * nlist(3) is incomplete; the n_type and n_sclass
+ members of struct nl are set to zero even if type
+ (that is, debug) information is available.
+
+ * Libelf does not translate Solaris' `Move' and `Syminfo'
+ sections. You can read them using elf_getdata(), but you'll
+ only get raw (untranslated) bytes.
+
+Changes since 0.8.12:
+
+ * New function elf_getaroff().
+
+ * Build fixes.
+
+Changes since 0.8.11:
+
+ * Due to some unfortunate confusion, the elf_getphnum(),
+ elf_getshnum() and elf_getshstrndx() are not compatible
+ between libelf implementations. Therefore, the developers
+ decided to replace them with new functions: elf_getphdrnum(),
+ elf_getshdrnum() and elf_getshdrstrndx(), which will always
+ return -1 on failure and 0 on success. Code using the old
+ interface should be upgraded to increase portability.
+
+Changes since 0.8.10:
+
+ * Fixed a bug in elf_rawfile().
+ * If you use ELF_F_LAYOUT together with ELF_F_LAYOUT_OVERLAP,
+ elf_update() will now tolerate overlapping sections.
+
+Changes since 0.8.9:
+
+ * Ported to QNX Neutrino.
+ * Fixed Windows build errors.
+ * Parallel (make -j) installation should work now.
+
+ * It's now possible to enable and disable select sanity checks
+ libelf performs. Currently, this affects the "NUL terminated
+ string table entry" check performed in elf_strptr(). By
+ default, the function will return an error if the string
+ requested is not properly terminated - because some
+ applications might dump core otherwise. If you configure
+ libelf with `--disable-sanity-checks', however, the check
+ (and, in the future, probably others as well) is disabled
+ by default. You can still turn it on and off at runtime by
+ setting the LIBELF_SANITY_CHECKS environment variable to
+ an integer value:
+
+ # disable all sanity checks
+ export LIBELF_SANITY_CHECKS=0
+
+ # enable all sanity checks
+ export LIBELF_SANITY_CHECKS=-1
+
+ Each bit of the value corresponds to a particular check,
+ so you could use LIBELF_SANITY_CHECKS=1 to enable only
+ the elf_strptr() check. You may also use a value in hex
+ (0x...) or octal (0...) format.
+
+Changes since 0.8.8:
+
+ * Improved translator for symbol versioning sections.
+ * The W32 library is now built in the `lib' subdirectory.
+ * Windows DLLs should work now.
+
+Changes since 0.8.6:
+
+ * added elf_getphnum().
+ * added elf_getshnum().
+ * added elf_getshstrndx().
+ * added elfx_update_shstrndx().
+ * handle interrupted reads/writes more gracefully.
+ * added (partial) support for unusual e_[ps]hentsize values.
+ * fixed the bugs introduced in 0.8.7.
+
+Changes since 0.8.5:
+
+ * added W32 support.
+ * added workaround for alignment errors in archive members.
+ * my email address has changed again ;)
+
+Changes since 0.8.4:
+
+ * elf_strptr() should now work more safely with fragmented
+ or badly formatted string tables.
+
+Changes since 0.8.3:
+
+ * Fixed a bug in elf_update() that was introduced in 0.8.3.
+
+Changes since 0.8.2:
+
+ * Should compile on MacOSX now.
+
+ * Can read and write files with more than 65280 sections
+
+ * Tries to handle 64-bit ELF files that use 8-byte hash table
+ entries. In particular, libelf tries to guess the data type in
+ elf_getdata(), and doesn't override sh_entsize in elf_update()
+ any longer. If you want the library to pick the entry size,
+ you must set its value to 0 before you call elf_update().
+
+ * No longer dumps core in elf_update() when a versioning section
+ has no data. Instead, it returns an error message. Note that
+ you're supposed to provide a valid d_buf for any section, unless
+ it's empty or has SHT_NOBITS type.
+
+ * Building a shared library is now the default (if supported).
+
+Changes since 0.8.0:
+
+ * Corrected typo in lib/{32,64}.xlatetof.c that sometimes
+ caused a compilation failure.
+
+ * Use open(name, O_RDONLY|O_BINARY) in lib/nlist.c.
+
+Changes since 0.7.0:
+
+ * I implemented the gelf_* interface, as found on Solaris.
+ I don't know whether it's compatible -- the Solaris manpage
+ isn't very specific, so I had to guess return values etc. in
+ some cases.
+
+ * Added elf{32,64}_checksum (supposed to be compatible with
+ Solaris).
+
+ * Added symbol versioning support.
+
+Changes since 0.6.4:
+
+ * Fixed configure for IRIX systems
+ * Added check for truncated archive members
+ * Added check for misaligned SHDR/PHDR tables
+ * Support for building libelf together with GNU libc
+ * Added elf_memory(3)
+ * Added 64-bit support
+
+Changes since 0.5.2:
+
+ * some bug fixes
+ * mmap support
+ * new directory layout
+ * There is a new function, elf_delscn(), that deletes
+ a section from an ELF file. It also adjusts the
+ sh_link and sh_info members in the section header
+ table, if (and ONLY if) the ELF standard indicates
+ that these values are section indices. References
+ to the deleted section will be cleared, so be careful.
+ * my email address has changed ;)
+
+Where to get libelf:
+
+ ftp://ftp.ibiblio.org/pub/Linux/libs/
+ http://www.mr511.de/software/
+
+Michael "Tired" Riepe
+<libelf@mr511.de>