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

Time-stamp: <2003-08-07 12:52:49 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

   if TEXTREL check whether any relocation touches RO segment

   if TEXTREL not set check that no relocation touches RO segment

   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

** possibly missing tests

   at most one extended section index table for a symtab

   no extended section index table != ET_REL

   no extended section index table for SHT_DYNSYM


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