You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mynewt.apache.org by ma...@apache.org on 2016/05/19 16:51:27 UTC

[15/18] incubator-mynewt-core git commit: coredump; use bsp_core_dump() to figure out memory areas to dump. If memory region is > 64k, split it into multiple areas.

coredump; use bsp_core_dump() to figure out memory areas to dump.
If memory region is > 64k, split it into multiple areas.


Project: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/commit/c37da5d3
Tree: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/tree/c37da5d3
Diff: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/diff/c37da5d3

Branch: refs/heads/develop
Commit: c37da5d3d4c55a256b7209e27d4ee5bd1ebe544d
Parents: 1bbd2da
Author: Marko Kiiskila <ma...@runtime.io>
Authored: Thu May 19 09:27:07 2016 -0700
Committer: Marko Kiiskila <ma...@runtime.io>
Committed: Thu May 19 09:35:45 2016 -0700

----------------------------------------------------------------------
 sys/coredump/src/coredump.c | 28 +++++++++++++++++++++-------
 1 file changed, 21 insertions(+), 7 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/c37da5d3/sys/coredump/src/coredump.c
----------------------------------------------------------------------
diff --git a/sys/coredump/src/coredump.c b/sys/coredump/src/coredump.c
index b9743d0..2161ef8 100644
--- a/sys/coredump/src/coredump.c
+++ b/sys/coredump/src/coredump.c
@@ -16,6 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
+#include <limits.h>
 #include <hal/hal_bsp.h>
 #include <hal/flash_map.h>
 #include <bootutil/image.h>
@@ -33,8 +34,6 @@ dump_core_tlv(const struct flash_area *fa, uint32_t *off,
     *off += tlv->ct_len;
 }
 
-extern char *__vector_tbl_reloc__, *__StackTop;
-
 void
 dump_core(void *regs, int regs_sz)
 {
@@ -42,8 +41,11 @@ dump_core(void *regs, int regs_sz)
     struct coredump_tlv tlv;
     const struct flash_area *fa;
     struct image_version ver;
+    const struct bsp_mem_dump *mem, *cur;
+    int area_cnt, i;
     uint8_t hash[IMGMGR_HASH_LEN];
     uint32_t off;
+    uint32_t area_off, area_end;
 
     if (flash_area_open(FLASH_AREA_CORE, &fa)) {
         return;
@@ -81,11 +83,23 @@ dump_core(void *regs, int regs_sz)
         dump_core_tlv(fa, &off, &tlv, hash);
     }
 
-    tlv.ct_type = COREDUMP_TLV_MEM;
-    tlv.ct_len = (uint32_t)&__StackTop - (uint32_t)&__vector_tbl_reloc__;
-    tlv.ct_off = (uint32_t)&__vector_tbl_reloc__;
-    dump_core_tlv(fa, &off, &tlv, &__vector_tbl_reloc__);
-
+    mem = bsp_core_dump(&area_cnt);
+    for (i = 0; i < area_cnt; i++) {
+        cur = &mem[i];
+        area_off = (uint32_t)cur->bmd_start;
+        area_end = area_off + cur->bmd_size;
+        while (area_off < area_end) {
+            tlv.ct_type = COREDUMP_TLV_MEM;
+            if (cur->bmd_size > USHRT_MAX) {
+                tlv.ct_len = SHRT_MAX + 1;
+            } else {
+                tlv.ct_len = cur->bmd_size;
+            }
+            tlv.ct_off = area_off;
+            dump_core_tlv(fa, &off, &tlv, (void *)area_off);
+            area_off += tlv.ct_len;
+        }
+    }
     hdr.ch_magic = COREDUMP_MAGIC;
     hdr.ch_size = off;