Skip to content

Commit b76c032

Browse files
committed
---
yaml --- r: 5853 b: refs/heads/master c: 243c5c3 h: refs/heads/master i: 5851: b2f3992 v: v3
1 parent 6041936 commit b76c032

File tree

4 files changed

+64
-5
lines changed

4 files changed

+64
-5
lines changed

[refs]

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
11
---
2-
refs/heads/master: 880b1ec9f558281facc0757cbe8ab321564cb17b
2+
refs/heads/master: 243c5c34790eaba815c2786009b10c31bc04c63d

trunk/mk/rt.mk

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -106,10 +106,16 @@ ifdef CFG_WINDOWSY
106106
rt/main.ll: rt/main.ll.in
107107
@$(call E, sed: $@)
108108
$(Q)sed 's/MAIN/WinMain@16/' < $^ > $@
109+
rt/main0.ll: rt/main0.ll.in
110+
@$(call E, sed: $@)
111+
$(Q)sed 's/MAIN/WinMain@16/' < $^ > $@
109112
else
110113
rt/main.ll: rt/main.ll.in
111114
@$(call E, sed: $@)
112115
$(Q)sed 's/MAIN/main/' < $^ > $@
116+
rt/main0.ll: rt/main0.ll.in
117+
@$(call E, sed: $@)
118+
$(Q)sed 's/MAIN/main/' < $^ > $@
113119
endif
114120

115121
rt/%.o: rt/%.ll $(MKFILES)

trunk/mk/target.mk

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,10 +11,6 @@ $$(TARGET_LIB$(1)$(2))/intrinsics.bc: $$(INTRINSICS_BC)
1111
@$$(call E, cp: $$@)
1212
$$(Q)cp $$< $$@
1313

14-
$$(TARGET_LIB$(1)$(2))/main.o: rt/main.o
15-
@$$(call E, cp: $$@)
16-
$$(Q)cp $$< $$@
17-
1814
$$(TARGET_LIB$(1)$(2))/$$(CFG_STDLIB): \
1915
$$(STDLIB_CRATE) $$(STDLIB_INPUTS) \
2016
$$(TARGET_SREQ$(1)$(2))
@@ -27,9 +23,23 @@ $$(TARGET_LIB$(1)$(2))/libstd.rlib: \
2723
@$$(call E, compile_and_link: $$@)
2824
$$(STAGE$(1)) --lib --static -o $$@ $$<
2925

26+
ifeq ($(1), 0)
27+
$$(TARGET_LIB$(1)$(2))/main.o: rt/main0.o
28+
@$$(call E, cp: $$@)
29+
$$(Q)cp $$< $$@
30+
31+
$$(TARGET_LIB$(1)$(2))/$$(CFG_RUNTIME): stage0/lib/$$(CFG_RUNTIME)
32+
@$$(call E, cp: $$@)
33+
$$(Q)cp $$< $$@
34+
else
35+
$$(TARGET_LIB$(1)$(2))/main.o: rt/main.o
36+
@$$(call E, cp: $$@)
37+
$$(Q)cp $$< $$@
38+
3039
$$(TARGET_LIB$(1)$(2))/$$(CFG_RUNTIME): rt/$$(CFG_RUNTIME)
3140
@$$(call E, cp: $$@)
3241
$$(Q)cp $$< $$@
42+
endif
3343

3444
$$(TARGET_LIB$(1)$(2))/$$(CFG_RUSTLLVM): rustllvm/$$(CFG_RUSTLLVM)
3545
@$$(call E, cp: $$@)

trunk/src/rt/main0.ll.in

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
%0 = type { i32, [1 x i32] }
2+
%1 = type { i32, i32 }
3+
%2 = type { i32, %3 }
4+
%3 = type { %tydesc*, %4, i1, {} }
5+
%4 = type { i1*, i1* }
6+
%5 = type { i32, i32, i32, i32, [0 x %6*] }
7+
%6 = type { i32, i32, i32, i32, [0 x i8] }
8+
9+
%tydesc = type { %tydesc**, i32, i32, void (i1*, %task*, i1*, %tydesc**, i8*)*, void (i1*, %task*, i1*, %tydesc**, i8*)*, void (i1*, %task*, i1*, %tydesc**, i8*)*, void (i1*, %task*, i1*, %tydesc**, i8*)*, void (i1*, %task*, i1*, %tydesc**, i8*)*, void (i1*, %task*, i1*, %tydesc**, i8*)*, void (i1*, %task*, i1*, %tydesc**, i8*)*, void (i1*, %task*, i1*, %tydesc**, i8*, i8*, i8)* }
10+
11+
%task = type { i32, i32, i32, i32, i32, i32, i32, i32 }
12+
13+
%vec = type { i32, i32, [0 x i8] }
14+
15+
@_rust_crate_map_toplevel = external global %0
16+
17+
declare i32 @rust_start(i32, i32, i32, i32)
18+
19+
declare external fastcc void @_rust_main(i1* nocapture, %task*, %2* nocapture, %vec*)
20+
21+
define void @_rust_main_wrap(i1* nocapture, %task *, %2* nocapture, %vec *)
22+
{
23+
tail call fastcc void @_rust_main(i1* %0, %task *%1, %2* nocapture %2, %vec* %3)
24+
ret void
25+
}
26+
27+
%nullary_fn = type void (i1*, %task*, %2*)
28+
29+
define void @_rust_spawn_wrap(
30+
i1* nocapture, %task*, %2* nocapture, %nullary_fn* %f)
31+
{
32+
call void %f(i1* %0, %task *%1, %2* nocapture %2)
33+
ret void
34+
}
35+
36+
declare external void @set_spawn_wrapper(void (i1*, %task*, %2*, %nullary_fn*)*);
37+
38+
define i32 @"MAIN"(i32, i32) {
39+
call void @set_spawn_wrapper(void (i1*, %task*, %2*, %nullary_fn*)* @_rust_spawn_wrap)
40+
41+
%result = tail call i32 @rust_start(i32 ptrtoint (void (i1*, %task*, %2*, %vec*)* @_rust_main_wrap to i32), i32 %0, i32 %1, i32 ptrtoint (%0* @_rust_crate_map_toplevel to i32))
42+
ret i32 %result
43+
}

0 commit comments

Comments
 (0)