On SystemTap's part, it's not strictly necessary to be an identifier.  The C implementation uses them to name a variable for the semaphore, but that's an internal detail could be totally different if/when we add semaphores here.  And they are stringified in the final macro already, so it could conceivably let expr through if you really want.

I'm not sure if GDB is prepared for arbitrary strings in `break -probe name` though.  At first glance, its line parser seems to be breaking it up on spaces, regardless of quoting.  That might be fixable.

DTrace USDT uses them in a function name - see [USDT Macros](http://www.solarisinternals.com/wiki/index.php/DTrace_Topics_USDT#USDT_Macros).  I'm not sure how necessary it is to be named like that, because I don't know USDT internals.

So sticking to identifiers seems best.  Even better would be just C-identifiers, no Unicode, but I don't know how to enforce that in the macro.  Also note that it did allow a keyword `loop` in my example, which is fine by me, just surprising that :ident allowed it.