diff --git a/src/linker.cpp b/src/linker.cpp index 9df8624b..fd92a999 100644 --- a/src/linker.cpp +++ b/src/linker.cpp @@ -443,6 +443,19 @@ void ElfLinker::defineSymbol(const char *name, unsigned value) } } +// debugging support +void ElfLinker::dumpSymbols(FILE *fp) const +{ + if (fp == NULL) + fp = stdout; + for (unsigned ic = 0; ic < nsymbols; ic++) + { + Symbol *symbol = symbols[ic]; + fprintf(fp, "%-20s 0x%08lx | %-20s 0x%08lx\n", + symbol->name, symbol->offset, symbol->section->name, symbol->section->offset); + } +} + unsigned ElfLinker::getSymbolOffset(const char *name) const { assert(frozen); diff --git a/src/linker.h b/src/linker.h index 44c113cd..190df537 100644 --- a/src/linker.h +++ b/src/linker.h @@ -86,6 +86,7 @@ public: virtual void relocate(); virtual void defineSymbol(const char *name, unsigned value); virtual unsigned getSymbolOffset(const char *) const; + virtual void dumpSymbols(FILE *fp=NULL) const; void alignWithByte(unsigned len, upx_byte b); virtual void alignCode(unsigned len) { alignWithByte(len, 0); } diff --git a/src/p_lx_elf.cpp b/src/p_lx_elf.cpp index 366869a9..d9646631 100644 --- a/src/p_lx_elf.cpp +++ b/src/p_lx_elf.cpp @@ -603,6 +603,7 @@ PackLinuxElf64amd::defineSymbols(Filter const *) #undef PAGE_SIZE #undef PAGE_MASK + linker->dumpSymbols(); } static const