Add a host tool to pack R_ARM_RELATIVE relocations in libchrome.<ver>.so.

R_ARM_RELATIVE relocations are the bulk of dynamic relocations (the .rel.dyn
section) in libchrome.<version>.so.  The ELF standard representation of them
is wasteful.

Packing uses run length encoding to store them more efficiently.  Packed
relocations are placed in a new .android.rel.dyn section.  Packing reduces
the footprint of libchrome.<version>.so in the filesystem, in APK downloads,
and in memory when loaded on the device.

A packed libchrome.<version>.so is designed so that it can be loaded directly
on Android, but requires the explicit support of a crazy linker that has been
extended to understand packed relocations.

A packed libchrome.<version>.so cannot currently be used with the standard
Android runtime linker.

See README.TXT and src/*.h for design and implementation notes.

BUG=

Review URL: https://codereview.chromium.org/310483003

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@276043 0039d316-1c4b-4281-b951-d872f2087c98
20 files changed