aboutsummaryrefslogtreecommitdiff
path: root/hw
diff options
context:
space:
mode:
authorRichard Henderson <richard.henderson@linaro.org>2024-06-05 14:17:01 -0700
committerRichard Henderson <richard.henderson@linaro.org>2024-06-05 14:17:01 -0700
commitdb2feb2df8d19592c9859efb3f682404e0052957 (patch)
tree0a502c20b6ab16b2234d856be43207356d0962b1 /hw
parent535ad16c5d668f6185be2f88c6c82bf8e452c45d (diff)
parentb89fb575fd467ed5dfde4608d51c47c2aa427f30 (diff)
downloadqemu-db2feb2df8d19592c9859efb3f682404e0052957.zip
qemu-db2feb2df8d19592c9859efb3f682404e0052957.tar.gz
qemu-db2feb2df8d19592c9859efb3f682404e0052957.tar.bz2
Merge tag 'pull-misc-20240605' of https://gitlab.com/rth7680/qemu into staging
util/hexdump: Use a GString for qemu_hexdump_line. system/qtest: Replace sprintf by qemu_hexdump_line hw/scsi/scsi-disk: Use qemu_hexdump_line to avoid sprintf hw/ide/atapi: Use qemu_hexdump_line to avoid sprintf hw/dma/pl330: Use qemu_hexdump_line to avoid sprintf disas/microblaze: Reorg to avoid intermediate sprintf disas/riscv: Use GString in format_inst # -----BEGIN PGP SIGNATURE----- # # iQFRBAABCgA7FiEEekgeeIaLTbaoWgXAZN846K9+IV8FAmZg1RMdHHJpY2hhcmQu # aGVuZGVyc29uQGxpbmFyby5vcmcACgkQZN846K9+IV+6mgf6AjEdU91vBXAUxabs # kmVl5HaAD3NHU1VCM+ruPQkm6xv4kLlMsTibmkiS7+WZYvHfPlGfozjRJxtvZj8K # 8J2Qp9iHjny8NQPkMCValDvmzkxaIT7ZzYCBdS4jfTdIThuYNJnXsI3NNP7ghnl6 # xv8O62dQbc5gjWF8G+q6PKWSxY6BEuFJ3Pt82cJ/Fj/8bhsjd48pgiLv66F/+q1z # U9Gy8fWqmkKEzTqBigSYU98yae5CA89T6JBKtgFV07pkYa4A7BUyCR5EBirARyhM # P0OAqR1GCAbSXWFaJ1sSpU8ATq33FoSQYwWwcmEET7FZYZqvbd6Jd4HtpOPqmu9W # Fc4taw== # =VgLB # -----END PGP SIGNATURE----- # gpg: Signature made Wed 05 Jun 2024 02:13:55 PM PDT # gpg: using RSA key 7A481E78868B4DB6A85A05C064DF38E8AF7E215F # gpg: issuer "richard.henderson@linaro.org" # gpg: Good signature from "Richard Henderson <richard.henderson@linaro.org>" [ultimate] * tag 'pull-misc-20240605' of https://gitlab.com/rth7680/qemu: disas/riscv: Use GString in format_inst disas/microblaze: Split get_field_special disas/microblaze: Print registers directly with PRIrfsl disas/microblaze: Print immediates directly with PRIimm disas/microblaze: Print registers directly with PRIreg disas/microblaze: Merge op->name output into each fprintf disas/microblaze: Re-indent print_insn_microblaze disas/microblaze: Split out print_immval_addr hw/dma/pl330: Use qemu_hexdump_line to avoid sprintf hw/ide/atapi: Use qemu_hexdump_line to avoid sprintf hw/scsi/scsi-disk: Use qemu_hexdump_line to avoid sprintf system/qtest: Replace sprintf by qemu_hexdump_line hw/mips/malta: Add re-usable rng_seed_hex_new() method util/hexdump: Inline g_string_append_printf "%02x" util/hexdump: Add unit_len and block_len to qemu_hexdump_line util/hexdump: Use a GString for qemu_hexdump_line Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
Diffstat (limited to 'hw')
-rw-r--r--hw/dma/pl330.c25
-rw-r--r--hw/ide/atapi.c12
-rw-r--r--hw/mips/malta.c25
-rw-r--r--hw/scsi/scsi-disk.c13
-rw-r--r--hw/virtio/vhost-vdpa.c14
5 files changed, 37 insertions, 52 deletions
diff --git a/hw/dma/pl330.c b/hw/dma/pl330.c
index 70a502d..5f89295 100644
--- a/hw/dma/pl330.c
+++ b/hw/dma/pl330.c
@@ -15,6 +15,7 @@
*/
#include "qemu/osdep.h"
+#include "qemu/cutils.h"
#include "hw/irq.h"
#include "hw/qdev-properties.h"
#include "hw/sysbus.h"
@@ -317,22 +318,14 @@ typedef struct PL330InsnDesc {
static void pl330_hexdump(uint8_t *buf, size_t size)
{
- unsigned int b, i, len;
- char tmpbuf[80];
-
- for (b = 0; b < size; b += 16) {
- len = size - b;
- if (len > 16) {
- len = 16;
- }
- tmpbuf[0] = '\0';
- for (i = 0; i < len; i++) {
- if ((i % 4) == 0) {
- strcat(tmpbuf, " ");
- }
- sprintf(tmpbuf + strlen(tmpbuf), " %02x", buf[b + i]);
- }
- trace_pl330_hexdump(b, tmpbuf);
+ g_autoptr(GString) str = g_string_sized_new(64);
+ size_t b, len;
+
+ for (b = 0; b < size; b += len) {
+ len = MIN(16, size - b);
+ g_string_truncate(str, 0);
+ qemu_hexdump_line(str, buf + b, len, 1, 4);
+ trace_pl330_hexdump(b, str->str);
}
}
diff --git a/hw/ide/atapi.c b/hw/ide/atapi.c
index 73ec373..fcb6cca 100644
--- a/hw/ide/atapi.c
+++ b/hw/ide/atapi.c
@@ -24,6 +24,7 @@
*/
#include "qemu/osdep.h"
+#include "qemu/cutils.h"
#include "hw/scsi/scsi.h"
#include "sysemu/block-backend.h"
#include "scsi/constants.h"
@@ -1309,14 +1310,9 @@ void ide_atapi_cmd(IDEState *s)
trace_ide_atapi_cmd(s, s->io_buffer[0]);
if (trace_event_get_state_backends(TRACE_IDE_ATAPI_CMD_PACKET)) {
- /* Each pretty-printed byte needs two bytes and a space; */
- char *ppacket = g_malloc(ATAPI_PACKET_SIZE * 3 + 1);
- int i;
- for (i = 0; i < ATAPI_PACKET_SIZE; i++) {
- sprintf(ppacket + (i * 3), "%02x ", buf[i]);
- }
- trace_ide_atapi_cmd_packet(s, s->lcyl | (s->hcyl << 8), ppacket);
- g_free(ppacket);
+ g_autoptr(GString) str =
+ qemu_hexdump_line(NULL, buf, ATAPI_PACKET_SIZE, 1, 0);
+ trace_ide_atapi_cmd_packet(s, s->lcyl | (s->hcyl << 8), str->str);
}
/*
diff --git a/hw/mips/malta.c b/hw/mips/malta.c
index af74008..664a2ae 100644
--- a/hw/mips/malta.c
+++ b/hw/mips/malta.c
@@ -26,6 +26,7 @@
#include "qemu/units.h"
#include "qemu/bitops.h"
#include "qemu/datadir.h"
+#include "qemu/cutils.h"
#include "qemu/guest-random.h"
#include "hw/clock.h"
#include "hw/southbridge/piix.h"
@@ -850,15 +851,18 @@ static void G_GNUC_PRINTF(3, 4) prom_set(uint32_t *prom_buf, int index,
va_end(ap);
}
-static void reinitialize_rng_seed(void *opaque)
+static GString *rng_seed_hex_new(void)
{
- char *rng_seed_hex = opaque;
uint8_t rng_seed[32];
qemu_guest_getrandom_nofail(rng_seed, sizeof(rng_seed));
- for (size_t i = 0; i < sizeof(rng_seed); ++i) {
- sprintf(rng_seed_hex + i * 2, "%02x", rng_seed[i]);
- }
+ return qemu_hexdump_line(NULL, rng_seed, sizeof(rng_seed), 0, 0);
+}
+
+static void reinitialize_rng_seed(void *opaque)
+{
+ g_autoptr(GString) hex = rng_seed_hex_new();
+ memcpy(opaque, hex->str, hex->len);
}
/* Kernel */
@@ -870,8 +874,6 @@ static uint64_t load_kernel(void)
uint32_t *prom_buf;
long prom_size;
int prom_index = 0;
- uint8_t rng_seed[32];
- char rng_seed_hex[sizeof(rng_seed) * 2 + 1];
size_t rng_seed_prom_offset;
kernel_size = load_elf(loaderparams.kernel_filename, NULL,
@@ -946,14 +948,13 @@ static uint64_t load_kernel(void)
prom_set(prom_buf, prom_index++, "modetty0");
prom_set(prom_buf, prom_index++, "38400n8r");
- qemu_guest_getrandom_nofail(rng_seed, sizeof(rng_seed));
- for (size_t i = 0; i < sizeof(rng_seed); ++i) {
- sprintf(rng_seed_hex + i * 2, "%02x", rng_seed[i]);
- }
prom_set(prom_buf, prom_index++, "rngseed");
rng_seed_prom_offset = prom_index * ENVP_ENTRY_SIZE +
sizeof(uint32_t) * ENVP_NB_ENTRIES;
- prom_set(prom_buf, prom_index++, "%s", rng_seed_hex);
+ {
+ g_autoptr(GString) hex = rng_seed_hex_new();
+ prom_set(prom_buf, prom_index++, "%s", hex->str);
+ }
prom_set(prom_buf, prom_index++, NULL);
diff --git a/hw/scsi/scsi-disk.c b/hw/scsi/scsi-disk.c
index 4bd7af9..f386a2f 100644
--- a/hw/scsi/scsi-disk.c
+++ b/hw/scsi/scsi-disk.c
@@ -2648,19 +2648,12 @@ static const SCSIReqOps *const scsi_disk_reqops_dispatch[256] = {
static void scsi_disk_new_request_dump(uint32_t lun, uint32_t tag, uint8_t *buf)
{
- int i;
int len = scsi_cdb_length(buf);
- char *line_buffer, *p;
+ g_autoptr(GString) str = NULL;
assert(len > 0 && len <= 16);
- line_buffer = g_malloc(len * 5 + 1);
-
- for (i = 0, p = line_buffer; i < len; i++) {
- p += sprintf(p, " 0x%02x", buf[i]);
- }
- trace_scsi_disk_new_request(lun, tag, line_buffer);
-
- g_free(line_buffer);
+ str = qemu_hexdump_line(NULL, buf, len, 1, 0);
+ trace_scsi_disk_new_request(lun, tag, str->str);
}
static SCSIRequest *scsi_new_request(SCSIDevice *d, uint32_t tag, uint32_t lun,
diff --git a/hw/virtio/vhost-vdpa.c b/hw/virtio/vhost-vdpa.c
index 7368b71..3cdaa12 100644
--- a/hw/virtio/vhost-vdpa.c
+++ b/hw/virtio/vhost-vdpa.c
@@ -944,13 +944,15 @@ static int vhost_vdpa_set_config_call(struct vhost_dev *dev,
static void vhost_vdpa_dump_config(struct vhost_dev *dev, const uint8_t *config,
uint32_t config_len)
{
- int b, len;
- char line[QEMU_HEXDUMP_LINE_LEN];
+ g_autoptr(GString) str = g_string_sized_new(4 * 16);
+ size_t b, len;
- for (b = 0; b < config_len; b += 16) {
- len = config_len - b;
- qemu_hexdump_line(line, config + b, len);
- trace_vhost_vdpa_dump_config(dev, b, line);
+ for (b = 0; b < config_len; b += len) {
+ len = MIN(config_len - b, 16);
+
+ g_string_truncate(str, 0);
+ qemu_hexdump_line(str, config + b, len, 1, 4);
+ trace_vhost_vdpa_dump_config(dev, b, str->str);
}
}