improve arg collect yet more, tune asm
[ia32rtools.git] / tools / cmpmrg_text.c
index 5a0d296..3862ef3 100644 (file)
@@ -287,11 +287,11 @@ static int handle_pad(uint8_t *d_obj, uint8_t *d_exe, int maxlen)
 {
        static const uint8_t p7[7] = { 0x8d, 0xa4, 0x24, 0x00, 0x00, 0x00, 0x00 };
        static const uint8_t p6[6] = { 0x8d, 0x9b, 0x00, 0x00, 0x00, 0x00 };
-       static const uint8_t p5[5] = { 0x05, 0x00, 0x00, 0x00, 0x00 };
-       static const uint8_t p4[4] = { 0x8d, 0x64, 0x24, 0x00 };
-       static const uint8_t p3[3] = { 0x8d, 0x49, 0x00 };
-       static const uint8_t p2[2] = { 0x8b, 0xff };
-       static const uint8_t p1[1] = { 0x90 };
+       static const uint8_t p5[5] = { 0x05, 0x00, 0x00, 0x00, 0x00 }; // add eax, 0
+       static const uint8_t p4[4] = { 0x8d, 0x64, 0x24, 0x00 }; // lea
+       static const uint8_t p3[3] = { 0x8d, 0x49, 0x00 }; // lea ecx, [ecx]
+       static const uint8_t p2[2] = { 0x8b, 0xff }; // mov edi, edi
+       static const uint8_t p1[1] = { 0x90 }; // nop
        int len;
        int i;
 
@@ -474,7 +474,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;
@@ -494,14 +494,14 @@ int main(int argc, char *argv[])
 
        f_obj = fopen(argv[1], "r+b");
        if (f_obj == NULL) {
-               fprintf(stderr, "%s", argv[1]);
+               fprintf(stderr, "%s", argv[1]);
                perror("");
                return 1;
        }
 
        f_exe = fopen(argv[2], "r");
        if (f_exe == NULL) {
-               fprintf(stderr, "%s", argv[2]);
+               fprintf(stderr, "%s", argv[2]);
                perror("");
                return 1;
        }
@@ -608,10 +608,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 +621,7 @@ int main(int argc, char *argv[])
                                        raw_syms_obj[sym].name);
                        }
                }
+#endif
        }
 
        // patch .text