workarounds to make link guards work on windows

Link guards cause problems in some specific scenarios on windows because
they force libcore to be instantiated, since we do not GC functions
effectively on windows.

The changes here are two:

1. disable core for rsbegin/rsend
2. make panic_fmt an extern fn for smallest-hello-world so that it
   is not marked as "internal" for LLVM
This commit is contained in:
Niko Matsakis 2016-03-22 20:32:08 -04:00
parent 751c24d345
commit b385ce1223
3 changed files with 19 additions and 3 deletions

View File

@ -23,9 +23,20 @@
// of other runtime components (registered via yet another special image section).
#![crate_type="rlib"]
#![no_std]
#![feature(no_core, lang_items, optin_builtin_traits)]
#![no_core]
#![allow(non_camel_case_types)]
#[lang="sized"]
trait Sized {}
#[lang="copy"]
trait Copy {}
#[lang="sync"]
trait Sync {}
impl Sync for .. {}
#[cfg(all(target_os="windows", target_arch = "x86", target_env="gnu"))]
pub mod eh_frames
{

View File

@ -11,7 +11,12 @@
// See rsbegin.rs for details.
#![crate_type="rlib"]
#![no_std]
#![feature(no_core, lang_items, optin_builtin_traits)]
#![no_core]
#[lang="sync"]
trait Sync {}
impl Sync for .. {}
#[cfg(all(target_os="windows", target_arch = "x86", target_env="gnu"))]
pub mod eh_frames

View File

@ -22,7 +22,7 @@ extern "rust-intrinsic" { fn transmute<T, U>(t: T) -> U; }
#[lang = "eh_personality"] extern fn eh_personality() {}
#[lang = "eh_unwind_resume"] extern fn eh_unwind_resume() {}
#[lang = "panic_fmt"] fn panic_fmt() -> ! { loop {} }
#[lang = "panic_fmt"] extern fn panic_fmt() -> ! { loop {} }
#[no_mangle] pub extern fn rust_eh_register_frames () {}
#[no_mangle] pub extern fn rust_eh_unregister_frames () {}