Le 26/09/2022 à 13:39, Jason A. Donenfeld a écrit :
Various tools, such as kexec-tools and m68k-bootinfo, expect each
bootinfo entry to be aligned to 4 bytes, not 2 bytes. So adjust the
padding to fill this out as such.
Agree, I found the same problem using petitboot as a ROM for the virt machine [1].
(I didn't update BOOTINFOSTR() but I think I should).
Reviewed-by: Laurent Vivier <laurent@xxxxxxxxx>
[1] https://github.com/vivier/qemu-m68k/commits/m68k-virt
Also, break apart the padding additions from the other field length
additions, so that it's more clear why these magic numbers are being
added, and comment them too.
Reported-by: Geert Uytterhoeven <geert@xxxxxxxxxxxxxx>
Cc: Laurent Vivier <laurent@xxxxxxxxx>
Signed-off-by: Jason A. Donenfeld <Jason@xxxxxxxxx>
---
hw/m68k/bootinfo.h | 10 ++++++----
1 file changed, 6 insertions(+), 4 deletions(-)
diff --git a/hw/m68k/bootinfo.h b/hw/m68k/bootinfo.h
index bd8b212fd3..897162b818 100644
--- a/hw/m68k/bootinfo.h
+++ b/hw/m68k/bootinfo.h
@@ -48,13 +48,14 @@
stw_phys(as, base, id); \
base += 2; \
stw_phys(as, base, \
- (sizeof(struct bi_record) + strlen(string) + 2) & ~1); \
+ (sizeof(struct bi_record) + strlen(string) + \
+ 1 /* null termination */ + 3 /* padding */) & ~3); \
base += 2; \
for (i = 0; string[i]; i++) { \
stb_phys(as, base++, string[i]); \
} \
stb_phys(as, base++, 0); \
- base = (base + 1) & ~1; \
+ base = (base + 3) & ~3; \
} while (0)
#define BOOTINFODATA(as, base, id, data, len) \
@@ -63,13 +64,14 @@
stw_phys(as, base, id); \
base += 2; \
stw_phys(as, base, \
- (sizeof(struct bi_record) + len + 3) & ~1); \
+ (sizeof(struct bi_record) + len + \
+ 2 /* length field */ + 3 /* padding */) & ~3); \
base += 2; \
stw_phys(as, base, len); \
base += 2; \
for (i = 0; i < len; ++i) { \
stb_phys(as, base++, data[i]); \
} \
- base = (base + 1) & ~1; \
+ base = (base + 3) & ~3; \
} while (0)
#endif