From ed00ddfb548dacb1aef80eb7afeacdf3a7ef2e6e Mon Sep 17 00:00:00 2001
From: Jeremy Soller <jeremy@system76.com>
Date: Sun, 26 Aug 2018 12:28:27 -0600
Subject: [PATCH] Fix remaining issues, move setjmp into relibc crate, move
 start logic into relibc

---
 src/crt0/src/lib.rs                                   | 4 ++--
 src/header/mod.rs                                     | 1 +
 src/header/setjmp/Cargo.toml                          | 4 ----
 src/header/setjmp/{src => }/impl/README.md            | 0
 src/header/setjmp/{src => }/impl/aarch64/longjmp.s    | 0
 src/header/setjmp/{src => }/impl/aarch64/setjmp.s     | 0
 src/header/setjmp/{src => }/impl/arm/longjmp.s        | 0
 src/header/setjmp/{src => }/impl/arm/setjmp.s         | 0
 src/header/setjmp/{src => }/impl/i386/longjmp.s       | 0
 src/header/setjmp/{src => }/impl/i386/setjmp.s        | 0
 src/header/setjmp/{src => }/impl/m68k/longjmp.s       | 0
 src/header/setjmp/{src => }/impl/m68k/setjmp.s        | 0
 src/header/setjmp/{src => }/impl/microblaze/longjmp.s | 0
 src/header/setjmp/{src => }/impl/microblaze/setjmp.s  | 0
 src/header/setjmp/{src => }/impl/mips/longjmp.S       | 0
 src/header/setjmp/{src => }/impl/mips/setjmp.S        | 0
 src/header/setjmp/{src => }/impl/mips64/longjmp.S     | 0
 src/header/setjmp/{src => }/impl/mips64/setjmp.S      | 0
 src/header/setjmp/{src => }/impl/mipsn32/longjmp.S    | 0
 src/header/setjmp/{src => }/impl/mipsn32/setjmp.S     | 0
 src/header/setjmp/{src => }/impl/or1k/longjmp.s       | 0
 src/header/setjmp/{src => }/impl/or1k/setjmp.s        | 0
 src/header/setjmp/{src => }/impl/powerpc/longjmp.S    | 0
 src/header/setjmp/{src => }/impl/powerpc/setjmp.S     | 0
 src/header/setjmp/{src => }/impl/powerpc64/longjmp.s  | 0
 src/header/setjmp/{src => }/impl/powerpc64/setjmp.s   | 0
 src/header/setjmp/{src => }/impl/s390x/longjmp.s      | 0
 src/header/setjmp/{src => }/impl/s390x/setjmp.s       | 0
 src/header/setjmp/{src => }/impl/sh/longjmp.S         | 0
 src/header/setjmp/{src => }/impl/sh/setjmp.S          | 0
 src/header/setjmp/{src => }/impl/x32/longjmp.s        | 0
 src/header/setjmp/{src => }/impl/x32/setjmp.s         | 0
 src/header/setjmp/{src => }/impl/x86_64/longjmp.s     | 0
 src/header/setjmp/{src => }/impl/x86_64/setjmp.s      | 0
 src/header/setjmp/{src/lib.rs => mod.rs}              | 0
 src/lib.rs                                            | 1 +
 src/start.rs                                          | 5 ++++-
 37 files changed, 8 insertions(+), 7 deletions(-)
 delete mode 100644 src/header/setjmp/Cargo.toml
 rename src/header/setjmp/{src => }/impl/README.md (100%)
 rename src/header/setjmp/{src => }/impl/aarch64/longjmp.s (100%)
 rename src/header/setjmp/{src => }/impl/aarch64/setjmp.s (100%)
 rename src/header/setjmp/{src => }/impl/arm/longjmp.s (100%)
 rename src/header/setjmp/{src => }/impl/arm/setjmp.s (100%)
 rename src/header/setjmp/{src => }/impl/i386/longjmp.s (100%)
 rename src/header/setjmp/{src => }/impl/i386/setjmp.s (100%)
 rename src/header/setjmp/{src => }/impl/m68k/longjmp.s (100%)
 rename src/header/setjmp/{src => }/impl/m68k/setjmp.s (100%)
 rename src/header/setjmp/{src => }/impl/microblaze/longjmp.s (100%)
 rename src/header/setjmp/{src => }/impl/microblaze/setjmp.s (100%)
 rename src/header/setjmp/{src => }/impl/mips/longjmp.S (100%)
 rename src/header/setjmp/{src => }/impl/mips/setjmp.S (100%)
 rename src/header/setjmp/{src => }/impl/mips64/longjmp.S (100%)
 rename src/header/setjmp/{src => }/impl/mips64/setjmp.S (100%)
 rename src/header/setjmp/{src => }/impl/mipsn32/longjmp.S (100%)
 rename src/header/setjmp/{src => }/impl/mipsn32/setjmp.S (100%)
 rename src/header/setjmp/{src => }/impl/or1k/longjmp.s (100%)
 rename src/header/setjmp/{src => }/impl/or1k/setjmp.s (100%)
 rename src/header/setjmp/{src => }/impl/powerpc/longjmp.S (100%)
 rename src/header/setjmp/{src => }/impl/powerpc/setjmp.S (100%)
 rename src/header/setjmp/{src => }/impl/powerpc64/longjmp.s (100%)
 rename src/header/setjmp/{src => }/impl/powerpc64/setjmp.s (100%)
 rename src/header/setjmp/{src => }/impl/s390x/longjmp.s (100%)
 rename src/header/setjmp/{src => }/impl/s390x/setjmp.s (100%)
 rename src/header/setjmp/{src => }/impl/sh/longjmp.S (100%)
 rename src/header/setjmp/{src => }/impl/sh/setjmp.S (100%)
 rename src/header/setjmp/{src => }/impl/x32/longjmp.s (100%)
 rename src/header/setjmp/{src => }/impl/x32/setjmp.s (100%)
 rename src/header/setjmp/{src => }/impl/x86_64/longjmp.s (100%)
 rename src/header/setjmp/{src => }/impl/x86_64/setjmp.s (100%)
 rename src/header/setjmp/{src/lib.rs => mod.rs} (100%)

diff --git a/src/crt0/src/lib.rs b/src/crt0/src/lib.rs
index c54e90b1..d3f1642a 100644
--- a/src/crt0/src/lib.rs
+++ b/src/crt0/src/lib.rs
@@ -13,7 +13,7 @@ pub unsafe extern "C" fn _start() {
     #[cfg(target_arch = "x86_64")]
     asm!("mov rdi, rsp
         and rsp, 0xFFFFFFFFFFFFFFF0
-        call _start_rust"
+        call relibc_start"
         :
         :
         :
@@ -21,7 +21,7 @@ pub unsafe extern "C" fn _start() {
     );
     #[cfg(target_arch = "aarch64")]
     asm!("mov x0, sp
-        bl _start_rust"
+        bl relibc_start"
         :
         :
         :
diff --git a/src/header/mod.rs b/src/header/mod.rs
index 6f65ca75..4fdee751 100644
--- a/src/header/mod.rs
+++ b/src/header/mod.rs
@@ -12,6 +12,7 @@ pub mod locale;
 pub mod netinet_in;
 pub mod pwd;
 pub mod semaphore;
+pub mod setjmp;
 pub mod sgtty;
 pub mod signal;
 pub mod stdio;
diff --git a/src/header/setjmp/Cargo.toml b/src/header/setjmp/Cargo.toml
deleted file mode 100644
index 2826a4e5..00000000
--- a/src/header/setjmp/Cargo.toml
+++ /dev/null
@@ -1,4 +0,0 @@
-[package]
-name = "setjmp"
-version = "0.1.0"
-authors = ["Jeremy Soller <jackpot51@gmail.com>"]
diff --git a/src/header/setjmp/src/impl/README.md b/src/header/setjmp/impl/README.md
similarity index 100%
rename from src/header/setjmp/src/impl/README.md
rename to src/header/setjmp/impl/README.md
diff --git a/src/header/setjmp/src/impl/aarch64/longjmp.s b/src/header/setjmp/impl/aarch64/longjmp.s
similarity index 100%
rename from src/header/setjmp/src/impl/aarch64/longjmp.s
rename to src/header/setjmp/impl/aarch64/longjmp.s
diff --git a/src/header/setjmp/src/impl/aarch64/setjmp.s b/src/header/setjmp/impl/aarch64/setjmp.s
similarity index 100%
rename from src/header/setjmp/src/impl/aarch64/setjmp.s
rename to src/header/setjmp/impl/aarch64/setjmp.s
diff --git a/src/header/setjmp/src/impl/arm/longjmp.s b/src/header/setjmp/impl/arm/longjmp.s
similarity index 100%
rename from src/header/setjmp/src/impl/arm/longjmp.s
rename to src/header/setjmp/impl/arm/longjmp.s
diff --git a/src/header/setjmp/src/impl/arm/setjmp.s b/src/header/setjmp/impl/arm/setjmp.s
similarity index 100%
rename from src/header/setjmp/src/impl/arm/setjmp.s
rename to src/header/setjmp/impl/arm/setjmp.s
diff --git a/src/header/setjmp/src/impl/i386/longjmp.s b/src/header/setjmp/impl/i386/longjmp.s
similarity index 100%
rename from src/header/setjmp/src/impl/i386/longjmp.s
rename to src/header/setjmp/impl/i386/longjmp.s
diff --git a/src/header/setjmp/src/impl/i386/setjmp.s b/src/header/setjmp/impl/i386/setjmp.s
similarity index 100%
rename from src/header/setjmp/src/impl/i386/setjmp.s
rename to src/header/setjmp/impl/i386/setjmp.s
diff --git a/src/header/setjmp/src/impl/m68k/longjmp.s b/src/header/setjmp/impl/m68k/longjmp.s
similarity index 100%
rename from src/header/setjmp/src/impl/m68k/longjmp.s
rename to src/header/setjmp/impl/m68k/longjmp.s
diff --git a/src/header/setjmp/src/impl/m68k/setjmp.s b/src/header/setjmp/impl/m68k/setjmp.s
similarity index 100%
rename from src/header/setjmp/src/impl/m68k/setjmp.s
rename to src/header/setjmp/impl/m68k/setjmp.s
diff --git a/src/header/setjmp/src/impl/microblaze/longjmp.s b/src/header/setjmp/impl/microblaze/longjmp.s
similarity index 100%
rename from src/header/setjmp/src/impl/microblaze/longjmp.s
rename to src/header/setjmp/impl/microblaze/longjmp.s
diff --git a/src/header/setjmp/src/impl/microblaze/setjmp.s b/src/header/setjmp/impl/microblaze/setjmp.s
similarity index 100%
rename from src/header/setjmp/src/impl/microblaze/setjmp.s
rename to src/header/setjmp/impl/microblaze/setjmp.s
diff --git a/src/header/setjmp/src/impl/mips/longjmp.S b/src/header/setjmp/impl/mips/longjmp.S
similarity index 100%
rename from src/header/setjmp/src/impl/mips/longjmp.S
rename to src/header/setjmp/impl/mips/longjmp.S
diff --git a/src/header/setjmp/src/impl/mips/setjmp.S b/src/header/setjmp/impl/mips/setjmp.S
similarity index 100%
rename from src/header/setjmp/src/impl/mips/setjmp.S
rename to src/header/setjmp/impl/mips/setjmp.S
diff --git a/src/header/setjmp/src/impl/mips64/longjmp.S b/src/header/setjmp/impl/mips64/longjmp.S
similarity index 100%
rename from src/header/setjmp/src/impl/mips64/longjmp.S
rename to src/header/setjmp/impl/mips64/longjmp.S
diff --git a/src/header/setjmp/src/impl/mips64/setjmp.S b/src/header/setjmp/impl/mips64/setjmp.S
similarity index 100%
rename from src/header/setjmp/src/impl/mips64/setjmp.S
rename to src/header/setjmp/impl/mips64/setjmp.S
diff --git a/src/header/setjmp/src/impl/mipsn32/longjmp.S b/src/header/setjmp/impl/mipsn32/longjmp.S
similarity index 100%
rename from src/header/setjmp/src/impl/mipsn32/longjmp.S
rename to src/header/setjmp/impl/mipsn32/longjmp.S
diff --git a/src/header/setjmp/src/impl/mipsn32/setjmp.S b/src/header/setjmp/impl/mipsn32/setjmp.S
similarity index 100%
rename from src/header/setjmp/src/impl/mipsn32/setjmp.S
rename to src/header/setjmp/impl/mipsn32/setjmp.S
diff --git a/src/header/setjmp/src/impl/or1k/longjmp.s b/src/header/setjmp/impl/or1k/longjmp.s
similarity index 100%
rename from src/header/setjmp/src/impl/or1k/longjmp.s
rename to src/header/setjmp/impl/or1k/longjmp.s
diff --git a/src/header/setjmp/src/impl/or1k/setjmp.s b/src/header/setjmp/impl/or1k/setjmp.s
similarity index 100%
rename from src/header/setjmp/src/impl/or1k/setjmp.s
rename to src/header/setjmp/impl/or1k/setjmp.s
diff --git a/src/header/setjmp/src/impl/powerpc/longjmp.S b/src/header/setjmp/impl/powerpc/longjmp.S
similarity index 100%
rename from src/header/setjmp/src/impl/powerpc/longjmp.S
rename to src/header/setjmp/impl/powerpc/longjmp.S
diff --git a/src/header/setjmp/src/impl/powerpc/setjmp.S b/src/header/setjmp/impl/powerpc/setjmp.S
similarity index 100%
rename from src/header/setjmp/src/impl/powerpc/setjmp.S
rename to src/header/setjmp/impl/powerpc/setjmp.S
diff --git a/src/header/setjmp/src/impl/powerpc64/longjmp.s b/src/header/setjmp/impl/powerpc64/longjmp.s
similarity index 100%
rename from src/header/setjmp/src/impl/powerpc64/longjmp.s
rename to src/header/setjmp/impl/powerpc64/longjmp.s
diff --git a/src/header/setjmp/src/impl/powerpc64/setjmp.s b/src/header/setjmp/impl/powerpc64/setjmp.s
similarity index 100%
rename from src/header/setjmp/src/impl/powerpc64/setjmp.s
rename to src/header/setjmp/impl/powerpc64/setjmp.s
diff --git a/src/header/setjmp/src/impl/s390x/longjmp.s b/src/header/setjmp/impl/s390x/longjmp.s
similarity index 100%
rename from src/header/setjmp/src/impl/s390x/longjmp.s
rename to src/header/setjmp/impl/s390x/longjmp.s
diff --git a/src/header/setjmp/src/impl/s390x/setjmp.s b/src/header/setjmp/impl/s390x/setjmp.s
similarity index 100%
rename from src/header/setjmp/src/impl/s390x/setjmp.s
rename to src/header/setjmp/impl/s390x/setjmp.s
diff --git a/src/header/setjmp/src/impl/sh/longjmp.S b/src/header/setjmp/impl/sh/longjmp.S
similarity index 100%
rename from src/header/setjmp/src/impl/sh/longjmp.S
rename to src/header/setjmp/impl/sh/longjmp.S
diff --git a/src/header/setjmp/src/impl/sh/setjmp.S b/src/header/setjmp/impl/sh/setjmp.S
similarity index 100%
rename from src/header/setjmp/src/impl/sh/setjmp.S
rename to src/header/setjmp/impl/sh/setjmp.S
diff --git a/src/header/setjmp/src/impl/x32/longjmp.s b/src/header/setjmp/impl/x32/longjmp.s
similarity index 100%
rename from src/header/setjmp/src/impl/x32/longjmp.s
rename to src/header/setjmp/impl/x32/longjmp.s
diff --git a/src/header/setjmp/src/impl/x32/setjmp.s b/src/header/setjmp/impl/x32/setjmp.s
similarity index 100%
rename from src/header/setjmp/src/impl/x32/setjmp.s
rename to src/header/setjmp/impl/x32/setjmp.s
diff --git a/src/header/setjmp/src/impl/x86_64/longjmp.s b/src/header/setjmp/impl/x86_64/longjmp.s
similarity index 100%
rename from src/header/setjmp/src/impl/x86_64/longjmp.s
rename to src/header/setjmp/impl/x86_64/longjmp.s
diff --git a/src/header/setjmp/src/impl/x86_64/setjmp.s b/src/header/setjmp/impl/x86_64/setjmp.s
similarity index 100%
rename from src/header/setjmp/src/impl/x86_64/setjmp.s
rename to src/header/setjmp/impl/x86_64/setjmp.s
diff --git a/src/header/setjmp/src/lib.rs b/src/header/setjmp/mod.rs
similarity index 100%
rename from src/header/setjmp/src/lib.rs
rename to src/header/setjmp/mod.rs
diff --git a/src/lib.rs b/src/lib.rs
index 28f7d58d..b624efe1 100644
--- a/src/lib.rs
+++ b/src/lib.rs
@@ -34,6 +34,7 @@ extern crate spin;
 mod macros;
 pub mod header;
 pub mod platform;
+pub mod start;
 
 use platform::{Allocator, Pal, Sys};
 
diff --git a/src/start.rs b/src/start.rs
index 235e8783..e628c4f0 100644
--- a/src/start.rs
+++ b/src/start.rs
@@ -1,6 +1,9 @@
 use alloc::Vec;
 use core::ptr;
 
+use header::stdio;
+use platform;
+use platform::{Pal, Sys};
 use platform::types::*;
 
 #[repr(C)]
@@ -25,7 +28,7 @@ impl Stack {
 
 #[inline(never)]
 #[no_mangle]
-pub unsafe extern "C" fn _start_rust(sp: &'static Stack) -> ! {
+pub unsafe extern "C" fn relibc_start(sp: &'static Stack) -> ! {
     extern "C" {
         fn main(argc: isize, argv: *const *const c_char, envp: *const *const c_char) -> c_int;
     }
-- 
GitLab