Skip to contentSkip to conversation

misc: don't use hwaddr as a type in trace events

PATCH Superseded Daniel P. Berrangé 3 participants 5 messages Mar 6, 2018

v1 of 2 Superseded Latest is v2 →

lore
Share & tools
lore
#0 lore raw

PATCH 1/1 misc: don't use hwaddr as a type in trace events

Use types that are defined by QEMU in trace events caused build failures for the UST trace backend:

In file included from trace-ust-all.c:13:0:
trace-ust-all.h:11844:206: error: unknown type name ‘hwaddr’

It only knows about C built-in types, and any types that are pulled in from includs of qemu-common.h and lttng/tracepoint.h. This does not include the 'hwaddr' type, so replace it with a uint64_t which is what exec/hwaddr.h defines 'hwaddr' as. This fixes the build failure introduced by

commit 9eb8040c2d2b38e1a40bb6129b1b668fa178fcab
Author: Peter Maydell <[email protected]>
Date: Fri Mar 2 10:45:39 2018 +0000

hw/misc/tz-ppc: Model TrustZone peripheral protection controller

---

For future work it might be good to have tracetool whitelist the permitted data types that can be safely used in trace events...

 hw/misc/trace-events | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)
hw/misc/trace-events +2 -2
index eb5ffcc0a8..b0cc047289 100644
@@ -92,8 +92,8 @@ tz_ppc_cfg_sec_resp(int level) "TZ PPC: cfg_sec_resp = %d"
 tz_ppc_irq_enable(int level) "TZ PPC: int_enable = %d"
 tz_ppc_irq_clear(int level) "TZ PPC: int_clear = %d"
 tz_ppc_update_irq(int level) "TZ PPC: setting irq line to %d"
-tz_ppc_read_blocked(int n, hwaddr offset, bool secure, bool user) "TZ PPC: port %d offset 0x%" HWADDR_PRIx " read (secure %d user %d) blocked"
-tz_ppc_write_blocked(int n, hwaddr offset, bool secure, bool user) "TZ PPC: port %d offset 0x%" HWADDR_PRIx " write (secure %d user %d) blocked"
+tz_ppc_read_blocked(int n, uint64_t offset, bool secure, bool user) "TZ PPC: port %d offset 0x%" HWADDR_PRIx " read (secure %d user %d) blocked"
+tz_ppc_write_blocked(int n, uint64_t offset, bool secure, bool user) "TZ PPC: port %d offset 0x%" HWADDR_PRIx " write (secure %d user %d) blocked"
 
 # hw/misc/iotkit-secctl.c
 iotkit_secctl_s_read(uint32_t offset, uint64_t data, unsigned size) "IoTKit SecCtl S regs read: offset 0x%x data 0x%" PRIx64 " size %u"
Signature · 1 line
2.14.3
#1 lore raw
Quoted 12 lines · Daniel P. Berrangé

Use types that are defined by QEMU in trace events caused build failures for the UST trace backend:

In file included from trace-ust-all.c:13:0:
trace-ust-all.h:11844:206: error: unknown type name ‘hwaddr’

It only knows about C built-in types, and any types that are pulled in from includs of qemu-common.h and lttng/tracepoint.h. This does not include the 'hwaddr' type, so replace it with a uint64_t which is what exec/hwaddr.h defines 'hwaddr' as. This fixes the build failure introduced by

Quoted 8 lines

commit 9eb8040c2d2b38e1a40bb6129b1b668fa178fcab
Author: Peter Maydell <[email protected]>
Date: Fri Mar 2 10:45:39 2018 +0000

hw/misc/tz-ppc: Model TrustZone peripheral protection controller

---

Oops.

hw/misc/trace-events tz_ppc_cfg_sec_resp(int level) "TZ PPC: cfg_sec_resp = %d" · line 96

Quoted 10 lines
hw/misc/trace-events +2 -2
@@ -92,8 +92,8 @@ tz_ppc_cfg_sec_resp(int level) "TZ PPC: cfg_sec_resp = %d"
 tz_ppc_irq_enable(int level) "TZ PPC: int_enable = %d"
 tz_ppc_irq_clear(int level) "TZ PPC: int_clear = %d"
 tz_ppc_update_irq(int level) "TZ PPC: setting irq line to %d"
-tz_ppc_read_blocked(int n, hwaddr offset, bool secure, bool user) "TZ PPC: port %d offset 0x%" HWADDR_PRIx " read (secure %d user %d) blocked"
-tz_ppc_write_blocked(int n, hwaddr offset, bool secure, bool user) "TZ PPC: port %d offset 0x%" HWADDR_PRIx " write (secure %d user %d) blocked"
+tz_ppc_read_blocked(int n, uint64_t offset, bool secure, bool user) "TZ PPC: port %d offset 0x%" HWADDR_PRIx " read (secure %d user %d) blocked"
+tz_ppc_write_blocked(int n, uint64_t offset, bool secure, bool user) "TZ PPC: port %d offset 0x%" HWADDR_PRIx " write (secure %d user %d) blocked"

If the type isn't "hwaddr" then HWADDR_PRIx is the wrong format string macro -- those should change to PRIx64.

thanks
-- PMM

#2 lore raw
Quoted 24 lines · Peter Maydell
Quoted 12 lines · Daniel P. Berrangé

Use types that are defined by QEMU in trace events caused build failures for the UST trace backend:

In file included from trace-ust-all.c:13:0:
trace-ust-all.h:11844:206: error: unknown type name ‘hwaddr’

It only knows about C built-in types, and any types that are pulled in from includs of qemu-common.h and lttng/tracepoint.h. This does not include the 'hwaddr' type, so replace it with a uint64_t which is what exec/hwaddr.h defines 'hwaddr' as. This fixes the build failure introduced by

Quoted 8 lines

commit 9eb8040c2d2b38e1a40bb6129b1b668fa178fcab
Author: Peter Maydell <[email protected]>
Date: Fri Mar 2 10:45:39 2018 +0000

hw/misc/tz-ppc: Model TrustZone peripheral protection controller

---

Oops.

Quoted 14 lines

hw/misc/trace-events tz_ppc_cfg_sec_resp(int level) "TZ PPC: cfg_sec_resp = %d" · line 96

Quoted 10 lines
hw/misc/trace-events +2 -2
@@ -92,8 +92,8 @@ tz_ppc_cfg_sec_resp(int level) "TZ PPC: cfg_sec_resp = %d"
 tz_ppc_irq_enable(int level) "TZ PPC: int_enable = %d"
 tz_ppc_irq_clear(int level) "TZ PPC: int_clear = %d"
 tz_ppc_update_irq(int level) "TZ PPC: setting irq line to %d"
-tz_ppc_read_blocked(int n, hwaddr offset, bool secure, bool user) "TZ PPC: port %d offset 0x%" HWADDR_PRIx " read (secure %d user %d) blocked"
-tz_ppc_write_blocked(int n, hwaddr offset, bool secure, bool user) "TZ PPC: port %d offset 0x%" HWADDR_PRIx " write (secure %d user %d) blocked"
+tz_ppc_read_blocked(int n, uint64_t offset, bool secure, bool user) "TZ PPC: port %d offset 0x%" HWADDR_PRIx " read (secure %d user %d) blocked"
+tz_ppc_write_blocked(int n, uint64_t offset, bool secure, bool user) "TZ PPC: port %d offset 0x%" HWADDR_PRIx " write (secure %d user %d) blocked"

If the type isn't "hwaddr" then HWADDR_PRIx is the wrong format string macro -- those should change to PRIx64.

Eeek, that HWADDR_PRIx macro is used throughout this file, sometimes even with uint32_t as the arg !

Regards,
Daniel

Signature · 3 lines
|: https://berrange.com      -o-    https://www.flickr.com/photos/dberrange :|
|: https://libvirt.org         -o-            https://fstop138.berrange.com :|
|: https://entangle-photo.org    -o-    https://www.instagram.com/dberrange :|
#3 lore raw
Quoted 6 lines · Daniel P. Berrangé
Quoted 2 lines · Peter Maydell

If the type isn't "hwaddr" then HWADDR_PRIx is the wrong format string macro -- those should change to PRIx64.

Eeek, that HWADDR_PRIx macro is used throughout this file, sometimes even with uint32_t as the arg !

Mmm, it's used where PRIx64 should be, but I think only for uint64_t arguments; I can't see a uint32_t one. hw/ide/trace-events also has a couple of HWADDR_PRIx uses.

thanks
-- PMM

#4 lore raw
In reply to Daniel P. Berrangé
Quoted 33 lines · Daniel P. Berrangé

Use types that are defined by QEMU in trace events caused build failures for the UST trace backend:

In file included from trace-ust-all.c:13:0:
trace-ust-all.h:11844:206: error: unknown type name ‘hwaddr’

It only knows about C built-in types, and any types that are pulled in from includs of qemu-common.h and lttng/tracepoint.h. This does not include the 'hwaddr' type, so replace it with a uint64_t which is what exec/hwaddr.h defines 'hwaddr' as. This fixes the build failure introduced by

commit 9eb8040c2d2b38e1a40bb6129b1b668fa178fcab
Author: Peter Maydell <[email protected]>
Date: Fri Mar 2 10:45:39 2018 +0000

hw/misc/tz-ppc: Model TrustZone peripheral protection controller

---

For future work it might be good to have tracetool whitelist the permitted data types that can be safely used in trace events...

  hw/misc/trace-events | 4 ++--
  1 file changed, 2 insertions(+), 2 deletions(-)
hw/misc/trace-events +0 -0
index eb5ffcc0a8..b0cc047289 100644

hw/misc/trace-events tz_ppc_cfg_sec_resp(int level) "TZ PPC: cfg_sec_resp = %d" · line 99

Quoted 10 lines
hw/misc/trace-events +2 -2
@@ -92,8 +92,8 @@ tz_ppc_cfg_sec_resp(int level) "TZ PPC: cfg_sec_resp = %d"
  tz_ppc_irq_enable(int level) "TZ PPC: int_enable = %d"
  tz_ppc_irq_clear(int level) "TZ PPC: int_clear = %d"
  tz_ppc_update_irq(int level) "TZ PPC: setting irq line to %d"
-tz_ppc_read_blocked(int n, hwaddr offset, bool secure, bool user) "TZ PPC: port %d offset 0x%" HWADDR_PRIx " read (secure %d user %d) blocked"
-tz_ppc_write_blocked(int n, hwaddr offset, bool secure, bool user) "TZ PPC: port %d offset 0x%" HWADDR_PRIx " write (secure %d user %d) blocked"
+tz_ppc_read_blocked(int n, uint64_t offset, bool secure, bool user) "TZ PPC: port %d offset 0x%" HWADDR_PRIx " read (secure %d user %d) blocked"
+tz_ppc_write_blocked(int n, uint64_t offset, bool secure, bool user) "TZ PPC: port %d offset 0x%" HWADDR_PRIx " write (secure %d user %d) blocked"
 
  # hw/misc/iotkit-secctl.c
  iotkit_secctl_s_read(uint32_t offset, uint64_t data, unsigned size) "IoTKit SecCtl S regs read: offset 0x%x data 0x%" PRIx64 " size %u"

Hi Daniel,

IIRC last time I made this mistake I also had to change HWADDR_PRIx to PRIx64 in the format strings because one of my pull requests failed when trying to use HWADDR_PRIx in one of the non-QEMU tracing tools.

ATB,

Mark.