This is an (incomplete) list of some of the stuff we want to look at doing.

If you're interested in hacking on any of these, please contact the list first
for some pointers and/or read HACKING and doc/CodingStyle.

0.8 release
-----------

 o image filtering: --image /foo/bar/myapp (needs UI spec). For -s thread
 o merge BRANCH_CALLGRAPH

Before 1.0 big stuff
--------------------

 o add support for samples not belonging to any symbols probably through
   artificially created symbols (do we still need/want this ??)
 o opdiff
 o side-by-side opreport output (--compare - needs UI spec) ???
 
Before 1.0 little stuff
-----------------------

 o x86_64 and 2.4 kernel: test the needed change
 o odb_insert() can fail on ftruncate or mremap() in db_manage.c but we don't
  try to recover gracefully.
 o dae/opd_image.h: struct opd_sfile * sfiles[OP_MAX_COUNTERS][NR_CPUS]; 
   this use too many memory.
 o we allow op_help --cpu-type=xx but with 16 it segfault on x86, alpha ev67
  need OP_MAX_COUNTERS > 8 but we compile all tools with OP_MAX_COUNTERS==8
  (see libop/op_hw_config.h). We should remove this #define
 o can we log samples going to anonymous mapping by using
  - 2.6 one fake sample for all anonymous sample, cookie == 0 mean use this
  special sample file. (cookie == -1 or -2 as magic value ?)
  - 2.4 we must pass to daemon note about exec anon mapping and create one
  fake samples file by anon mapping specially named like 
  /{root}/path/to/appli/anon_mapping-0B8000-0BA0000/...
 o why rel_to_abs_path in locate_images ??
 o we can add lots more unit tests yet
 o output column shortname headers for opreport -l
 o better sharing of dae daemon: share dae /daemon need to create a libdaemon/
   subdir and this lib must be self contained (not include anything in dae/*.h
   daemon/*.h) (<movewent> not really worth a whole new lib dir imho)
 o separate debug info stuff
 o opgprof/opannotate always merges even if we provide a profile spec that's
   minimal enough - you can't get "cpu:0"
 o is relative_to_absolute_path guaranteeing a trailing '/' documented ?
 o create_path API is weird
 o opannotate should error out with a msg if no debug symbols are found at all
 o GUI still has a physical-counter interface, should have a general one
   like opcontrol --event
 o move oprofiled.log to OP_SAMPLE_DIR/current ?
 o lib-image: and image: behavior depend on --separate=, if --separate=library
  opreport "lib-image:*libc*" --merge=lib works but not
  opreport "image:*libc*" --merge=lib whilst the behavior is reversed if
  --separate==none. Must we take care ?
 o improve the *non* verbose daemon log to be a bit more informative
 o --buffer-size is useless on 2.5 without tuning of watershed
 o oprof_start: check lib samples when kernel samples checkbox is checked
 o pp tools must handle samples count overflow (marked as (unsigned)-1)
 o when we dump stats for oprofiled, dump kernel-side values too (for 2.5)
 o lookup_dcookie can return ENAMETOOLONG but we can't hack it
 o daemon needs to handle -EMFILE failures in all files opened (including
   complete_dump !) by closing sample files
 o remove 2.2 / gcc 2.91 support ?
 o the way we show kernel modules in 2.5 is not very obvious - "/oprofile"
 o sample-file: / binary: don't work in any useful way - can we fix this
   by peeking at binary: value and faking the split_sample_file somehow ?

Kernel
------
 o error out of the vma list search early if we go past the EIP - list is
   vma-start-ordered I think
 o move the unmap hook to the callers and do a check before unmapping to avoid
   losing samples - a bit more expensive but saves on lots of lost samples.
   this would move the hint hook up into sys_munmap, sys_mremap and maybe
   other places ?
 o replace the exit hook crap with pinning the task struct in place with a
   two-list destruction of task_struct

Documentation
-------------

 o more discussion of problematic code needs to go in the "interpreting" section. 
 o document gcc 2.95 and linenr info problems especially for inline functions
 o split doc into user's manual and hacking manual, document much more 
 o audit oprof_start for security + then document sudo

General checks to make
----------------------
 
 o rgrep FIXME
 o valgrind (--show-reachable=yes --leak-check=yes)
 o audit to track unnecessary include <>
 o gcc 3.0/3.x compile
 o Qt2/3 check, no Qt check
 o verify builds (modversions, kernel versions, athlon etc.). I have the
  necessary stuff to check kernel versions/configurations on PIII core (Phil)
 o use nm and a little script to track unused function
 o test it to hell and back
 o compile all C++ programs with STL_port and test them
 o There is probably place of post profile tools where looking at errno will give better error messages.

Later
-----
 
 o I think we should have the ability to have *fixed* width headers, e.g. :

vma      samples  cum. samples  %           cum. %     symbol name             image name              app name
0804c350 64582    64582         35.0757     35.0757    odb_insert              /usr/loc...in/oprofiled /usr/local/oprofile-pp/bin/oprofiled

  Note the ellipsis
 o we handle op_bfd failure but we ignore all samples for this binary,
 we would probably create a pseudo op_bfd to ensure the statistics are ok
 o option xxx and negated option --no-xxx: we can hide them in --help and
  mention in the xxx option help string than the --no-xxx is allowed. Not
  really usefull if we have a little number of --no.
 o should we make the sighup handler re-read counter config and re-start profiling too ?
 o implement pp_interface alias (is it worth it ?)
 o improve --smart-demangle
	o allow user to add it's own pattern in user.pat, document it.
	o hard code ${typename} regular definition to remove all current limitations (difficult, perhaps after 1.0 ?).
 o oprof_start dialog size is too small initially
 o oprof_start key movement through events doesn't change help text
 o i18n. We need a good formatter, and also remember format_percent()
 o opannotate --source --output-dir=~moz/op/ /usr/bin/oprofiled
   will fail because the ~ is not expanded (no space around it) (popt bug I say)
 o cpu names instead of numbers in 2.4 module/ ?
 o remove 1 and 2 magic numbers for oprof_ready
 o adapt Anton's patch for handling non-symbolled libraries ?
 o use standard C integer type <stdint.h> int32_t int16_t etc.
 o opcontrol --save should allow to backup binary, see subject "features to make oprofile easier to use" on mail list
 o event multiplexing for real
 
o profile the NMI handler code
 
o merge sample files into one big report (like vtune can do repeated runs)
