diff options
author | The Android Open Source Project <initial-contribution@android.com> | 2008-10-21 07:00:00 -0700 |
---|---|---|
committer | The Android Open Source Project <initial-contribution@android.com> | 2008-10-21 07:00:00 -0700 |
commit | a27d2baa0c1a2ec70f47ea9199b1dd6762c8a349 (patch) | |
tree | defd1cc07d16ad2f3b21154114e092d11c94c5bb /linker/linker_debug.h | |
download | bionic-a27d2baa0c1a2ec70f47ea9199b1dd6762c8a349.zip bionic-a27d2baa0c1a2ec70f47ea9199b1dd6762c8a349.tar.gz bionic-a27d2baa0c1a2ec70f47ea9199b1dd6762c8a349.tar.bz2 |
Initial Contributionandroid-1.0
Diffstat (limited to 'linker/linker_debug.h')
-rw-r--r-- | linker/linker_debug.h | 111 |
1 files changed, 111 insertions, 0 deletions
diff --git a/linker/linker_debug.h b/linker/linker_debug.h new file mode 100644 index 0000000..10ae7b1 --- /dev/null +++ b/linker/linker_debug.h @@ -0,0 +1,111 @@ +#ifndef _LINKER_DEBUG_H_ +#define _LINKER_DEBUG_H_ + +#include <stdio.h> + +/* WARNING: For linker debugging only.. Be careful not to leave any of + * this on when submitting back to repository */ +#define LINKER_DEBUG 0 +#define TRACE_DEBUG 0 +#define DO_TRACE_LOOKUP 1 +#define DO_TRACE_RELO 1 +#define TIMING 0 +#define STATS 0 +#define COUNT_PAGES 0 + +/********************************************************************* + * You shouldn't need to modify anything below unless you are adding + * more debugging information. + * + * To enable/disable specific debug options, change the defines above + *********************************************************************/ + + +/*********************************************************************/ +#undef TRUE +#undef FALSE +#define TRUE 1 +#define FALSE 0 + +/* Only use printf() during debugging. We have seen occasional memory + * corruption when the linker uses printf(). + */ +#if LINKER_DEBUG +extern int debug_verbosity; +#warning "*** LINKER IS USING printf(); DO NOT CHECK THIS IN ***" +#define _PRINTVF(v,f,x...) do { \ + (debug_verbosity > (v)) && (printf(x), ((f) && fflush(stdout))); \ + } while (0) +#else /* !LINKER_DEBUG */ +#define _PRINTVF(v,f,x...) do {} while(0) +#endif /* LINKER_DEBUG */ + +#define PRINT(x...) _PRINTVF(-1, FALSE, x) +#define INFO(x...) _PRINTVF(0, TRUE, x) +#define TRACE(x...) _PRINTVF(1, TRUE, x) +#define WARN(fmt,args...) \ + _PRINTVF(-1, TRUE, "%s:%d| WARNING: " fmt, __FILE__, __LINE__, ## args) +#define ERROR(fmt,args...) \ + _PRINTVF(-1, TRUE, "%s:%d| ERROR: " fmt, __FILE__, __LINE__, ## args) + +#if TRACE_DEBUG +#define DEBUG(x...) _PRINTVF(2, TRUE, "DEBUG: " x) +#else /* !TRACE_DEBUG */ +#define DEBUG(x...) do {} while (0) +#endif /* TRACE_DEBUG */ + +#if LINKER_DEBUG +#define TRACE_TYPE(t,x...) do { if (DO_TRACE_##t) { TRACE(x); } } while (0) +#else /* !LINKER_DEBUG */ +#define TRACE_TYPE(t,x...) do {} while (0) +#endif /* LINKER_DEBUG */ + +#if STATS +#define RELOC_ABSOLUTE 0 +#define RELOC_RELATIVE 1 +#define RELOC_COPY 2 +#define RELOC_SYMBOL 3 +#define NUM_RELOC_STATS 4 + +struct _link_stats { + int reloc[NUM_RELOC_STATS]; +}; +extern struct _link_stats linker_stats; + +#define COUNT_RELOC(type) \ + do { if (type >= 0 && type < NUM_RELOC_STATS) { \ + linker_stats.reloc[type] += 1; \ + } else { \ + PRINT("Unknown reloc stat requested\n"); \ + } \ + } while(0) +#else /* !STATS */ +#define COUNT_RELOC(type) do {} while(0) +#endif /* STATS */ + +#if TIMING +#undef WARN +#define WARN(x...) do {} while (0) +#endif /* TIMING */ + +#if COUNT_PAGES +extern unsigned bitmask[]; +#define MARK(offset) do { \ + bitmask[((offset) >> 12) >> 3] |= (1 << (((offset) >> 12) & 7)); \ + } while(0) +#else +#define MARK(x) do {} while (0) +#endif + +#define DEBUG_DUMP_PHDR(phdr, name, pid) do { \ + DEBUG("%5d %s (phdr = 0x%08x)\n", (pid), (name), (unsigned)(phdr)); \ + DEBUG("\t\tphdr->offset = 0x%08x\n", (unsigned)((phdr)->p_offset)); \ + DEBUG("\t\tphdr->p_vaddr = 0x%08x\n", (unsigned)((phdr)->p_vaddr)); \ + DEBUG("\t\tphdr->p_paddr = 0x%08x\n", (unsigned)((phdr)->p_paddr)); \ + DEBUG("\t\tphdr->p_filesz = 0x%08x\n", (unsigned)((phdr)->p_filesz)); \ + DEBUG("\t\tphdr->p_memsz = 0x%08x\n", (unsigned)((phdr)->p_memsz)); \ + DEBUG("\t\tphdr->p_flags = 0x%08x\n", (unsigned)((phdr)->p_flags)); \ + DEBUG("\t\tphdr->p_align = 0x%08x\n", (unsigned)((phdr)->p_align)); \ + } while (0) + +#endif /* _LINKER_DEBUG_H_ */ |