		      ToDo list for elfutils                      -*-outline-*-
                      ----------------------

Time-stamp: <2008-02-03 14:15:41 drepper>

* mkinstalldirs

  Remove everywhere.  Use mkdir -p.

* libelf:

** verify section

   Currently the elf_update function trusts the user blindly if the
   ELF_F_LAYOUT flag is set.  This is OK if the data is prepared by a
   ELF_C_NULL call but not if the user prepared the data herself

** break out archive handling from elf_begin

   The handling of archives (especially of the symbol tables) must be
   broken out of elf_begin.  There are several different forms of
   archives and only when having the archive handling separately this
   remains maintainable.


* libdw

** More memory access checks needed

   All accesses to the debug sections should make sure the offsets are
   valid.  This is currently especially a problem with leb128 accesses.

** Low level macro information operations

   in 5.11.3 are not implemented.  gcc currently does not emit this
   information so I cannot test it.

** Rename dwarf_getabbrev


* nm:

** add demangler support

   Use demangler from libiberty.

** add support to read debugging symbols

   Implement -l option for BSD and POSIX format


* strip:

** support SHT_SYMTAB_SHNDX

   should be removed if not needed anymore

* ld:

** sanity check .rel sh_info content

   the sh_info of all .rel sections with the same name must point to
   sections which also have the same name

** use ld.so.conf

   to locate shared libraries also use /etc/ld.so.conf

** handle object files for different architectures

   ld.so is expected to ignore object files for different architectures and
   continue looking for a matching file (e.g., ignore 32-bit binaries on
   64-bit platforms and vice versa).  We probably need the same in ld.

** reuse after elf_end

   Some files are closed using elf_end.  They are removed from memory only
   if no reference is left (especially for archives this is a problem).
   The old mapping should be reused in that case.  The problem is worse
   for files which are not mapped read-only (archives again).

** size for STT_SECTION entries

   The STT_SECTION entries have zero for the size but can easily get
   the size of the section.

** .eh_frame_hdr

   Not implemented at all in the moment except for recognition of the option
   itself.

* elflint

** additional checks

   1st GOT entry == _DYNAMIC

   check versioning info:

     always BASE in verdef
     sh_size/sh_entsize matches last offset != 0

   check whether any relocation is for a merge-able section

   check TLS relocation depencies

*** for x86

    check that R_386_TLS_GD is followed by R_386_PLT32 for __tls_get_addr

** relax

   prelink generated files

* elfcmp

** treat relocation sections special

   Differences in the relocation sections can be ignored if all
   the same symbols with the same targets are present and the order
   of overlapping relocations doesn't change.  There really never
   should be overlapping relocations but who knows.

* mcs

  Sun has it.  Can modify sections which are not in segments.

     -a string
           Append string to the comment section of the ELF object
           files. If  string contains embedded blanks, it must be
           enclosed in quotation marks.

     -c    Compress the contents of the comment  section  of  the
           ELF  object  files. All duplicate entries are removed.
           The ordering of the  remaining  entries  is  not  dis-
           turbed.

     -d    Delete the contents of the comment  section  from  the
           ELF  object  files. The section header for the comment
           section is also removed.

     -n name
           Specify the name of the comment section to  access  if
           other  than  .comment.  By default, mcs deals with the
           section named .comment. This option  can  be  used  to
           specify  another  section.  mcs  can  take multiple -n
           options to allow for specification of   multiple  sec-
           tion comments.

     -p    Print the contents of the comment section on the stan-
           dard  output.  Each  section  printed is tagged by the
           name of the file from which it  was  extracted,  using
           the  format  file[member_name]:  for archive files and
           file:  for other files.

     -V    Print on standard error the version number of mcs.

Local Variables:
eval:(hide-body)
End:
