Skip to content

Commit

Permalink
Rust: Force symbol re-export from libglean_ffi.
Browse files Browse the repository at this point in the history
Workaround to force a re-export of the `no_mangle` symbols from `glean_ffi`

Due to how linking works and hides symbols the symbols from `glean_ffi` might not be
re-exported and thus not usable.
By forcing use of _at least one_ symbol in an exported function the functions will also be
rexported.
This is only required for debug builds (and `debug_assertions` is the closest thing we have to
check that).
In release builds we rely on LTO builds to take care of it.
As the tests will use libglean_ffi functionality running the tests
should ensure this actually happens.

See rust-lang/rust#50007
  • Loading branch information
badboy committed Apr 26, 2021
1 parent 40f1b3a commit 1c58557
Showing 1 changed file with 18 additions and 0 deletions.
18 changes: 18 additions & 0 deletions glean-core/bundle/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -3,3 +3,21 @@
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */

pub use glean_ffi;

/// Workaround to force a re-export of the `no_mangle` symbols from `glean_ffi`
///
/// Due to how linking works and hides symbols the symbols from `glean_ffi` might not be
/// re-exported and thus not usable.
/// By forcing use of _at least one_ symbol in an exported function the functions will also be
/// rexported.
/// This is only required for debug builds (and `debug_assertions` is the closest thing we have to
/// check that).
/// In release builds we rely on LTO builds to take care of it.
/// Our tests should ensure this actually happens.
///
/// See https://github.com/rust-lang/rust/issues/50007
#[cfg(debug_assertions)]
#[no_mangle]
pub unsafe extern "C" fn _glean_force_reexport_donotcall() {
glean_ffi::glean_enable_logging();
}

0 comments on commit 1c58557

Please sign in to comment.