scripts/tracetool: Fix dtrace generation for macOS

dtrace USDT is fully supported since OS X 10.6. There are a few
peculiarities compared to other dtrace flavors.

1. It doesn't accept empty files.
2. It doesn't recognize bool type but accepts C99 _Bool.
3. It converts int8_t * in probe points to char * in
   header files and introduces [-Wpointer-sign] warning.

Cc: Cameron Esfahani <dirty@apple.com>
Signed-off-by: Roman Bolshakov <r.bolshakov@yadro.com>
Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com>
Message-id: 20200717093517.73397-2-r.bolshakov@yadro.com
Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
This commit is contained in:
Roman Bolshakov 2020-07-17 12:35:14 +03:00 committed by Stefan Hajnoczi
parent 8b7a550702
commit 0807162e60
1 changed files with 14 additions and 1 deletions

View File

@ -13,6 +13,7 @@ __email__ = "stefanha@redhat.com"
from tracetool import out
from sys import platform
# Reserved keywords from
@ -34,7 +35,8 @@ def generate(events, backend, group):
# SystemTap's dtrace(1) warns about empty "provider qemu {}" but is happy
# with an empty file. Avoid the warning.
if not events:
# But dtrace on macOS can't deal with empty files.
if not events and platform != "darwin":
return
out('/* This file is autogenerated by tracetool, do not edit. */'
@ -44,6 +46,17 @@ def generate(events, backend, group):
for e in events:
args = []
for type_, name in e.args:
if platform == "darwin":
# macOS dtrace accepts only C99 _Bool
if type_ == 'bool':
type_ = '_Bool'
if type_ == 'bool *':
type_ = '_Bool *'
# It converts int8_t * in probe points to char * in header
# files and introduces [-Wpointer-sign] warning.
# Avoid it by changing probe type to signed char * beforehand.
if type_ == 'int8_t *':
type_ = 'signed char *'
if name in RESERVED_WORDS:
name += '_'
args.append(type_ + ' ' + name)