Thanks to visit codestin.com
Credit goes to github.com

Skip to content
Merged
Show file tree
Hide file tree
Changes from 4 commits
Commits
Show all changes
30 commits
Select commit Hold shift + click to select a range
b7f2396
Perform obligation deduplication to avoid buggy `ExistentialMismatch`
estebank Jun 18, 2020
f66bcc5
Add liballoc impl SpecFromElem for i8
pickfire Jun 20, 2020
7cac209
add missing doc links
RalfJung Jun 21, 2020
55d207a
tweak wording
RalfJung Jun 21, 2020
cb8c94c
improve grammar
RalfJung Jun 21, 2020
f3b1582
Update libunwind build process for x86_64-fortanix-unknown-sgx target
AdrianCX Jun 23, 2020
f44b8b9
Document the Self keyword
poliorcetics Jun 24, 2020
5232e20
Document the super keyword
poliorcetics Jun 25, 2020
343a921
Fix comments
AdrianCX Jun 25, 2020
db6fa2f
Remove deprecated comments
AdrianCX Jun 25, 2020
8b368db
Bootstrap: fallback detection of Windows
ajpaverd Jun 25, 2020
1a355a2
Document some invariants correctly/more
oli-obk Jun 25, 2020
f9af59d
Remove irrelevant comment
nbdd0121 Jun 25, 2020
42062a5
Shortcuts for min/max on ordinary BTreeMap/BTreeSet iterators
ssomers Jun 22, 2020
6f8bec9
Warn if linking to a private item
jyn514 May 13, 2020
20552c8
Generate docs for links to private items when passed --document-private
jyn514 May 30, 2020
6742382
Fix debug messages
jyn514 Jun 26, 2020
cb152ea
Remove blank line
kraai Jun 26, 2020
8adc781
Rollup merge of #72771 - jyn514:rustdoc, r=Manishearth
Manishearth Jun 26, 2020
38cbf15
Rollup merge of #72937 - AdrianCX:master, r=nikomatsakis
Manishearth Jun 26, 2020
f13d09a
Rollup merge of #73485 - estebank:dedup-preds, r=nikomatsakis
Manishearth Jun 26, 2020
23b0776
Rollup merge of #73529 - pickfire:liballoc-specfromelem-i8, r=cuviper
Manishearth Jun 26, 2020
92af945
Rollup merge of #73579 - RalfJung:doc-missing-links, r=shepmaster
Manishearth Jun 26, 2020
dfbba65
Rollup merge of #73627 - ssomers:btree_iter_min_max, r=Mark-Simulacrum
Manishearth Jun 26, 2020
c18e919
Rollup merge of #73691 - ajpaverd:bootstrap-windows-73689, r=Mark-Sim…
Manishearth Jun 26, 2020
8d9c00d
Rollup merge of #73694 - poliorcetics:self-upper-keyword, r=Mark-Simu…
Manishearth Jun 26, 2020
bc10bb0
Rollup merge of #73718 - poliorcetics:super-keyword, r=shepmaster
Manishearth Jun 26, 2020
83f6d0a
Rollup merge of #73728 - oli-obk:const_prop_cleanup, r=wesleywiser
Manishearth Jun 26, 2020
7926c64
Rollup merge of #73738 - nbdd0121:comment, r=nikomatsakis
Manishearth Jun 26, 2020
50026ae
Rollup merge of #73765 - kraai:remove-blank-line, r=jonas-schievink
Manishearth Jun 26, 2020
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
21 changes: 4 additions & 17 deletions src/bootstrap/compile.rs
Original file line number Diff line number Diff line change
Expand Up @@ -131,26 +131,13 @@ fn copy_third_party_objects(
compiler: &Compiler,
target: Interned<String>,
) -> Vec<(PathBuf, DependencyType)> {
let libdir = builder.sysroot_libdir(*compiler, target);
let mut target_deps = vec![];

// Copies libunwind.a compiled to be linked with x86_64-fortanix-unknown-sgx.
//
// This target needs to be linked to Fortanix's port of llvm's libunwind.
// libunwind requires support for rwlock and printing to stderr,
// which is provided by std for this target.
// FIXME: remove this in 2021
if target == "x86_64-fortanix-unknown-sgx" {
let src_path_env = "X86_FORTANIX_SGX_LIBS";
let src =
env::var(src_path_env).unwrap_or_else(|_| panic!("{} not found in env", src_path_env));
copy_and_stamp(
builder,
&*libdir,
Path::new(&src),
"libunwind.a",
&mut target_deps,
DependencyType::Target,
);
if env::var_os("X86_FORTANIX_SGX_LIBS").is_some() {
builder.info("Warning: X86_FORTANIX_SGX_LIBS environment variable is ignored, libunwind is now compiled as part of rustbuild");
}
}

if builder.config.sanitizers && compiler.stage != 0 {
Expand Down
6 changes: 1 addition & 5 deletions src/ci/docker/dist-various-2/Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -71,9 +71,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/x86_64-fortanix-unknown-sgx-clang-wrap.sh /usr/bin/x86_64-fortanix-unknown-sgx-clang-11
RUN ln -s /usr/bin/x86_64-fortanix-unknown-sgx-clang-11 /usr/bin/x86_64-fortanix-unknown-sgx-clang++-11
# 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 "800f95131fe6acd20b96b6f4723ca3c820f3d379"
RUN /tmp/build-x86_64-fortanix-unknown-sgx-toolchain.sh

COPY dist-various-2/build-wasi-toolchain.sh /tmp/
RUN /tmp/build-wasi-toolchain.sh
Expand Down Expand Up @@ -105,8 +103,6 @@ ENV TARGETS=$TARGETS,nvptx64-nvidia-cuda
ENV TARGETS=$TARGETS,armv7-unknown-linux-gnueabi
ENV TARGETS=$TARGETS,armv7-unknown-linux-musleabi

ENV X86_FORTANIX_SGX_LIBS="/x86_64-fortanix-unknown-sgx/lib/"

# As per https://bugs.launchpad.net/ubuntu/+source/gcc-defaults/+bug/1300211
# we need asm in the search path for gcc-7 (for gnux32) but not in the search path of the
# cross compilers.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,14 +3,7 @@
set -eu
source shared.sh

if [ -z "$1" ]; then
echo "Usage: ${0} <commit_id>"
exit -1
fi

target="x86_64-fortanix-unknown-sgx"
url="https://github.com/fortanix/llvm-project/archive/${1}.tar.gz"
repo_name="llvm-project"

install_prereq() {
curl https://apt.llvm.org/llvm-snapshot.gpg.key|apt-key add -
Expand All @@ -24,39 +17,4 @@ install_prereq() {
clang-11
}

build_unwind() {
set -x
dir_name="${target}_temp"
rm -rf ${dir_name}
mkdir -p ${dir_name}
pushd ${dir_name}

# Clone Fortanix's fork of llvm-project which has a port of libunwind
fetch_github_commit_archive "$repo_name" "$url"
cd "${repo_name}/libunwind"

# Build libunwind
mkdir -p build
cd build
target_CC="CC_${target//-/_}"
target_CXX="CXX_${target//-/_}"
target_CFLAGS="CFLAGS_${target//-/_}"
target_CXXFLAGS="CXXFLAGS_${target//-/_}"
cmake -DCMAKE_BUILD_TYPE="RELEASE" -DRUST_SGX=1 -G "Unix Makefiles" \
-DCMAKE_C_COMPILER="${!target_CC}" -DCMAKE_CXX_COMPILER="${!target_CXX}" \
-DCMAKE_C_FLAGS="${!target_CFLAGS}" -DCMAKE_CXX_FLAGS="${!target_CXXFLAGS}" \
-DCMAKE_C_COMPILER_TARGET=$target -DCMAKE_CXX_COMPILER_TARGET=$target \
-DLLVM_ENABLE_WARNINGS=1 -DLIBUNWIND_ENABLE_WERROR=1 -DLIBUNWIND_ENABLE_PEDANTIC=0 \
-DLLVM_PATH=../../llvm/ ../
make unwind_static
install -D "lib/libunwind.a" "/${target}/lib/libunwind.a"

popd
rm -rf ${dir_name}

{ set +x; } 2>/dev/null
}

set -x
hide_output install_prereq
build_unwind
6 changes: 4 additions & 2 deletions src/librustc_target/spec/x86_64_fortanix_unknown_sgx.rs
Original file line number Diff line number Diff line change
Expand Up @@ -48,8 +48,10 @@ pub fn target() -> Result<Target, String> {
"ENCLAVE_SIZE",
"CFGDATA_BASE",
"DEBUG",
"EH_FRM_HDR_BASE",
"EH_FRM_HDR_SIZE",
"EH_FRM_HDR_OFFSET",
"EH_FRM_HDR_LEN",
"EH_FRM_OFFSET",
"EH_FRM_LEN",
"TEXT_BASE",
"TEXT_SIZE",
];
Expand Down
14 changes: 9 additions & 5 deletions src/libstd/sys/sgx/abi/entry.S
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ IMAGE_BASE:
.long 1 /* type = NT_VERSION */
0: .asciz "toolchain-version" /* name */
1: .align 4
2: .long 0 /* desc - toolchain version number, 32-bit LE */
2: .long 1 /* desc - toolchain version number, 32-bit LE */
3: .align 4

.section .rodata
Expand Down Expand Up @@ -60,10 +60,14 @@ IMAGE_BASE:
globvar TEXT_BASE 8
/* The size in bytes of enclacve text section */
globvar TEXT_SIZE 8
/* The base address (relative to enclave start) of the enclave EH_FRM_HDR section */
globvar EH_FRM_HDR_BASE 8
/* The size in bytes of enclacve EH_FRM_HDR section */
globvar EH_FRM_HDR_SIZE 8
/* The base address (relative to enclave start) of the enclave .eh_frame_hdr section */
globvar EH_FRM_HDR_OFFSET 8
/* The size in bytes of enclave .eh_frame_hdr section */
globvar EH_FRM_HDR_LEN 8
/* The base address (relative to enclave start) of the enclave .eh_frame section */
globvar EH_FRM_OFFSET 8
/* The size in bytes of enclacve .eh_frame section */
globvar EH_FRM_LEN 8

.org .Lxsave_clear+512
.Lxsave_header:
Expand Down
36 changes: 36 additions & 0 deletions src/libunwind/build.rs
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,8 @@ fn main() {
{
// Build the unwinding from libunwind C/C++ source code.
llvm_libunwind::compile();
} else if target.contains("x86_64-fortanix-unknown-sgx") {
llvm_libunwind::compile();
} else if target.contains("linux") {
if target.contains("musl") {
// linking for musl is handled in lib.rs
Expand Down Expand Up @@ -55,6 +57,7 @@ mod llvm_libunwind {

/// Compile the libunwind C/C++ source code.
pub fn compile() {
let target = env::var("TARGET").expect("TARGET was not set");
let target_env = env::var("CARGO_CFG_TARGET_ENV").unwrap();
let target_vendor = env::var("CARGO_CFG_TARGET_VENDOR").unwrap();
let target_endian_little = env::var("CARGO_CFG_TARGET_ENDIAN").unwrap() != "big";
Expand All @@ -75,6 +78,35 @@ mod llvm_libunwind {
cfg.flag("/EHsc");
cfg.define("_CRT_SECURE_NO_WARNINGS", None);
cfg.define("_LIBUNWIND_DISABLE_VISIBILITY_ANNOTATIONS", None);
} else if target.contains("x86_64-fortanix-unknown-sgx") {
cfg.cpp(false);

cfg.static_flag(true);
cfg.opt_level(3);

cfg.flag("-nostdinc++");
cfg.flag("-fno-exceptions");
cfg.flag("-fno-rtti");
cfg.flag("-fstrict-aliasing");
cfg.flag("-funwind-tables");
cfg.flag("-fvisibility=hidden");
cfg.flag("-fno-stack-protector");
cfg.flag("-ffreestanding");
cfg.flag("-fexceptions");

// easiest way to undefine since no API available in cc::Build to undefine
cfg.flag("-U_FORTIFY_SOURCE");
cfg.define("_FORTIFY_SOURCE", "0");

cfg.flag_if_supported("-fvisibility-global-new-delete-hidden");

cfg.define("_LIBUNWIND_DISABLE_VISIBILITY_ANNOTATIONS", None);
cfg.define("RUST_SGX", "1");
cfg.define("__NO_STRING_INLINES", None);
cfg.define("__NO_MATH_INLINES", None);
cfg.define("_LIBUNWIND_IS_BAREMETAL", None);
cfg.define("__LIBUNWIND_IS_NATIVE_ONLY", None);
cfg.define("NDEBUG", None);
} else {
cfg.flag("-std=c99");
cfg.flag("-std=c++11");
Expand Down Expand Up @@ -103,6 +135,10 @@ mod llvm_libunwind {
unwind_sources.push("Unwind_AppleExtras.cpp");
}

if target.contains("x86_64-fortanix-unknown-sgx") {
unwind_sources.push("UnwindRustSgx.c");
}

let root = Path::new("../llvm-project/libunwind");
cfg.include(root.join("include"));
for src in unwind_sources {
Expand Down