digitalmars.D.ldc - ASan: disabling instrumentation of specific function
- Johan Engelen (16/16) Aug 03 2017 Hi all,
- Nicholas Wilson (22/38) Aug 08 2017 Well, technically UDA's now touch fronted code, in the form of
- Jacob Carlborg (5/7) Aug 09 2017 idgen is basically a cache, nothing is _required_ to be in the cache. It...
Hi all, I just implemented blacklisting of functions for the sanitizers' instrumentation via a blacklist file (this is what Clang also provides): https://github.com/ldc-developers/ldc/pull/2261 But I think it is nice if we also provide a way to disable sanitizer instrumentation by adding a UDA to a function. For PGO, back then, I choose to enable/disable profiling instrumentation through a pragma. However, adding our own pragmas is quite invasive and touches frontend code, whereas adding a UDA is easy and nicely compartmentalized. Any ideas for a name of the UDA? And where to put it, in ldc.attributes? Clang has the no_sanitize_address attribute. Thanks, Johan
Aug 03 2017
On Thursday, 3 August 2017 at 20:47:48 UTC, Johan Engelen wrote:Hi all, I just implemented blacklisting of functions for the sanitizers' instrumentation via a blacklist file (this is what Clang also provides): https://github.com/ldc-developers/ldc/pull/2261 But I think it is nice if we also provide a way to disable sanitizer instrumentation by adding a UDA to a function. For PGO, back then, I choose to enable/disable profiling instrumentation through a pragma. However, adding our own pragmas is quite invasive and touches frontend code, whereas adding a UDA is easy and nicely compartmentalized.Well, technically UDA's now touch fronted code, in the form of one entry in idgen.d. I haven't implemented any pragmas, but I'm sure they will be more complex.Any ideas for a name of the UDA? And where to put it, in ldc.attributes? Clang has the no_sanitize_address attribute.Will blacklisting other sanitisers happen at a future point? if so it may make sense to do // Probably already exists, but w/e // force the type enum Sanitizer : byte { Address, Thread, // Other sanitisers } struct blacklist // or struct noSanitize { Sanitizer s; } otherwise just private struct _noSanitizeAddress {}; enum noSanitizeAddress = _noSanitizeAddress();Thanks, Johan
Aug 08 2017
On 2017-08-09 03:56, Nicholas Wilson wrote:Well, technically UDA's now touch fronted code, in the form of one entry in idgen.d.idgen is basically a cache, nothing is _required_ to be in the cache. It also helps avoid misspelling symbol names known by the compiler. -- /Jacob Carlborg
Aug 09 2017