mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-05 16:53:55 -06:00
hw/i386: Use explicit little-endian LD/ST API
The x86 architecture uses little endianness. Directly use the little-endian LD/ST API. Mechanical change using: $ end=le; \ for acc in uw w l q tul; do \ sed -i -e "s/ld${acc}_p(/ld${acc}_${end}_p(/" \ -e "s/st${acc}_p(/st${acc}_${end}_p(/" \ $(git grep -wlE '(ld|st)t?u?[wlq]_p' hw/i386/); \ done Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org> Reviewed-by: Richard Henderson <richard.henderson@linaro.org> Message-Id: <20241004163042.85922-9-philmd@linaro.org>
This commit is contained in:
parent
ae412c0210
commit
c3fb1fc926
2 changed files with 32 additions and 33 deletions
|
@ -133,9 +133,9 @@ static void mb_add_mod(MultibootState *s,
|
|||
|
||||
p = (char *)s->mb_buf + s->offset_mbinfo + MB_MOD_SIZE * s->mb_mods_count;
|
||||
|
||||
stl_p(p + MB_MOD_START, start);
|
||||
stl_p(p + MB_MOD_END, end);
|
||||
stl_p(p + MB_MOD_CMDLINE, cmdline_phys);
|
||||
stl_le_p(p + MB_MOD_START, start);
|
||||
stl_le_p(p + MB_MOD_END, end);
|
||||
stl_le_p(p + MB_MOD_CMDLINE, cmdline_phys);
|
||||
|
||||
mb_debug("mod%02d: "HWADDR_FMT_plx" - "HWADDR_FMT_plx,
|
||||
s->mb_mods_count, start, end);
|
||||
|
@ -168,9 +168,9 @@ int load_multiboot(X86MachineState *x86ms,
|
|||
/* Ok, let's see if it is a multiboot image.
|
||||
The header is 12x32bit long, so the latest entry may be 8192 - 48. */
|
||||
for (i = 0; i < (8192 - 48); i += 4) {
|
||||
if (ldl_p(header+i) == 0x1BADB002) {
|
||||
uint32_t checksum = ldl_p(header+i+8);
|
||||
flags = ldl_p(header+i+4);
|
||||
if (ldl_le_p(header + i) == 0x1BADB002) {
|
||||
uint32_t checksum = ldl_le_p(header + i + 8);
|
||||
flags = ldl_le_p(header + i + 4);
|
||||
checksum += flags;
|
||||
checksum += (uint32_t)0x1BADB002;
|
||||
if (!checksum) {
|
||||
|
@ -223,11 +223,11 @@ int load_multiboot(X86MachineState *x86ms,
|
|||
mb_kernel_size, (size_t)mh_entry_addr);
|
||||
} else {
|
||||
/* Valid if mh_flags sets MULTIBOOT_HEADER_HAS_ADDR. */
|
||||
uint32_t mh_header_addr = ldl_p(header+i+12);
|
||||
uint32_t mh_load_end_addr = ldl_p(header+i+20);
|
||||
uint32_t mh_bss_end_addr = ldl_p(header+i+24);
|
||||
uint32_t mh_header_addr = ldl_le_p(header + i + 12);
|
||||
uint32_t mh_load_end_addr = ldl_le_p(header + i + 20);
|
||||
uint32_t mh_bss_end_addr = ldl_le_p(header + i + 24);
|
||||
|
||||
mh_load_addr = ldl_p(header+i+16);
|
||||
mh_load_addr = ldl_le_p(header + i + 16);
|
||||
if (mh_header_addr < mh_load_addr) {
|
||||
error_report("invalid load_addr address");
|
||||
exit(1);
|
||||
|
@ -239,7 +239,7 @@ int load_multiboot(X86MachineState *x86ms,
|
|||
|
||||
uint32_t mb_kernel_text_offset = i - (mh_header_addr - mh_load_addr);
|
||||
uint32_t mb_load_size = 0;
|
||||
mh_entry_addr = ldl_p(header+i+28);
|
||||
mh_entry_addr = ldl_le_p(header + i + 28);
|
||||
|
||||
if (mh_load_end_addr) {
|
||||
if (mh_load_end_addr < mh_load_addr) {
|
||||
|
@ -364,22 +364,21 @@ int load_multiboot(X86MachineState *x86ms,
|
|||
|
||||
/* Commandline support */
|
||||
kcmdline = g_strdup_printf("%s %s", kernel_filename, kernel_cmdline);
|
||||
stl_p(bootinfo + MBI_CMDLINE, mb_add_cmdline(&mbs, kcmdline));
|
||||
|
||||
stl_p(bootinfo + MBI_BOOTLOADER, mb_add_bootloader(&mbs, bootloader_name));
|
||||
|
||||
stl_p(bootinfo + MBI_MODS_ADDR, mbs.mb_buf_phys + mbs.offset_mbinfo);
|
||||
stl_p(bootinfo + MBI_MODS_COUNT, mbs.mb_mods_count); /* mods_count */
|
||||
stl_le_p(bootinfo + MBI_CMDLINE, mb_add_cmdline(&mbs, kcmdline));
|
||||
stl_le_p(bootinfo + MBI_BOOTLOADER, mb_add_bootloader(&mbs,
|
||||
bootloader_name));
|
||||
stl_le_p(bootinfo + MBI_MODS_ADDR, mbs.mb_buf_phys + mbs.offset_mbinfo);
|
||||
stl_le_p(bootinfo + MBI_MODS_COUNT, mbs.mb_mods_count); /* mods_count */
|
||||
|
||||
/* the kernel is where we want it to be now */
|
||||
stl_p(bootinfo + MBI_FLAGS, MULTIBOOT_FLAGS_MEMORY
|
||||
stl_le_p(bootinfo + MBI_FLAGS, MULTIBOOT_FLAGS_MEMORY
|
||||
| MULTIBOOT_FLAGS_BOOT_DEVICE
|
||||
| MULTIBOOT_FLAGS_CMDLINE
|
||||
| MULTIBOOT_FLAGS_MODULES
|
||||
| MULTIBOOT_FLAGS_MMAP
|
||||
| MULTIBOOT_FLAGS_BOOTLOADER);
|
||||
stl_p(bootinfo + MBI_BOOT_DEVICE, 0x8000ffff); /* XXX: use the -boot switch? */
|
||||
stl_p(bootinfo + MBI_MMAP_ADDR, ADDR_E820_MAP);
|
||||
stl_le_p(bootinfo + MBI_BOOT_DEVICE, 0x8000ffff); /* XXX: use the -boot switch? */
|
||||
stl_le_p(bootinfo + MBI_MMAP_ADDR, ADDR_E820_MAP);
|
||||
|
||||
mb_debug("multiboot: entry_addr = %#x", mh_entry_addr);
|
||||
mb_debug(" mb_buf_phys = "HWADDR_FMT_plx, mbs.mb_buf_phys);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue