[ECOS] Re: [PATCH] Make memory check consistent.

David Ho davidkwho@gmail.com
Tue Jul 25 14:17:00 GMT 2006


Okay, as soon as I look at the patch I knew something was missing.
This might be a bit better.

David

---
diff --git a/packages/redboot/current/src/flash.c
b/packages/redboot/current/src/flash.c
index 9ba7fd3..04d76fa 100644
--- a/packages/redboot/current/src/flash.c
+++ b/packages/redboot/current/src/flash.c
@@ -972,8 +972,8 @@ fis_create(int argc, char *argv[])
             }
         }
     }
-    if (!mem_addr_set && (load_address >= (CYG_ADDRESS)ram_start) &&
-       (load_address_end) < (CYG_ADDRESS)ram_end) {
+    if (!mem_addr_set && valid_address(load_address) &&
+                        valid_address(load_address_end)) {
        mem_addr = load_address;
        mem_addr_set = true;
         defaults_assumed = true;
@@ -1037,11 +1037,8 @@ #endif
         return;
     }
     if (!no_copy) {
-        if ((mem_addr < (CYG_ADDRESS)ram_start) ||
-            ((mem_addr+img_size) >= (CYG_ADDRESS)ram_end)) {
+       if (!valid_address(mem_addr) || !valid_address(mem_addr+img_size))
             diag_printf("** WARNING: RAM address: %p may be
invalid\n", (void *)mem_addr);
-            diag_printf("   valid range is %p-%p\n", (void
*)ram_start, (void *)ram_end);
-        }
         if (!flash_addr_set && !fis_find_free(&flash_addr, length)) {
             diag_printf("Can't locate %lx(%ld) bytes free in
FLASH\n", length, length);
             return;
@@ -1367,11 +1364,8 @@ #endif
         diag_printf("   must be 0x%x aligned\n", flash_block_size);
         return;
     }
-    if ((mem_addr < (CYG_ADDRESS)ram_start) ||
-        ((mem_addr+length) >= (CYG_ADDRESS)ram_end)) {
+    if (!valid_address(mem_addr) || !valid_address(mem_addr+length))
         diag_printf("** WARNING: RAM address: %p may be invalid\n",
(void *)mem_addr);
-        diag_printf("   valid range is %p-%p\n", (void *)ram_start,
(void *)ram_end);
-    }
     // Safety check - make sure the address range is not within the
code we're running
     if (flash_code_overlaps((void *)flash_addr, (void
*)(flash_addr+length-1))) {
         diag_printf("Can't program this region - contains code in use!\n");

-- 
Before posting, please read the FAQ: http://ecos.sourceware.org/fom/ecos
and search the list archive: http://ecos.sourceware.org/ml/ecos-discuss



More information about the Ecos-discuss mailing list