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:
parent
8b7a550702
commit
0807162e60
@ -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)
|
||||
|
Loading…
Reference in New Issue
Block a user