Skip to content

Commit 53a152d

Browse files
dicejbenbrandt
authored andcommitted
remove obsolete dl module
Signed-off-by: Joel Dice <[email protected]>
1 parent 0a440e3 commit 53a152d

File tree

2 files changed

+3
-174
lines changed

2 files changed

+3
-174
lines changed

runtime/src/lib.rs

Lines changed: 0 additions & 173 deletions
Original file line numberDiff line numberDiff line change
@@ -1099,179 +1099,6 @@ pub extern "C" fn componentize_py_to_canon_handle(
10991099
}
11001100
}
11011101

1102-
// TODO: Update to the latest `wit-component`, which has a `use_built_in_libdl` option that makes the following
1103-
// unecessary:
1104-
pub mod dl {
1105-
use std::{
1106-
ffi::{c_char, c_int, c_void, CStr},
1107-
ptr, slice,
1108-
};
1109-
1110-
const RTLD_LAZY: c_int = 1;
1111-
const RTLD_NOW: c_int = 2;
1112-
1113-
const RTLD_NEXT: isize = -1;
1114-
const RTLD_DEFAULT: isize = 0;
1115-
1116-
#[repr(C)]
1117-
pub struct Name {
1118-
length: u32,
1119-
data: *const u8,
1120-
}
1121-
1122-
#[repr(C)]
1123-
pub struct Symbol {
1124-
name: Name,
1125-
address: *const c_void,
1126-
}
1127-
1128-
#[repr(C)]
1129-
pub struct Symbols {
1130-
count: u32,
1131-
symbols: *const Symbol,
1132-
}
1133-
1134-
#[repr(C)]
1135-
pub struct Library {
1136-
name: Name,
1137-
symbols: Symbols,
1138-
}
1139-
1140-
#[repr(C)]
1141-
pub struct Libraries {
1142-
count: u32,
1143-
libraries: *const Library,
1144-
}
1145-
1146-
struct Pointer<T>(*const T);
1147-
1148-
unsafe impl<T> Sync for Pointer<T> {}
1149-
1150-
static mut ERROR: Pointer<c_char> = Pointer(ptr::null());
1151-
static mut LIBRARIES: Pointer<Libraries> = Pointer(ptr::null());
1152-
1153-
unsafe fn invalid_handle(library: *const c_void) -> bool {
1154-
if LIBRARIES.0.is_null() {
1155-
panic!(
1156-
"`__wasm_set_libraries` should have been called during \
1157-
instantiation with a non-NULL value"
1158-
);
1159-
}
1160-
1161-
let library = library as *const Library;
1162-
if (0..(*LIBRARIES.0).count).any(|index| {
1163-
(*LIBRARIES.0)
1164-
.libraries
1165-
.add(usize::try_from(index).unwrap())
1166-
== library
1167-
}) {
1168-
false
1169-
} else {
1170-
ERROR.0 = b"invalid library handle\0" as *const _ as _;
1171-
true
1172-
}
1173-
}
1174-
1175-
/// # Safety
1176-
/// TODO
1177-
#[no_mangle]
1178-
pub unsafe extern "C" fn dlclose(library: *mut c_void) -> c_int {
1179-
if invalid_handle(library) {
1180-
-1
1181-
} else {
1182-
0
1183-
}
1184-
}
1185-
1186-
/// # Safety
1187-
/// TODO
1188-
#[no_mangle]
1189-
pub unsafe extern "C" fn dlerror() -> *const c_char {
1190-
let value = ERROR.0;
1191-
ERROR.0 = ptr::null();
1192-
value
1193-
}
1194-
1195-
/// # Safety
1196-
/// TODO
1197-
#[no_mangle]
1198-
pub unsafe extern "C" fn dlopen(name: *const c_char, flags: c_int) -> *const c_void {
1199-
if LIBRARIES.0.is_null() {
1200-
panic!(
1201-
"`__wasm_set_libraries` should have been called during \
1202-
instantiation with a non-NULL value"
1203-
);
1204-
}
1205-
1206-
if (flags & !(RTLD_LAZY | RTLD_NOW)) != 0 {
1207-
// TODO
1208-
ERROR.0 = b"dlopen flags not yet supported\0" as *const _ as _;
1209-
return ptr::null();
1210-
}
1211-
1212-
let name = CStr::from_ptr(name);
1213-
let name = name.to_bytes();
1214-
let libraries = slice::from_raw_parts(
1215-
(*LIBRARIES.0).libraries,
1216-
usize::try_from((*LIBRARIES.0).count).unwrap(),
1217-
);
1218-
if let Ok(index) = libraries.binary_search_by(|library| {
1219-
slice::from_raw_parts(
1220-
library.name.data,
1221-
usize::try_from(library.name.length).unwrap(),
1222-
)
1223-
.cmp(name)
1224-
}) {
1225-
&libraries[index] as *const _ as _
1226-
} else {
1227-
ERROR.0 = "library not found\0" as *const _ as _;
1228-
ptr::null()
1229-
}
1230-
}
1231-
1232-
/// # Safety
1233-
/// TODO
1234-
#[no_mangle]
1235-
pub unsafe extern "C" fn dlsym(library: *const c_void, name: *const c_char) -> *const c_void {
1236-
if library as isize == RTLD_NEXT || library as isize == RTLD_DEFAULT {
1237-
// TODO
1238-
ERROR.0 = "dlsym RTLD_NEXT and RTLD_DEFAULT not yet supported\0" as *const _ as _;
1239-
return ptr::null();
1240-
}
1241-
1242-
if invalid_handle(library) {
1243-
return ptr::null();
1244-
}
1245-
1246-
let library = library as *const Library;
1247-
let name = CStr::from_ptr(name);
1248-
let name = name.to_bytes();
1249-
let symbols = slice::from_raw_parts(
1250-
(*library).symbols.symbols,
1251-
usize::try_from((*library).symbols.count).unwrap(),
1252-
);
1253-
if let Ok(index) = symbols.binary_search_by(|symbol| {
1254-
slice::from_raw_parts(
1255-
symbol.name.data,
1256-
usize::try_from(symbol.name.length).unwrap(),
1257-
)
1258-
.cmp(name)
1259-
}) {
1260-
symbols[index].address
1261-
} else {
1262-
ERROR.0 = "library not found\0" as *const _ as _;
1263-
ptr::null()
1264-
}
1265-
}
1266-
1267-
/// # Safety
1268-
/// TODO
1269-
#[no_mangle]
1270-
pub unsafe extern "C" fn __wasm_set_libraries(libraries: *const Libraries) {
1271-
LIBRARIES.0 = libraries;
1272-
}
1273-
}
1274-
12751102
// As of this writing, recent Rust `nightly` builds include a version of the `libc` crate that expects `wasi-libc`
12761103
// to define the following global variables, but `wasi-libc` defines them as preprocessor constants which aren't
12771104
// visible at link time, so we need to define them somewhere. Ideally, we should fix this upstream, but for now we

src/lib.rs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -285,7 +285,9 @@ pub async fn componentize(
285285
});
286286

287287
// Link all the libraries (including any native extensions) into a single component.
288-
let mut linker = wit_component::Linker::default().validate(true);
288+
let mut linker = wit_component::Linker::default()
289+
.validate(true)
290+
.use_built_in_libdl(true);
289291

290292
let mut wasi_imports = HashMap::new();
291293
for Library {

0 commit comments

Comments
 (0)