cc: Work around verifier error when reading USDT probe arguments
authorSasha Goldshtein <goldshtn@gmail.com>
Wed, 3 May 2017 11:07:23 +0000 (07:07 -0400)
committerSasha Goldshtein <goldshtn@gmail.com>
Wed, 3 May 2017 11:07:23 +0000 (07:07 -0400)
commit2070a2aefb0bb30f675d0ebdfb804b5873bb0200
tree074cd978576e2969fc69e7538c3c9a24e0ff1dce
parent1179ac8724062d74ce44ab8c9922c1b0ffd55286
cc: Work around verifier error when reading USDT probe arguments

The code generated by the USDT helpers for reading probe arguments
occasionally caused a verifier error due to a construct similar to
the following:

```
switch (ctx->ip) {
case 0xaaaa: *dest = ctx->cx; break;
case 0xbbbb: *dest = ctx->dx; break;
}
```

This would generate an instruction sequence that attempts to access
ctx through an offset that is not statically known, which confuses
the verifier. This was reported in #751, #829, and #1133, and likely
seen by others as well.

The workaround, suggested by @yonghong-song, is to force memory
writes by using the volatile modifier, which precludes this specific
optimization.

Resolves #751, #829, #1133.
src/cc/usdt.cc