All variables are 64-bit and so %l / %ll are not required, and the
latter is actually invalid:
$ sudo stap -e 'probe begin{printf ("BEGIN")}' -I .
parse error: invalid or missing conversion specifier
saw: operator ',' at ./qemu-system-x86_64-log.stp:15118:101
source: printf("%d@%d vhost_vdpa_set_log_base dev: %p base: 0x%x size: %llu
refcnt: %d fd: %d log: %p\n", pid(), gettimeofday_ns(), dev, base, size, refcnt, fd, log)
^
Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
---
scripts/tracetool/format/log_stap.py | 7 ++++++-
1 file changed, 6 insertions(+), 1 deletion(-)
In v2:
- Change existing logic that stripped %z to handle %l/%ll too
diff --git a/scripts/tracetool/format/log_stap.py b/scripts/tracetool/format/log_stap.py
index b486beb672..fac911a0f4 100644
--- a/scripts/tracetool/format/log_stap.py
+++ b/scripts/tracetool/format/log_stap.py
@@ -77,7 +77,12 @@ def c_fmt_to_stap(fmt):
elif state == STATE_LITERAL:
bits.append(literal)
- fmt = re.sub("%(\d*)z(x|u|d)", "%\\1\\2", "".join(bits))
+ # All variables in systemtap are 64-bit in size
+ # The "%l" integer size qualifier is thus redundant
+ # and "%ll" is not valid at all. Simiarly the size_t
+ # based "%z" size qualifier is not valid. We just
+ # strip all size qualifiers for sanity.
+ fmt = re.sub("%(\d*)(l+|z)(x|u|d)", "%\\1\\3", "".join(bits))
return fmt
def generate(events, backend, group):
--
2.29.2
On 06/01/2021 14:02, Daniel P. Berrangé wrote:
> All variables are 64-bit and so %l / %ll are not required, and the
> latter is actually invalid:
>
> $ sudo stap -e 'probe begin{printf ("BEGIN")}' -I .
> parse error: invalid or missing conversion specifier
> saw: operator ',' at ./qemu-system-x86_64-log.stp:15118:101
> source: printf("%d@%d vhost_vdpa_set_log_base dev: %p base: 0x%x size: %llu
> refcnt: %d fd: %d log: %p\n", pid(), gettimeofday_ns(), dev, base, size, refcnt, fd, log)
>
> ^
>
> Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
> ---
> scripts/tracetool/format/log_stap.py | 7 ++++++-
> 1 file changed, 6 insertions(+), 1 deletion(-)
>
> In v2:
>
> - Change existing logic that stripped %z to handle %l/%ll too
>
> diff --git a/scripts/tracetool/format/log_stap.py b/scripts/tracetool/format/log_stap.py
> index b486beb672..fac911a0f4 100644
> --- a/scripts/tracetool/format/log_stap.py
> +++ b/scripts/tracetool/format/log_stap.py
> @@ -77,7 +77,12 @@ def c_fmt_to_stap(fmt):
> elif state == STATE_LITERAL:
> bits.append(literal)
>
> - fmt = re.sub("%(\d*)z(x|u|d)", "%\\1\\2", "".join(bits))
> + # All variables in systemtap are 64-bit in size
> + # The "%l" integer size qualifier is thus redundant
> + # and "%ll" is not valid at all. Simiarly the size_t
> + # based "%z" size qualifier is not valid. We just
> + # strip all size qualifiers for sanity.
> + fmt = re.sub("%(\d*)(l+|z)(x|u|d)", "%\\1\\3", "".join(bits))
> return fmt
>
> def generate(events, backend, group):
>
Reviewed-by: Laurent Vivier <lvivier@redhat.com>
Tested-by: Laurent Vivier <lvivier@redhat.com>
On Wed, Jan 06, 2021 at 01:02:39PM +0000, Daniel P. Berrangé wrote:
> All variables are 64-bit and so %l / %ll are not required, and the
> latter is actually invalid:
>
> $ sudo stap -e 'probe begin{printf ("BEGIN")}' -I .
> parse error: invalid or missing conversion specifier
> saw: operator ',' at ./qemu-system-x86_64-log.stp:15118:101
> source: printf("%d@%d vhost_vdpa_set_log_base dev: %p base: 0x%x size: %llu
> refcnt: %d fd: %d log: %p\n", pid(), gettimeofday_ns(), dev, base, size, refcnt, fd, log)
>
> ^
>
> Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
> ---
> scripts/tracetool/format/log_stap.py | 7 ++++++-
> 1 file changed, 6 insertions(+), 1 deletion(-)
>
> In v2:
>
> - Change existing logic that stripped %z to handle %l/%ll too
Thanks, applied to my tracing tree with Laurent's typo fix:
https://gitlab.com/stefanha/qemu/commits/tracing
Stefan
On 06/01/2021 14:02, Daniel P. Berrangé wrote:
> All variables are 64-bit and so %l / %ll are not required, and the
> latter is actually invalid:
>
> $ sudo stap -e 'probe begin{printf ("BEGIN")}' -I .
> parse error: invalid or missing conversion specifier
> saw: operator ',' at ./qemu-system-x86_64-log.stp:15118:101
> source: printf("%d@%d vhost_vdpa_set_log_base dev: %p base: 0x%x size: %llu
> refcnt: %d fd: %d log: %p\n", pid(), gettimeofday_ns(), dev, base, size, refcnt, fd, log)
>
> ^
>
> Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
> ---
> scripts/tracetool/format/log_stap.py | 7 ++++++-
> 1 file changed, 6 insertions(+), 1 deletion(-)
>
> In v2:
>
> - Change existing logic that stripped %z to handle %l/%ll too
>
> diff --git a/scripts/tracetool/format/log_stap.py b/scripts/tracetool/format/log_stap.py
> index b486beb672..fac911a0f4 100644
> --- a/scripts/tracetool/format/log_stap.py
> +++ b/scripts/tracetool/format/log_stap.py
> @@ -77,7 +77,12 @@ def c_fmt_to_stap(fmt):
> elif state == STATE_LITERAL:
> bits.append(literal)
>
> - fmt = re.sub("%(\d*)z(x|u|d)", "%\\1\\2", "".join(bits))
> + # All variables in systemtap are 64-bit in size
> + # The "%l" integer size qualifier is thus redundant
> + # and "%ll" is not valid at all. Simiarly the size_t
Didn't see the typo the first time:
s/Simiarly/Similarly/
Thanks,
Laurent
On 1/6/21 3:36 PM, Laurent Vivier wrote:
> On 06/01/2021 14:02, Daniel P. Berrangé wrote:
>> All variables are 64-bit and so %l / %ll are not required, and the
>> latter is actually invalid:
>>
>> $ sudo stap -e 'probe begin{printf ("BEGIN")}' -I .
>> parse error: invalid or missing conversion specifier
>> saw: operator ',' at ./qemu-system-x86_64-log.stp:15118:101
>> source: printf("%d@%d vhost_vdpa_set_log_base dev: %p base: 0x%x size: %llu
>> refcnt: %d fd: %d log: %p\n", pid(), gettimeofday_ns(), dev, base, size, refcnt, fd, log)
>>
>> ^
>>
>> Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
>> ---
>> scripts/tracetool/format/log_stap.py | 7 ++++++-
>> 1 file changed, 6 insertions(+), 1 deletion(-)
>>
>> In v2:
>>
>> - Change existing logic that stripped %z to handle %l/%ll too
>>
>> diff --git a/scripts/tracetool/format/log_stap.py b/scripts/tracetool/format/log_stap.py
>> index b486beb672..fac911a0f4 100644
>> --- a/scripts/tracetool/format/log_stap.py
>> +++ b/scripts/tracetool/format/log_stap.py
>> @@ -77,7 +77,12 @@ def c_fmt_to_stap(fmt):
>> elif state == STATE_LITERAL:
>> bits.append(literal)
>>
>> - fmt = re.sub("%(\d*)z(x|u|d)", "%\\1\\2", "".join(bits))
>> + # All variables in systemtap are 64-bit in size
>> + # The "%l" integer size qualifier is thus redundant
>> + # and "%ll" is not valid at all. Simiarly the size_t
>
> Didn't see the typo the first time:
>
> s/Simiarly/Similarly/
Reviewed-by: Philippe Mathieu-Daudé <philmd@redhat.com>
© 2016 - 2025 Red Hat, Inc.