[PATCH dtc] Fix reserve map output for asm format.

Jerry Van Baren gvb.uboot at gmail.com
Sun Apr 15 08:15:27 EST 2007


Add extra reserve map slots output for asm format (previously done for dtb
  output).
Use cmalloc to pre-zero memory (for dtb input) and handle dtb (binary)
  input being shorter than the total blob length (result of putting
  extra space in the blob).

Signed-off-by: Gerald Van Baren <vanbaren at cideas.com>
---

Hi Jon:

Some simple fixes for handling extra reserve slots and extra space in
the blob.

Best regards,
gvb

 dtc.h      |    4 ++--
 flattree.c |   14 +++++++++++---
 2 files changed, 13 insertions(+), 5 deletions(-)

diff --git a/dtc.h b/dtc.h
index 8cfe1a1..e77f9d1 100644
--- a/dtc.h
+++ b/dtc.h
@@ -55,10 +55,10 @@ static inline void die(char * str, ...)
 
 static inline void *xmalloc(size_t len)
 {
-	void *new = malloc(len);
+	void *new = calloc(len, 1);
 
 	if (! new)
-		die("malloc() failed\n");
+		die("calloc() failed\n");
 
 	return new;
 }
diff --git a/flattree.c b/flattree.c
index 151d16e..6f0c9b7 100644
--- a/flattree.c
+++ b/flattree.c
@@ -21,6 +21,9 @@
 #include "dtc.h"
 #include "flat_dt.h"
 
+#define WARNMSG(...) if (quiet < 1) fprintf(stderr, "Warning: " __VA_ARGS__)
+
+
 #define FTF_FULLPATH	0x1
 #define FTF_VARALIGN	0x2
 #define FTF_NAMEPROPS	0x4
@@ -490,6 +493,9 @@ void dt_to_asm(FILE *f, struct boot_info *bi, int version, int boot_cpuid_phys)
 			(unsigned int)(re->re.size >> 32),
 			(unsigned int)(re->re.size & 0xffffffff));
 	}
+	for (i = 0; i < reservenum; i++) {
+		fprintf(f, "\t.long\t0, 0\n\t.long\t0, 0\n");
+	}
 
 	fprintf(f, "\t.long\t0, 0\n\t.long\t0, 0\n");
 
@@ -818,9 +824,11 @@ struct boot_info *dt_from_blob(FILE *f)
 	p = blob + sizeof(magic)  + sizeof(totalsize);
 
 	while (sizeleft) {
-		if (feof(f))
-			die("EOF before reading %d bytes of DT blob\n",
-			    totalsize);
+		if (feof(f)) {
+			WARNMSG("EOF after reading %d of %d bytes of DT blob, assuming there is extra space in the blob.\n",
+			    totalsize - sizeleft, totalsize);
+			break;
+		}
 
 		rc = fread(p, 1, sizeleft, f);
 		if (ferror(f))
-- 
1.4.4.4




More information about the Linuxppc-dev mailing list