I only build the dwarf_prototypes if we have libdw
Support for powerpc64 arch ppc64el

Signed-off-by: Thierry Fauck <thierry@linux.vnet.ibm.com>

	Add support for ppc64le proc and ELF ABIv2.
	Provides support for irelative and wchar
In ppc-lwarx.exp, Dwarf backend may resolve atomic_add's prototype

- in which case the patterns are wrong.  Change the pattern to match
  both cases.
CREDITS update for ppc64el support

Signed-off-by: Thierry Fauck <thierry@linux.vnet.ibm.com>
Making sure to not double-examine the same DWARF CU
Added manpage section giving examples of -x, -e and -l usage
added NEWS, CREDITS info about the new DWARF prototyping code
added hash and equality functions for uint64_t

The hash function is identical to the 32-bit signed int hash function. This
function is unideal for such extended use, but is sufficient for now
dict_hash_uint64: do not ignore upper 32 bits of the quantity
We now use known prototypes for all aliased symbols (same address)

Some libraries have multiple names for the same function. Prior to this patch,
it was possible to define a prototype for a symbol, and not have ltrace use it
because it saw a different symbol be called. libc is a common source of this.
For instance (on my amd64 Debian box) it defines the nanosleep symbol as both
'nanosleep' and '__GI___nanosleep', at the same address. If a calling library
calls '__GI___nanosleep', then an ltrace prototype for 'nanosleep' would not be
used, even though it should apply to this call
DWARF prototypes are now generated with both the plain and the linkage names

If a die has a DW_AT_linkage_name, I now use it: this is required for C++ code,
in particular.

I use the plain name regardless, since sometimes the exported symbol corresponds
to the plain name, NOT the linkage name. For instance I see this on my
Debian/sid amd64 box. In its libc, the linkage name of __nanosleep is
__GI___nanosleep, but the export is __nanosleep
renamed _dtor_* and _clone_* functions to remove the leading _
whitespace 'if(' -> 'if ('
clarified some int return code checking
added forgotten free(), forgotten return
library_exported_names_each_alias(), library_exported_names_each() now restartable

These function now takes a *start_after, and return a pointer to the first
failing key, like the other ltrace iterators
removed needless #include
Made activate_latent_in() iterations much more efficient

Previously activate_latent_in() iterations looked like

for(export names in lib1) // hash table iteration
{
  for(symbol names in lib2) // list iteration
  {
    if(names equal && libsym->latent)
    {
      proc_activate_latent_symbol(proc, libsym)
    }
  }
}

This is inefficient both due to the double iteration but also since iterating
over a hash table in slow (have to look through all cells, even empty ones).
This patch turns this logic into

for(symbol names in lib2) // list iteration
{
  if(name in lib1 export names && libsym->latent) // hash table lookup
  {
    proc_activate_latent_symbol(proc, libsym)
  }
}

So there's no more double iteration, and the hash iteration was turned into a
hash lookup. Much better.
un-consted some variables to build with older (<= gcc-4.6) compilers
I now always build the export list

Previously I only built the export list when tracing with -l. Since I was using
this export list to resolve aliased symbols in addition to setting breakpoints,
this aliased symbol resolution was only working with -l. I now always build the
export list to make aliased symbol resolution always work.

I now have a separate variable to control whether we should activate latent
symbols or not; previously the existence of the export list was used to make
this determination.

Furthermore populate_this_symtab() now takes an extra argument to indicate that
ONLY the export list should be filled in