<div dir="ltr"><div class="gmail_default" style="font-family:monospace;font-size:small;color:#000000">Can we introduce C wrappers to sanitizer_common and use them in profile runtime? Of course 'sanitizer_common' needs to become 'profile_common'.</div><div class="gmail_default" style="font-family:monospace;font-size:small;color:#000000"><br></div><div class="gmail_default" style="font-family:monospace;font-size:small;color:#000000">David</div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Wed, Jul 14, 2021 at 4:14 PM Petr Hosek <<a href="mailto:phosek@google.com">phosek@google.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr">What are your thoughts on using C++ and sanitizer_common in profile runtime?<div><br></div><div>First, to clarify, I'm not suggesting using the standard C++ library. What I'm suggesting is just using the C++ languageĀ akin to sanitizer runtimes or memprof.</div><div><br></div><div>profile runtime is the last major runtime in compiler-rt that's implemented in C and switching to C++ could make the compiler-rt codebase more uniform. Beyond that, I think this could be beneficial for several reasons:</div><div><br></div><div>* _Reducing the duplication between profile runtime and sanitizer_common._ Both of these implement various polyfills for different platforms (for example the mmap like interface) and it would be great if we could avoid duplicating the effort and share a common implementation.</div><div><br></div><div>* _Avoiding potential cyclic dependencies in profile runtime._ The implementation currently uses various libc functions, but if libc is profile instrumented there is a risk of potentially entering an infinite recursion. This could be avoided by using internal implementations of these libc functions which sanitizer_common does, but if we wanted to take the same approach for profile runtime, we would need to re-implement these functions again further increasing duplication.</div><div><br></div><div>* _Simplifying the profile runtime implementation._ Some parts of the runtime already use object-oriented style interfaces, that is structs with function pointers, replacing these with classes would make the code cleaner. Furthermore, we could use classes to abstract away some of the platform implementation which currently relies on ifdefs. We could also take the advantage of RAII for resource management.</div><div><br></div><div>If we decided to go ahead with this change, I'd suggest an incremental transition rather than doing a major rewrite. We would start by ensuring that all source files compile as C++. Then we would introduce the sanitizer_common dependency and see which functions could be replaced by sanitizer_common counterparts. Finally, we could refactor the implementation and take advantage of C++ constructs where appropriate.</div></div>
</blockquote></div>