Fix a few stap parser issues and add a new test for probe expressions
authorSergio Durigan Junior <sergiodj@sergiodj.net>
Sun, 3 Jan 2021 07:42:52 +0000 (02:42 -0500)
committerSergio Durigan Junior <sergiodj@sergiodj.net>
Wed, 20 Jan 2021 18:54:30 +0000 (13:54 -0500)
commit6f52fdf40465ee8f5421c66ceb21f37856bf6e5e
tree8c91b9f86d579eed54da4d5c21174f90ed34acf0
parent037e8112b9794a633248e5aa5943f3be273e0a20
Fix a few stap parser issues and add a new test for probe expressions

The creation of this patch was motivated by Tom's "Change handling of
'!' operator in stap probes" patch.

While reviewing his patch, I stumbled upon a few issues with the stap
expression parser.  They are:

- As it turns out, even with Tom's patch applied the parser doesn't
  properly handle the '!' operator.  The underlying issue was the fact
  that stap_parse_argument_conditionally also needed to be patched in
  order to recognize '!' as an operator that is part of a single
  operand, and parse it accordingly.

- While writing the testcase I'm proposing on this patch, I found that
  parenthesized sub-expressions were not being parsed correctly when
  there was another term after them.  For example:

    1 - (2 + 3) + 4

  In this case, the parser was considering "1" to be the left-side of
  the expression, and "(2 + 3) + 4" to be the right-side.  The patch
  fixes the parser by making it identify whether a parenthesized
  sub-expression has just been parsed, and act accordingly.

I've tested this on my Debian testing amd64, and everything seems OK.

gdb/ChangeLog:
2021-01-20  Sergio Durigan Junior  <sergiodj@sergiodj.net>
    Tom Tromey <tom@tromey.com>

* stap-probe.c (stap_parse_single_operand): Handle '!'
operator.
(stap_parse_argument_conditionally): Likewise.
Skip spaces after processing open-parenthesis sub-expression.
(stap_parse_argument_1): Skip spaces after call to
stap_parse_argument_conditionally.
Handle case when right-side expression is a parenthesized
sub-expression.
Skip spaces after call to stap_parse_argument_1.

gdb/testsuite/ChangeLog:
2021-01-20  Sergio Durigan Junior  <sergiodj@sergiodj.net>

* gdb.arch/amd64-stap-expressions.S: New file.
* gdb.arch/amd64-stap-expressions.exp: New file.
gdb/ChangeLog
gdb/stap-probe.c
gdb/testsuite/ChangeLog
gdb/testsuite/gdb.arch/amd64-stap-expressions.S [new file with mode: 0644]
gdb/testsuite/gdb.arch/amd64-stap-expressions.exp [new file with mode: 0644]