Repository navigation
[Rust] Add Platform::register_calling_convention - #8651
Merged
emesare merged 3 commits intoOct 11, 2026
Merged
Conversation
Expose BNRegisterPlatformCallingConvention so a platform can be given calling conventions beyond the default/cdecl/stdcall/fastcall/syscall roles. Like the role setters, it asserts that the calling convention's architecture matches the platform's.
arch_handle is already a CoreArchitecture, so .borrow().as_ref() was a no-op that clippy flags as useless_asref. Compare the handles directly.
emesare
approved these changes
Oct 11, 2026
This file contains hidden or 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
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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.
Summary
Adds
Platform::register_calling_convention, a safe wrapper forBNRegisterPlatformCallingConvention, so a platform can be given calling conventions that aren't tied to a role.Motivation
The Rust crate can set the default/cdecl/stdcall/fastcall/syscall conventions on a platform, and
calling_conventions()lists what's registered, but nothing registers an extra one. A plugin that creates its own platforms (Platform::new+register_os) currently has to look up handles by name and callbinaryninjacore_sysdirectly inunsafecode to make the architecture's other calling conventions available on them, becausePlatform::handleandCoreCallingConvention::handlearepub(crate). The Python API already hasPlatform.register_calling_convention.Change
pub fn register_calling_convention(&self, cc: &CoreCallingConvention)onPlatform, next to the role setters. It uses the same architecture-match assertion as thecc_func!setters and then callsBNRegisterPlatformCallingConvention.rust/tests/platform.rscreates an x86_64 platform, registerswin64, and checks thatcalling_conventions()returns it.Testing
cargo check -p binaryninjacargo test -p binaryninja --test platform -- --test-threads=1(all 5 pass, including the new test), against a headless installrustfmt --checkon the changed files