mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-27 22:24:11 +08:00
Fix IHEX firmware generation/loading
Fix both the IHEX firmware generation (len field always null, and EOF marker a byte too short) and loading (struct ihex_binrec needs to be packed to reflect the on-disk structure). Signed-off-by: Marc Zyngier <maz@misterjones.org> Signed-off-by: David Woodhouse <David.Woodhouse@intel.com>
This commit is contained in:
parent
f1136d022a
commit
85ebd00334
@ -250,19 +250,19 @@ static void file_record(struct ihex_binrec *record)
|
||||
|
||||
static int output_records(int outfd)
|
||||
{
|
||||
unsigned char zeroes[5] = {0, 0, 0, 0, 0};
|
||||
unsigned char zeroes[6] = {0, 0, 0, 0, 0, 0};
|
||||
struct ihex_binrec *p = records;
|
||||
|
||||
while (p) {
|
||||
uint16_t writelen = (p->len + 9) & ~3;
|
||||
|
||||
p->addr = htonl(p->addr);
|
||||
p->len = htonl(p->len);
|
||||
p->len = htons(p->len);
|
||||
write(outfd, &p->addr, writelen);
|
||||
p = p->next;
|
||||
}
|
||||
/* EOF record is zero length, since we don't bother to represent
|
||||
the type field in the binary version */
|
||||
write(outfd, zeroes, 5);
|
||||
write(outfd, zeroes, 6);
|
||||
return 0;
|
||||
}
|
||||
|
@ -18,7 +18,7 @@ struct ihex_binrec {
|
||||
__be32 addr;
|
||||
__be16 len;
|
||||
uint8_t data[0];
|
||||
} __attribute__((aligned(4)));
|
||||
} __attribute__((packed));
|
||||
|
||||
/* Find the next record, taking into account the 4-byte alignment */
|
||||
static inline const struct ihex_binrec *
|
||||
|
Loading…
Reference in New Issue
Block a user