Mail Archives: djgpp-workers/2009/07/18/09:27:05
X-Authentication-Warning: | delorie.com: mail set sender to djgpp-workers-bounces using -f
|
X-Recipient: | djgpp-workers AT delorie DOT com
|
DKIM-Signature: | v=1; a=rsa-sha256; c=relaxed/relaxed;
|
| d=gmail.com; s=gamma;
|
| h=domainkey-signature:mime-version:received:date:message-id:subject
|
| :from:to:content-type:content-transfer-encoding;
|
| bh=wd0jVG+SPbhMApzcX28o9ZeRtnWAH+uoq8ZcQaDLTDg=;
|
| b=LKYJZisT/xlH+flK8snQHj0192L1bH9RH6rXNoxqKFFdndZE1H8Rg3vJfVw34zJ0eL
|
| 6HuK6PqFya/NbJ54q2Pkg1tkrijnYjWToXHsUKeAnD9CUP9hLF91PYm++0L5fHpSEnRm
|
| brWknRbUGBLeKoOT8hWYat9Xauch/d7+JVbog=
|
DomainKey-Signature: | a=rsa-sha1; c=nofws;
|
| d=gmail.com; s=gamma;
|
| h=mime-version:date:message-id:subject:from:to:content-type
|
| :content-transfer-encoding;
|
| b=pUPXbT3JsKGXnJ8uApI1bDnLpzqT7c8izYuac8nY3LzEdjPt/780LlqpkDqgYnFEge
|
| ZaTbSE6trYLCAlCzUpf8cvMhXwdQK9pFRAz2F9ma7K/ZOEwun2cHtgrKhNzY7axPTVmt
|
| ohL6BGOXK6WSTq5Lf4iZF228ZG0qwgIYpSqa8=
|
MIME-Version: | 1.0
|
Date: | Sat, 18 Jul 2009 08:26:25 -0500
|
Message-ID: | <93c172b50907180626q4fd57d58h8ac1f502c0cb1a1a@mail.gmail.com>
|
Subject: | mkdir.c -> access.c -> is_exec.c -> xstat.c -> (bloated) ctime.c ==
|
| not necessarily a good idea (wastes 7k)
|
From: | Rugxulo <rugxulo AT gmail DOT com>
|
To: | djgpp-workers AT delorie DOT com
|
Reply-To: | djgpp-workers AT delorie DOT com
|
Hey guys,
I hope I don't describe this incorrectly, and I hope you don't
think I'm wasting your time, but ...
See, I'm trying to recompile the ANSI C .7z decoder (LZMA method only
... aka, 7zdec) from LZMA SDK 9.04. It added mkdir() support, which
means now "x" works (unpack with dirs), hence I don't have to bundle a
.tar inside a .7z anymore. And I'm even using 2.03p2 (smaller) and GCC
2.95.3 since it seems to output smallest (-O -mcpu=i686
-malign-jumps=2 -malign-loops=2 -malign-functions=2), upx
--ultra-brute --small 7zdec.exe, stubx -s 7zdec.exe (D3X is only 10k).
I even hacked out the parts of doprnt.c that aren't %s or %d just to
decrease the size some more (using a local copy, saved approx. 4k).
My previous build (before mkdir was supported), e.g. 4.65, was 42k
with all the above tricks. That's pretty small, I thought.
However, once mkdir() was added to the fold, the size went up 20% (!)
to 52k and yet my OpenWatcom build only increased 1k! Now, I know
DJGPP supports LFNs, but I didn't think that would add 10k extra. So,
several times, I took a look in the map file ("-Wl,-Map", I think).
Yet I never could find anything ... until now. :-D
For the record, this is the biggest module pulled in:
-rw-r--r-- 1 dosuser root 12436 Jul 18 08:02 ctime.o
But how does mkdir() use this??
Apparently, mkdir() calls access() which calls _is_executable() which
needs _djstat_flags from xstat.c whose _file_time_stamp() function
*always* pulls in mktime() (from ctime.c) even though not used in this
case.
IMHO, the _file_time_stamp() function should be put in a separate .o
module in libc.a for 2.04 final (or whatever) so as not to pull in the
big ol' bloated ctime.o for no good reason.
P.S. I know this is pretty minor and not worth anything to most
people, but size does matter in this case: I wanted to be able to cram
that "old" GCC 2.95.3 EZGCC-ish .7z I made onto a single 1.44 MB
floppy, and I also was picky enough to also want an unpacker on the
same disk, hence I needed something small.
-rw-r--r-- 1 dosuser root 1390638 Jun 27 13:50 ../../dj203/djgpp203.7z
46468 7/18/2009 7:52:37 AM
c:\Armslurp\temp\moo\7zdec\7zdecdj2.exe (new 9.04 build)
52384 6/9/2009 3:34:53 PM c:\Armslurp\utils\7zdecdj2.exe
(old 9.04 build)
42572 5/23/2009 7:13:04PM
c:\Armslurp\zips\pack\7zdec.old:7zdecdj2.exe (older 4.65, without
mkdir)
1390638+52384=1443022
In other words, very very close to the limit (~1456000), and I didn't
like that !! Luckily, OpenWatcom 39k build is acceptable since I don't
need LFNs anyways. But hey, this is DJGPP I'm trying to pack, and it
does build its own unpacker, just not ideal in size! So I just had to
look for an answer, DJGPP is too good to ignore. ;-)
But now I think I found the problem, so I'll keep this in mind. Maybe
you should too. ;-)
- Raw text -