]> git.unchartedbackwaters.co.uk Git - francis/winuae.git/commitdiff
Fix elf executable relocated as rom.
authorToni Wilen <twilen@winuae.net>
Sun, 24 Mar 2019 16:11:55 +0000 (18:11 +0200)
committerToni Wilen <twilen@winuae.net>
Sun, 24 Mar 2019 16:11:55 +0000 (18:11 +0200)
debugmem.cpp
memory.cpp

index f00e81062ffcc35180be554978f64b69cce558cf..70a4af3fcb980c34920dc65cc85b4de649005b52 100644 (file)
@@ -2453,23 +2453,6 @@ static uae_u8 *loadelffile(uae_u8 *file, int filelen, uae_u8 *dbgfile, int debug
        int symtab_num = 0;
        bool debuglink = false;
 
-       for (int i = 0; i < shnum; i++) {
-               struct sheader *shp = (struct sheader*)(file + i * sizeof(sheader) + eh->shoff);
-               struct sheader sh;
-               swap_header(&sh, shp);
-               uae_char *name = (uae_char*)(strtabsym + sh.name);
-               if (!strcmp(name, ".gnu_debuglink")) {
-                       debuglink = true;
-               }
-       }
-
-       if (debuglink) {
-               ;
-       } else {
-               dbgfile = NULL;
-               debugfilelen = 0;
-       }
-
        for (int i = 0; i < shnum; i++) {
                struct sheader *shp = (struct sheader*)(file + i * sizeof(sheader) + eh->shoff);
                struct sheader sh;
@@ -2491,6 +2474,23 @@ static uae_u8 *loadelffile(uae_u8 *file, int filelen, uae_u8 *dbgfile, int debug
                        }
                }
        }
+
+       for (int i = 0; i < shnum; i++) {
+               struct sheader *shp = (struct sheader*)(file + i * sizeof(sheader) + eh->shoff);
+               struct sheader sh;
+               swap_header(&sh, shp);
+               uae_char *name = (uae_char*)(strtabsym + sh.name);
+               if (strtabsym && !strcmp(name, ".gnu_debuglink")) {
+                       debuglink = true;
+               }
+       }
+       if (debuglink) {
+               ;
+       } else {
+               dbgfile = NULL;
+               debugfilelen = 0;
+       }
+
        for (int i = 0; i < shnum; i++) {
                struct sheader *shp = (struct sheader*)(file + i * sizeof(sheader) + eh->shoff);
                struct sheader sh;
index 86362f2aeb341a261d74d31709e23dc54c02bfe7..f87382e0d7387b74a546cf9fd172a99334adeae1 100644 (file)
@@ -2810,7 +2810,7 @@ void memory_reset (void)
        }
        if (currprefs.cs_ksmirror_a8) {
                if (extendedkickmem2_bank.allocated_size) {
-                       map_banks_set(&extendedkickmem2_bank, 0xa8, 16, 0);
+                       map_banks_set(&extendedkickmem2_bank, extendedkickmem2_bank.start >> 16, extendedkickmem2_bank.allocated_size >> 16, 0);
                } else {
                        struct romdata *rd = getromdatabypath (currprefs.cartfile);
                        if (!rd || rd->id != 63) {
@@ -2821,6 +2821,8 @@ void memory_reset (void)
                                map_banks(&kickmem_bank, 0xa8, 8, 0);
                        }
                }
+       } else if (extendedkickmem2_bank.allocated_size && extendedkickmem2_bank.baseaddr) {
+               map_banks_set(&extendedkickmem2_bank, extendedkickmem2_bank.start >> 16, extendedkickmem2_bank.allocated_size >> 16, 0);
        }
 
 #ifdef ARCADIA