qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [RFC PATCH] scripts/tracetool: don't barf validating TCG types


From: Alex Bennée
Subject: Re: [RFC PATCH] scripts/tracetool: don't barf validating TCG types
Date: Tue, 04 May 2021 16:02:25 +0100
User-agent: mu4e 1.5.13; emacs 28.0.50

Stefan Hajnoczi <stefanha@redhat.com> writes:

> [[PGP Signed Part:Undecided]]
> On Tue, Apr 06, 2021 at 05:53:07PM +0100, Alex Bennée wrote:
>> TCG types will be transformed into the appropriate host types later on
>> in the tool. Try and work around this by detecting those cases and
>> pressing on.
>> 
>> [AJB: this seems a bit too hacky - but the problem is validate_type is
>> buried a few layers deep. Maybe we should just drop TCGv from
>> ALLOWED_TYPES and manually do if bit.startswith("TCGv_") in validate_type?]
>
> Please include a line from a trace-events file that triggers the issue.
> It's unclear to me what the problem is although I guess it's related to
> TCGv_* types being rejected by validate_type. The
> bit.startswith("TCGv_") change you mentioned sounds fine or a slightly
> more general ALLOWED_TYPE_PREFIXES = ['TCGv_'].

I tried:

modified   tcg/tcg-op.c
@@ -2715,6 +2715,9 @@ void tcg_gen_lookup_and_goto_ptr(void)
         plugin_gen_disable_mem_helpers();
         ptr = tcg_temp_new_ptr();
         gen_helper_lookup_tb_ptr(ptr, cpu_env);
+
+        trace_goto_tb_tcg(0, ptr);
+
         tcg_gen_op1i(INDEX_op_goto_ptr, tcgv_ptr_arg(ptr));
         tcg_temp_free_ptr(ptr);
     } else {
modified   trace-events
@@ -136,6 +136,10 @@ vcpu guest_cpu_reset(void)
 # Targets: TCG(all)
 vcpu tcg guest_mem_before(TCGv vaddr, uint16_t info) "info=%d", 
"vaddr=0x%016"PRIx64" info=%d"
 
+# Mode: user, softmmu
+# Targets: TCG(all)
+tcg goto_ptr(int ignore, TCGv_ptr ptr) "goto_ptr_trans=%d", "goto_ptr=%p (%d)"
+

Which fails with:

FAILED: trace/trace-root.c 
/usr/bin/python3 ../../scripts/tracetool.py --backend=log --group=root 
--format=c /home/alex/lsrc/qemu.git/./trace-events trace/trace-root.c
Traceback (most recent call last):
  File "../../scripts/tracetool.py", line 154, in <module>
    main(sys.argv)
  File "../../scripts/tracetool.py", line 143, in main
    events.extend(tracetool.read_events(fh, arg))
  File "/home/alex/lsrc/qemu.git/scripts/tracetool/__init__.py", line 406, in 
read_events
    event = Event.build(line, lineno, fname)
  File "/home/alex/lsrc/qemu.git/scripts/tracetool/__init__.py", line 322, in 
build
    args = Arguments.build(groups["args"])
  File "/home/alex/lsrc/qemu.git/scripts/tracetool/__init__.py", line 154, in 
build
    validate_type(arg_type)
  File "/home/alex/lsrc/qemu.git/scripts/tracetool/__init__.py", line 107, in 
validate_type
    "declared as 'void *'" % name)
ValueError: Error at /home/alex/lsrc/qemu.git/./trace-events:141: Argument type 
'TCGv_ptr' is not allowed. Only standard C types and fixed size integer types 
should be used. struct, union, and other complex pointer types should be 
declared as 'void *'

>
>> Fixes: 73ff061032 ("trace: only permit standard C types and fixed size 
>> integer types")
>> Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
>> Cc: Matheus Ferst <matheus.ferst@eldorado.org.br>
>> ---
>>  scripts/tracetool/__init__.py | 13 +++++++++----
>>  1 file changed, 9 insertions(+), 4 deletions(-)
>> 
>> diff --git a/scripts/tracetool/__init__.py b/scripts/tracetool/__init__.py
>> index 5bc94d95cf..ea078e34b4 100644
>> --- a/scripts/tracetool/__init__.py
>> +++ b/scripts/tracetool/__init__.py
>> @@ -87,10 +87,11 @@ def out(*lines, **kwargs):
>>      "ssize_t",
>>      "uintptr_t",
>>      "ptrdiff_t",
>> -    # Magic substitution is done by tracetool
>> +    # Magic substitution is done by tracetool TCG_2_HOST
>
> This makes it clearer that "TCG_2_HOST" is a code reference:
>
>   # Magic substitution is done using tracetool.transform.TCG_2_HOST
>
> [[End of PGP Signed Part]]


-- 
Alex Bennée



reply via email to

[Prev in Thread] Current Thread [Next in Thread]