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

Time-stamp: <2005-08-03 20:38:01 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.


* libdwarf

** Should we do more error checking?

   Most functions don't check whether they get a NULL value passed for
   a pointer argument.  It could be argued that this is OK since it's
   a bug inthe program.  But perhaps one could catch the case and return
   an error which would allow the program using libdwarf to have fewer
   places with error checking.

** 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

** dwarf_loclist()

   This function and its interface seem to be misdesigned.  The specification
   is unclear and its changed between v2 and v2.1.  Other implementation
   implement even different behavior.


* 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.

* 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

** relax

   prelink generated files


* 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:
