{"id":1992872,"url":"http://patchwork.ozlabs.org/api/patches/1992872/?format=json","web_url":"http://patchwork.ozlabs.org/project/qemu-devel/patch/20241004163042.85922-9-philmd@linaro.org/","project":{"id":14,"url":"http://patchwork.ozlabs.org/api/projects/14/?format=json","name":"QEMU Development","link_name":"qemu-devel","list_id":"qemu-devel.nongnu.org","list_email":"qemu-devel@nongnu.org","web_url":"","scm_url":"","webscm_url":"","list_archive_url":"","list_archive_url_format":"","commit_url_format":""},"msgid":"<20241004163042.85922-9-philmd@linaro.org>","list_archive_url":null,"date":"2024-10-04T16:30:24","name":"[v2,08/25] hw/i386: Use explicit little-endian LD/ST API","commit_ref":null,"pull_url":null,"state":"new","archived":false,"hash":"65f0a325f5962e4481e613775c6b787c5a406937","submitter":{"id":85046,"url":"http://patchwork.ozlabs.org/api/people/85046/?format=json","name":"Philippe Mathieu-Daudé","email":"philmd@linaro.org"},"delegate":null,"mbox":"http://patchwork.ozlabs.org/project/qemu-devel/patch/20241004163042.85922-9-philmd@linaro.org/mbox/","series":[{"id":426623,"url":"http://patchwork.ozlabs.org/api/series/426623/?format=json","web_url":"http://patchwork.ozlabs.org/project/qemu-devel/list/?series=426623","date":"2024-10-04T16:30:18","name":"misc: Use explicit endian LD/ST API","version":2,"mbox":"http://patchwork.ozlabs.org/series/426623/mbox/"}],"comments":"http://patchwork.ozlabs.org/api/patches/1992872/comments/","check":"pending","checks":"http://patchwork.ozlabs.org/api/patches/1992872/checks/","tags":{},"related":[],"headers":{"Return-Path":"<qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org>","X-Original-To":"incoming@patchwork.ozlabs.org","Delivered-To":"patchwork-incoming@legolas.ozlabs.org","Authentication-Results":["legolas.ozlabs.org;\n\tdkim=pass (2048-bit key;\n unprotected) header.d=linaro.org header.i=@linaro.org header.a=rsa-sha256\n header.s=google header.b=KyU2KUAQ;\n\tdkim-atps=neutral","legolas.ozlabs.org;\n spf=pass (sender SPF authorized) smtp.mailfrom=nongnu.org\n (client-ip=209.51.188.17; helo=lists.gnu.org;\n envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org;\n receiver=patchwork.ozlabs.org)"],"Received":["from lists.gnu.org (lists.gnu.org [209.51.188.17])\n\t(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))\n\t(No client certificate requested)\n\tby legolas.ozlabs.org (Postfix) with ESMTPS id 4XKvJT0G1Vz1xtH\n\tfor <incoming@patchwork.ozlabs.org>; Sat,  5 Oct 2024 02:34:17 +1000 (AEST)","from localhost ([::1] helo=lists1p.gnu.org)\n\tby lists.gnu.org with esmtp (Exim 4.90_1)\n\t(envelope-from <qemu-devel-bounces@nongnu.org>)\n\tid 1swlEo-00073R-2Y; Fri, 04 Oct 2024 12:33:06 -0400","from eggs.gnu.org ([2001:470:142:3::10])\n by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)\n (Exim 4.90_1) (envelope-from <philmd@linaro.org>) id 1swlEf-0006UG-I7\n for qemu-devel@nongnu.org; Fri, 04 Oct 2024 12:32:57 -0400","from mail-lf1-x12f.google.com ([2a00:1450:4864:20::12f])\n by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128)\n (Exim 4.90_1) (envelope-from <philmd@linaro.org>) id 1swlEb-0005ns-Co\n for qemu-devel@nongnu.org; Fri, 04 Oct 2024 12:32:57 -0400","by mail-lf1-x12f.google.com with SMTP id\n 2adb3069b0e04-53997328633so3376208e87.3\n for <qemu-devel@nongnu.org>; Fri, 04 Oct 2024 09:32:51 -0700 (PDT)","from localhost.localdomain ([91.223.100.150])\n by smtp.gmail.com with ESMTPSA id\n 2adb3069b0e04-539afec1096sm2073e87.8.2024.10.04.09.32.44\n (version=TLS1_3 cipher=TLS_CHACHA20_POLY1305_SHA256 bits=256/256);\n Fri, 04 Oct 2024 09:32:49 -0700 (PDT)"],"DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n d=linaro.org; s=google; t=1728059570; x=1728664370; darn=nongnu.org;\n h=content-transfer-encoding:mime-version:references:in-reply-to\n :message-id:date:subject:cc:to:from:from:to:cc:subject:date\n :message-id:reply-to;\n bh=jZ9Y3dHzcheJ9MIl5G4LIQKrlHzrSEJ4E+LpPuujorA=;\n b=KyU2KUAQ25rGA/7hl5DZJFVaMVukNyEetIlZ46G6/Qe+gtkicCP4LbHlZxiYR2wIFS\n IzfX9HyhwTjC6QnC5fqIzUhN5Swb36E5jez2XTE2LGEcMjXrGKEnpYYHeNoyIlbo4vgV\n 3AzngzeOwPYjRx+tp8jzGTK1AICOSrX8RIb3/OHDw2GOfWgdxcwoZnDLh3Kg8m5+/kIL\n e+/AnFK1psOXT34vChOohtJwQuiUVXCBA6WIZ+SgsqrdTYXr9uhBpR0/nRb8MqUPdUGM\n a93HufKtqS/J1PI/QGGEOGVdVbQneyyR14OzlvFlLbiLFAvM6pvfZkc1DCkVGgtw+yhY\n Uz7Q==","X-Google-DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n d=1e100.net; s=20230601; t=1728059570; x=1728664370;\n h=content-transfer-encoding:mime-version:references:in-reply-to\n :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc\n :subject:date:message-id:reply-to;\n bh=jZ9Y3dHzcheJ9MIl5G4LIQKrlHzrSEJ4E+LpPuujorA=;\n b=HU6hZfCuVmCIJ4gCUZJn+gd+c+oLq+tO47pMYvKIr3pD3MTwSijnBNUQUVWydcLUea\n LrrGbtwFjbYS1zIV64VemJFK2Iugy3Wnkv7EGuIykCG2+GicD6Prcsyv2IsiRfaV0avY\n ZTEQiL9QbZ05r9VJUdMCAj9inRtr4zSTXqBbtsq0AjpPQS9f1aTGTHIdCiPgsc2lllLH\n BAAYEwcR2b1m0ClDlHWE6hxlriQ73UeKE4o8bxyyDi5fcul8wK4VOYvFk7Ims/jF/LHx\n Mj4EZxzwxafx4WY3TgWLw7Z8gYepapDImSvfH53vx0PK1xi9SDgvGoMIROdA6qB3kASB\n Ir3A==","X-Gm-Message-State":"AOJu0YyD6Eg3lkD69W2UOliXpA01gJAU5iNWNGVwbh87hwVVGnNGSM6d\n DaJxxpevGuPbQVciiYSDfAX1LKalg7ZtBmlSt3J3t2ldY77apN5Z5Y3XrpqCV1korH4MWWPsTml\n ag6PD2A==","X-Google-Smtp-Source":"\n AGHT+IHO/h9QS0QGe+oGvo2tEB19fT95aY4PEqiVdzvqtaeaTRCYxnudY6thA7Ns5FFkcfpZXrtGFw==","X-Received":"by 2002:a05:6512:ad2:b0:539:905c:15c5 with SMTP id\n 2adb3069b0e04-539ab87df0fmr3562367e87.35.1728059569747;\n Fri, 04 Oct 2024 09:32:49 -0700 (PDT)","From":"=?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= <philmd@linaro.org>","To":"qemu-devel@nongnu.org","Cc":"qemu-riscv@nongnu.org, qemu-s390x@nongnu.org,\n Thomas Huth <thuth@redhat.com>,\n Richard Henderson <richard.henderson@linaro.org>,\n Pierrick Bouvier <pierrick.bouvier@linaro.org>, qemu-ppc@nongnu.org,\n\t=?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= <philmd@linaro.org>","Subject":"[PATCH v2 08/25] hw/i386: Use explicit little-endian LD/ST API","Date":"Fri,  4 Oct 2024 13:30:24 -0300","Message-ID":"<20241004163042.85922-9-philmd@linaro.org>","X-Mailer":"git-send-email 2.45.2","In-Reply-To":"<20241004163042.85922-1-philmd@linaro.org>","References":"<20241004163042.85922-1-philmd@linaro.org>","MIME-Version":"1.0","Content-Type":"text/plain; charset=UTF-8","Content-Transfer-Encoding":"8bit","Received-SPF":"pass client-ip=2a00:1450:4864:20::12f;\n envelope-from=philmd@linaro.org; helo=mail-lf1-x12f.google.com","X-Spam_score_int":"-20","X-Spam_score":"-2.1","X-Spam_bar":"--","X-Spam_report":"(-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1,\n DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1,\n RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001,\n SPF_PASS=-0.001 autolearn=unavailable autolearn_force=no","X-Spam_action":"no action","X-BeenThere":"qemu-devel@nongnu.org","X-Mailman-Version":"2.1.29","Precedence":"list","List-Id":"<qemu-devel.nongnu.org>","List-Unsubscribe":"<https://lists.nongnu.org/mailman/options/qemu-devel>,\n <mailto:qemu-devel-request@nongnu.org?subject=unsubscribe>","List-Archive":"<https://lists.nongnu.org/archive/html/qemu-devel>","List-Post":"<mailto:qemu-devel@nongnu.org>","List-Help":"<mailto:qemu-devel-request@nongnu.org?subject=help>","List-Subscribe":"<https://lists.nongnu.org/mailman/listinfo/qemu-devel>,\n <mailto:qemu-devel-request@nongnu.org?subject=subscribe>","Errors-To":"qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org","Sender":"qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org"},"content":"The x86 architecture uses little endianness. Directly use\nthe little-endian LD/ST API.\n\nMechanical change using:\n\n  $ end=le; \\\n    for acc in uw w l q tul; do \\\n      sed -i -e \"s/ld${acc}_p(/ld${acc}_${end}_p(/\" \\\n             -e \"s/st${acc}_p(/st${acc}_${end}_p(/\" \\\n        $(git grep -wlE '(ld|st)t?u?[wlq]_p' hw/i386/); \\\n    done\n\nSigned-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>\n---\n hw/i386/multiboot.c  | 36 ++++++++++++++++++------------------\n hw/i386/x86-common.c | 26 +++++++++++++-------------\n 2 files changed, 31 insertions(+), 31 deletions(-)","diff":"diff --git a/hw/i386/multiboot.c b/hw/i386/multiboot.c\nindex 3332712ab35..ba4ead5270c 100644\n--- a/hw/i386/multiboot.c\n+++ b/hw/i386/multiboot.c\n@@ -133,9 +133,9 @@ static void mb_add_mod(MultibootState *s,\n \n     p = (char *)s->mb_buf + s->offset_mbinfo + MB_MOD_SIZE * s->mb_mods_count;\n \n-    stl_p(p + MB_MOD_START,   start);\n-    stl_p(p + MB_MOD_END,     end);\n-    stl_p(p + MB_MOD_CMDLINE, cmdline_phys);\n+    stl_le_p(p + MB_MOD_START,   start);\n+    stl_le_p(p + MB_MOD_END,     end);\n+    stl_le_p(p + MB_MOD_CMDLINE, cmdline_phys);\n \n     mb_debug(\"mod%02d: \"HWADDR_FMT_plx\" - \"HWADDR_FMT_plx,\n              s->mb_mods_count, start, end);\n@@ -168,9 +168,9 @@ int load_multiboot(X86MachineState *x86ms,\n     /* Ok, let's see if it is a multiboot image.\n        The header is 12x32bit long, so the latest entry may be 8192 - 48. */\n     for (i = 0; i < (8192 - 48); i += 4) {\n-        if (ldl_p(header+i) == 0x1BADB002) {\n-            uint32_t checksum = ldl_p(header+i+8);\n-            flags = ldl_p(header+i+4);\n+        if (ldl_le_p(header+i) == 0x1BADB002) {\n+            uint32_t checksum = ldl_le_p(header+i+8);\n+            flags = ldl_le_p(header+i+4);\n             checksum += flags;\n             checksum += (uint32_t)0x1BADB002;\n             if (!checksum) {\n@@ -223,11 +223,11 @@ int load_multiboot(X86MachineState *x86ms,\n                  mb_kernel_size, (size_t)mh_entry_addr);\n     } else {\n         /* Valid if mh_flags sets MULTIBOOT_HEADER_HAS_ADDR. */\n-        uint32_t mh_header_addr = ldl_p(header+i+12);\n-        uint32_t mh_load_end_addr = ldl_p(header+i+20);\n-        uint32_t mh_bss_end_addr = ldl_p(header+i+24);\n+        uint32_t mh_header_addr = ldl_le_p(header+i+12);\n+        uint32_t mh_load_end_addr = ldl_le_p(header+i+20);\n+        uint32_t mh_bss_end_addr = ldl_le_p(header+i+24);\n \n-        mh_load_addr = ldl_p(header+i+16);\n+        mh_load_addr = ldl_le_p(header+i+16);\n         if (mh_header_addr < mh_load_addr) {\n             error_report(\"invalid load_addr address\");\n             exit(1);\n@@ -239,7 +239,7 @@ int load_multiboot(X86MachineState *x86ms,\n \n         uint32_t mb_kernel_text_offset = i - (mh_header_addr - mh_load_addr);\n         uint32_t mb_load_size = 0;\n-        mh_entry_addr = ldl_p(header+i+28);\n+        mh_entry_addr = ldl_le_p(header+i+28);\n \n         if (mh_load_end_addr) {\n             if (mh_load_end_addr < mh_load_addr) {\n@@ -364,22 +364,22 @@ int load_multiboot(X86MachineState *x86ms,\n \n     /* Commandline support */\n     kcmdline = g_strdup_printf(\"%s %s\", kernel_filename, kernel_cmdline);\n-    stl_p(bootinfo + MBI_CMDLINE, mb_add_cmdline(&mbs, kcmdline));\n+    stl_le_p(bootinfo + MBI_CMDLINE, mb_add_cmdline(&mbs, kcmdline));\n \n-    stl_p(bootinfo + MBI_BOOTLOADER, mb_add_bootloader(&mbs, bootloader_name));\n+    stl_le_p(bootinfo + MBI_BOOTLOADER, mb_add_bootloader(&mbs, bootloader_name));\n \n-    stl_p(bootinfo + MBI_MODS_ADDR,  mbs.mb_buf_phys + mbs.offset_mbinfo);\n-    stl_p(bootinfo + MBI_MODS_COUNT, mbs.mb_mods_count); /* mods_count */\n+    stl_le_p(bootinfo + MBI_MODS_ADDR,  mbs.mb_buf_phys + mbs.offset_mbinfo);\n+    stl_le_p(bootinfo + MBI_MODS_COUNT, mbs.mb_mods_count); /* mods_count */\n \n     /* the kernel is where we want it to be now */\n-    stl_p(bootinfo + MBI_FLAGS, MULTIBOOT_FLAGS_MEMORY\n+    stl_le_p(bootinfo + MBI_FLAGS, MULTIBOOT_FLAGS_MEMORY\n                                 | MULTIBOOT_FLAGS_BOOT_DEVICE\n                                 | MULTIBOOT_FLAGS_CMDLINE\n                                 | MULTIBOOT_FLAGS_MODULES\n                                 | MULTIBOOT_FLAGS_MMAP\n                                 | MULTIBOOT_FLAGS_BOOTLOADER);\n-    stl_p(bootinfo + MBI_BOOT_DEVICE, 0x8000ffff); /* XXX: use the -boot switch? */\n-    stl_p(bootinfo + MBI_MMAP_ADDR,   ADDR_E820_MAP);\n+    stl_le_p(bootinfo + MBI_BOOT_DEVICE, 0x8000ffff); /* XXX: use the -boot switch? */\n+    stl_le_p(bootinfo + MBI_MMAP_ADDR,   ADDR_E820_MAP);\n \n     mb_debug(\"multiboot: entry_addr = %#x\", mh_entry_addr);\n     mb_debug(\"           mb_buf_phys   = \"HWADDR_FMT_plx, mbs.mb_buf_phys);\ndiff --git a/hw/i386/x86-common.c b/hw/i386/x86-common.c\nindex 992ea1f25e9..b86c38212ea 100644\n--- a/hw/i386/x86-common.c\n+++ b/hw/i386/x86-common.c\n@@ -586,7 +586,7 @@ static bool load_elfboot(const char *kernel_filename,\n     uint64_t elf_low, elf_high;\n     int kernel_size;\n \n-    if (ldl_p(header) != 0x464c457f) {\n+    if (ldl_le_p(header) != 0x464c457f) {\n         return false; /* no elfboot */\n     }\n \n@@ -669,8 +669,8 @@ void x86_load_linux(X86MachineState *x86ms,\n      * kernel protocol version.\n      * Please see https://www.kernel.org/doc/Documentation/x86/boot.txt\n      */\n-    if (ldl_p(header + 0x202) == 0x53726448) /* Magic signature \"HdrS\" */ {\n-        protocol = lduw_p(header + 0x206);\n+    if (ldl_le_p(header + 0x202) == 0x53726448) /* Magic signature \"HdrS\" */ {\n+        protocol = lduw_le_p(header + 0x206);\n     } else {\n         /*\n          * This could be a multiboot kernel. If it is, let's stop treating it\n@@ -762,7 +762,7 @@ void x86_load_linux(X86MachineState *x86ms,\n \n     /* highest address for loading the initrd */\n     if (protocol >= 0x20c &&\n-        lduw_p(header + 0x236) & XLF_CAN_BE_LOADED_ABOVE_4G) {\n+        lduw_le_p(header + 0x236) & XLF_CAN_BE_LOADED_ABOVE_4G) {\n         /*\n          * Linux has supported initrd up to 4 GB for a very long time (2007,\n          * long before XLF_CAN_BE_LOADED_ABOVE_4G which was added in 2013),\n@@ -781,7 +781,7 @@ void x86_load_linux(X86MachineState *x86ms,\n          */\n         initrd_max = UINT32_MAX;\n     } else if (protocol >= 0x203) {\n-        initrd_max = ldl_p(header + 0x22c);\n+        initrd_max = ldl_le_p(header + 0x22c);\n     } else {\n         initrd_max = 0x37ffffff;\n     }\n@@ -797,10 +797,10 @@ void x86_load_linux(X86MachineState *x86ms,\n     sev_load_ctx.cmdline_size = strlen(kernel_cmdline) + 1;\n \n     if (protocol >= 0x202) {\n-        stl_p(header + 0x228, cmdline_addr);\n+        stl_le_p(header + 0x228, cmdline_addr);\n     } else {\n-        stw_p(header + 0x20, 0xA33F);\n-        stw_p(header + 0x22, cmdline_addr - real_addr);\n+        stw_le_p(header + 0x20, 0xA33F);\n+        stw_le_p(header + 0x22, cmdline_addr - real_addr);\n     }\n \n     /* handle vga= parameter */\n@@ -824,7 +824,7 @@ void x86_load_linux(X86MachineState *x86ms,\n                 exit(1);\n             }\n         }\n-        stw_p(header + 0x1fa, video_mode);\n+        stw_le_p(header + 0x1fa, video_mode);\n     }\n \n     /* loader type */\n@@ -839,7 +839,7 @@ void x86_load_linux(X86MachineState *x86ms,\n     /* heap */\n     if (protocol >= 0x201) {\n         header[0x211] |= 0x80; /* CAN_USE_HEAP */\n-        stw_p(header + 0x224, cmdline_addr - real_addr - 0x200);\n+        stw_le_p(header + 0x224, cmdline_addr - real_addr - 0x200);\n     }\n \n     /* load initrd */\n@@ -879,8 +879,8 @@ void x86_load_linux(X86MachineState *x86ms,\n         sev_load_ctx.initrd_data = initrd_data;\n         sev_load_ctx.initrd_size = initrd_size;\n \n-        stl_p(header + 0x218, initrd_addr);\n-        stl_p(header + 0x21c, initrd_size);\n+        stl_le_p(header + 0x218, initrd_addr);\n+        stl_le_p(header + 0x21c, initrd_size);\n     }\n \n     /* load kernel and setup */\n@@ -926,7 +926,7 @@ void x86_load_linux(X86MachineState *x86ms,\n         kernel_size = setup_data_offset + sizeof(struct setup_data) + dtb_size;\n         kernel = g_realloc(kernel, kernel_size);\n \n-        stq_p(header + 0x250, prot_addr + setup_data_offset);\n+        stq_le_p(header + 0x250, prot_addr + setup_data_offset);\n \n         setup_data = (struct setup_data *)(kernel + setup_data_offset);\n         setup_data->next = 0;\n","prefixes":["v2","08/25"]}