Message ID | 1331544868-31655-2-git-send-email-kwolf@redhat.com |
---|---|
State | New |
Headers | show |
On Mon, Mar 12, 2012 at 9:34 AM, Kevin Wolf <kwolf@redhat.com> wrote: > It has happened more than once that patches that look perfectly sane > and work with simpletrace broke systemtap because they use 'next' as an > argument name for a tracing function. However, 'next' is a keyword for > systemtap, so we shouldn't use it. > > Signed-off-by: Kevin Wolf <kwolf@redhat.com> > --- > scripts/tracetool | 4 ++++ > 1 files changed, 4 insertions(+), 0 deletions(-) > > diff --git a/scripts/tracetool b/scripts/tracetool > index 4c9951d..f892af4 100755 > --- a/scripts/tracetool > +++ b/scripts/tracetool > @@ -81,6 +81,10 @@ get_args() > args=${1#*\(} > args=${args%%\)*} > echo "$args" > + > + if (echo "$args" | grep "[ *]next\($\|[, ]\)" > /dev/null 2>&1); then > + echo -e "\n#error 'next' is a bad argument name (clash with systemtap keyword)\n " > + fi Good idea, let's prevent it from being used. I don't think this is the way to do it because callers will parse stdout and we're not guaranteed to be generating C code where #error works. Instead, we can echo to stderr and do exit 1. Stefan
Am 12.03.2012 12:01, schrieb Stefan Hajnoczi: > On Mon, Mar 12, 2012 at 9:34 AM, Kevin Wolf <kwolf@redhat.com> wrote: >> It has happened more than once that patches that look perfectly sane >> and work with simpletrace broke systemtap because they use 'next' as an >> argument name for a tracing function. However, 'next' is a keyword for >> systemtap, so we shouldn't use it. >> >> Signed-off-by: Kevin Wolf <kwolf@redhat.com> >> --- >> scripts/tracetool | 4 ++++ >> 1 files changed, 4 insertions(+), 0 deletions(-) >> >> diff --git a/scripts/tracetool b/scripts/tracetool >> index 4c9951d..f892af4 100755 >> --- a/scripts/tracetool >> +++ b/scripts/tracetool >> @@ -81,6 +81,10 @@ get_args() >> args=${1#*\(} >> args=${args%%\)*} >> echo "$args" >> + >> + if (echo "$args" | grep "[ *]next\($\|[, ]\)" > /dev/null 2>&1); then >> + echo -e "\n#error 'next' is a bad argument name (clash with systemtap keyword)\n " >> + fi > > Good idea, let's prevent it from being used. > > I don't think this is the way to do it because callers will parse > stdout and we're not guaranteed to be generating C code where #error > works. Instead, we can echo to stderr and do exit 1. Yes, we may generate something else additionally. But trace.h is generated in any case and it will cause a compile error before any non-C file is used. I tried the 'exit 1' approach first and it doesn't really work. This function is called from a subshell, so you don't exit tracetool but just the one subshell and end up with a broken trace.h that will fail compilation in the same place, just with a less helpful error message. Kevin
Stefan Hajnoczi writes: > On Mon, Mar 12, 2012 at 9:34 AM, Kevin Wolf <kwolf@redhat.com> wrote: >> It has happened more than once that patches that look perfectly sane >> and work with simpletrace broke systemtap because they use 'next' as an >> argument name for a tracing function. However, 'next' is a keyword for >> systemtap, so we shouldn't use it. >> >> Signed-off-by: Kevin Wolf <kwolf@redhat.com> >> --- >> scripts/tracetool | 4 ++++ >> 1 files changed, 4 insertions(+), 0 deletions(-) >> >> diff --git a/scripts/tracetool b/scripts/tracetool >> index 4c9951d..f892af4 100755 >> --- a/scripts/tracetool >> +++ b/scripts/tracetool >> @@ -81,6 +81,10 @@ get_args() >> args=${1#*\(} >> args=${args%%\)*} >> echo "$args" >> + >> + if (echo "$args" | grep "[ *]next\($\|[, ]\)" > /dev/null 2>&1); then >> + echo -e "\n#error 'next' is a bad argument name (clash with systemtap keyword)\n " >> + fi > Good idea, let's prevent it from being used. > I don't think this is the way to do it because callers will parse > stdout and we're not guaranteed to be generating C code where #error > works. Instead, we can echo to stderr and do exit 1. I'd rather wait for the python version of tracetool to be integrated, so that less patches have to be rebased. In addition, there's a nice 'error' routine to handle this type of cases. Lluis
diff --git a/scripts/tracetool b/scripts/tracetool index 4c9951d..f892af4 100755 --- a/scripts/tracetool +++ b/scripts/tracetool @@ -81,6 +81,10 @@ get_args() args=${1#*\(} args=${args%%\)*} echo "$args" + + if (echo "$args" | grep "[ *]next\($\|[, ]\)" > /dev/null 2>&1); then + echo -e "\n#error 'next' is a bad argument name (clash with systemtap keyword)\n " + fi } # Get the argument name list of a trace event
It has happened more than once that patches that look perfectly sane and work with simpletrace broke systemtap because they use 'next' as an argument name for a tracing function. However, 'next' is a keyword for systemtap, so we shouldn't use it. Signed-off-by: Kevin Wolf <kwolf@redhat.com> --- scripts/tracetool | 4 ++++ 1 files changed, 4 insertions(+), 0 deletions(-)