replace DEBUG compiler define with -d/--debug runtime option

I'm tired of setting CFLAGS and people shouldn't have to
recompile to get debug output.  This lays the foundations
proper option handling and logging levels.

Signed-off-by: Seth Jennings <sjenning@redhat.com>
add inventory file creation to create-object-diff

In preparation for adding an automated test framework,
add an ability to create-object-diff that will create
a human readable list of included sections and symbols
with type and bind information so that the test framework
can compare against a known-good reference list with the
expected set of sections and symbols.

The file is created when the -i/--inventory option is
used.  The inventory filename is the user supplied output
file name suffixed by .inventory

Signed-off-by: Seth Jennings <sjenning@redhat.com>
Merge pull request #48 from spartacus06/testframework

Testframework
kpatch-build: show changed functions

Pipe create-diff-object output to both stdout and the log file, so the
user can see which functions have changed.
Merge pull request #49 from jpoimboe/show-changed-functions

kpatch-build: show changed functions
add automated testing system

This commit introduces a simple automated testing system
with 3 simple testcase.

For each test case there is a .c, a .patch, and a .inventory
file.  The .c is compiled, using the flags from the kflags file,
to create the original object.  The .c file is then patched
with the .patch file and rebuilt to create the patched object.
The files are then analyzed by the differencing tool and an
output object is generated with a .inventory file that lists
the sections and symbol included in the output object.  That
inventory file is then compared to the .inventory file for
that testcase.  If they are the same, the test passes. If
not, the differences in the inventory files are displayed,
and the test fails.

Signed-off-by: Seth Jennings <sjenning@redhat.com>
Merge pull request #51 from spartacus06/testingwork

add automated testing system
add comment for __ksymtab_strings case

Signed-off-by: Seth Jennings <sjenning@redhat.com>
add error for sym value != 0

For a local object or function symbol, we expect that
the section offset, sym.st_value, be 0 because we used
-ffunction-sections and -fdata-section during compile.

If value != 0, it undermines assumptions we make and
should return an error.  Exceptions should be handled
on a case by case basis, like __ksymtab_strings.

Signed-off-by: Seth Jennings <sjenning@redhat.com>
fixup comment

Signed-off-by: Seth Jennings <sjenning@redhat.com>
Merge pull request #52 from spartacus06/fixes

add a few comments and st_value !=0 error
make kpatch-build a first class script

kpatch-build is outgrowing the kpatch script and probably is a better
fit as its own utility instead of being wrapped by kpatch.  Install
kpatch-build into /usr/local/bin, remove the kpatch wrapper around it,
and update the README accordingly.
kpatch-build --sourcedir option

Allow the user to supply a custom kernel source directory.  This copies
the directory to ~/.kpatch/src instead of using it in place.  Otherwise
the "make mrproper" (which is needed for compiling objects in a separate
tree) would modify the original source tree and remove its .config file.

There's currently no caching support for this option.  If needed, we
could implement that pretty easily by calculating an md5sum of the
original source directory.
Merge pull request #50 from jpoimboe/sourcedir-option

kpatch-build: remove "kpatch build" wrapper and add --sourcedir option
better patch file cleanup

If the patch file fails to apply, it "corrupts" the cache by leaving the
old applied-patch file around.  Fix that by always cleaning up after
ourselves.
try source patch before compiling kernel

Add a patch testing step before compiling the kernel, so that users
don't have to wait for the kernel to compile before seeing if the patch
applies cleanly.

Also allow the printing of the patch command's stdout/stderr to make it
clear what files are being patched and whether there's any fuzz.
properly detect no changed objects

The current solution doesn't work because "$?" will always be 0, even if
there were no "CC" lines in the build log.  Instead, just make sure the
changed_objs file isn't empty.
make the changed function output more readable

This makes it much easier to spot which functions have changed,
especially when there are more than one of them.
compile tools with -g for debug symbols
Merge pull request #59 from jpoimboe/compile-debug-symbols

compile tools with -g for debug symbols