Browse Source

Fix the -S to modify the totalsize properly.

With the last improvement to pad out the blob, I broke the blob
header totalsize adjustment.  The adjustment was moved up in the
code before the memory image of the blob is created.

Signed-off-by: Gerald Van Baren <vanbaren@cideas.com>
main
Jerry Van Baren 18 years ago committed by Jon Loeliger
parent
commit
7ea144f4c0
  1. 29
      flattree.c

29
flattree.c

@ -353,6 +353,7 @@ void dt_to_blob(FILE *f, struct boot_info *bi, int version,
struct data dtbuf = empty_data; struct data dtbuf = empty_data;
struct data strbuf = empty_data; struct data strbuf = empty_data;
struct boot_param_header bph; struct boot_param_header bph;
int padlen;


for (i = 0; i < ARRAY_SIZE(version_table); i++) { for (i = 0; i < ARRAY_SIZE(version_table); i++) {
if (version_table[i].version == version) if (version_table[i].version == version)
@ -370,6 +371,19 @@ void dt_to_blob(FILE *f, struct boot_info *bi, int version,
make_bph(&bph, vi, reservebuf.len, dtbuf.len, strbuf.len, make_bph(&bph, vi, reservebuf.len, dtbuf.len, strbuf.len,
boot_cpuid_phys); boot_cpuid_phys);


/*
* If the user asked for more space than is used, adjust the totalsize.
*/
padlen = minsize - be32_to_cpu(bph.totalsize);
if (padlen > 0) {
bph.totalsize = cpu_to_be32(minsize);
} else {
if ((minsize > 0) && (quiet < 1))
fprintf(stderr,
"Warning: blob size %d >= minimum size %d\n",
be32_to_cpu(bph.totalsize), minsize);
}

/* /*
* Assemble the blob: start with the header, add with alignment * Assemble the blob: start with the header, add with alignment
* the reserve buffer, add the reserve map terminating zeroes, * the reserve buffer, add the reserve map terminating zeroes,
@ -385,18 +399,9 @@ void dt_to_blob(FILE *f, struct boot_info *bi, int version,
/* /*
* If the user asked for more space than is used, pad out the blob. * If the user asked for more space than is used, pad out the blob.
*/ */
if (minsize > 0) { if (padlen > 0) {
int padlen = minsize - be32_to_cpu(bph.totalsize); blob = data_append_zeroes(blob, padlen);

bph.totalsize = cpu_to_be32(minsize);
if (padlen > 0) {
blob = data_append_zeroes(blob, padlen);
bph.totalsize = cpu_to_be32(minsize);
} else {
if (quiet < 1)
fprintf(stderr,
"Warning: blob size %d >= minimum size %d\n",
be32_to_cpu(bph.totalsize), minsize);
}
} }


fwrite(blob.val, blob.len, 1, f); fwrite(blob.val, blob.len, 1, f);

Loading…
Cancel
Save