-
Notifications
You must be signed in to change notification settings - Fork 4
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
98 Serialization sanitizer support #101
base: develop
Are you sure you want to change the base?
Conversation
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
As written, does whatever 'top-level' object that's rooting a serialization call get properly checked? I'm not quite sure on the interplay of the serializer, the dispatcher, and the push and pop calls.
Also, I looked over the corresponding bits in the clang tool, and they seem reasonable. |
There's a potential corner case of objects with empty-base optimizations in play, but that's so obscure as to likely be irrelevant. |
02a5df4
to
04cb363
Compare
This side of things all looks good to me. |
04cb363
to
f62c1f3
Compare
Codecov Report
@@ Coverage Diff @@
## develop #101 +/- ##
===========================================
- Coverage 93.76% 92.98% -0.78%
===========================================
Files 94 97 +3
Lines 2854 2909 +55
===========================================
+ Hits 2676 2705 +29
- Misses 178 204 +26
|
@PhilMiller @cz4rs Can you guys take a look at this? I've done a major overhaul of this code. I'm splitting up the concerns between the type-specific traversal for sanitization and the sanitizer runtime logic. Checkpoint will contain the typed overloads at all times. This means one may use a stock VT/Checkpoint and then enable the sanitizer later. The sanitizer runtime itself ( |
This won't be merged until the runtime is complete in the other repo and I confirm this is the correct interface that we need for that work properly. |
/// pimpl to runtime that contains runtime sanitizer logic | ||
extern Runtime* rt(); | ||
|
||
/// function that informs sanitizer if its enabled |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Typo "it's"
|
||
// A bit of a trick...recurse with a non-sanitizing-specific overload to | ||
// resolve actual \c serialize methods without invoking the partial | ||
// specialization |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I think this comment may need more elaboration. I think I kinda get what's going on, but would prefer a full explanation.
|
||
bool enabled() { | ||
return false; | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Would it make sense to have this be a member of the Runtime
object?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
These have to be C functions because they are LD preloaded by the serializer runtime.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Could you point me at where you picked up that constraint? That doesn't sound right to me, since LD_PRELOAD
should just be importing whatever symbols it finds in a foo.so
library into the list that ld.so
will resolve against. If those are C function names or C++ mangled names shouldn't matter.
That said, this isn't a big deal.
Broadly, I think this looks very good. I'll be happy to see this tidied up and merged. |
} | ||
|
||
// Declare this member as serialized | ||
checkpoint_sanitizer_rt()->isSerialized( |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I think it would be preferable to do auto rt = checkpoint_sanitizer_tr()
once here, and then just rt->method()
One important check - does this work if one doesn't include the Otherwise, I think this is ready to move forward, modulo my remarks about some comments and style. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
looks good overall, I agree with Phil on "trick" part needing more explanation
Fixes #98
Initial implémentation of stack-based checker using the clang tooling generated checks from:
https://github.com/DARMA-tasking/serialization-sanitizer