UPX TODO list. Last updated 2003-08-5.


IMPORTANT PROBLEMS THAT SHOULD BE FIXED SOON:

- win32/pe is currently broken

- win32/pe should add support for PEDIR_LOADCONF (Visual C 7.1 generated exes)

- win32/pe should reliably detect .NET exes and somehow deal with them

- vmlinuz/386 cannot handle current 2.[56].xx kernels ?
  (update: this seems to be fixed now - need more testing)

- atari/tos is incompatible with upx 1.2 ???



OTHER:

- check all <const_cast> to make sure they are not invalid

- throwNotCompressible() is not a real error, so make the output nicer
  (info: bla bla). Also ui.cpp (total_*).


-----------------------------------------------------------------------


IMPROVED COMPRESSION RATIO
==========================

- experiment with new filters

- implement filters for dos/exe

- filters: could we exploit a f->firstcall info field ?

- for small programs (e.g. < 64k), try an additional algorithm
  to see if it gives better compression


ALL FORMATS
===========

- more thoroughly test the exe-header in canPack()
  and throw exceptions when encountering bad values.

- implement `--cpu=486' option to use bswap on the 32-bit formats
    (if cpu >= 486)

- consider removing "or ebp,-1" when not needed


FORMAT DJGPP2/COFF
==================

- handle overlays

- fix default file extension handling when the --coff option is set


FORMAT DOS/EXE
==============

- implement filters

- add a check so that we don't pack djgpp1 binaries


FORMAT LINUX/386
================

- don't mmap() the temporary output file - this seems to improve
    file io speed


FORMAT TMT/ADAM
===============

- the decompressors are already aligned, no need for an
    extra alignment


FORMAT WATCOM/LE
================

- handle files without relocations

- the decompressors are already aligned, no need for an
    extra alignment

- fix default file extension handling when the --le option is set

- handle holes in the file

- implement compressWithFilters()

- add a call to verifyOverlappingDecompression()


FORMAT WIN16/NE
===============

- implement readFileHeader() to correctly identify a win16/ne
  executable, so that the call for contribution will get thrown


FORMAT WIN32/PE
===============

- fix the section alignment with the Intel compiler

- decrease runtime memory overhead

2 - easy - mfx + ml) new switch(es) : do not compress resource types x,y,z
    or resource names a,b,c

3 - medium - ml) rebuild exports

3 - difficult) don't compress the BSS section and other holes.

4 - medium - ml) fix when objectalign < 0x1000

4 - easy - ml) put the original offset of moved resources somewhere into
    the res.dir. (if it's safe to do)

4 - ??? - ml) fix FIXMEs

5 - medium - ml) try to put the preprocessed imports & relocs back to their
    original section if possible. this could save some virtual memory
    address space.

