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>
This commit is contained in:
Jerry Van Baren
2007-04-19 22:22:35 -04:00
committed by Jon Loeliger
parent 86c01ee6df
commit 7ea144f4c0

View File

@@ -353,6 +353,7 @@ void dt_to_blob(FILE *f, struct boot_info *bi, int version,
struct data dtbuf = empty_data;
struct data strbuf = empty_data;
struct boot_param_header bph;
int padlen;
for (i = 0; i < ARRAY_SIZE(version_table); i++) {
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,
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
* 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 (minsize > 0) {
int padlen = minsize - be32_to_cpu(bph.totalsize);
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);
}
if (padlen > 0) {
blob = data_append_zeroes(blob, padlen);
bph.totalsize = cpu_to_be32(minsize);
}
fwrite(blob.val, blob.len, 1, f);