-
Notifications
You must be signed in to change notification settings - Fork 2k
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
sys/shell_lock: do not call strlen, less jumpy #19157
Merged
Merged
Conversation
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
kfessel
added
the
CI: ready for build
If set, CI server will compile all applications for all available boards for the labeled PR
label
Jan 16, 2023
benpicco
approved these changes
Jan 17, 2023
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.
Nice one!
kfessel
added
Process: needs >1 ACK
Integration Process: This PR requires more than one ACK
and removed
Process: needs >1 ACK
Integration Process: This PR requires more than one ACK
labels
Jan 17, 2023
bors merge |
bors bot
added a commit
that referenced
this pull request
Jan 17, 2023
19157: sys/shell_lock: do not call strlen, less jumpy r=kaspar030 a=kfessel ### Contribution description the current `_safe_strcmp` depends on not being optimized and not being inlined (implicitly given by the -O0), this new one does less (would say not since even O3 had compile results that should not return early or show different runtimes for different secrets). the runtime of strlen depend on the length of the string (password) therefor it is removed. `ifs` are very jumpy and depend on the contend of password, this avoids `ifs` sadly clang still compiles some boolean statements to if. with this PR the `__attribute__((optimize("O0")))` should be removable. ### Testing procedure see https://godbolt.org/z/x35b85cEx and run the `<RIOT>/tests/shell_lock` ### Issues/PRs references #19155 made me aware of this function Co-authored-by: Karl Fessel <[email protected]>
Build failed: |
bors merge |
Build succeeded: |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Labels
Area: sys
Area: System
CI: ready for build
If set, CI server will compile all applications for all available boards for the labeled PR
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Contribution description
the current
_safe_strcmp
depends on not being optimized and not being inlined (implicitly given by the -O0), this new one does less (would say not since even O3 had compile results that should not return early or show different runtimes for different secrets).the runtime of strlen depend on the length of the string (password) therefor it is removed.
ifs
are very jumpy and depend on the contend of password, this avoidsifs
sadly clang still compiles some boolean statements to if.with this PR the
__attribute__((optimize("O0")))
should be removable.Testing procedure
see https://godbolt.org/z/x35b85cEx
and run the
<RIOT>/tests/shell_lock
Issues/PRs references
#19155 made me aware of this function