new format vmlinuz/armel for Debian NSLU2 (etc.) linux kernel

This commit is contained in:
John Reiser 2008-09-15 10:18:19 -07:00
parent 86de510731
commit c88c20820f
10 changed files with 1892 additions and 0 deletions

1
NEWS
View File

@ -3,6 +3,7 @@ User visible changes for UPX
==================================================================
Changes in 3.04 (XX XXX 2008):
* new format vmlinuz/armel for Debian NSLU2 (etc.) linux kernel
* bvmlinuz boot protocol 2.08 for 386 Linux kernel
* Extended ABI version 4 for armel-eabi ARM Linux ELF

View File

@ -459,6 +459,7 @@ private:
#define UPX_F_VMLINUX_ARMEL 28
#define UPX_F_MACH_i386 29
#define UPX_F_LINUX_ELF32_MIPSEL 30
#define UPX_F_VMLINUZ_ARMEL 31
#define UPX_F_PLAIN_TEXT 127

View File

@ -711,6 +711,358 @@ void PackVmlinuzI386::unpack(OutputFile *fo)
}
PackVmlinuzARMEL::PackVmlinuzARMEL(InputFile *f) :
super(f), setup_size(0), filter_len(0)
{
bele = &N_BELE_RTP::le_policy;
}
const int *PackVmlinuzARMEL::getCompressionMethods(int method, int level) const
{
return Packer::getDefaultCompressionMethods_le32(method, level);
}
const int *PackVmlinuzARMEL::getFilters() const
{
static const int f50[] = { 0x50, FT_END };
return f50;
}
int PackVmlinuzARMEL::getStrategy(Filter &/*ft*/)
{
// If user specified the filter, then use it (-2==filter_strategy).
// Else try the first two filters, and pick the better (2==filter_strategy).
return (opt->no_filter ? -3 : ((opt->filter > 0) ? -2 : 2));
}
bool PackVmlinuzARMEL::canPack()
{
return readFileHeader() == getFormat();
}
int PackVmlinuzARMEL::readFileHeader()
{
unsigned int hdr[8];
fi->readx(&hdr, sizeof(hdr));
for (int j=0; j < 8; ++j) {
if (0xe1a00000!=get_te32(&hdr[j])) {
return 0;
}
}
return UPX_F_VMLINUZ_ARMEL;
}
int PackVmlinuzARMEL::decompressKernel()
{
// read whole kernel image
obuf.alloc(file_size);
fi->seek(0, SEEK_SET);
fi->readx(obuf, file_size);
//checkAlreadyPacked(obuf + setup_size, UPX_MIN(file_size - setup_size, (off_t)1024));
// Find head.S:
// bl decompress_kernel # 0xeb......
// b call_kernel # 0xea......
//LC0: .word LC0 # self!
unsigned decompress_kernel = 0;
unsigned caller1 = 0;
unsigned caller2 = 0;
unsigned got_start = 0;
unsigned got_end = 0;
for (unsigned j = 0; j < 0x400; j+=4) {
unsigned w;
if (j!=get_te32(j + obuf)) {
continue;
}
if (0xea000000!=(0xff000000& get_te32(-4+ j + obuf))
|| 0xeb000000!=(0xff000000&(w= get_te32(-8+ j + obuf))) ) {
continue;
}
caller1 = -8 + j;
decompress_kernel = ((0x00ffffff & w)<<2) + 8+ caller1;
for (unsigned k = 12; k<=128; k+=4) {
w = get_te32(j - k + obuf);
if (0xeb000000==(0xff000000 & w)
&& decompress_kernel==(((0x00ffffff & w)<<2) + 8+ j - k) ) {
caller2 = j - k;
break;
}
}
got_start = get_te32(5*4 + j + obuf);
got_end = get_te32(6*4 + j + obuf);
break;
}
if (0==decompress_kernel) {
return 0;
}
// Find first subroutine that is called by decompress_kernel,
// which we will consider to be the start of the gunzip module
// and the end of the non-gunzip modules.
for (unsigned j = decompress_kernel; j < (unsigned)file_size; j+=4) {
unsigned w = get_te32(j + obuf);
if (0xeb800000==(0xff800000 & w)) {
setup_size = 8+ ((0xff000000 | w)<<2) + j;
// Move the GlobalOffsetTable.
for (unsigned k = got_start; k < got_end; k+=4) {
w = get_te32(k + obuf);
// FIXME: must relocate w
set_te32(k - got_start + setup_size + obuf, w);
}
setup_size += got_end - got_start;
set_te32(&obuf[caller1], 0xeb000000 |
(0x00ffffff & ((setup_size - (8+ caller1))>>2)) );
set_te32(&obuf[caller2], 0xeb000000 |
(0x00ffffff & ((setup_size - (8+ caller2))>>2)) );
break;
}
}
for (int gzoff = 0; gzoff < 0x4000; gzoff+=4) {
// find gzip header (2 bytes magic + 1 byte method "deflated")
int off = find(obuf + gzoff, file_size - gzoff, "\x1F\x8B\x08", 3);
if (off < 0 || 0!=(3u & off))
break; // not found, or not word-aligned
gzoff += off;
const int gzlen = file_size - gzoff;
if (gzlen < 256)
break;
// check gzip flag byte
unsigned char flags = obuf[gzoff + 3];
if ((flags & 0xe0) != 0) // reserved bits set
continue;
//printf("found gzip header at offset %d\n", gzoff);
// try to decompress
int klen;
int fd;
off_t fd_pos;
for (;;)
{
klen = -1;
fd = -1;
fd_pos = -1;
// open
fi->seek(gzoff, SEEK_SET);
fd = dup(fi->getFd());
if (fd < 0)
break;
gzFile zf = gzdopen(fd, "rb");
if (zf == NULL)
break;
// estimate gzip-decompressed kernel size & alloc buffer
if (ibuf.getSize() == 0)
ibuf.alloc(gzlen * 3);
// decompress
klen = gzread(zf, ibuf, ibuf.getSize());
fd_pos = lseek(fd, 0, SEEK_CUR);
gzclose(zf);
fd = -1;
if (klen != (int)ibuf.getSize())
break;
// realloc and try again
unsigned const s = ibuf.getSize();
ibuf.dealloc();
ibuf.alloc(3 * s / 2);
}
if (fd >= 0)
(void) close(fd);
if (klen <= 0)
continue;
if (klen <= gzlen)
continue;
if (opt->force > 0)
return klen;
// some checks
if (fd_pos != file_size) {
//printf("fd_pos: %ld, file_size: %ld\n", (long)fd_pos, (long)file_size);
}
//head_ok:
// FIXME: more checks for special magic bytes in ibuf ???
// FIXME: more checks for kernel architecture ???
return klen;
}
return 0;
}
void PackVmlinuzARMEL::readKernel()
{
int klen = decompressKernel();
if (klen <= 0)
throwCantPack("kernel decompression failed");
//OutputFile::dump("kernel.img", ibuf, klen);
// copy the setup boot code
setup_buf.alloc(setup_size);
memcpy(setup_buf, obuf, setup_size);
//OutputFile::dump("setup.img", setup_buf, setup_size);
obuf.dealloc();
obuf.allocForCompression(klen);
ph.u_len = klen;
ph.filter = 0;
}
Linker* PackVmlinuzARMEL::newLinker() const
{
return new ElfLinkerArmLE;
}
static const
#include "stub/arm-linux.kernel.vmlinux.h"
static const
#include "stub/armel-linux.kernel.vmlinuz-head.h"
void PackVmlinuzARMEL::buildLoader(const Filter *ft)
{
// prepare loader; same as vmlinux (with 'x')
initLoader(stub_arm_linux_kernel_vmlinux, sizeof(stub_arm_linux_kernel_vmlinux));
addLoader("LINUX000", NULL);
if (ft->id) {
assert(ft->calls > 0);
addLoader("LINUX010", NULL);
}
addLoader("LINUX020", NULL);
if (ft->id) {
addFilter32(ft->id);
}
addLoader("LINUX030", NULL);
if (ph.method == M_NRV2E_8) addLoader("NRV2E", NULL);
else if (ph.method == M_NRV2B_8) addLoader("NRV2B", NULL);
else if (ph.method == M_NRV2D_8) addLoader("NRV2D", NULL);
else if (M_IS_LZMA(ph.method)) addLoader("LZMA_ELF00,LZMA_DEC10,LZMA_DEC30", NULL);
else throwBadLoader();
addLoader("IDENTSTR,UPX1HEAD", NULL);
// To debug (2008-09-14):
// Build gdb-6.8-21.fc9.src.rpm; ./configure --target=arm-none-elf; make
// Contains the fix for http://bugzilla.redhat.com/show_bug.cgi?id=436037
// Install qemu-0.9.1-6.fc9.i386.rpm
// qemu-system-arm -s -S -kernel <file> -nographic
// (gdb) target remote localhost:1234
// A very small boot loader runs at pc=0x0; the kernel is at 0x10000 (64KiB).
}
void PackVmlinuzARMEL::defineDecompressorSymbols()
{
super::defineDecompressorSymbols();
linker->defineSymbol( "COMPRESSED_LENGTH", ph.c_len);
linker->defineSymbol("UNCOMPRESSED_LENGTH", ph.u_len);
linker->defineSymbol("METHOD", ph.method);
}
unsigned PackVmlinuzARMEL::write_vmlinuz_head(OutputFile *const fo)
{ // First word from vmlinuz-head.S
fo->write(&stub_armel_linux_kernel_vmlinuz_head[0], 4);
// Second word
LE32 tmp_u32;
unsigned const t = (0xff000000 &
get_te32(&stub_armel_linux_kernel_vmlinuz_head[4]))
| (0x00ffffff & (0u - 1 + ((3+ ph.c_len)>>2)));
tmp_u32 = t;
fo->write((void const *)&tmp_u32, 4);
return sizeof(stub_armel_linux_kernel_vmlinuz_head);
}
void PackVmlinuzARMEL::pack(OutputFile *fo)
{
readKernel();
// prepare filter
Filter ft(ph.level);
ft.buf_len = ph.u_len;
ft.addvalue = 0;
// compress
upx_compress_config_t cconf; cconf.reset();
// limit stack size needed for runtime decompression
cconf.conf_lzma.max_num_probs = 1846 + (768 << 5); // ushort: 52,844 byte stack
compressWithFilters(&ft, 512, &cconf, getStrategy(ft));
const unsigned lsize = getLoaderSize();
defineDecompressorSymbols();
defineFilterSymbols(&ft);
relocateLoader();
MemBuffer loader(lsize);
memcpy(loader, getLoader(), lsize);
patchPackHeader(loader, lsize);
// boot_sect_t * const bs = (boot_sect_t *) ((unsigned char *) setup_buf);
// bs->sys_size = ALIGN_UP(lsize + ph.c_len, 16u) / 16;
// bs->payload_length = ph.c_len;
fo->write(setup_buf, setup_buf.getSize());
write_vmlinuz_head(fo);
fo->write(obuf, ph.c_len);
unsigned const zero = 0;
fo->write((void const *)&zero, 3u & (0u - ph.c_len));
fo->write(loader, lsize);
#if 0
printf("%-13s: setup : %8ld bytes\n", getName(), (long) setup_buf.getSize());
printf("%-13s: loader : %8ld bytes\n", getName(), (long) lsize);
printf("%-13s: compressed : %8ld bytes\n", getName(), (long) ph.c_len);
#endif
// verify
verifyOverlappingDecompression();
// finally check the compression ratio
if (!checkFinalCompressionRatio(fo))
throwNotCompressible();
}
int PackVmlinuzARMEL::canUnpack()
{
if (readFileHeader() != getFormat())
return false;
fi->seek(setup_size, SEEK_SET);
return readPackHeader(1024) ? 1 : -1;
}
void PackVmlinuzARMEL::unpack(OutputFile *fo)
{
// no uncompression support for this format, so that
// it is possible to remove the original deflate code (>10 KiB)
// FIXME: but we could write the uncompressed "vmlinux" image
ibuf.alloc(ph.c_len);
obuf.allocForUncompression(ph.u_len);
fi->seek(setup_size + ph.buf_offset + ph.getPackHeaderSize(), SEEK_SET);
fi->readx(ibuf, ph.c_len);
// decompress
decompress(ibuf, obuf);
// unfilter
Filter ft(ph.level);
ft.init(ph.filter, 0);
ft.cto = (unsigned char) ph.filter_cto;
ft.unfilter(obuf, ph.u_len);
// write decompressed file
if (fo)
{
throwCantUnpack("build a new kernel instead :-)");
//fo->write(obuf, ph.u_len);
}
}
/*
vi:ts=4:et
*/

View File

@ -150,6 +150,52 @@ protected:
};
/*************************************************************************
// vmlinuz/armel (gzip compressed Linux kernel image)
**************************************************************************/
class PackVmlinuzARMEL : public Packer
{
typedef Packer super;
public:
PackVmlinuzARMEL(InputFile *f);
virtual int getVersion() const { return 13; }
virtual int getFormat() const { return UPX_F_VMLINUZ_ARMEL; }
virtual const char *getName() const { return "vmlinuz/armel"; }
virtual const char *getFullName(const options_t *) const { return "armel-linux.kernel.vmlinuz"; }
virtual const int *getCompressionMethods(int method, int level) const;
virtual const int *getFilters() const;
virtual int getStrategy(Filter &);
virtual void pack(OutputFile *fo);
virtual void unpack(OutputFile *fo);
virtual bool canPack();
virtual int canUnpack();
protected:
virtual int readFileHeader();
virtual int decompressKernel();
virtual void readKernel();
virtual void buildLoader(const Filter *ft);
virtual unsigned write_vmlinuz_head(OutputFile *const fo);
virtual void defineDecompressorSymbols();
virtual Linker* newLinker() const;
// virtual upx_byte *getLoader() const;
// virtual int getLoaderSize() const;
MemBuffer setup_buf;
int setup_size;
// unsigned physical_start;
// unsigned page_offset;
// unsigned config_physical_align;
unsigned filter_len;
};
#endif /* already included */

View File

@ -212,6 +212,7 @@ const char *Packer::getDecompressorSections() const
|| UPX_F_LINUX_ELFPPC32 ==ph.format
|| UPX_F_LINUX_ELF32_ARMEB==ph.format
|| UPX_F_BSD_ELF_i386 ==ph.format
|| UPX_F_VMLINUZ_ARMEL ==ph.format
|| UPX_F_VMLINUX_ARMEL ==ph.format
|| UPX_F_VMLINUX_ARMEB ==ph.format
|| UPX_F_VMLINUX_PPC32 ==ph.format
@ -250,6 +251,7 @@ void Packer::defineDecompressorSymbols()
|| UPX_F_LINUX_ELFPPC32 ==ph.format
|| UPX_F_LINUX_ELF32_ARMEB==ph.format
|| UPX_F_BSD_ELF_i386 ==ph.format
|| UPX_F_VMLINUZ_ARMEL ==ph.format
|| UPX_F_VMLINUX_ARMEL ==ph.format
|| UPX_F_VMLINUX_ARMEB ==ph.format
|| UPX_F_VMLINUX_PPC32 ==ph.format

View File

@ -206,6 +206,8 @@ Packer* PackMaster::visitAllPackers(visit_func_t func, InputFile *f, const optio
return p;
if ((p = func(new PackBvmlinuzI386(f), user)) != NULL)
return p;
if ((p = func(new PackVmlinuzARMEL(f), user)) != NULL)
return p;
#if 0
if ((p = func(new PackElks8086(f), user)) != NULL)
return p;

View File

@ -60,6 +60,8 @@ STUBS += armeb-linux.elf-entry.h
STUBS += armeb-linux.elf-fold.h
STUBS += armeb-linux.kernel.vmlinux.h
STUBS += armeb-linux.kernel.vmlinux-head.h
STUBS += armel-linux.kernel.vmlinuz.h
STUBS += armel-linux.kernel.vmlinuz-head.h
STUBS += arm.v4a-wince.pe.h
STUBS += arm.v4t-wince.pe.h
STUBS += i086-dos16.com.h
@ -801,6 +803,29 @@ i386-linux.kernel.vmlinux-head.h : $(srcdir)/src/$$T.S
$(call tc,bin2h) tmp/$T.bin $@
# /***********************************************************************
# // armel-linux.kernel.vmlinuz
# // armel-linux.kernel.vmlinuz-head
# ************************************************************************/
#
armel-linux.kernel.vmlinu%.h : tc_list = armel-linux.kernel default
armel-linux.kernel.vmlinu%.h : tc_bfdname = elf32-littlearm
tc.armel-linux.kernel.gcc = arm-linux-gcc-4.1.0 -march=armv5 -nostdinc -MMD -MT $@
tc.armel-linux.kernel.gcc += -fno-exceptions -fno-asynchronous-unwind-tables
tc.armel-linux.kernel.gcc += -Wall -W -Wcast-align -Wcast-qual -Wstrict-prototypes -Wwrite-strings -Werror
armel-linux.kernel.vmlinu%.h : $(srcdir)/src/$$T.S
$(call tc,gcc) -c -x assembler-with-cpp $< -o tmp/$T.bin
$(call tc,f-embed_objinfo,tmp/$T.bin)
$(call tc,bin2h-c) tmp/$T.bin $@
armel-linux.kernel.vmlinuz-head.h : $(srcdir)/src/$$T.S
$(call tc,gcc) -c -x assembler-with-cpp $< -o tmp/$T.o
$(call tc,objcopy) --output-target binary --only-section .text tmp/$T.o tmp/$T.bin
$(call tc,bin2h) tmp/$T.bin $@
# /***********************************************************************
# // i386-win32.pe
# ************************************************************************/

View File

@ -0,0 +1,40 @@
/* armel-linux.kernel.vmlinuz-head.h
created from armel-linux.kernel.vmlinuz-head.bin, 8 (0x8) bytes
This file is part of the UPX executable compressor.
Copyright (C) 1996-2008 Markus Franz Xaver Johannes Oberhumer
Copyright (C) 1996-2008 Laszlo Molnar
Copyright (C) 2000-2008 John F. Reiser
All Rights Reserved.
UPX and the UCL library are free software; you can redistribute them
and/or modify them under the terms of the GNU General Public License as
published by the Free Software Foundation; either version 2 of
the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; see the file COPYING.
If not, write to the Free Software Foundation, Inc.,
59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
Markus F.X.J. Oberhumer Laszlo Molnar
<markus@oberhumer.com> <ml1050@users.sourceforge.net>
John F. Reiser
<jreiser@users.sourceforge.net>
*/
#define STUB_ARMEL_LINUX_KERNEL_VMLINUZ_HEAD_SIZE 8
#define STUB_ARMEL_LINUX_KERNEL_VMLINUZ_HEAD_ADLER32 0x17bb0637
#define STUB_ARMEL_LINUX_KERNEL_VMLINUZ_HEAD_CRC32 0xccc03eaa
unsigned char stub_armel_linux_kernel_vmlinuz_head[8] = {
/* 0x0000 */ 14,192,160,225,254,255,255,235
};

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,283 @@
file format elf32-littlearm
Sections:
Idx Name Size VMA LMA File off Algn Flags
0 LINUZVGA 00000000 00000000 00000000 00000034 2**0 CONTENTS, READONLY
1 LINUZ000 00000004 00000000 00000000 00000034 2**0 CONTENTS, READONLY
2 LINUZ001 00000004 00000000 00000000 00000038 2**0 CONTENTS, READONLY
3 LINUZ005 00000004 00000000 00000000 0000003c 2**0 CONTENTS, READONLY
4 LINUZ010 00000004 00000000 00000000 00000040 2**0 CONTENTS, READONLY
5 LINUZ101 00000004 00000000 00000000 00000044 2**0 CONTENTS, READONLY
6 LINUZ110 00000004 00000000 00000000 00000048 2**0 CONTENTS, READONLY
7 LINUZ120 00000004 00000000 00000000 0000004c 2**0 CONTENTS, READONLY
8 LINUZ130 00000004 00000000 00000000 00000050 2**0 CONTENTS, READONLY
9 LINUZ140 00000004 00000000 00000000 00000054 2**0 CONTENTS, READONLY
10 LINUZ141 00000004 00000000 00000000 00000058 2**0 CONTENTS, READONLY
11 LINUZ145 00000004 00000000 00000000 0000005c 2**0 CONTENTS, READONLY
12 LINUZ150 00000004 00000000 00000000 00000060 2**0 CONTENTS, READONLY
13 LZCALLT1 00000004 00000000 00000000 00000064 2**0 CONTENTS, READONLY
14 LZCKLLT1 00000004 00000000 00000000 00000068 2**0 CONTENTS, READONLY
15 LZIMAGE0 00000004 00000000 00000000 0000006c 2**0 CONTENTS, READONLY
16 LZCUTPOI 000002dc 00000000 00000000 00000070 2**0 CONTENTS, RELOC, READONLY
17 LZMA_ELF00 0000008c 00000000 00000000 0000034c 2**0 CONTENTS, RELOC, READONLY
18 LZMA_DEC10 00000938 00000000 00000000 000003d8 2**0 CONTENTS, RELOC, READONLY
19 LZMA_DEC20 00000938 00000000 00000000 00000d10 2**0 CONTENTS, RELOC, READONLY
20 LZMA_DEC30 00000000 00000000 00000000 00001648 2**0 CONTENTS, READONLY
21 ctok32.00 00000004 00000000 00000000 00001648 2**0 CONTENTS, READONLY
22 ctok32.50 00000004 00000000 00000000 0000164c 2**0 CONTENTS, READONLY
23 ctok32.51 00000004 00000000 00000000 00001650 2**0 CONTENTS, READONLY
24 ctok32.10 00000044 00000000 00000000 00001654 2**0 CONTENTS, RELOC, READONLY
25 UPX1HEAD 00000020 00000000 00000000 00001698 2**0 CONTENTS, READONLY
SYMBOL TABLE:
00000000 l d LZCUTPOI 00000000 LZCUTPOI
00000000 l d LZMA_ELF00 00000000 LZMA_ELF00
00000000 l d LZMA_DEC10 00000000 LZMA_DEC10
00000000 l d LZMA_DEC20 00000000 LZMA_DEC20
00000000 l d LZMA_DEC30 00000000 LZMA_DEC30
00000000 l d ctok32.10 00000000 ctok32.10
00000000 l d LINUZVGA 00000000 LINUZVGA
00000000 l d LINUZ000 00000000 LINUZ000
00000000 l d LINUZ001 00000000 LINUZ001
00000000 l d LINUZ005 00000000 LINUZ005
00000000 l d LINUZ010 00000000 LINUZ010
00000000 l d LINUZ101 00000000 LINUZ101
00000000 l d LINUZ110 00000000 LINUZ110
00000000 l d LINUZ120 00000000 LINUZ120
00000000 l d LINUZ130 00000000 LINUZ130
00000000 l d LINUZ140 00000000 LINUZ140
00000000 l d LINUZ141 00000000 LINUZ141
00000000 l d LINUZ145 00000000 LINUZ145
00000000 l d LINUZ150 00000000 LINUZ150
00000000 l d LZCALLT1 00000000 LZCALLT1
00000000 l d LZCKLLT1 00000000 LZCKLLT1
00000000 l d LZIMAGE0 00000000 LZIMAGE0
00000000 l d ctok32.00 00000000 ctok32.00
00000000 l d ctok32.50 00000000 ctok32.50
00000000 l d ctok32.51 00000000 ctok32.51
00000000 l d UPX1HEAD 00000000 UPX1HEAD
00000004 g F LZCUTPOI 000000c4 ucl_nrv2b_decompress_8
000000c8 g F LZCUTPOI 00000100 ucl_nrv2d_decompress_8
000001c8 g F LZCUTPOI 00000114 ucl_nrv2e_decompress_8
RELOCATION RECORDS FOR [LZCUTPOI]:
OFFSET TYPE VALUE
00000014 R_ARM_PC24 LZCUTPOI
0000004c R_ARM_PC24 LZCUTPOI
00000054 R_ARM_PC24 LZCUTPOI
00000058 R_ARM_PC24 LZCUTPOI
00000068 R_ARM_PC24 LZCUTPOI
0000006c R_ARM_PC24 LZCUTPOI
00000070 R_ARM_PC24 LZCUTPOI
0000007c R_ARM_PC24 LZCUTPOI
0000008c R_ARM_PC24 LZCUTPOI
00000090 R_ARM_PC24 LZCUTPOI
00000098 R_ARM_PC24 LZCUTPOI
000000a0 R_ARM_PC24 LZCUTPOI
000000a4 R_ARM_PC24 LZCUTPOI
000000c0 R_ARM_PC24 LZCUTPOI
000000c4 R_ARM_PC24 LZCUTPOI
000000d8 R_ARM_PC24 LZCUTPOI
0000010c R_ARM_PC24 LZCUTPOI
00000110 R_ARM_PC24 LZCUTPOI
00000118 R_ARM_PC24 LZCUTPOI
00000124 R_ARM_PC24 LZCUTPOI
00000130 R_ARM_PC24 LZCUTPOI
0000013c R_ARM_PC24 LZCUTPOI
00000140 R_ARM_PC24 LZCUTPOI
0000014c R_ARM_PC24 LZCUTPOI
0000015c R_ARM_PC24 LZCUTPOI
00000164 R_ARM_PC24 LZCUTPOI
0000016c R_ARM_PC24 LZCUTPOI
00000178 R_ARM_PC24 LZCUTPOI
00000180 R_ARM_PC24 LZCUTPOI
0000018c R_ARM_PC24 LZCUTPOI
00000198 R_ARM_PC24 LZCUTPOI
0000019c R_ARM_PC24 LZCUTPOI
000001c0 R_ARM_PC24 LZCUTPOI
000001c4 R_ARM_PC24 LZCUTPOI
000001d8 R_ARM_PC24 LZCUTPOI
0000020c R_ARM_PC24 LZCUTPOI
00000210 R_ARM_PC24 LZCUTPOI
00000218 R_ARM_PC24 LZCUTPOI
00000224 R_ARM_PC24 LZCUTPOI
00000230 R_ARM_PC24 LZCUTPOI
0000023c R_ARM_PC24 LZCUTPOI
00000240 R_ARM_PC24 LZCUTPOI
0000024c R_ARM_PC24 LZCUTPOI
0000025c R_ARM_PC24 LZCUTPOI
00000264 R_ARM_PC24 LZCUTPOI
00000268 R_ARM_PC24 LZCUTPOI
00000270 R_ARM_PC24 LZCUTPOI
00000274 R_ARM_PC24 LZCUTPOI
00000280 R_ARM_PC24 LZCUTPOI
00000284 R_ARM_PC24 LZCUTPOI
0000028c R_ARM_PC24 LZCUTPOI
00000298 R_ARM_PC24 LZCUTPOI
0000029c R_ARM_PC24 LZCUTPOI
000002a4 R_ARM_PC24 LZCUTPOI
000002ac R_ARM_PC24 LZCUTPOI
000002d4 R_ARM_PC24 LZCUTPOI
000002d8 R_ARM_PC24 LZCUTPOI
RELOCATION RECORDS FOR [LZMA_ELF00]:
OFFSET TYPE VALUE
00000008 R_ARM_PC24 LZMA_DEC30
0000004c R_ARM_PC24 LZMA_ELF00
00000080 R_ARM_PC24 LZMA_ELF00
RELOCATION RECORDS FOR [LZMA_DEC10]:
OFFSET TYPE VALUE
00000074 R_ARM_PC24 LZMA_DEC10
00000090 R_ARM_PC24 LZMA_DEC10
000000b8 R_ARM_PC24 LZMA_DEC10
000000cc R_ARM_PC24 LZMA_DEC10
000000f4 R_ARM_PC24 LZMA_DEC10
00000100 R_ARM_PC24 LZMA_DEC10
00000108 R_ARM_PC24 LZMA_DEC10
00000144 R_ARM_PC24 LZMA_DEC10
00000190 R_ARM_PC24 LZMA_DEC10
000001cc R_ARM_PC24 LZMA_DEC10
000001d8 R_ARM_PC24 LZMA_DEC10
00000204 R_ARM_PC24 LZMA_DEC10
00000218 R_ARM_PC24 LZMA_DEC10
00000220 R_ARM_PC24 LZMA_DEC10
00000234 R_ARM_PC24 LZMA_DEC10
0000023c R_ARM_PC24 LZMA_DEC10
00000240 R_ARM_PC24 LZMA_DEC10
0000024c R_ARM_PC24 LZMA_DEC10
00000258 R_ARM_PC24 LZMA_DEC10
000002a4 R_ARM_PC24 LZMA_DEC10
000002c8 R_ARM_PC24 LZMA_DEC10
000002e8 R_ARM_PC24 LZMA_DEC10
00000304 R_ARM_PC24 LZMA_DEC10
0000030c R_ARM_PC24 LZMA_DEC10
0000033c R_ARM_PC24 LZMA_DEC10
00000388 R_ARM_PC24 LZMA_DEC10
000003a0 R_ARM_PC24 LZMA_DEC10
000003a8 R_ARM_PC24 LZMA_DEC10
000003cc R_ARM_PC24 LZMA_DEC10
000003e0 R_ARM_PC24 LZMA_DEC10
000003e8 R_ARM_PC24 LZMA_DEC10
00000424 R_ARM_PC24 LZMA_DEC10
00000438 R_ARM_PC24 LZMA_DEC10
0000046c R_ARM_PC24 LZMA_DEC10
00000484 R_ARM_PC24 LZMA_DEC10
0000048c R_ARM_PC24 LZMA_DEC10
000004b0 R_ARM_PC24 LZMA_DEC10
000004d4 R_ARM_PC24 LZMA_DEC10
000004ec R_ARM_PC24 LZMA_DEC10
000004f4 R_ARM_PC24 LZMA_DEC10
00000518 R_ARM_PC24 LZMA_DEC10
0000053c R_ARM_PC24 LZMA_DEC10
00000598 R_ARM_PC24 LZMA_DEC10
000005a0 R_ARM_PC24 LZMA_DEC10
000005c0 R_ARM_PC24 LZMA_DEC10
000005e4 R_ARM_PC24 LZMA_DEC10
000005fc R_ARM_PC24 LZMA_DEC10
00000604 R_ARM_PC24 LZMA_DEC10
00000624 R_ARM_PC24 LZMA_DEC10
00000648 R_ARM_PC24 LZMA_DEC10
00000680 R_ARM_PC24 LZMA_DEC10
0000068c R_ARM_PC24 LZMA_DEC10
000006d0 R_ARM_PC24 LZMA_DEC10
000006ec R_ARM_PC24 LZMA_DEC10
0000071c R_ARM_PC24 LZMA_DEC10
00000728 R_ARM_PC24 LZMA_DEC10
0000076c R_ARM_PC24 LZMA_DEC10
0000077c R_ARM_PC24 LZMA_DEC10
0000079c R_ARM_PC24 LZMA_DEC10
000007b8 R_ARM_PC24 LZMA_DEC10
000007c4 R_ARM_PC24 LZMA_DEC10
000007d0 R_ARM_PC24 LZMA_DEC10
000007f4 R_ARM_PC24 LZMA_DEC10
00000820 R_ARM_PC24 LZMA_DEC10
0000082c R_ARM_PC24 LZMA_DEC10
0000087c R_ARM_PC24 LZMA_DEC10
00000888 R_ARM_PC24 LZMA_DEC10
000008a0 R_ARM_PC24 LZMA_DEC10
000008e8 R_ARM_PC24 LZMA_DEC10
000008f4 R_ARM_PC24 LZMA_DEC10
000008fc R_ARM_PC24 LZMA_DEC10
00000904 R_ARM_PC24 LZMA_DEC10
00000928 R_ARM_PC24 LZMA_DEC10
RELOCATION RECORDS FOR [LZMA_DEC20]:
OFFSET TYPE VALUE
00000074 R_ARM_PC24 LZMA_DEC20
00000090 R_ARM_PC24 LZMA_DEC20
000000b8 R_ARM_PC24 LZMA_DEC20
000000cc R_ARM_PC24 LZMA_DEC20
000000f4 R_ARM_PC24 LZMA_DEC20
00000100 R_ARM_PC24 LZMA_DEC20
00000108 R_ARM_PC24 LZMA_DEC20
00000144 R_ARM_PC24 LZMA_DEC20
00000190 R_ARM_PC24 LZMA_DEC20
000001cc R_ARM_PC24 LZMA_DEC20
000001d8 R_ARM_PC24 LZMA_DEC20
00000204 R_ARM_PC24 LZMA_DEC20
00000218 R_ARM_PC24 LZMA_DEC20
00000220 R_ARM_PC24 LZMA_DEC20
00000234 R_ARM_PC24 LZMA_DEC20
0000023c R_ARM_PC24 LZMA_DEC20
00000240 R_ARM_PC24 LZMA_DEC20
0000024c R_ARM_PC24 LZMA_DEC20
00000258 R_ARM_PC24 LZMA_DEC20
000002a4 R_ARM_PC24 LZMA_DEC20
000002c8 R_ARM_PC24 LZMA_DEC20
000002e8 R_ARM_PC24 LZMA_DEC20
00000304 R_ARM_PC24 LZMA_DEC20
0000030c R_ARM_PC24 LZMA_DEC20
0000033c R_ARM_PC24 LZMA_DEC20
00000388 R_ARM_PC24 LZMA_DEC20
000003a0 R_ARM_PC24 LZMA_DEC20
000003a8 R_ARM_PC24 LZMA_DEC20
000003cc R_ARM_PC24 LZMA_DEC20
000003e0 R_ARM_PC24 LZMA_DEC20
000003e8 R_ARM_PC24 LZMA_DEC20
00000424 R_ARM_PC24 LZMA_DEC20
00000438 R_ARM_PC24 LZMA_DEC20
0000046c R_ARM_PC24 LZMA_DEC20
00000484 R_ARM_PC24 LZMA_DEC20
0000048c R_ARM_PC24 LZMA_DEC20
000004b0 R_ARM_PC24 LZMA_DEC20
000004d4 R_ARM_PC24 LZMA_DEC20
000004ec R_ARM_PC24 LZMA_DEC20
000004f4 R_ARM_PC24 LZMA_DEC20
00000518 R_ARM_PC24 LZMA_DEC20
0000053c R_ARM_PC24 LZMA_DEC20
00000598 R_ARM_PC24 LZMA_DEC20
000005a0 R_ARM_PC24 LZMA_DEC20
000005c0 R_ARM_PC24 LZMA_DEC20
000005e4 R_ARM_PC24 LZMA_DEC20
000005fc R_ARM_PC24 LZMA_DEC20
00000604 R_ARM_PC24 LZMA_DEC20
00000624 R_ARM_PC24 LZMA_DEC20
00000648 R_ARM_PC24 LZMA_DEC20
00000680 R_ARM_PC24 LZMA_DEC20
0000068c R_ARM_PC24 LZMA_DEC20
000006d0 R_ARM_PC24 LZMA_DEC20
000006ec R_ARM_PC24 LZMA_DEC20
0000071c R_ARM_PC24 LZMA_DEC20
00000728 R_ARM_PC24 LZMA_DEC20
0000076c R_ARM_PC24 LZMA_DEC20
0000077c R_ARM_PC24 LZMA_DEC20
0000079c R_ARM_PC24 LZMA_DEC20
000007b8 R_ARM_PC24 LZMA_DEC20
000007c4 R_ARM_PC24 LZMA_DEC20
000007d0 R_ARM_PC24 LZMA_DEC20
000007f4 R_ARM_PC24 LZMA_DEC20
00000820 R_ARM_PC24 LZMA_DEC20
0000082c R_ARM_PC24 LZMA_DEC20
0000087c R_ARM_PC24 LZMA_DEC20
00000888 R_ARM_PC24 LZMA_DEC20
000008a0 R_ARM_PC24 LZMA_DEC20
000008e8 R_ARM_PC24 LZMA_DEC20
000008f4 R_ARM_PC24 LZMA_DEC20
000008fc R_ARM_PC24 LZMA_DEC20
00000904 R_ARM_PC24 LZMA_DEC20
00000928 R_ARM_PC24 LZMA_DEC20
RELOCATION RECORDS FOR [ctok32.10]:
OFFSET TYPE VALUE
00000020 R_ARM_PC24 ctok32.10
0000003c R_ARM_PC24 ctok32.10