Rollup merge of #57803 - jethrogb:jb/sgx-unwind-version, r=alexcrichton
Several changes to libunwind for SGX target Two fixes: * #34978 bites again! * __rust_alloc are actually private symbols. Add new public versions. Also, these ones are `extern "C"`. Upstream changes (https://github.com/fortanix/llvm-project/pull/2, https://github.com/fortanix/llvm-project/pull/3): * b7357de Avoid too new relocation types being emitted * 0feefe5 Use new symbol names to call Rust allocator Fixes https://github.com/fortanix/rust-sgx/issues/65
This commit is contained in:
commit
bea83213f3
2 changed files with 16 additions and 1 deletions
|
@ -32,7 +32,7 @@ RUN /tmp/build-solaris-toolchain.sh sparcv9 sparcv9 solaris-sparc
|
|||
COPY dist-various-2/build-x86_64-fortanix-unknown-sgx-toolchain.sh /tmp/
|
||||
# We pass the commit id of the port of LLVM's libunwind to the build script.
|
||||
# Any update to the commit id here, should cause the container image to be re-built from this point on.
|
||||
RUN /tmp/build-x86_64-fortanix-unknown-sgx-toolchain.sh "bbe23902411be88d7388f381becefadd6e3ef819"
|
||||
RUN /tmp/build-x86_64-fortanix-unknown-sgx-toolchain.sh "13fad13f8ea83a8da58d04a5faa45943151b3398"
|
||||
|
||||
COPY scripts/sccache.sh /scripts/
|
||||
RUN sh /scripts/sccache.sh
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
use alloc::{self, Layout};
|
||||
use num::NonZeroUsize;
|
||||
use slice;
|
||||
use str;
|
||||
|
@ -147,6 +148,7 @@ impl RWLock {
|
|||
self.__write_unlock(rguard, wguard);
|
||||
}
|
||||
|
||||
// only used by __rust_rwlock_unlock below
|
||||
#[inline]
|
||||
unsafe fn unlock(&self) {
|
||||
let rguard = self.readers.lock();
|
||||
|
@ -164,6 +166,7 @@ impl RWLock {
|
|||
|
||||
const EINVAL: i32 = 22;
|
||||
|
||||
// used by libunwind port
|
||||
#[no_mangle]
|
||||
pub unsafe extern "C" fn __rust_rwlock_rdlock(p: *mut RWLock) -> i32 {
|
||||
if p.is_null() {
|
||||
|
@ -190,6 +193,8 @@ pub unsafe extern "C" fn __rust_rwlock_unlock(p: *mut RWLock) -> i32 {
|
|||
return 0;
|
||||
}
|
||||
|
||||
// the following functions are also used by the libunwind port. They're
|
||||
// included here to make sure parallel codegen and LTO don't mess things up.
|
||||
#[no_mangle]
|
||||
pub unsafe extern "C" fn __rust_print_err(m: *mut u8, s: i32) {
|
||||
if s < 0 {
|
||||
|
@ -206,6 +211,16 @@ pub unsafe extern "C" fn __rust_abort() {
|
|||
::sys::abort_internal();
|
||||
}
|
||||
|
||||
#[no_mangle]
|
||||
pub unsafe extern "C" fn __rust_c_alloc(size: usize, align: usize) -> *mut u8 {
|
||||
alloc::alloc(Layout::from_size_align_unchecked(size, align))
|
||||
}
|
||||
|
||||
#[no_mangle]
|
||||
pub unsafe extern "C" fn __rust_c_dealloc(ptr: *mut u8, size: usize, align: usize) {
|
||||
alloc::dealloc(ptr, Layout::from_size_align_unchecked(size, align))
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
|
||||
|
|
Loading…
Reference in a new issue