Assorted fixes.

committer: mfx <mfx> 1088541880 +0000
This commit is contained in:
Markus F.X.J. Oberhumer
2004-06-29 20:44:40 +00:00
parent 603dc83c1a
commit 5a8d60d3e0
+13 -11
View File
@@ -404,13 +404,6 @@ void PackTos::pack(OutputFile *fo)
unsigned relocsize = 0; unsigned relocsize = 0;
unsigned overlay = 0; unsigned overlay = 0;
const unsigned lsize = getLoaderSize();
const unsigned e_len = get_be16(getLoader()+lsize-6);
const unsigned d_len = get_be16(getLoader()+lsize-4);
const unsigned decomp_offset = get_be16(getLoader()+lsize-2);
assert(e_len + d_len == lsize - 6);
assert((e_len & 3) == 0 && (d_len & 1) == 0);
const unsigned i_text = ih.fh_text; const unsigned i_text = ih.fh_text;
const unsigned i_data = ih.fh_data; const unsigned i_data = ih.fh_data;
const unsigned i_sym = ih.fh_sym; const unsigned i_sym = ih.fh_sym;
@@ -479,8 +472,8 @@ void PackTos::pack(OutputFile *fo)
// After compression this will become the first part of the // After compression this will become the first part of the
// data segement. The second part will be the decompressor. // data segement. The second part will be the decompressor.
// alloc buffer (512 is for the various alignments) // alloc buffer (2048 is for decompressor and the various alignments)
obuf.allocForCompression(t, d_len + 512); obuf.allocForCompression(t, 2048);
// prepare packheader // prepare packheader
ph.u_len = t; ph.u_len = t;
@@ -489,6 +482,14 @@ void PackTos::pack(OutputFile *fo)
// compress (max_match = 65535) // compress (max_match = 65535)
compressWithFilters(&ft, 512, 0, NULL, 0, 65535); compressWithFilters(&ft, 512, 0, NULL, 0, 65535);
// get loader
const unsigned lsize = getLoaderSize();
const unsigned e_len = get_be16(getLoader()+lsize-6);
const unsigned d_len = get_be16(getLoader()+lsize-4);
const unsigned decomp_offset = get_be16(getLoader()+lsize-2);
assert(e_len + d_len == lsize - 6);
assert((e_len & 3) == 0 && (d_len & 1) == 0);
// The decompressed data will now get placed at this offset: // The decompressed data will now get placed at this offset:
unsigned offset = (ph.u_len + ph.overlap_overhead) - ph.c_len; unsigned offset = (ph.u_len + ph.overlap_overhead) - ph.c_len;
@@ -544,7 +545,8 @@ void PackTos::pack(OutputFile *fo)
memcpy(loader, getLoader(), o_text); memcpy(loader, getLoader(), o_text);
// patch loader // patch loader
patchPackHeader(loader, o_text); int tmp = patchPackHeader(loader, o_text);
assert(tmp + 32 == (int)o_text); UNUSED(tmp);
if (!opt->small) if (!opt->small)
patchVersion(loader, o_text); patchVersion(loader, o_text);
// patch "subq.l #1,d6" or "subq.w #1,d6" - see "up41" below // patch "subq.l #1,d6" or "subq.w #1,d6" - see "up41" below
@@ -656,7 +658,7 @@ void PackTos::unpack(OutputFile *fo)
ibuf.alloc(ph.c_len); ibuf.alloc(ph.c_len);
obuf.allocForUncompression(ph.u_len); obuf.allocForUncompression(ph.u_len);
fi->seek(ph.buf_offset + ph.getPackHeaderSize(), SEEK_SET); fi->seek(FH_SIZE + ph.buf_offset + ph.getPackHeaderSize(), SEEK_SET);
fi->readx(ibuf, ph.c_len); fi->readx(ibuf, ph.c_len);
// decompress // decompress