Skip to content

Commit 15e34de

Browse files
committed
Eliminate glue.o. Closes #990
1 parent e1ba559 commit 15e34de

File tree

10 files changed

+25
-79
lines changed

10 files changed

+25
-79
lines changed

Makefile.in

-2
Original file line numberDiff line numberDiff line change
@@ -172,7 +172,6 @@ SREQ$(1) = stage$(1)/rustc$(X) \
172172
stage$(1)/$$(CFG_RUNTIME) \
173173
$$(call CFG_STDLIB_DEFAULT,stage$(1),stage$(1)) \
174174
stage$(1)/$$(CFG_RUSTLLVM) \
175-
stage$(1)/lib/glue.o \
176175
stage$(1)/lib/main.o \
177176
stage$(1)/lib/$$(CFG_RUNTIME) \
178177
$$(MKFILES)
@@ -181,7 +180,6 @@ SREQ$(1) = stage$(1)/rustc$(X) \
181180
stage$(1)/$$(CFG_RUNTIME) \
182181
$$(call CFG_STDLIB_DEFAULT,stage$(1),stage$(1)) \
183182
stage$(1)/$$(CFG_RUSTLLVM) \
184-
stage$(1)/lib/glue.o \
185183
stage$(1)/lib/main.o \
186184
stage$(1)/lib/$$(CFG_RUNTIME) \
187185
stage$(1)/lib/$$(CFG_STDLIB) \

mk/clean.mk

+4-4
Original file line numberDiff line numberDiff line change
@@ -13,22 +13,22 @@ clean:
1313
$(Q)rm -f $(C_DEPFILES:%.d=%.d.tmp)
1414
$(Q)rm -f $(CRATE_DEPFILES:%.d=%.d.tmp)
1515
$(Q)rm -f $(GENERATED)
16-
$(Q)rm -f stage0/rustc$(X) stage0/lib/glue* stage0/lib/main.o
16+
$(Q)rm -f stage0/rustc$(X) stage0/lib/main.o
1717
$(Q)rm -f stage0/lib/$(CFG_RUNTIME) stage0/lib/$(CFG_STDLIB)
1818
$(Q)rm -f stage0/$(CFG_RUNTIME) stage0/$(CFG_STDLIB)
1919
$(Q)rm -f stage0/lib/libstd.rlib
2020
$(Q)rm -f stage0/$(CFG_RUSTLLVM) stage0/lib/intrinsics.bc
21-
$(Q)rm -f stage1/rustc$(X) stage1/lib/glue* stage1/lib/main.o
21+
$(Q)rm -f stage1/rustc$(X) stage1/lib/main.o
2222
$(Q)rm -f stage1/lib/$(CFG_RUNTIME) stage1/lib/$(CFG_STDLIB)
2323
$(Q)rm -f stage1/$(CFG_RUNTIME) stage1/$(CFG_STDLIB)
2424
$(Q)rm -f stage1/$(CFG_RUSTLLVM) stage1/lib/intrinsics.bc
2525
$(Q)rm -f stage1/lib/libstd.rlib
26-
$(Q)rm -f stage2/rustc$(X) stage2/lib/glue* stage2/lib/main.o
26+
$(Q)rm -f stage2/rustc$(X) stage2/lib/main.o
2727
$(Q)rm -f stage2/lib/$(CFG_RUNTIME) stage2/lib/$(CFG_STDLIB)
2828
$(Q)rm -f stage2/$(CFG_RUNTIME) stage2/$(CFG_STDLIB)
2929
$(Q)rm -f stage2/$(CFG_RUSTLLVM) stage2/lib/intrinsics.bc
3030
$(Q)rm -f stage2/lib/libstd.rlib
31-
$(Q)rm -f stage3/rustc$(X) stage3/lib/glue* stage3/lib/main.o
31+
$(Q)rm -f stage3/rustc$(X) stage3/lib/main.o
3232
$(Q)rm -f stage3/lib/$(CFG_RUNTIME) stage3/lib/$(CFG_STDLIB)
3333
$(Q)rm -f stage3/$(CFG_RUNTIME) stage3/$(CFG_STDLIB)
3434
$(Q)rm -f stage3/$(CFG_RUSTLLVM) stage3/lib/intrinsics.bc

mk/snap.mk

+3-3
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,14 @@
11

2-
snap-stage1: stage1/rustc$(X) stage1/lib/glue.o stage1/lib/$(CFG_RUNTIME) \
2+
snap-stage1: stage1/rustc$(X) stage1/lib/$(CFG_RUNTIME) \
33
stage1/$(CFG_RUSTLLVM) stage1/lib/main.o
44
$(S)src/etc/make-snapshot.py stage1
55

6-
snap-stage2: stage2/rustc$(X) stage2/lib/glue.o stage2/lib/$(CFG_STDLIB) \
6+
snap-stage2: stage2/rustc$(X) stage2/lib/$(CFG_STDLIB) \
77
stage2/lib/libstd.rlib stage2/lib/$(CFG_RUNTIME) \
88
stage2/$(CFG_RUSTLLVM) stage2/lib/main.o
99
$(S)src/etc/make-snapshot.py stage2
1010

11-
snap-stage3: stage3/rustc$(X) stage3/lib/glue.o stage3/lib/$(CFG_STDLIB) \
11+
snap-stage3: stage3/rustc$(X) stage3/lib/$(CFG_STDLIB) \
1212
stage3/lib/libstd.rlib stage3/lib/$(CFG_RUNTIME) \
1313
stage3/$(CFG_RUSTLLVM) stage3/lib/main.o
1414
$(S)src/etc/make-snapshot.py stage3

mk/stageN.mk

+4-21
Original file line numberDiff line numberDiff line change
@@ -63,14 +63,6 @@ stage$(2)/lib/intrinsics.bc: $$(INTRINSICS_BC)
6363
@$$(call E, cp: $$@)
6464
$$(Q)cp $$< $$@
6565

66-
stage$(2)/lib/glue.o: stage$(2)/rustc$$(X) \
67-
stage$(2)/$$(CFG_RUNTIME) \
68-
stage$(2)/$$(CFG_RUSTLLVM) \
69-
stage$(2)/lib/intrinsics.bc \
70-
$$(SREQ$(1))
71-
@$$(call E, generate: $$@)
72-
$$(STAGE$(2)) -c -o $$@ --glue
73-
7466
stage$(2)/lib/main.o: rt/main.o
7567
@$$(call E, cp: $$@)
7668
$$(Q)cp $$< $$@
@@ -84,7 +76,7 @@ stage$(2)/lib/$$(CFG_STDLIB): $$(STDLIB_CRATE) $$(STDLIB_INPUTS) \
8476
stage$(2)/rustc$$(X) \
8577
stage$(2)/$$(CFG_RUNTIME) \
8678
stage$(2)/$$(CFG_RUSTLLVM) \
87-
stage$(2)/lib/glue.o \
79+
stage$(2)/lib/intrinsics.bc \
8880
$$(SREQ$(1))
8981
@$$(call E, compile_and_link: $$@)
9082
$$(STAGE$(2)) --lib -o $$@ $$<
@@ -93,7 +85,7 @@ stage$(2)/lib/libstd.rlib: $$(STDLIB_CRATE) $$(STDLIB_INPUTS) \
9385
stage$(2)/rustc$$(X) \
9486
stage$(2)/$$(CFG_RUNTIME) \
9587
stage$(2)/$$(CFG_RUSTLLVM) \
96-
stage$(2)/lib/glue.o \
88+
stage$(2)/lib/intrinsics.bc \
9789
$$(SREQ$(1))
9890
@$$(call E, compile_and_link: $$@)
9991
$$(STAGE$(2)) --lib --static -o $$@ $$<
@@ -111,15 +103,6 @@ stage$(2)/lib/rustc/$(3)/intrinsics.bc: $$(INTRINSICS_BC)
111103
@$$(call E, cp: $$@)
112104
$$(Q)cp $$< $$@
113105

114-
stage$(2)/lib/rustc/$(3)/glue.o: \
115-
stage$(2)/rustc$$(X) \
116-
stage$(2)/$$(CFG_RUNTIME) \
117-
stage$(2)/$$(CFG_RUSTLLVM) \
118-
stage$(2)/lib/intrinsics.bc \
119-
$$(SREQ$(1))
120-
@$$(call E, generate: $$@)
121-
$$(STAGE$(2)) -c -o $$@ --glue
122-
123106
stage$(2)/lib/rustc/$(3)/main.o: rt/main.o
124107
@$$(call E, cp: $$@)
125108
$$(Q)cp $$< $$@
@@ -135,7 +118,7 @@ stage$(2)/lib/rustc/$(3)/$$(CFG_STDLIB): \
135118
stage$(2)/rustc$$(X) \
136119
stage$(2)/$$(CFG_RUNTIME) \
137120
stage$(2)/$$(CFG_RUSTLLVM) \
138-
stage$(2)/lib/rustc/$(3)/glue.o \
121+
stage$(2)/lib/intrinsics.bc \
139122
$$(SREQ$(1))
140123
@$$(call E, compile_and_link: $$@)
141124
$$(STAGE$(2)) --lib -o $$@ $$<
@@ -145,7 +128,7 @@ stage$(2)/lib/rustc/$(3)/libstd.rlib: \
145128
stage$(2)/rustc$$(X) \
146129
stage$(2)/$$(CFG_RUNTIME) \
147130
stage$(2)/$$(CFG_RUSTLLVM) \
148-
stage$(2)/lib/rustc/$(3)/glue.o \
131+
stage$(2)/lib/intrinsics.bc \
149132
$$(SREQ$(1))
150133
@$$(call E, compile_and_link: $$@)
151134
$$(STAGE$(2)) --lib --static -o $$@ $$<

src/comp/back/link.rs

+1-2
Original file line numberDiff line numberDiff line change
@@ -497,14 +497,13 @@ fn mangle_internal_name_by_seq(ccx: @crate_ctxt, flav: str) -> str {
497497
fn link_binary(sess: session::session,
498498
binary_dir: str,
499499
saved_out_filename: str) {
500-
let glu: str = binary_dir + "/lib/glue.o";
501500
let main: str = binary_dir + "/lib/main.o";
502501
let stage: str = "-L" + binary_dir + "/lib";
503502
let prog: str = "gcc";
504503
// The invocations of gcc share some flags across platforms
505504

506505
let gcc_args =
507-
[stage, "-Lrt", "-lrustrt", glu, "-m32", "-o", saved_out_filename,
506+
[stage, "-Lrt", "-lrustrt", "-m32", "-o", saved_out_filename,
508507
saved_out_filename + ".o"];
509508
let lib_cmd;
510509

src/comp/driver/rustc.rs

+1-11
Original file line numberDiff line numberDiff line change
@@ -238,7 +238,6 @@ options:
238238
-v --version print version info and exit
239239
240240
-o <filename> write output to <filename>
241-
--glue generate glue.bc file
242241
--lib compile a library crate
243242
--static use or produce static libraries
244243
--pretty [type] pretty-print the input instead of compiling
@@ -424,7 +423,7 @@ fn parse_pretty(sess: session::session, name: str) -> pp_mode {
424423

425424
fn opts() -> [getopts::opt] {
426425
ret [optflag("h"), optflag("help"), optflag("v"), optflag("version"),
427-
optflag("glue"), optflag("emit-llvm"), optflagopt("pretty"),
426+
optflag("emit-llvm"), optflagopt("pretty"),
428427
optflag("ls"), optflag("parse-only"), optflag("no-trans"),
429428
optflag("O"), optopt("OptLevel"), optmulti("L"), optflag("S"),
430429
optflag("c"), optopt("o"), optflag("g"), optflag("save-temps"),
@@ -458,15 +457,6 @@ fn main(args: [str]) {
458457
let sess = build_session(sopts);
459458
let n_inputs = vec::len::<str>(match.free);
460459
let output_file = getopts::opt_maybe_str(match, "o");
461-
let glue = opt_present(match, "glue");
462-
if glue {
463-
if n_inputs > 0u {
464-
sess.fatal("No input files allowed with --glue.");
465-
}
466-
let out = option::from_maybe::<str>("glue.bc", output_file);
467-
middle::trans::make_common_glue(sess, out);
468-
ret;
469-
}
470460
if n_inputs == 0u {
471461
sess.fatal("No input filename given.");
472462
} else if n_inputs > 1u {

src/comp/middle/trans.rs

-31
Original file line numberDiff line numberDiff line change
@@ -6044,35 +6044,6 @@ fn decl_no_op_type_glue(llmod: ModuleRef, taskptr_type: TypeRef) -> ValueRef {
60446044
ret decl_cdecl_fn(llmod, abi::no_op_type_glue_name(), ty);
60456045
}
60466046

6047-
fn make_glues(llmod: ModuleRef, taskptr_type: TypeRef) -> @glue_fns {
6048-
ret @{no_op_type_glue: decl_no_op_type_glue(llmod, taskptr_type)};
6049-
}
6050-
6051-
fn make_common_glue(sess: session::session, output: str) {
6052-
// FIXME: part of this is repetitive and is probably a good idea
6053-
// to autogen it.
6054-
let task_type = T_task();
6055-
let taskptr_type = T_ptr(task_type);
6056-
6057-
let llmod = str::as_buf("rust_out", {|buf|
6058-
llvm::LLVMModuleCreateWithNameInContext
6059-
(buf, llvm::LLVMGetGlobalContext())
6060-
});
6061-
let _: () =
6062-
str::as_buf(x86::get_data_layout(),
6063-
{|buf| llvm::LLVMSetDataLayout(llmod, buf) });
6064-
let _: () =
6065-
str::as_buf(x86::get_target_triple(),
6066-
{|buf| llvm::LLVMSetTarget(llmod, buf) });
6067-
mk_target_data(x86::get_data_layout());
6068-
declare_intrinsics(llmod);
6069-
let _: () =
6070-
str::as_buf(x86::get_module_asm(),
6071-
{|buf| llvm::LLVMSetModuleInlineAsm(llmod, buf) });
6072-
make_glues(llmod, taskptr_type);
6073-
link::write::run_passes(sess, llmod, output);
6074-
}
6075-
60766047
fn create_module_map(ccx: @crate_ctxt) -> ValueRef {
60776048
let elttype = T_struct([T_int(), T_int()]);
60786049
let maptype = T_array(elttype, ccx.module_data.size() + 1u);
@@ -6183,7 +6154,6 @@ fn trans_crate(sess: session::session, crate: @ast::crate, tcx: ty::ctxt,
61836154
tn.associate("taskptr", taskptr_type);
61846155
let tydesc_type = T_tydesc(taskptr_type);
61856156
tn.associate("tydesc", tydesc_type);
6186-
let glues = make_glues(llmod, taskptr_type);
61876157
let hasher = ty::hash_ty;
61886158
let eqer = ty::eq_ty;
61896159
let tag_sizes = map::mk_hashmap::<ty::t, uint>(hasher, eqer);
@@ -6212,7 +6182,6 @@ fn trans_crate(sess: session::session, crate: @ast::crate, tcx: ty::ctxt,
62126182
tydescs: tydescs,
62136183
module_data: new_str_hash::<ValueRef>(),
62146184
lltypes: lltypes,
6215-
glues: glues,
62166185
names: namegen(0),
62176186
sha: sha,
62186187
type_sha1s: sha1s,

src/comp/middle/trans_common.rs

-3
Original file line numberDiff line numberDiff line change
@@ -41,8 +41,6 @@ obj namegen(mutable i: int) {
4141

4242
type derived_tydesc_info = {lltydesc: ValueRef, escapes: bool};
4343

44-
type glue_fns = {no_op_type_glue: ValueRef};
45-
4644
tag tydesc_kind {
4745
tk_static; // Static (monomorphic) type descriptor.
4846
tk_param; // Type parameter.
@@ -111,7 +109,6 @@ type crate_ctxt =
111109
tydescs: hashmap<ty::t, @tydesc_info>,
112110
module_data: hashmap<str, ValueRef>,
113111
lltypes: hashmap<ty::t, TypeRef>,
114-
glues: @glue_fns,
115112
names: namegen,
116113
sha: std::sha1::sha1,
117114
type_sha1s: hashmap<ty::t, str>,

src/etc/get-snapshot.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ def unpack_snapshot(snap):
99
print("opening snapshot " + dl_path)
1010
tar = tarfile.open(dl_path)
1111
kernel = get_kernel()
12-
for name in snapshot_files[kernel]:
12+
for name in old_snapshot_files[kernel]:
1313
p = "rust-stage0/" + name
1414
fp = os.path.join("stage0", name)
1515
print("extracting " + fp)

src/etc/snapshot.py

+11-1
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,8 @@ def scrub(b):
1515
download_dir_base = "dl"
1616
download_unpack_base = os.path.join(download_dir_base, "unpack")
1717

18-
snapshot_files = {
18+
# FIXME: Transitional
19+
old_snapshot_files = {
1920
"linux": ["rustc", "lib/glue.o", "lib/libstd.so", "lib/main.o",
2021
"librustrt.so", "librustllvm.so", "lib/intrinsics.bc"],
2122
"macos": ["rustc", "lib/glue.o", "lib/libstd.dylib", "lib/main.o",
@@ -24,6 +25,15 @@ def scrub(b):
2425
"rustrt.dll", "rustllvm.dll", "lib/intrinsics.bc"]
2526
}
2627

28+
snapshot_files = {
29+
"linux": ["rustc", "lib/libstd.so", "lib/main.o",
30+
"librustrt.so", "librustllvm.so", "lib/intrinsics.bc"],
31+
"macos": ["rustc", "lib/libstd.dylib", "lib/main.o",
32+
"librustrt.dylib", "librustllvm.dylib", "lib/intrinsics.bc"],
33+
"winnt": ["rustc.exe", "lib/std.dll", "lib/main.o",
34+
"rustrt.dll", "rustllvm.dll", "lib/intrinsics.bc"]
35+
}
36+
2737
def parse_line(n, line):
2838
global snapshotfile
2939

0 commit comments

Comments
 (0)