123456789101112131415161718192021 |
- use proc_macro2::TokenStream;
- use quote::quote;
- use syn::{Ident, Type};
- /// Get the base address for percpu variables of the current thread.
- pub fn get_percpu_pointer(percpu: &Ident, ty: &Type) -> TokenStream {
- quote! {
- #[cfg(target_arch = "x86_64")] {
- let base: *mut #ty;
- ::core::arch::asm!(
- "mov %gs:0, {address}",
- "add ${percpu_pointer}, {address}",
- percpu_pointer = sym #percpu,
- address = out(reg) base,
- options(att_syntax)
- );
- base
- }
- }
- .into()
- }
|