From 3239b3d4b0458a72d14ba39180175b4b7637c53b Mon Sep 17 00:00:00 2001 From: Kenneth J Davis Date: Wed, 10 Jun 2009 02:09:08 +0000 Subject: [PATCH] More verbose output of UPX method (sys or exe) used and fix case without UPX so kernel boots. git-svn-id: https://svn.code.sf.net/p/freedos/svn/kernel/trunk@1431 6ac86273-5f31-0410-b378-82cca8765d1b --- kernel/makefile | 4 +++- utils/exeflat.c | 39 +++++++++++++++++++-------------------- 2 files changed, 22 insertions(+), 21 deletions(-) diff --git a/kernel/makefile b/kernel/makefile index 58a6bdf..45e0076 100644 --- a/kernel/makefile +++ b/kernel/makefile @@ -36,8 +36,10 @@ production: ../bin/$(TARGET).sys $(CP) kernel.sys ..$(DIRSEP)bin$(DIRSEP)$(TARGET).sys $(CP) kernel.map ..$(DIRSEP)bin$(DIRSEP)$(TARGET).map +# -S to avoid showing expected relocations +# 0x10 & 0x74 for non-fat32 kernel, 0x10 & 0x73 for fat32 enabled kernel kernel.sys: kernel.exe ../utils/exeflat.exe - ..$(DIRSEP)utils$(DIRSEP)exeflat.exe kernel.exe kernel.sys 0x60 -S0x10 -S0x74 $(UPXOPT) $(XUPX) + ..$(DIRSEP)utils$(DIRSEP)exeflat.exe kernel.exe kernel.sys 0x60 -S0x10 -S0x73 -S0x74 $(UPXOPT) $(XUPX) kernel.exe: $(TARGET).lnk $(OBJS) $(LIBS) $(LINK) @$(TARGET).lnk; diff --git a/utils/exeflat.c b/utils/exeflat.c index 9862f36..483f3b6 100644 --- a/utils/exeflat.c +++ b/utils/exeflat.c @@ -36,11 +36,11 @@ large portions copied from task.c /* history - 10/??/01 - Bart Oldeman - primary release + 10/??/01 - Bart Oldeman + primary release - 11/28/01 - tom ehlert - added -UPX option to make the kernel compressable with UPX + 11/28/01 - tom ehlert + added -UPX option to make the kernel compressable with UPX */ @@ -85,7 +85,7 @@ static void usage(void) static int exeflat(const char *srcfile, const char *dstfile, const char *start, short *silentSegments, short silentcount, - int flat_exe, exe_header *header) + int UPX, exe_header *header) { int i, j; size_t bufsize; @@ -198,16 +198,18 @@ static int exeflat(const char *srcfile, const char *dstfile, printf("\nProcessed %d relocations, %d not shown\n", header->exRelocItems, silentdone); - /* The biggest .sys file that UPX accepts seems to be 65419 bytes long */ - compress_sys_file = flat_exe && size < 65420; - if ((dest = fopen(dstfile, "wb+")) == NULL) { printf("Destination file %s could not be created\n", dstfile); exit(1); } - if (flat_exe && !compress_sys_file) { + /* The biggest .sys file that UPX accepts seems to be 65419 bytes long */ + compress_sys_file = size < 65420; + if (UPX) { + printf("Compressing kernel - %s format\n", (compress_sys_file)?"sys":"exe"); + } + if (UPX && !compress_sys_file) { /* write header without relocations to file */ exe_header nheader = *header; nheader.exRelocItems = 0; @@ -240,7 +242,7 @@ static int exeflat(const char *srcfile, const char *dstfile, free(*curbuf); } - if (flat_exe && compress_sys_file) { + if (UPX && compress_sys_file) { /* overwrite first 8 bytes with SYS header */ UWORD dhdr[4]; fseek(dest, 0, SEEK_SET); @@ -336,7 +338,7 @@ int main(int argc, char **argv) { short silentSegments[20], silentcount = 0; static exe_header header; /* must be initialized to zero */ - int UPX = FALSE, flat_exe = FALSE; + int UPX = FALSE; int i; size_t sz, len, len2, n; int compress_sys_file; @@ -362,9 +364,6 @@ int main(int argc, char **argv) case 'U': UPX = i; break; - case 'E': - flat_exe = TRUE; - break; case 'S': if (silentcount >= LENGTH(silentSegments)) { @@ -372,10 +371,10 @@ int main(int argc, char **argv) LENGTH(silentSegments)); exit(1); } - + silentSegments[silentcount++] = (short)strtol(argptr + 1, NULL, 0); break; - + default: usage(); } @@ -386,8 +385,8 @@ int main(int argc, char **argv) compress_sys_file = exeflat(argv[1], argv[2], argv[3], silentSegments, silentcount, - TRUE, &header); - if (!UPX || flat_exe) + UPX, &header); + if (!UPX) exit(0); /* move kernel.sys tmp$$$$$.exe */ @@ -416,14 +415,14 @@ int main(int argc, char **argv) len += n; } cmdbuf[len++] = ' '; - cmdbuf[len++] = '\''; + /* if tmpexe is tmpfile set above no quotes needed, if user needs quotes should add on cmd line */ memcpy(cmdbuf + len, tmpexe, len2); - cmdbuf[len + len2 - 1] = '\''; cmdbuf[len + len2] = '\0'; printf("%s\n", cmdbuf); if (system(cmdbuf)) { printf("Problems executing %s\n", cmdbuf); + printf("Removing [%s]\n", tmpexe); remove(tmpexe); exit(1); }