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/
|
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.
|
# 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.
|
# 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/
|
COPY scripts/sccache.sh /scripts/
|
||||||
RUN sh /scripts/sccache.sh
|
RUN sh /scripts/sccache.sh
|
||||||
|
|
|
@ -1,3 +1,4 @@
|
||||||
|
use alloc::{self, Layout};
|
||||||
use num::NonZeroUsize;
|
use num::NonZeroUsize;
|
||||||
use slice;
|
use slice;
|
||||||
use str;
|
use str;
|
||||||
|
@ -147,6 +148,7 @@ impl RWLock {
|
||||||
self.__write_unlock(rguard, wguard);
|
self.__write_unlock(rguard, wguard);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// only used by __rust_rwlock_unlock below
|
||||||
#[inline]
|
#[inline]
|
||||||
unsafe fn unlock(&self) {
|
unsafe fn unlock(&self) {
|
||||||
let rguard = self.readers.lock();
|
let rguard = self.readers.lock();
|
||||||
|
@ -164,6 +166,7 @@ impl RWLock {
|
||||||
|
|
||||||
const EINVAL: i32 = 22;
|
const EINVAL: i32 = 22;
|
||||||
|
|
||||||
|
// used by libunwind port
|
||||||
#[no_mangle]
|
#[no_mangle]
|
||||||
pub unsafe extern "C" fn __rust_rwlock_rdlock(p: *mut RWLock) -> i32 {
|
pub unsafe extern "C" fn __rust_rwlock_rdlock(p: *mut RWLock) -> i32 {
|
||||||
if p.is_null() {
|
if p.is_null() {
|
||||||
|
@ -190,6 +193,8 @@ pub unsafe extern "C" fn __rust_rwlock_unlock(p: *mut RWLock) -> i32 {
|
||||||
return 0;
|
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]
|
#[no_mangle]
|
||||||
pub unsafe extern "C" fn __rust_print_err(m: *mut u8, s: i32) {
|
pub unsafe extern "C" fn __rust_print_err(m: *mut u8, s: i32) {
|
||||||
if s < 0 {
|
if s < 0 {
|
||||||
|
@ -206,6 +211,16 @@ pub unsafe extern "C" fn __rust_abort() {
|
||||||
::sys::abort_internal();
|
::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)]
|
#[cfg(test)]
|
||||||
mod tests {
|
mod tests {
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue