More work on lzma for dos/exe.

This commit is contained in:
Markus F.X.J. Oberhumer
2007-02-11 21:20:00 +01:00
parent 44ed84f5cf
commit b62573ae8f
12 changed files with 6243 additions and 3299 deletions
+1549 -1637
View File
File diff suppressed because it is too large Load Diff
+1
View File
@@ -88,6 +88,7 @@ def create_bindump(bindump_fn, dump_fn):
e = f[1], int(f[2], 16), int(f[5], 16), int(f[6][3:], 10), len(sections) e = f[1], int(f[2], 16), int(f[5], 16), int(f[6][3:], 10), len(sections)
sections.append(e) sections.append(e)
assert not section_names.has_key(e[0]), e assert not section_names.has_key(e[0]), e
assert not e[0].endswith(":"), ("bad section name", e)
section_names[e[0]] = e section_names[e[0]] = e
##print sections ##print sections
# preprocessSymbols # preprocessSymbols
+69 -62
View File
@@ -1,13 +1,5 @@
# #
# highly experimental support for i086 using Open Watcom 1.6: # highly experimental support for i086 using Open Watcom 1.6
#
# - download http://ftp.openwatcom.org/ftp/open-watcom-c-win32-1.6.exe
# - this .exe is actually a .zip, so unzip into a new diretory
# - the "binl" subdirectory does contain the (unofficial) Linux-hosted tools
# - set your envvar WATCOM to the main Watcom dir (see below)
#
# FIXME: how to convert the .obj to ELF ???
# FIXME: (we could use a Python script to convert the .disasm)
# #
MAKEFLAGS += -rR MAKEFLAGS += -rR
@@ -26,13 +18,7 @@ vpath %.c $(top_srcdir)/src/stub/src/c
##export WATCOM ?= /opt/cc-i386-linux/watcom/open-watcom-1.6 ##export WATCOM ?= /opt/cc-i386-linux/watcom/open-watcom-1.6
STUBS = STUBS =
ifneq ($(wildcard $(UPX_LZMADIR)/C/7zip/.),)
ifneq ($(wildcard $(WATCOM)/binl/.),)
ifneq ($(wildcard $(VCLINK.exe)),)
STUBS += lzma_d_cf.S lzma_d_cs.S STUBS += lzma_d_cf.S lzma_d_cs.S
endif
endif
endif
default.targets = all default.targets = all
ifeq ($(strip $(STUBS)),) ifeq ($(strip $(STUBS)),)
@@ -46,12 +32,13 @@ include $(top_srcdir)/src/stub/Makefile
# // method-lzma # // method-lzma
# ************************************************************************/ # ************************************************************************/
lzma_d_c%.S : tc_list = method-lzma default lzma_d_c% : tc_list = method-lzma default
lzma_d_c%.S : tc_bfdname = lzma_d_c% : tc_bfdname =
# Open Watcom C/C++ 1.6
c := tc.method-lzma.wcc c := tc.method-lzma.wcc
$c = $(WATCOM)/binl/wcc -zq -bt=dos $c = $(WATCOM)/binl/wcc -zq -bt=dos
$c += -mc $c += -mc -ecc
$c += -zm -zc $c += -zm -zc
$c += -os -s -0 -d0 $c += -os -s -0 -d0
$c += -w5 -we -fr=/dev/null $c += -w5 -we -fr=/dev/null
@@ -59,59 +46,38 @@ $c += -D__INT_MAX__=32767
$c += -I$(UPX_LZMADIR) $c += -I$(UPX_LZMADIR)
$c += -I$(top_srcdir)/src $c += -I$(top_srcdir)/src
ifneq ($(wildcard $(BC502DIR)/bin/.),)
c := tc.method-lzma.bcc
$c = @$(WINEENV) CL='$(CL)' wine cmd.exe /c tmp/bcc.bat
$c += -mc
$c += -O1 -1
$c += -w
$c += -D__INT_MAX__=32767
##$c += -I$(subst \,/,$(shell winepath -s z:$(realpath $(UPX_LZMADIR))))
$c += -I$(subst \,/,$(shell winepath -s z:$(realpath $(UPX_LZMADIR)/C/7zip/Compress/LZMA_C)))
$c += -I$(top_srcdir)/src
endif
ifneq ($(wildcard $(DM847DIR)/bin/.),)
c := tc.method-lzma.dmc
$c = @$(WINEENV) CFLAGS='$(DMC)' wine cmd.exe /c tmp/dmc.bat
$c += -mc
$c += -NS
$c += -w-
DMC := -o -0
DMC += -D__INT_MAX__=32767
DMC += -I$(shell winepath -s z:$(realpath $(UPX_LZMADIR)))
DMC += -I$(shell winepath -s z:$(realpath $(top_srcdir)/src))
endif
ifneq ($(wildcard $(VC152DIR)/bin/.),)
c := tc.method-lzma.cl
$c = @$(WINEENV) CL='$(CL)' wine cmd.exe /c tmp/cl.bat
$c += -AC
$c += -Gy
$c += -O1 -Gf -Gs -G0
$c += -W4
CL := -nologo
CL += -D__INT_MAX__=32767
CL += -I$(shell winepath -s z:$(realpath $(UPX_LZMADIR)))
CL += -I$(shell winepath -s z:$(realpath $(top_srcdir)/src))
endif
tc.method-lzma.dmpobj = $(WATCOM)/binl/dmpobj tc.method-lzma.dmpobj = $(WATCOM)/binl/dmpobj
tc.method-lzma.wdis = $(WATCOM)/binl/wdis tc.method-lzma.wdis = $(WATCOM)/binl/wdis
tc.method-lzma.wdump = $(WATCOM)/binl/wdump tc.method-lzma.wdump = $(WATCOM)/binl/wdump
lzma_d_c%.S : lzma_d_c.c cleanasm.py $(MAKEFILE_LIST) lzma_d_c%.S : lzma_d_c%.i cleanasm.py $(MAKEFILE_LIST)
python cleanasm.py --label-prefix=$(LABEL_PREFIX) $< $@
ifneq ($(wildcard $(UPX_LZMADIR)/C/7zip/.),)
ifneq ($(wildcard $(WATCOM)/binl/.),)
ifneq ($(wildcard $(VCLINK.exe)),)
lzma_d_c%.i : lzma_d_c.c tmp/.tmp-stamp $(MAKEFILE_LIST)
rm -f tmp/$T.a tmp/$T.o tmp/$T.obj
# compile
$(call tc,wcc) $(PP_FLAGS) -fo=tmp/$T.obj $< $(call tc,wcc) $(PP_FLAGS) -fo=tmp/$T.obj $<
## $(call tc,bcc) $(PP_FLAGS) -c -otmp/$T.obj $< ## $(call tc,bcc) $(PP_FLAGS) -c -otmp/$T.obj $<
## $(call tc,dmc) $(PP_FLAGS) -c -otmp/$T.obj $< ## $(call tc,dmc) $(PP_FLAGS) -c -otmp/$T.obj $<
## $(call tc,cl) $(PP_FLAGS) -c -Fotmp/$T.obj $< ## $(call tc,cl) $(PP_FLAGS) -c -Fotmp/$T.obj $<
$(call tc,wdis) tmp/$T.obj | $(RTRIM) > tmp/$T.obj.disasm $(call tc,wdis) tmp/$T.obj | $(RTRIM) > tmp/$T.obj.disasm
cp tmp/$T.obj tmp/$T.o # convert OMF to COFF because objdump does not support OMF
rm -f tmp/$T.lib # TODO: should write a Python script wdis2gas.py and use that instead
cd tmp && $(WINEENV) wine $(VCLINK.exe) -lib -nologo -out:$T.lib $T.o cp -p tmp/$T.obj tmp/$T.o
cd tmp && $(call tc,m-ar) x $T.lib cd tmp && $(WINEENV) wine $(VCLINK.exe) -lib -nologo -out:$T.a $T.o
$(call tc,objdump) -b coff-i386 -m i8086 -M intel -Dr --no-show -w tmp/$T.o | $(RTRIM) > tmp/$T.o.disasm cd tmp && $(call tc,m-ar) x $T.a
python cleanasm.py --label-prefix=$(LABEL_PREFIX) tmp/$T.o.disasm $@ # dump
$(call tc,objdump) -b coff-i386 -m i8086 -M intel -Dr --no-show -w tmp/$T.o | $(RTRIM) > $@
.PRECIOUS: lzma_d_cf.i lzma_d_cs.i
endif
endif
endif
lzma_d_cf.% : PP_FLAGS = -DFAST lzma_d_cf.% : PP_FLAGS = -DFAST
lzma_d_cs.% : PP_FLAGS = -DSMALL lzma_d_cs.% : PP_FLAGS = -DSMALL
@@ -139,6 +105,47 @@ define mkbat
unix2dos -q $1 unix2dos -q $1
endef endef
# Borland C/C++ 5.02
ifneq ($(wildcard $(BC502DIR)/bin/.),)
c := tc.method-lzma.bcc
$c = @$(WINEENV) CL='$(CL)' wine cmd.exe /c tmp/bcc.bat
$c += -mc
$c += -O1 -1
$c += -w
$c += -D__INT_MAX__=32767
##$c += -I$(subst \,/,$(shell winepath -s z:$(realpath $(UPX_LZMADIR))))
$c += -I$(subst \,/,$(shell winepath -s z:$(realpath $(UPX_LZMADIR)/C/7zip/Compress/LZMA_C)))
$c += -I$(top_srcdir)/src
endif
# Digital Mars C/C++ 8.47
ifneq ($(wildcard $(DM847DIR)/bin/.),)
c := tc.method-lzma.dmc
$c = @$(WINEENV) CFLAGS='$(DMC)' wine cmd.exe /c tmp/dmc.bat
$c += -mc
$c += -NS
$c += -w-
DMC := -o -0
DMC += -D__INT_MAX__=32767
DMC += -I$(shell winepath -s z:$(realpath $(UPX_LZMADIR)))
DMC += -I$(shell winepath -s z:$(realpath $(top_srcdir)/src))
endif
# Visual C/C++ 1.52 (8.00c)
ifneq ($(wildcard $(VC152DIR)/bin/.),)
c := tc.method-lzma.cl
$c = @$(WINEENV) CL='$(CL)' wine cmd.exe /c tmp/cl.bat
$c += -AC
$c += -Gy
$c += -O1 -Gf -Gs -G0
$c += -W4
CL := -nologo
CL += -D__INT_MAX__=32767
CL += -I$(shell winepath -s z:$(realpath $(UPX_LZMADIR)))
CL += -I$(shell winepath -s z:$(realpath $(top_srcdir)/src))
endif
ifneq ($(wildcard $(WATCOM)/binl/.),) ifneq ($(wildcard $(WATCOM)/binl/.),)
cc_test_wc : tc_list = method-lzma default cc_test_wc : tc_list = method-lzma default
cc_test_wc: cc_test.c cc_test_wc: cc_test.c
+195 -29
View File
@@ -34,6 +34,18 @@ import getopt, os, re, string, sys
class opts: class opts:
label_prefix = ".L" label_prefix = ".L"
verbose = 0 verbose = 0
# optimizer flags
auto_inline = 1
call_rewrite = 1
inline_map = {
## "__PIA": "WCC_PIA",
"__PTS": "WCC_PTS",
## "__U4M_V01": "WCC_U4M_V01",
"__PIA_V02": "WCC_PIA_V02",
"__PIA_V01": "WCC_PIA_V01",
}
# /*********************************************************************** # /***********************************************************************
@@ -60,54 +72,208 @@ def main(argv):
lines = open(ifile, "rb").readlines() lines = open(ifile, "rb").readlines()
lines = filter(None, map(string.rstrip, lines)) lines = filter(None, map(string.rstrip, lines))
# #
olines = [] #
labels = {} labels = {}
def parse_label(inst, args):
m = re.search("^([0-9a-z]+)\s+<", args)
if m:
# local label
k, v = m.group(1).strip(), [0, 0, None, 0]
m = re.search(r"^(.*?)\b2\s+(__\w+)$", args)
if m:
# external 2-byte label
k, v = m.group(2).strip(), [1, 2, None, 0]
v[2] = k # new name
if labels.has_key(k):
assert labels[k][:2] == v[:2]
return k, v
def add_label(k, v):
if labels.has_key(k):
assert labels[k][:2] == v[:2]
else:
labels[k] = v
labels[k][3] += 1 # usage counter
return k
olines = []
def omatch(pos, m):
i = 0
dpos = []
while i < len(m):
if pos < 0 or pos >= len(olines):
return False
dpos.append(pos)
o = olines[pos][1:3]
assert len(m[i]) == 2, (i, m)
if o[0].lower() != m[i][0].lower():
return False
if o[1].lower() != m[i][1].lower():
return []
pos += 1
i += 1
return dpos
def orewrite(i, k, v, dpos):
for pos in dpos:
olines[pos][1] = "*DEL*"
v[2] = k
olines[i][2] = None
olines[i][3] = add_label(k, v)
#
# pass 1
func = None
for i in range(len(lines)): for i in range(len(lines)):
l = lines[i] l = lines[i]
m = re.search("^(\s*[0-9a-z]+):\s+(\w+)(.*)", l) m = re.search(r"^0000000000000000\s*<(\w+)>:", l)
if m:
func = re.sub(r"^_+|_+$", "", m.group(1))
if not func in ["LzmaDecode"]:
continue
m = re.search(r"^(\s*[0-9a-z]+):\s+(\w+)(.*)", l)
if not m: if not m:
continue continue
label = m.group(1).strip() label = m.group(1).strip()
inst = m.group(2).strip() inst = m.group(2).strip()
args = "" args = ""
if m.group(3): args = m.group(3).strip() if m.group(3): args = m.group(3).strip()
args_label = None
if label == "0" and olines: # start of next function
break
if inst in ["call",]:
args = re.sub(r"^(.*?)2\s+(__\w+)$", "\g<2>", args)
elif inst in [
"ja", "jae", "jb", "jbe", "jcxz", "je", "jge", "jl", "jmp", "jne", "loop",
]:
m = re.search("^([0-9a-z]+)\s+<", args)
assert m, l
if m:
labels[m.group(1)] = ""
args_label = m.group(1)
args = None
elif inst in ["movl",]:
assert re.search(r"\b[de]s\b", args), args
inst = "movw"
olines.append((label, inst, args, args_label))
# #
if inst in ["movl",] and re.search(r"\b[de]s\b", args):
# correct objdump bug
inst = "movw"
m = re.search(r"^(.+?)\b0x0\s+(\w+):\s+[12]\s+(__\w+)$", args)
if m:
# 1 or 2 byte reloc
args = m.group(1) + m.group(3)
olines.append([label, inst, args, None])
#
# pass 2
for i in range(len(olines)):
label, inst, args, args_label = olines[i]
#
if inst == "*DEL*":
continue
#
if opts.call_rewrite and inst in ["call"]:
k, v = parse_label(inst, args)
if v[:2] == [1, 2]: # external 2-byte
if k == "__PIA":
inst1 = [
["mov", "bx,WORD PTR [bp-94]"],
["or", "bx,ax"],
["mov", "WORD PTR [bp-8],bx"],
["mov", "WORD PTR [bp-4],dx"],
["mov", "ax,WORD PTR [bp-12]"],
["movw", "dx,ds"],
["mov", "bx,0x1"],
["xor", "cx,cx"],
]
inst2 = [
["mov", "WORD PTR [bp-12],ax"],
["movw", "ds,dx"],
]
dpos1 = omatch(i - 8, inst1[-8:])
dpos2 = omatch(i + 1, inst2)
if dpos1 and dpos2:
orewrite(i, "__PIA_V04", v, dpos1 + dpos2)
continue
dpos1 = omatch(i - 4, inst1[-4:])
dpos2 = omatch(i + 1, inst2)
if dpos1 and dpos2:
orewrite(i, "__PIA_V03", v, dpos1 + dpos2)
continue
dpos = omatch(i - 3, inst1[-3:])
if dpos:
orewrite(i, "__PIA_V02", v, dpos)
continue
dpos = omatch(i - 2, inst1[-2:])
if dpos:
orewrite(i, "__PIA_V01", v, dpos)
continue
if k == "__PTC":
inst1 = [
["mov", "ax,WORD PTR [bp-12]"],
["movw", "dx,ds"],
["mov", "bx,WORD PTR [bp-26]"],
["mov", "cx,WORD PTR [bp-24]"],
]
dpos = omatch(i - 4, inst1[-4:])
if dpos:
orewrite(i, "__PTC_V01", v, dpos)
continue
if k == "__U4M":
inst1 = [
["mov", "bx,WORD PTR es:[bx]"],
["mov", "ax,WORD PTR [bp-102]"],
["mov", "dx,WORD PTR [bp-100]"],
["xor", "cx,cx"],
]
inst2 = [
["mov", "WORD PTR [bp-10],ax"],
["mov", "WORD PTR [bp-6],dx"],
]
dpos1 = omatch(i - 4, inst1[-4:])
dpos2 = omatch(i + 1, inst2)
if dpos1 and dpos2:
orewrite(i, "__U4M_V02", v, dpos1 + dpos2)
continue
dpos = omatch(i - 1, inst1[-1:])
if dpos:
orewrite(i, "__U4M_V01", v, dpos)
continue
#
if inst in [
"call", "ja", "jae", "jb", "jbe", "jcxz",
"je", "jge", "jl", "jmp", "jne", "loop",
]:
k, v = parse_label(inst, args)
olines[i][2] = None
olines[i][3] = add_label(k, v)
#
# rewrite local labels
digits, i = 1, len(labels) digits, i = 1, len(labels)
while i >= 10: while i >= 10:
digits += 1 digits += 1
i /= 10 i /= 10
format = "%s0%dd" % ("%", digits) format = "%s0%dd" % ("%", digits)
i = 0 counter = 0
for label, inst, args, args_label in olines: for i in range(len(olines)):
if labels.has_key(label): label, inst, args, args_label = olines[i]
labels[label] = opts.label_prefix + format % i # rewrite local labels
i += 1 v = labels.get(label)
if v is not None:
assert v[:3] == [0, 0, label], (label, v)
v[2] = opts.label_prefix + format % counter
counter += 1
# handle inlining
if opts.auto_inline and inst == "call":
v = labels[args_label]
if v[:2] == [1, 2]: # external 2-byte
if v[3] == 1: # only one call
x = inline_map.get(v[2])
##print "inline", v, x
if x:
olines[i][1] = x
olines[i][2] = "/* inlined */"
olines[i][2] = ""
olines[i][3] = None
# write ofile # write ofile
ofp = open(ofile, "wb") ofp = open(ofile, "wb")
for label, inst, args, args_label in olines: for label, inst, args, args_label in olines:
if labels.has_key(label): if labels.has_key(label):
ofp.write(labels[label] + ":\n") if opts.verbose:
if args_label: args = labels[args_label] ofp.write("%s: /* %d */\n" % (labels[label][2], labels[label][3]))
else:
ofp.write("%s:\n" % (labels[label][2]))
if inst == "*DEL*":
continue
if args_label:
if opts.verbose:
args = "%s /* %d */" % (labels[args_label][2], labels[args_label][3])
else:
args = labels[args_label][2]
l = "%8s%-7s %s" % ("", inst, args) l = "%8s%-7s %s" % ("", inst, args)
ofp.write(l.rstrip() + "\n") ofp.write(l.rstrip() + "\n")
ofp.close() ofp.close()
+86
View File
@@ -37,6 +37,89 @@
; Output: ; Output:
*/ */
/*************************************************************************
// support code (see cleanasm.py)
**************************************************************************/
section LZMA_DEC99
__PIA_V04:
mov bx,WORD PTR [bp-94]
or bx,ax
mov WORD PTR [bp-8],bx
mov WORD PTR [bp-4],dx
__PIA_V03:
mov ax,WORD PTR [bp-12]
// FIXME: need optimized version here
movw dx,ds
mov bx,0x1
xor cx,cx
M_WCC_PIA
mov WORD PTR [bp-12],ax
movw ds,dx
ret
#if 1
.macro lzma_WCC_PIA_V02
// FIXME: need optimized version here
movw dx,ds
mov bx,0x1
xor cx,cx
M_WCC_PIA
.endm
#define WCC_PIA_V02 lzma_WCC_PIA_V02
#endif
__PIA:
M_WCC_PIA
ret
__PTC_V01:
mov ax,WORD PTR [bp-12]
movw dx,ds
mov bx,WORD PTR [bp-26]
mov cx,WORD PTR [bp-24]
__PTC:
M_WCC_PTC
ret
#if 1
// FIXME: do we actually need the PTS result ??
#define WCC_PTS M_WCC_PTS
#else
#define WCC_PTS xor ax,ax; xor dx,dx
#endif
__U4M_V02:
mov bx,WORD PTR es:[bx]
mov ax,WORD PTR [bp-102]
mov dx,WORD PTR [bp-100]
// FIXME: need optimized version here (cx = 0)
xor cx,cx
M_WCC_U4M
mov WORD PTR [bp-10],ax
mov WORD PTR [bp-6],dx
ret
__U4M_V01:
// FIXME: need optimized version here (cx = 0)
xor cx,cx
M_WCC_U4M
ret
/*************************************************************************
//
**************************************************************************/
// init // init
section LZMA_DEC00 section LZMA_DEC00
@@ -54,5 +137,8 @@ section LZMA_DEC20
section LZMA_DEC30 section LZMA_DEC30
#undef WCC_PIA_V02
#undef WCC_PTS
// vi:ts=8:et // vi:ts=8:et
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
+7 -20
View File
@@ -134,42 +134,30 @@
*/ */
/* DOS real mode */ /* DOS real mode */
#define _AHSHIFT 12 #define __AHSHIFT 12
#define _AHINCR (1 << _AHSHIFT) /* 4096 */ #define __AHINCR (1 << __AHSHIFT) /* 4096 */
// huge pointer add: dx:ax = dx:ax + cx:bx // huge pointer add: dx:ax = dx:ax + cx:bx
.macro M_WCC_PIA_086 .macro M_WCC_PIA
add ax, bx add ax, bx
adc cx, 0 adc cx, 0
mov cx, bx mov cx, bx
mov cl, _AHSHIFT mov cl, __AHSHIFT
shl bx, cl shl bx, cl
add dx, bx add dx, bx
.endm .endm
.macro M_WCC_PIA_286
add ax, bx
adc cx, 0
shl cx, _AHSHIFT
add dx, cx
.endm
// huge pointer sub: dx:ax = dx:ax - cx:bx // huge pointer sub: dx:ax = dx:ax - cx:bx
.macro M_WCC_PIS_086 .macro M_WCC_PIS
sub ax, bx sub ax, bx
adc cx, 0 adc cx, 0
mov cx, bx mov cx, bx
mov cl, _AHSHIFT mov cl, __AHSHIFT
shl bx, cl shl bx, cl
sub dx, bx sub dx, bx
.endm .endm
.macro M_WCC_PIS_286
sub ax, bx
adc cx, 0
shl cx, _AHSHIFT
sub dx, cx
.endm
// huge pointer diff: dx:ax = dx:ax - cx:bx // huge pointer diff: dx:ax = dx:ax - cx:bx
@@ -195,10 +183,9 @@ L1:
// umul32: dx:ax = dx:ax * cx:bx // umul32: dx:ax = dx:ax * cx:bx
.macro M_WCC_U4M .macro M_WCC_U4M
push si // FIXME
// compute high-word // compute high-word
// add low-word // add low-word
pop si
.endm .endm
-17
View File
@@ -219,23 +219,6 @@ section EXERETIP
lret lret
section __PIA
M_WCC_PIA_086
ret
//section __PIS
// M_WCC_PIS_086
// ret
section __PTS
M_WCC_PTS
ret
section __PTC
M_WCC_PTC
ret
section __U4M
M_WCC_U4M
ret
/* /*
vi:ts=8:et:nowrap vi:ts=8:et:nowrap
*/ */
+123 -133
View File
@@ -44,29 +44,26 @@ Idx Name Size VMA LMA File off Algn Flags
39 NRV2EEX3 00000015 00000000 00000000 0000027b 2**0 CONTENTS, RELOC, READONLY 39 NRV2EEX3 00000015 00000000 00000000 0000027b 2**0 CONTENTS, RELOC, READONLY
40 N2E64K02 0000000b 00000000 00000000 00000290 2**0 CONTENTS, READONLY 40 N2E64K02 0000000b 00000000 00000000 00000290 2**0 CONTENTS, READONLY
41 NRV2EEX9 00000004 00000000 00000000 0000029b 2**0 CONTENTS, READONLY 41 NRV2EEX9 00000004 00000000 00000000 0000029b 2**0 CONTENTS, READONLY
42 LZMA_DEC00 00000000 00000000 00000000 0000029f 2**0 CONTENTS, READONLY 42 LZMA_DEC99 0000005d 00000000 00000000 0000029f 2**0 CONTENTS, READONLY
43 LZMA_DEC10 00001191 00000000 00000000 0000029f 2**0 CONTENTS, RELOC, READONLY 43 LZMA_DEC00 00000000 00000000 00000000 000002fc 2**0 CONTENTS, READONLY
44 LZMA_DEC20 00001191 00000000 00000000 00001430 2**0 CONTENTS, RELOC, READONLY 44 LZMA_DEC10 00000ea2 00000000 00000000 000002fc 2**0 CONTENTS, RELOC, READONLY
45 LZMA_DEC30 00000000 00000000 00000000 000025c1 2**0 CONTENTS, READONLY 45 LZMA_DEC20 00000ea2 00000000 00000000 0000119e 2**0 CONTENTS, RELOC, READONLY
46 EXEMAIN5 00000001 00000000 00000000 000025c1 2**0 CONTENTS, READONLY 46 LZMA_DEC30 00000000 00000000 00000000 00002040 2**0 CONTENTS, READONLY
47 EXEADJUS 00000007 00000000 00000000 000025c2 2**0 CONTENTS, READONLY 47 EXEMAIN5 00000001 00000000 00000000 00002040 2**0 CONTENTS, READONLY
48 EXENOADJ 00000002 00000000 00000000 000025c9 2**0 CONTENTS, READONLY 48 EXEADJUS 00000007 00000000 00000000 00002041 2**0 CONTENTS, READONLY
49 EXERELO1 0000001e 00000000 00000000 000025cb 2**0 CONTENTS, RELOC, READONLY 49 EXENOADJ 00000002 00000000 00000000 00002048 2**0 CONTENTS, READONLY
50 EXEREL9A 00000012 00000000 00000000 000025e9 2**0 CONTENTS, RELOC, READONLY 50 EXERELO1 0000001e 00000000 00000000 0000204a 2**0 CONTENTS, RELOC, READONLY
51 EXERELO2 00000004 00000000 00000000 000025fb 2**0 CONTENTS, READONLY 51 EXEREL9A 00000012 00000000 00000000 00002068 2**0 CONTENTS, RELOC, READONLY
52 EXEREBIG 00000002 00000000 00000000 000025ff 2**0 CONTENTS, RELOC, READONLY 52 EXERELO2 00000004 00000000 00000000 0000207a 2**0 CONTENTS, READONLY
53 EXERELO3 00000002 00000000 00000000 00002601 2**0 CONTENTS, RELOC, READONLY 53 EXEREBIG 00000002 00000000 00000000 0000207e 2**0 CONTENTS, RELOC, READONLY
54 EXEMAIN8 00000003 00000000 00000000 00002603 2**0 CONTENTS, READONLY 54 EXERELO3 00000002 00000000 00000000 00002080 2**0 CONTENTS, RELOC, READONLY
55 DEVICEEND 00000013 00000000 00000000 00002606 2**0 CONTENTS, READONLY 55 EXEMAIN8 00000003 00000000 00000000 00002082 2**0 CONTENTS, READONLY
56 EXESTACK 00000006 00000000 00000000 00002619 2**0 CONTENTS, RELOC, READONLY 56 DEVICEEND 00000013 00000000 00000000 00002085 2**0 CONTENTS, READONLY
57 EXESTASP 00000003 00000000 00000000 0000261f 2**0 CONTENTS, RELOC, READONLY 57 EXESTACK 00000006 00000000 00000000 00002098 2**0 CONTENTS, RELOC, READONLY
58 EXEJUMPF 00000005 00000000 00000000 00002622 2**0 CONTENTS, RELOC, READONLY 58 EXESTASP 00000003 00000000 00000000 0000209e 2**0 CONTENTS, RELOC, READONLY
59 EXERCSPO 00000004 00000000 00000000 00002627 2**0 CONTENTS, RELOC, READONLY 59 EXEJUMPF 00000005 00000000 00000000 000020a1 2**0 CONTENTS, RELOC, READONLY
60 EXERETIP 00000006 00000000 00000000 0000262b 2**0 CONTENTS, RELOC, READONLY 60 EXERCSPO 00000004 00000000 00000000 000020a6 2**0 CONTENTS, RELOC, READONLY
61 __PIA 0000000e 00000000 00000000 00002631 2**0 CONTENTS, READONLY 61 EXERETIP 00000006 00000000 00000000 000020aa 2**0 CONTENTS, RELOC, READONLY
62 __PTS 00000005 00000000 00000000 0000263f 2**0 CONTENTS, READONLY
63 __PTC 00000007 00000000 00000000 00002644 2**0 CONTENTS, READONLY
64 __U4M 00000003 00000000 00000000 0000264b 2**0 CONTENTS, READONLY
SYMBOL TABLE: SYMBOL TABLE:
00000000 l d DEVICEENTRY 00000000 DEVICEENTRY 00000000 l d DEVICEENTRY 00000000 DEVICEENTRY
00000000 l d EXEENTRY 00000000 EXEENTRY 00000000 l d EXEENTRY 00000000 EXEENTRY
@@ -82,10 +79,7 @@ SYMBOL TABLE:
00000000 l d NRV2EEX2 00000000 NRV2EEX2 00000000 l d NRV2EEX2 00000000 NRV2EEX2
00000000 l d NRV2EEX3 00000000 NRV2EEX3 00000000 l d NRV2EEX3 00000000 NRV2EEX3
00000000 l d NRV2EEX9 00000000 NRV2EEX9 00000000 l d NRV2EEX9 00000000 NRV2EEX9
00000000 l d __PIA 00000000 __PIA 00000000 l d LZMA_DEC99 00000000 LZMA_DEC99
00000000 l d __PTC 00000000 __PTC
00000000 l d __U4M 00000000 __U4M
00000000 l d __PTS 00000000 __PTS
00000000 l d EXERELO1 00000000 EXERELO1 00000000 l d EXERELO1 00000000 EXERELO1
00000000 l d EXERELO2 00000000 EXERELO2 00000000 l d EXERELO2 00000000 EXERELO2
00000000 l d DEVICESUB 00000000 DEVICESUB 00000000 l d DEVICESUB 00000000 DEVICESUB
@@ -250,115 +244,111 @@ OFFSET TYPE VALUE
RELOCATION RECORDS FOR [LZMA_DEC10]: RELOCATION RECORDS FOR [LZMA_DEC10]:
OFFSET TYPE VALUE OFFSET TYPE VALUE
000000ec R_386_PC16 __PIA 000000e5 R_386_PC16 LZMA_DEC99
00000137 R_386_PC16 __PIA 0000011b R_386_PC16 LZMA_DEC99
00000153 R_386_PC16 __PTC 00000127 R_386_PC16 LZMA_DEC99
000001a7 R_386_PC16 __PTC 00000170 R_386_PC16 LZMA_DEC99
000001e5 R_386_PC16 __PIA 00000199 R_386_PC16 LZMA_DEC99
0000020c R_386_PC16 __U4M 000001b0 R_386_PC16 LZMA_DEC99
00000277 R_386_PC16 __U4M 00000213 R_386_PC16 LZMA_DEC99
000002ab R_386_PC16 __PIA 00000247 R_386_PC16 LZMA_DEC99
000002f2 R_386_PC16 __PTC 00000283 R_386_PC16 LZMA_DEC99
00000333 R_386_PC16 __PIA 000002af R_386_PC16 LZMA_DEC99
0000035a R_386_PC16 __U4M 000002c6 R_386_PC16 LZMA_DEC99
000003f1 R_386_PC16 __PTC 0000034c R_386_PC16 LZMA_DEC99
00000432 R_386_PC16 __PIA 00000378 R_386_PC16 LZMA_DEC99
00000459 R_386_PC16 __U4M 0000038f R_386_PC16 LZMA_DEC99
000004cf R_386_PC16 __PIA 000003ff R_386_PC16 LZMA_DEC99
00000542 R_386_PC16 __PTC 00000467 R_386_PC16 LZMA_DEC99
00000583 R_386_PC16 __PIA 00000493 R_386_PC16 LZMA_DEC99
000005aa R_386_PC16 __U4M 000004aa R_386_PC16 LZMA_DEC99
0000065f R_386_PC16 __PTC 0000054e R_386_PC16 LZMA_DEC99
000006a0 R_386_PC16 __PIA 0000057a R_386_PC16 LZMA_DEC99
000006c7 R_386_PC16 __U4M 00000591 R_386_PC16 LZMA_DEC99
000006da R_386_PC16 __PIA 000005ff R_386_PC16 LZMA_DEC99
0000073d R_386_PC16 __PTC 00000657 R_386_PC16 LZMA_DEC99
000007a0 R_386_PC16 __U4M 000006b0 R_386_PC16 LZMA_DEC99
000007ff R_386_PC16 __PIA 000006d1 R_386_PC16 LZMA_DEC99
00000820 R_386_PC16 __PIA 0000073a R_386_PC16 LZMA_DEC99
00000894 R_386_PC16 __PTC 0000078e R_386_PC16 LZMA_DEC99
000008f3 R_386_PC16 __U4M 000007f8 R_386_PC16 LZMA_DEC99
0000096e R_386_PC16 __PTC 00000824 R_386_PC16 LZMA_DEC99
000009af R_386_PC16 __PIA 0000083b R_386_PC16 LZMA_DEC99
000009d6 R_386_PC16 __U4M 000008ea R_386_PC16 LZMA_DEC99
00000a96 R_386_PC16 __PTC 00000916 R_386_PC16 LZMA_DEC99
00000ad7 R_386_PC16 __PIA 00000930 R_386_PC16 LZMA_DEC99
00000b01 R_386_PC16 __U4M 000009ad R_386_PC16 LZMA_DEC99
00000b8f R_386_PC16 __PTC 000009d9 R_386_PC16 LZMA_DEC99
00000bd0 R_386_PC16 __PIA 000009f3 R_386_PC16 LZMA_DEC99
00000bfa R_386_PC16 __U4M 00000a93 R_386_PC16 LZMA_DEC99
00000caa R_386_PC16 __PTC 00000abf R_386_PC16 LZMA_DEC99
00000ceb R_386_PC16 __PIA 00000ad6 R_386_PC16 LZMA_DEC99
00000d12 R_386_PC16 __U4M 00000b8f R_386_PC16 LZMA_DEC99
00000ddc R_386_PC16 __PTC 00000bbb R_386_PC16 LZMA_DEC99
00000e1d R_386_PC16 __PIA 00000bd2 R_386_PC16 LZMA_DEC99
00000e44 R_386_PC16 __U4M 00000c90 R_386_PC16 LZMA_DEC99
00000f13 R_386_PC16 __PTC 00000cbc R_386_PC16 LZMA_DEC99
00000f54 R_386_PC16 __PIA 00000d27 R_386_PC16 LZMA_DEC99
00000fd0 R_386_PC16 __PTC 00000d53 R_386_PC16 LZMA_DEC99
00001011 R_386_PC16 __PIA 00000d6a R_386_PC16 LZMA_DEC99
00001038 R_386_PC16 __U4M 00000e17 R_386_PC16 LZMA_DEC99
000010eb R_386_PC16 __PIA 00000e3b R_386_PC16 LZMA_DEC99
0000110f R_386_PC16 __PIA 00000e6b R_386_PC16 LZMA_DEC99
0000114a R_386_PC16 __PTC 00000e73 R_386_PC16 LZMA_DEC99
0000115c R_386_PC16 __PIA
0000116f R_386_PC16 __PTS
RELOCATION RECORDS FOR [LZMA_DEC20]: RELOCATION RECORDS FOR [LZMA_DEC20]:
OFFSET TYPE VALUE OFFSET TYPE VALUE
000000ec R_386_PC16 __PIA 000000e5 R_386_PC16 LZMA_DEC99
00000137 R_386_PC16 __PIA 0000011b R_386_PC16 LZMA_DEC99
00000153 R_386_PC16 __PTC 00000127 R_386_PC16 LZMA_DEC99
000001a7 R_386_PC16 __PTC 00000170 R_386_PC16 LZMA_DEC99
000001e5 R_386_PC16 __PIA 00000199 R_386_PC16 LZMA_DEC99
0000020c R_386_PC16 __U4M 000001b0 R_386_PC16 LZMA_DEC99
00000277 R_386_PC16 __U4M 00000213 R_386_PC16 LZMA_DEC99
000002ab R_386_PC16 __PIA 00000247 R_386_PC16 LZMA_DEC99
000002f2 R_386_PC16 __PTC 00000283 R_386_PC16 LZMA_DEC99
00000333 R_386_PC16 __PIA 000002af R_386_PC16 LZMA_DEC99
0000035a R_386_PC16 __U4M 000002c6 R_386_PC16 LZMA_DEC99
000003f1 R_386_PC16 __PTC 0000034c R_386_PC16 LZMA_DEC99
00000432 R_386_PC16 __PIA 00000378 R_386_PC16 LZMA_DEC99
00000459 R_386_PC16 __U4M 0000038f R_386_PC16 LZMA_DEC99
000004cf R_386_PC16 __PIA 000003ff R_386_PC16 LZMA_DEC99
00000542 R_386_PC16 __PTC 00000467 R_386_PC16 LZMA_DEC99
00000583 R_386_PC16 __PIA 00000493 R_386_PC16 LZMA_DEC99
000005aa R_386_PC16 __U4M 000004aa R_386_PC16 LZMA_DEC99
0000065f R_386_PC16 __PTC 0000054e R_386_PC16 LZMA_DEC99
000006a0 R_386_PC16 __PIA 0000057a R_386_PC16 LZMA_DEC99
000006c7 R_386_PC16 __U4M 00000591 R_386_PC16 LZMA_DEC99
000006da R_386_PC16 __PIA 000005ff R_386_PC16 LZMA_DEC99
0000073d R_386_PC16 __PTC 00000657 R_386_PC16 LZMA_DEC99
000007a0 R_386_PC16 __U4M 000006b0 R_386_PC16 LZMA_DEC99
000007ff R_386_PC16 __PIA 000006d1 R_386_PC16 LZMA_DEC99
00000820 R_386_PC16 __PIA 0000073a R_386_PC16 LZMA_DEC99
00000894 R_386_PC16 __PTC 0000078e R_386_PC16 LZMA_DEC99
000008f3 R_386_PC16 __U4M 000007f8 R_386_PC16 LZMA_DEC99
0000096e R_386_PC16 __PTC 00000824 R_386_PC16 LZMA_DEC99
000009af R_386_PC16 __PIA 0000083b R_386_PC16 LZMA_DEC99
000009d6 R_386_PC16 __U4M 000008ea R_386_PC16 LZMA_DEC99
00000a96 R_386_PC16 __PTC 00000916 R_386_PC16 LZMA_DEC99
00000ad7 R_386_PC16 __PIA 00000930 R_386_PC16 LZMA_DEC99
00000b01 R_386_PC16 __U4M 000009ad R_386_PC16 LZMA_DEC99
00000b8f R_386_PC16 __PTC 000009d9 R_386_PC16 LZMA_DEC99
00000bd0 R_386_PC16 __PIA 000009f3 R_386_PC16 LZMA_DEC99
00000bfa R_386_PC16 __U4M 00000a93 R_386_PC16 LZMA_DEC99
00000caa R_386_PC16 __PTC 00000abf R_386_PC16 LZMA_DEC99
00000ceb R_386_PC16 __PIA 00000ad6 R_386_PC16 LZMA_DEC99
00000d12 R_386_PC16 __U4M 00000b8f R_386_PC16 LZMA_DEC99
00000ddc R_386_PC16 __PTC 00000bbb R_386_PC16 LZMA_DEC99
00000e1d R_386_PC16 __PIA 00000bd2 R_386_PC16 LZMA_DEC99
00000e44 R_386_PC16 __U4M 00000c90 R_386_PC16 LZMA_DEC99
00000f13 R_386_PC16 __PTC 00000cbc R_386_PC16 LZMA_DEC99
00000f54 R_386_PC16 __PIA 00000d27 R_386_PC16 LZMA_DEC99
00000fd0 R_386_PC16 __PTC 00000d53 R_386_PC16 LZMA_DEC99
00001011 R_386_PC16 __PIA 00000d6a R_386_PC16 LZMA_DEC99
00001038 R_386_PC16 __U4M 00000e17 R_386_PC16 LZMA_DEC99
000010eb R_386_PC16 __PIA 00000e3b R_386_PC16 LZMA_DEC99
0000110f R_386_PC16 __PIA 00000e6b R_386_PC16 LZMA_DEC99
0000114a R_386_PC16 __PTC 00000e73 R_386_PC16 LZMA_DEC99
0000115c R_386_PC16 __PIA
0000116f R_386_PC16 __PTS
RELOCATION RECORDS FOR [EXERELO1]: RELOCATION RECORDS FOR [EXERELO1]:
OFFSET TYPE VALUE OFFSET TYPE VALUE