X-Git-Url: https://notaz.gp2x.de/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=tools%2Fcmpmrg_text.c;h=0f8739a689962a7e4eb4cd936fc2e025729eeca2;hb=7637b6cc2bdfb7dc1d2c3c10097f1e6b4ad01e41;hp=987443ea3208a51f97be5547c63f6175cd687b06;hpb=3ebea2cf10a8b0bdddff91b7c639afb1d56e2f0b;p=ia32rtools.git diff --git a/tools/cmpmrg_text.c b/tools/cmpmrg_text.c index 987443e..0f8739a 100644 --- a/tools/cmpmrg_text.c +++ b/tools/cmpmrg_text.c @@ -1,3 +1,11 @@ +/* + * ia32rtools + * (C) notaz, 2013,2014 + * + * This work is licensed under the terms of 3-clause BSD license. + * See COPYING file in the top-level directory. + */ + #include #include #include @@ -474,7 +482,7 @@ static void fill_int3(unsigned char *d, int len) int main(int argc, char *argv[]) { - unsigned int base = 0, addr, addr2, end, sym, *t; + unsigned int base = 0, addr, end, sym, *t; struct my_sect_info s_text_obj, s_text_exe; struct my_symtab *raw_syms_obj = NULL; struct my_symtab *syms_obj = NULL; @@ -482,24 +490,33 @@ int main(int argc, char *argv[]) FILE *f_obj, *f_exe; SCNHDR tmphdr; long sztext_cmn; + int do_cmp = 1; int retval = 1; int left; + int arg; int ret; int i; - if (argc != 3) { - printf("usage:\n%s \n", argv[0]); + for (arg = 1; arg < argc; arg++) { + if (!strcmp(argv[arg], "-n")) + do_cmp = 0; + else + break; + } + + if (argc != arg + 2) { + printf("usage:\n%s [-n] \n", argv[0]); return 1; } - f_obj = fopen(argv[1], "r+b"); + f_obj = fopen(argv[arg++], "r+b"); if (f_obj == NULL) { fprintf(stderr, "%s: ", argv[1]); perror(""); return 1; } - f_exe = fopen(argv[2], "r"); + f_exe = fopen(argv[arg++], "r"); if (f_exe == NULL) { fprintf(stderr, "%s: ", argv[2]); perror(""); @@ -539,6 +556,7 @@ int main(int argc, char *argv[]) } } + if (do_cmp) for (i = 0; i < sztext_cmn; i++) { if (s_text_obj.data[i] == s_text_exe.data[i]) @@ -608,10 +626,12 @@ int main(int argc, char *argv[]) i--; s_text_obj.reloc_cnt--; } +#if 0 // note: branches/calls already linked, // so only useful for dd refs + // XXX: rm'd because of switch tables else if (raw_syms_obj[sym].is_text) { - addr2 = raw_syms_obj[sym].addr; + unsigned int addr2 = raw_syms_obj[sym].addr; if (s_text_obj.data[addr2] == 0xcc) { printf("warning: reloc %08x -> %08x " "points to rm'd target '%s'\n", @@ -619,6 +639,7 @@ int main(int argc, char *argv[]) raw_syms_obj[sym].name); } } +#endif } // patch .text