mirror of
https://github.com/upx/upx
synced 2025-09-28 19:06:07 +08:00
More work on lzma for dos/exe.
This commit is contained in:
parent
44ed84f5cf
commit
b62573ae8f
File diff suppressed because it is too large
Load Diff
|
@ -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)
|
||||
sections.append(e)
|
||||
assert not section_names.has_key(e[0]), e
|
||||
assert not e[0].endswith(":"), ("bad section name", e)
|
||||
section_names[e[0]] = e
|
||||
##print sections
|
||||
# preprocessSymbols
|
||||
|
|
|
@ -1,13 +1,5 @@
|
|||
#
|
||||
# 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)
|
||||
# highly experimental support for i086 using Open Watcom 1.6
|
||||
#
|
||||
|
||||
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
|
||||
|
||||
STUBS =
|
||||
ifneq ($(wildcard $(UPX_LZMADIR)/C/7zip/.),)
|
||||
ifneq ($(wildcard $(WATCOM)/binl/.),)
|
||||
ifneq ($(wildcard $(VCLINK.exe)),)
|
||||
STUBS += lzma_d_cf.S lzma_d_cs.S
|
||||
endif
|
||||
endif
|
||||
endif
|
||||
|
||||
default.targets = all
|
||||
ifeq ($(strip $(STUBS)),)
|
||||
|
@ -46,12 +32,13 @@ include $(top_srcdir)/src/stub/Makefile
|
|||
# // method-lzma
|
||||
# ************************************************************************/
|
||||
|
||||
lzma_d_c%.S : tc_list = method-lzma default
|
||||
lzma_d_c%.S : tc_bfdname =
|
||||
lzma_d_c% : tc_list = method-lzma default
|
||||
lzma_d_c% : tc_bfdname =
|
||||
|
||||
# Open Watcom C/C++ 1.6
|
||||
c := tc.method-lzma.wcc
|
||||
$c = $(WATCOM)/binl/wcc -zq -bt=dos
|
||||
$c += -mc
|
||||
$c += -mc -ecc
|
||||
$c += -zm -zc
|
||||
$c += -os -s -0 -d0
|
||||
$c += -w5 -we -fr=/dev/null
|
||||
|
@ -59,59 +46,38 @@ $c += -D__INT_MAX__=32767
|
|||
$c += -I$(UPX_LZMADIR)
|
||||
$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.wdis = $(WATCOM)/binl/wdis
|
||||
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,bcc) $(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,wdis) tmp/$T.obj | $(RTRIM) > tmp/$T.obj.disasm
|
||||
cp tmp/$T.obj tmp/$T.o
|
||||
rm -f tmp/$T.lib
|
||||
cd tmp && $(WINEENV) wine $(VCLINK.exe) -lib -nologo -out:$T.lib $T.o
|
||||
cd tmp && $(call tc,m-ar) x $T.lib
|
||||
$(call tc,objdump) -b coff-i386 -m i8086 -M intel -Dr --no-show -w tmp/$T.o | $(RTRIM) > tmp/$T.o.disasm
|
||||
python cleanasm.py --label-prefix=$(LABEL_PREFIX) tmp/$T.o.disasm $@
|
||||
# convert OMF to COFF because objdump does not support OMF
|
||||
# TODO: should write a Python script wdis2gas.py and use that instead
|
||||
cp -p tmp/$T.obj tmp/$T.o
|
||||
cd tmp && $(WINEENV) wine $(VCLINK.exe) -lib -nologo -out:$T.a $T.o
|
||||
cd tmp && $(call tc,m-ar) x $T.a
|
||||
# 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_cs.% : PP_FLAGS = -DSMALL
|
||||
|
@ -139,6 +105,47 @@ define mkbat
|
|||
unix2dos -q $1
|
||||
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/.),)
|
||||
cc_test_wc : tc_list = method-lzma default
|
||||
cc_test_wc: cc_test.c
|
||||
|
|
|
@ -34,6 +34,18 @@ import getopt, os, re, string, sys
|
|||
class opts:
|
||||
label_prefix = ".L"
|
||||
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 = filter(None, map(string.rstrip, lines))
|
||||
#
|
||||
olines = []
|
||||
#
|
||||
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)):
|
||||
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:
|
||||
continue
|
||||
label = m.group(1).strip()
|
||||
inst = m.group(2).strip()
|
||||
args = ""
|
||||
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
|
||||
#
|
||||
if inst in ["movl",] and re.search(r"\b[de]s\b", args):
|
||||
# correct objdump bug
|
||||
inst = "movw"
|
||||
olines.append((label, inst, args, args_label))
|
||||
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)
|
||||
while i >= 10:
|
||||
digits += 1
|
||||
i /= 10
|
||||
format = "%s0%dd" % ("%", digits)
|
||||
i = 0
|
||||
for label, inst, args, args_label in olines:
|
||||
if labels.has_key(label):
|
||||
labels[label] = opts.label_prefix + format % i
|
||||
i += 1
|
||||
counter = 0
|
||||
for i in range(len(olines)):
|
||||
label, inst, args, args_label = olines[i]
|
||||
# rewrite local labels
|
||||
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
|
||||
ofp = open(ofile, "wb")
|
||||
for label, inst, args, args_label in olines:
|
||||
if labels.has_key(label):
|
||||
ofp.write(labels[label] + ":\n")
|
||||
if args_label: args = labels[args_label]
|
||||
if opts.verbose:
|
||||
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)
|
||||
ofp.write(l.rstrip() + "\n")
|
||||
ofp.close()
|
||||
|
|
|
@ -37,6 +37,89 @@
|
|||
; 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
|
||||
section LZMA_DEC00
|
||||
|
||||
|
@ -54,5 +137,8 @@ section LZMA_DEC20
|
|||
section LZMA_DEC30
|
||||
|
||||
|
||||
#undef WCC_PIA_V02
|
||||
#undef WCC_PTS
|
||||
|
||||
// vi:ts=8:et
|
||||
|
||||
|
|
File diff suppressed because it is too large
Load Diff
1691
src/stub/src/arch/i086/lzma_d_cf.i
Normal file
1691
src/stub/src/arch/i086/lzma_d_cf.i
Normal file
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
1691
src/stub/src/arch/i086/lzma_d_cs.i
Normal file
1691
src/stub/src/arch/i086/lzma_d_cs.i
Normal file
File diff suppressed because it is too large
Load Diff
|
@ -134,42 +134,30 @@
|
|||
*/
|
||||
|
||||
/* DOS real mode */
|
||||
#define _AHSHIFT 12
|
||||
#define _AHINCR (1 << _AHSHIFT) /* 4096 */
|
||||
#define __AHSHIFT 12
|
||||
#define __AHINCR (1 << __AHSHIFT) /* 4096 */
|
||||
|
||||
|
||||
// huge pointer add: dx:ax = dx:ax + cx:bx
|
||||
.macro M_WCC_PIA_086
|
||||
.macro M_WCC_PIA
|
||||
add ax, bx
|
||||
adc cx, 0
|
||||
mov cx, bx
|
||||
mov cl, _AHSHIFT
|
||||
mov cl, __AHSHIFT
|
||||
shl bx, cl
|
||||
add dx, bx
|
||||
.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
|
||||
.macro M_WCC_PIS_086
|
||||
.macro M_WCC_PIS
|
||||
sub ax, bx
|
||||
adc cx, 0
|
||||
mov cx, bx
|
||||
mov cl, _AHSHIFT
|
||||
mov cl, __AHSHIFT
|
||||
shl bx, cl
|
||||
sub dx, bx
|
||||
.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
|
||||
|
@ -195,10 +183,9 @@ L1:
|
|||
|
||||
// umul32: dx:ax = dx:ax * cx:bx
|
||||
.macro M_WCC_U4M
|
||||
push si
|
||||
// FIXME
|
||||
// compute high-word
|
||||
// add low-word
|
||||
pop si
|
||||
.endm
|
||||
|
||||
|
||||
|
|
|
@ -219,23 +219,6 @@ section EXERETIP
|
|||
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
|
||||
*/
|
||||
|
|
|
@ -44,29 +44,26 @@ Idx Name Size VMA LMA File off Algn Flags
|
|||
39 NRV2EEX3 00000015 00000000 00000000 0000027b 2**0 CONTENTS, RELOC, READONLY
|
||||
40 N2E64K02 0000000b 00000000 00000000 00000290 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
|
||||
43 LZMA_DEC10 00001191 00000000 00000000 0000029f 2**0 CONTENTS, RELOC, READONLY
|
||||
44 LZMA_DEC20 00001191 00000000 00000000 00001430 2**0 CONTENTS, RELOC, READONLY
|
||||
45 LZMA_DEC30 00000000 00000000 00000000 000025c1 2**0 CONTENTS, READONLY
|
||||
46 EXEMAIN5 00000001 00000000 00000000 000025c1 2**0 CONTENTS, READONLY
|
||||
47 EXEADJUS 00000007 00000000 00000000 000025c2 2**0 CONTENTS, READONLY
|
||||
48 EXENOADJ 00000002 00000000 00000000 000025c9 2**0 CONTENTS, READONLY
|
||||
49 EXERELO1 0000001e 00000000 00000000 000025cb 2**0 CONTENTS, RELOC, READONLY
|
||||
50 EXEREL9A 00000012 00000000 00000000 000025e9 2**0 CONTENTS, RELOC, READONLY
|
||||
51 EXERELO2 00000004 00000000 00000000 000025fb 2**0 CONTENTS, READONLY
|
||||
52 EXEREBIG 00000002 00000000 00000000 000025ff 2**0 CONTENTS, RELOC, READONLY
|
||||
53 EXERELO3 00000002 00000000 00000000 00002601 2**0 CONTENTS, RELOC, READONLY
|
||||
54 EXEMAIN8 00000003 00000000 00000000 00002603 2**0 CONTENTS, READONLY
|
||||
55 DEVICEEND 00000013 00000000 00000000 00002606 2**0 CONTENTS, READONLY
|
||||
56 EXESTACK 00000006 00000000 00000000 00002619 2**0 CONTENTS, RELOC, READONLY
|
||||
57 EXESTASP 00000003 00000000 00000000 0000261f 2**0 CONTENTS, RELOC, READONLY
|
||||
58 EXEJUMPF 00000005 00000000 00000000 00002622 2**0 CONTENTS, RELOC, READONLY
|
||||
59 EXERCSPO 00000004 00000000 00000000 00002627 2**0 CONTENTS, RELOC, READONLY
|
||||
60 EXERETIP 00000006 00000000 00000000 0000262b 2**0 CONTENTS, RELOC, READONLY
|
||||
61 __PIA 0000000e 00000000 00000000 00002631 2**0 CONTENTS, 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
|
||||
42 LZMA_DEC99 0000005d 00000000 00000000 0000029f 2**0 CONTENTS, READONLY
|
||||
43 LZMA_DEC00 00000000 00000000 00000000 000002fc 2**0 CONTENTS, READONLY
|
||||
44 LZMA_DEC10 00000ea2 00000000 00000000 000002fc 2**0 CONTENTS, RELOC, READONLY
|
||||
45 LZMA_DEC20 00000ea2 00000000 00000000 0000119e 2**0 CONTENTS, RELOC, READONLY
|
||||
46 LZMA_DEC30 00000000 00000000 00000000 00002040 2**0 CONTENTS, READONLY
|
||||
47 EXEMAIN5 00000001 00000000 00000000 00002040 2**0 CONTENTS, READONLY
|
||||
48 EXEADJUS 00000007 00000000 00000000 00002041 2**0 CONTENTS, READONLY
|
||||
49 EXENOADJ 00000002 00000000 00000000 00002048 2**0 CONTENTS, READONLY
|
||||
50 EXERELO1 0000001e 00000000 00000000 0000204a 2**0 CONTENTS, RELOC, READONLY
|
||||
51 EXEREL9A 00000012 00000000 00000000 00002068 2**0 CONTENTS, RELOC, READONLY
|
||||
52 EXERELO2 00000004 00000000 00000000 0000207a 2**0 CONTENTS, READONLY
|
||||
53 EXEREBIG 00000002 00000000 00000000 0000207e 2**0 CONTENTS, RELOC, READONLY
|
||||
54 EXERELO3 00000002 00000000 00000000 00002080 2**0 CONTENTS, RELOC, READONLY
|
||||
55 EXEMAIN8 00000003 00000000 00000000 00002082 2**0 CONTENTS, READONLY
|
||||
56 DEVICEEND 00000013 00000000 00000000 00002085 2**0 CONTENTS, READONLY
|
||||
57 EXESTACK 00000006 00000000 00000000 00002098 2**0 CONTENTS, RELOC, READONLY
|
||||
58 EXESTASP 00000003 00000000 00000000 0000209e 2**0 CONTENTS, RELOC, READONLY
|
||||
59 EXEJUMPF 00000005 00000000 00000000 000020a1 2**0 CONTENTS, RELOC, READONLY
|
||||
60 EXERCSPO 00000004 00000000 00000000 000020a6 2**0 CONTENTS, RELOC, READONLY
|
||||
61 EXERETIP 00000006 00000000 00000000 000020aa 2**0 CONTENTS, RELOC, READONLY
|
||||
SYMBOL TABLE:
|
||||
00000000 l d DEVICEENTRY 00000000 DEVICEENTRY
|
||||
00000000 l d EXEENTRY 00000000 EXEENTRY
|
||||
|
@ -82,10 +79,7 @@ SYMBOL TABLE:
|
|||
00000000 l d NRV2EEX2 00000000 NRV2EEX2
|
||||
00000000 l d NRV2EEX3 00000000 NRV2EEX3
|
||||
00000000 l d NRV2EEX9 00000000 NRV2EEX9
|
||||
00000000 l d __PIA 00000000 __PIA
|
||||
00000000 l d __PTC 00000000 __PTC
|
||||
00000000 l d __U4M 00000000 __U4M
|
||||
00000000 l d __PTS 00000000 __PTS
|
||||
00000000 l d LZMA_DEC99 00000000 LZMA_DEC99
|
||||
00000000 l d EXERELO1 00000000 EXERELO1
|
||||
00000000 l d EXERELO2 00000000 EXERELO2
|
||||
00000000 l d DEVICESUB 00000000 DEVICESUB
|
||||
|
@ -250,115 +244,111 @@ OFFSET TYPE VALUE
|
|||
|
||||
RELOCATION RECORDS FOR [LZMA_DEC10]:
|
||||
OFFSET TYPE VALUE
|
||||
000000ec R_386_PC16 __PIA
|
||||
00000137 R_386_PC16 __PIA
|
||||
00000153 R_386_PC16 __PTC
|
||||
000001a7 R_386_PC16 __PTC
|
||||
000001e5 R_386_PC16 __PIA
|
||||
0000020c R_386_PC16 __U4M
|
||||
00000277 R_386_PC16 __U4M
|
||||
000002ab R_386_PC16 __PIA
|
||||
000002f2 R_386_PC16 __PTC
|
||||
00000333 R_386_PC16 __PIA
|
||||
0000035a R_386_PC16 __U4M
|
||||
000003f1 R_386_PC16 __PTC
|
||||
00000432 R_386_PC16 __PIA
|
||||
00000459 R_386_PC16 __U4M
|
||||
000004cf R_386_PC16 __PIA
|
||||
00000542 R_386_PC16 __PTC
|
||||
00000583 R_386_PC16 __PIA
|
||||
000005aa R_386_PC16 __U4M
|
||||
0000065f R_386_PC16 __PTC
|
||||
000006a0 R_386_PC16 __PIA
|
||||
000006c7 R_386_PC16 __U4M
|
||||
000006da R_386_PC16 __PIA
|
||||
0000073d R_386_PC16 __PTC
|
||||
000007a0 R_386_PC16 __U4M
|
||||
000007ff R_386_PC16 __PIA
|
||||
00000820 R_386_PC16 __PIA
|
||||
00000894 R_386_PC16 __PTC
|
||||
000008f3 R_386_PC16 __U4M
|
||||
0000096e R_386_PC16 __PTC
|
||||
000009af R_386_PC16 __PIA
|
||||
000009d6 R_386_PC16 __U4M
|
||||
00000a96 R_386_PC16 __PTC
|
||||
00000ad7 R_386_PC16 __PIA
|
||||
00000b01 R_386_PC16 __U4M
|
||||
00000b8f R_386_PC16 __PTC
|
||||
00000bd0 R_386_PC16 __PIA
|
||||
00000bfa R_386_PC16 __U4M
|
||||
00000caa R_386_PC16 __PTC
|
||||
00000ceb R_386_PC16 __PIA
|
||||
00000d12 R_386_PC16 __U4M
|
||||
00000ddc R_386_PC16 __PTC
|
||||
00000e1d R_386_PC16 __PIA
|
||||
00000e44 R_386_PC16 __U4M
|
||||
00000f13 R_386_PC16 __PTC
|
||||
00000f54 R_386_PC16 __PIA
|
||||
00000fd0 R_386_PC16 __PTC
|
||||
00001011 R_386_PC16 __PIA
|
||||
00001038 R_386_PC16 __U4M
|
||||
000010eb R_386_PC16 __PIA
|
||||
0000110f R_386_PC16 __PIA
|
||||
0000114a R_386_PC16 __PTC
|
||||
0000115c R_386_PC16 __PIA
|
||||
0000116f R_386_PC16 __PTS
|
||||
000000e5 R_386_PC16 LZMA_DEC99
|
||||
0000011b R_386_PC16 LZMA_DEC99
|
||||
00000127 R_386_PC16 LZMA_DEC99
|
||||
00000170 R_386_PC16 LZMA_DEC99
|
||||
00000199 R_386_PC16 LZMA_DEC99
|
||||
000001b0 R_386_PC16 LZMA_DEC99
|
||||
00000213 R_386_PC16 LZMA_DEC99
|
||||
00000247 R_386_PC16 LZMA_DEC99
|
||||
00000283 R_386_PC16 LZMA_DEC99
|
||||
000002af R_386_PC16 LZMA_DEC99
|
||||
000002c6 R_386_PC16 LZMA_DEC99
|
||||
0000034c R_386_PC16 LZMA_DEC99
|
||||
00000378 R_386_PC16 LZMA_DEC99
|
||||
0000038f R_386_PC16 LZMA_DEC99
|
||||
000003ff R_386_PC16 LZMA_DEC99
|
||||
00000467 R_386_PC16 LZMA_DEC99
|
||||
00000493 R_386_PC16 LZMA_DEC99
|
||||
000004aa R_386_PC16 LZMA_DEC99
|
||||
0000054e R_386_PC16 LZMA_DEC99
|
||||
0000057a R_386_PC16 LZMA_DEC99
|
||||
00000591 R_386_PC16 LZMA_DEC99
|
||||
000005ff R_386_PC16 LZMA_DEC99
|
||||
00000657 R_386_PC16 LZMA_DEC99
|
||||
000006b0 R_386_PC16 LZMA_DEC99
|
||||
000006d1 R_386_PC16 LZMA_DEC99
|
||||
0000073a R_386_PC16 LZMA_DEC99
|
||||
0000078e R_386_PC16 LZMA_DEC99
|
||||
000007f8 R_386_PC16 LZMA_DEC99
|
||||
00000824 R_386_PC16 LZMA_DEC99
|
||||
0000083b R_386_PC16 LZMA_DEC99
|
||||
000008ea R_386_PC16 LZMA_DEC99
|
||||
00000916 R_386_PC16 LZMA_DEC99
|
||||
00000930 R_386_PC16 LZMA_DEC99
|
||||
000009ad R_386_PC16 LZMA_DEC99
|
||||
000009d9 R_386_PC16 LZMA_DEC99
|
||||
000009f3 R_386_PC16 LZMA_DEC99
|
||||
00000a93 R_386_PC16 LZMA_DEC99
|
||||
00000abf R_386_PC16 LZMA_DEC99
|
||||
00000ad6 R_386_PC16 LZMA_DEC99
|
||||
00000b8f R_386_PC16 LZMA_DEC99
|
||||
00000bbb R_386_PC16 LZMA_DEC99
|
||||
00000bd2 R_386_PC16 LZMA_DEC99
|
||||
00000c90 R_386_PC16 LZMA_DEC99
|
||||
00000cbc R_386_PC16 LZMA_DEC99
|
||||
00000d27 R_386_PC16 LZMA_DEC99
|
||||
00000d53 R_386_PC16 LZMA_DEC99
|
||||
00000d6a R_386_PC16 LZMA_DEC99
|
||||
00000e17 R_386_PC16 LZMA_DEC99
|
||||
00000e3b R_386_PC16 LZMA_DEC99
|
||||
00000e6b R_386_PC16 LZMA_DEC99
|
||||
00000e73 R_386_PC16 LZMA_DEC99
|
||||
|
||||
RELOCATION RECORDS FOR [LZMA_DEC20]:
|
||||
OFFSET TYPE VALUE
|
||||
000000ec R_386_PC16 __PIA
|
||||
00000137 R_386_PC16 __PIA
|
||||
00000153 R_386_PC16 __PTC
|
||||
000001a7 R_386_PC16 __PTC
|
||||
000001e5 R_386_PC16 __PIA
|
||||
0000020c R_386_PC16 __U4M
|
||||
00000277 R_386_PC16 __U4M
|
||||
000002ab R_386_PC16 __PIA
|
||||
000002f2 R_386_PC16 __PTC
|
||||
00000333 R_386_PC16 __PIA
|
||||
0000035a R_386_PC16 __U4M
|
||||
000003f1 R_386_PC16 __PTC
|
||||
00000432 R_386_PC16 __PIA
|
||||
00000459 R_386_PC16 __U4M
|
||||
000004cf R_386_PC16 __PIA
|
||||
00000542 R_386_PC16 __PTC
|
||||
00000583 R_386_PC16 __PIA
|
||||
000005aa R_386_PC16 __U4M
|
||||
0000065f R_386_PC16 __PTC
|
||||
000006a0 R_386_PC16 __PIA
|
||||
000006c7 R_386_PC16 __U4M
|
||||
000006da R_386_PC16 __PIA
|
||||
0000073d R_386_PC16 __PTC
|
||||
000007a0 R_386_PC16 __U4M
|
||||
000007ff R_386_PC16 __PIA
|
||||
00000820 R_386_PC16 __PIA
|
||||
00000894 R_386_PC16 __PTC
|
||||
000008f3 R_386_PC16 __U4M
|
||||
0000096e R_386_PC16 __PTC
|
||||
000009af R_386_PC16 __PIA
|
||||
000009d6 R_386_PC16 __U4M
|
||||
00000a96 R_386_PC16 __PTC
|
||||
00000ad7 R_386_PC16 __PIA
|
||||
00000b01 R_386_PC16 __U4M
|
||||
00000b8f R_386_PC16 __PTC
|
||||
00000bd0 R_386_PC16 __PIA
|
||||
00000bfa R_386_PC16 __U4M
|
||||
00000caa R_386_PC16 __PTC
|
||||
00000ceb R_386_PC16 __PIA
|
||||
00000d12 R_386_PC16 __U4M
|
||||
00000ddc R_386_PC16 __PTC
|
||||
00000e1d R_386_PC16 __PIA
|
||||
00000e44 R_386_PC16 __U4M
|
||||
00000f13 R_386_PC16 __PTC
|
||||
00000f54 R_386_PC16 __PIA
|
||||
00000fd0 R_386_PC16 __PTC
|
||||
00001011 R_386_PC16 __PIA
|
||||
00001038 R_386_PC16 __U4M
|
||||
000010eb R_386_PC16 __PIA
|
||||
0000110f R_386_PC16 __PIA
|
||||
0000114a R_386_PC16 __PTC
|
||||
0000115c R_386_PC16 __PIA
|
||||
0000116f R_386_PC16 __PTS
|
||||
000000e5 R_386_PC16 LZMA_DEC99
|
||||
0000011b R_386_PC16 LZMA_DEC99
|
||||
00000127 R_386_PC16 LZMA_DEC99
|
||||
00000170 R_386_PC16 LZMA_DEC99
|
||||
00000199 R_386_PC16 LZMA_DEC99
|
||||
000001b0 R_386_PC16 LZMA_DEC99
|
||||
00000213 R_386_PC16 LZMA_DEC99
|
||||
00000247 R_386_PC16 LZMA_DEC99
|
||||
00000283 R_386_PC16 LZMA_DEC99
|
||||
000002af R_386_PC16 LZMA_DEC99
|
||||
000002c6 R_386_PC16 LZMA_DEC99
|
||||
0000034c R_386_PC16 LZMA_DEC99
|
||||
00000378 R_386_PC16 LZMA_DEC99
|
||||
0000038f R_386_PC16 LZMA_DEC99
|
||||
000003ff R_386_PC16 LZMA_DEC99
|
||||
00000467 R_386_PC16 LZMA_DEC99
|
||||
00000493 R_386_PC16 LZMA_DEC99
|
||||
000004aa R_386_PC16 LZMA_DEC99
|
||||
0000054e R_386_PC16 LZMA_DEC99
|
||||
0000057a R_386_PC16 LZMA_DEC99
|
||||
00000591 R_386_PC16 LZMA_DEC99
|
||||
000005ff R_386_PC16 LZMA_DEC99
|
||||
00000657 R_386_PC16 LZMA_DEC99
|
||||
000006b0 R_386_PC16 LZMA_DEC99
|
||||
000006d1 R_386_PC16 LZMA_DEC99
|
||||
0000073a R_386_PC16 LZMA_DEC99
|
||||
0000078e R_386_PC16 LZMA_DEC99
|
||||
000007f8 R_386_PC16 LZMA_DEC99
|
||||
00000824 R_386_PC16 LZMA_DEC99
|
||||
0000083b R_386_PC16 LZMA_DEC99
|
||||
000008ea R_386_PC16 LZMA_DEC99
|
||||
00000916 R_386_PC16 LZMA_DEC99
|
||||
00000930 R_386_PC16 LZMA_DEC99
|
||||
000009ad R_386_PC16 LZMA_DEC99
|
||||
000009d9 R_386_PC16 LZMA_DEC99
|
||||
000009f3 R_386_PC16 LZMA_DEC99
|
||||
00000a93 R_386_PC16 LZMA_DEC99
|
||||
00000abf R_386_PC16 LZMA_DEC99
|
||||
00000ad6 R_386_PC16 LZMA_DEC99
|
||||
00000b8f R_386_PC16 LZMA_DEC99
|
||||
00000bbb R_386_PC16 LZMA_DEC99
|
||||
00000bd2 R_386_PC16 LZMA_DEC99
|
||||
00000c90 R_386_PC16 LZMA_DEC99
|
||||
00000cbc R_386_PC16 LZMA_DEC99
|
||||
00000d27 R_386_PC16 LZMA_DEC99
|
||||
00000d53 R_386_PC16 LZMA_DEC99
|
||||
00000d6a R_386_PC16 LZMA_DEC99
|
||||
00000e17 R_386_PC16 LZMA_DEC99
|
||||
00000e3b R_386_PC16 LZMA_DEC99
|
||||
00000e6b R_386_PC16 LZMA_DEC99
|
||||
00000e73 R_386_PC16 LZMA_DEC99
|
||||
|
||||
RELOCATION RECORDS FOR [EXERELO1]:
|
||||
OFFSET TYPE VALUE
|
||||
|
|
Loading…
Reference in New Issue
Block a user