use super::{TlsIndex, TlsInfo};
use crate::{Result, tls_error};
pub trait TlsResolver {
fn register(tls_info: &TlsInfo) -> Result<usize>;
fn register_static(tls_info: &TlsInfo) -> Result<(usize, isize)>;
fn add_static_tls(tls_info: &TlsInfo, offset: isize) -> Result<usize>;
fn unregister(mod_id: usize);
extern "C" fn tls_get_addr(ti: *const TlsIndex) -> *mut u8;
}
impl TlsResolver for () {
fn register(_tls_info: &TlsInfo) -> Result<usize> {
Err(tls_error(
"TLS is not supported by this resolver. Use `with_default_tls_resolver()` to enable TLS support.",
))
}
fn register_static(_tls_info: &TlsInfo) -> Result<(usize, isize)> {
Err(tls_error(
"Static TLS is not supported by this resolver. Use `with_default_tls_resolver()` to enable TLS support.",
))
}
fn add_static_tls(_tls_info: &TlsInfo, _offset: isize) -> Result<usize> {
Err(tls_error(
"Static TLS is not supported by this resolver. Use `with_default_tls_resolver()` to enable TLS support.",
))
}
fn unregister(_mod_id: usize) {
}
extern "C" fn tls_get_addr(_ti: *const TlsIndex) -> *mut u8 {
panic!(
"tls_get_addr called on unit TlsResolver which does not support TLS. Use `with_default_tls_resolver()` to enable TLS support."
);
}
}