Avoid mangling names differently in debug builds to work around a build error. Fix up file name and path debug information, and build one compilation unit for a crate instead of one per source file.
This commit is contained in:
parent
c8ab0c1b3b
commit
8142438938
|
@ -114,6 +114,9 @@ CFG_LIBRUSTC :=$(call CFG_LIB_NAME,rustc)
|
||||||
STDLIB_GLOB :=$(call CFG_LIB_GLOB,std)
|
STDLIB_GLOB :=$(call CFG_LIB_GLOB,std)
|
||||||
CORELIB_GLOB :=$(call CFG_LIB_GLOB,core)
|
CORELIB_GLOB :=$(call CFG_LIB_GLOB,core)
|
||||||
LIBRUSTC_GLOB :=$(call CFG_LIB_GLOB,rustc)
|
LIBRUSTC_GLOB :=$(call CFG_LIB_GLOB,rustc)
|
||||||
|
STDLIB_DSYM_GLOB :=$(call CFG_LIB_DSYM_GLOB,std)
|
||||||
|
CORELIB_DSYM_GLOB :=$(call CFG_LIB_DSYM_GLOB,core)
|
||||||
|
LIBRUSTC_DSYM_GLOB :=$(call CFG_LIB_DSYM_GLOB,rustc)
|
||||||
|
|
||||||
# version-string calculation
|
# version-string calculation
|
||||||
CFG_GIT_DIR := $(CFG_SRC_DIR).git
|
CFG_GIT_DIR := $(CFG_SRC_DIR).git
|
||||||
|
|
|
@ -31,7 +31,8 @@ $$(HLIB$(2)_H_$(4))/$$(CFG_LIBRUSTC): \
|
||||||
$$(HSTDLIB_DEFAULT$(2)_H_$(3))
|
$$(HSTDLIB_DEFAULT$(2)_H_$(3))
|
||||||
@$$(call E, cp: $$@)
|
@$$(call E, cp: $$@)
|
||||||
$$(Q)cp $$< $$@
|
$$(Q)cp $$< $$@
|
||||||
$$(Q)cp $$(TLIB$(1)_T_$(4)_H_$(3))/$(LIBRUSTC_GLOB) \
|
$$(Q)cp -R $$(TLIB$(1)_T_$(4)_H_$(3))/$(LIBRUSTC_GLOB) \
|
||||||
|
$$(TLIB$(1)_T_$(4)_H_$(3))/$(LIBRUSTC_DSYM_GLOB) \
|
||||||
$$(HLIB$(2)_H_$(4))
|
$$(HLIB$(2)_H_$(4))
|
||||||
|
|
||||||
$$(HLIB$(2)_H_$(4))/$$(CFG_RUNTIME): \
|
$$(HLIB$(2)_H_$(4))/$$(CFG_RUNTIME): \
|
||||||
|
@ -44,7 +45,8 @@ $$(HLIB$(2)_H_$(4))/$$(CFG_CORELIB): \
|
||||||
$$(HLIB$(2)_H_$(4))/$$(CFG_RUNTIME)
|
$$(HLIB$(2)_H_$(4))/$$(CFG_RUNTIME)
|
||||||
@$$(call E, cp: $$@)
|
@$$(call E, cp: $$@)
|
||||||
$$(Q)cp $$< $$@
|
$$(Q)cp $$< $$@
|
||||||
$$(Q)cp $$(TLIB$(1)_T_$(4)_H_$(3))/$(CORELIB_GLOB) \
|
$$(Q)cp -R $$(TLIB$(1)_T_$(4)_H_$(3))/$(CORELIB_GLOB) \
|
||||||
|
$$(TLIB$(1)_T_$(4)_H_$(3))/$(CORELIB_DSYM_GLOB) \
|
||||||
$$(HLIB$(2)_H_$(4))
|
$$(HLIB$(2)_H_$(4))
|
||||||
|
|
||||||
$$(HLIB$(2)_H_$(4))/$$(CFG_STDLIB): \
|
$$(HLIB$(2)_H_$(4))/$$(CFG_STDLIB): \
|
||||||
|
@ -53,7 +55,8 @@ $$(HLIB$(2)_H_$(4))/$$(CFG_STDLIB): \
|
||||||
$$(HLIB$(2)_H_$(4))/$$(CFG_RUNTIME)
|
$$(HLIB$(2)_H_$(4))/$$(CFG_RUNTIME)
|
||||||
@$$(call E, cp: $$@)
|
@$$(call E, cp: $$@)
|
||||||
$$(Q)cp $$< $$@
|
$$(Q)cp $$< $$@
|
||||||
$$(Q)cp $$(TLIB$(1)_T_$(4)_H_$(3))/$(STDLIB_GLOB) \
|
$$(Q)cp -R $$(TLIB$(1)_T_$(4)_H_$(3))/$(STDLIB_GLOB) \
|
||||||
|
$$(TLIB$(1)_T_$(4)_H_$(3))/$(STDLIB_DSYM_GLOB) \
|
||||||
$$(HLIB$(2)_H_$(4))
|
$$(HLIB$(2)_H_$(4))
|
||||||
|
|
||||||
$$(HLIB$(2)_H_$(4))/libcore.rlib: \
|
$$(HLIB$(2)_H_$(4))/libcore.rlib: \
|
||||||
|
|
|
@ -85,6 +85,7 @@ endif
|
||||||
ifneq ($(findstring darwin,$(CFG_OSTYPE)),)
|
ifneq ($(findstring darwin,$(CFG_OSTYPE)),)
|
||||||
CFG_LIB_NAME=lib$(1).dylib
|
CFG_LIB_NAME=lib$(1).dylib
|
||||||
CFG_LIB_GLOB=lib$(1)-*.dylib
|
CFG_LIB_GLOB=lib$(1)-*.dylib
|
||||||
|
CFG_LIB_DSYM_GLOB=lib$(1)-*.dylib.dSYM
|
||||||
CFG_UNIXY := 1
|
CFG_UNIXY := 1
|
||||||
CFG_LDENV := DYLD_LIBRARY_PATH
|
CFG_LDENV := DYLD_LIBRARY_PATH
|
||||||
CFG_GCCISH_LINK_FLAGS += -dynamiclib -lpthread -framework CoreServices -Wl,-no_compact_unwind
|
CFG_GCCISH_LINK_FLAGS += -dynamiclib -lpthread -framework CoreServices -Wl,-no_compact_unwind
|
||||||
|
|
|
@ -449,19 +449,18 @@ fn build_session_options(match: getopts::match,
|
||||||
ret sopts;
|
ret sopts;
|
||||||
}
|
}
|
||||||
|
|
||||||
fn build_session(sopts: @session::options, input: str,
|
fn build_session(sopts: @session::options,
|
||||||
demitter: diagnostic::emitter) -> session {
|
demitter: diagnostic::emitter) -> session {
|
||||||
let codemap = codemap::new_codemap();
|
let codemap = codemap::new_codemap();
|
||||||
let diagnostic_handler =
|
let diagnostic_handler =
|
||||||
diagnostic::mk_handler(some(demitter));
|
diagnostic::mk_handler(some(demitter));
|
||||||
let span_diagnostic_handler =
|
let span_diagnostic_handler =
|
||||||
diagnostic::mk_span_handler(diagnostic_handler, codemap);
|
diagnostic::mk_span_handler(diagnostic_handler, codemap);
|
||||||
build_session_(sopts, input, codemap, demitter,
|
build_session_(sopts, codemap, demitter, span_diagnostic_handler)
|
||||||
span_diagnostic_handler)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fn build_session_(
|
fn build_session_(
|
||||||
sopts: @session::options, input: str,
|
sopts: @session::options,
|
||||||
codemap: codemap::codemap,
|
codemap: codemap::codemap,
|
||||||
demitter: diagnostic::emitter,
|
demitter: diagnostic::emitter,
|
||||||
span_diagnostic_handler: diagnostic::span_handler
|
span_diagnostic_handler: diagnostic::span_handler
|
||||||
|
@ -488,7 +487,7 @@ fn build_session_(
|
||||||
span_diagnostic: span_diagnostic_handler,
|
span_diagnostic: span_diagnostic_handler,
|
||||||
filesearch: filesearch,
|
filesearch: filesearch,
|
||||||
mutable building_library: false,
|
mutable building_library: false,
|
||||||
working_dir: path::dirname(input)}
|
working_dir: os::getcwd()}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn parse_pretty(sess: session, &&name: str) -> pp_mode {
|
fn parse_pretty(sess: session, &&name: str) -> pp_mode {
|
||||||
|
@ -636,7 +635,7 @@ mod test {
|
||||||
getopts::fail_str(f); }
|
getopts::fail_str(f); }
|
||||||
};
|
};
|
||||||
let sessopts = build_session_options(match, diagnostic::emit);
|
let sessopts = build_session_options(match, diagnostic::emit);
|
||||||
let sess = build_session(sessopts, "", diagnostic::emit);
|
let sess = build_session(sessopts, diagnostic::emit);
|
||||||
let cfg = build_configuration(sess, "whatever", "whatever");
|
let cfg = build_configuration(sess, "whatever", "whatever");
|
||||||
assert (attr::contains_name(cfg, "test"));
|
assert (attr::contains_name(cfg, "test"));
|
||||||
}
|
}
|
||||||
|
@ -652,7 +651,7 @@ mod test {
|
||||||
getopts::fail_str(f); }
|
getopts::fail_str(f); }
|
||||||
};
|
};
|
||||||
let sessopts = build_session_options(match, diagnostic::emit);
|
let sessopts = build_session_options(match, diagnostic::emit);
|
||||||
let sess = build_session(sessopts, "", diagnostic::emit);
|
let sess = build_session(sessopts, diagnostic::emit);
|
||||||
let cfg = build_configuration(sess, "whatever", "whatever");
|
let cfg = build_configuration(sess, "whatever", "whatever");
|
||||||
let test_items = attr::find_meta_items_by_name(cfg, "test");
|
let test_items = attr::find_meta_items_by_name(cfg, "test");
|
||||||
assert (vec::len(test_items) == 1u);
|
assert (vec::len(test_items) == 1u);
|
||||||
|
|
|
@ -99,7 +99,7 @@ fn run_compiler(args: [str], demitter: diagnostic::emitter) {
|
||||||
};
|
};
|
||||||
|
|
||||||
let sopts = build_session_options(match, demitter);
|
let sopts = build_session_options(match, demitter);
|
||||||
let sess = build_session(sopts, ifile, demitter);
|
let sess = build_session(sopts, demitter);
|
||||||
let odir = getopts::opt_maybe_str(match, "out-dir");
|
let odir = getopts::opt_maybe_str(match, "out-dir");
|
||||||
let ofile = getopts::opt_maybe_str(match, "o");
|
let ofile = getopts::opt_maybe_str(match, "o");
|
||||||
let cfg = build_configuration(sess, binary, ifile);
|
let cfg = build_configuration(sess, binary, ifile);
|
||||||
|
|
|
@ -402,7 +402,7 @@ fn declare_tydesc(ccx: @crate_ctxt, t: ty::t) -> @tydesc_info {
|
||||||
llsize = llsize_of(ccx, llty);
|
llsize = llsize_of(ccx, llty);
|
||||||
llalign = llalign_of(ccx, llty);
|
llalign = llalign_of(ccx, llty);
|
||||||
let name;
|
let name;
|
||||||
if ccx.sess.opts.debuginfo {
|
if false /*ccx.sess.opts.debuginfo*/ { //XXX this triggers duplicate LLVM symbols
|
||||||
name = mangle_internal_name_by_type_only(ccx, t, "tydesc");
|
name = mangle_internal_name_by_type_only(ccx, t, "tydesc");
|
||||||
} else { name = mangle_internal_name_by_seq(ccx, "tydesc"); }
|
} else { name = mangle_internal_name_by_seq(ccx, "tydesc"); }
|
||||||
note_unique_llvm_symbol(ccx, name);
|
note_unique_llvm_symbol(ccx, name);
|
||||||
|
@ -427,7 +427,7 @@ fn declare_generic_glue(ccx: @crate_ctxt, t: ty::t, llfnty: TypeRef,
|
||||||
name: str) -> ValueRef {
|
name: str) -> ValueRef {
|
||||||
let name = name;
|
let name = name;
|
||||||
let fn_nm;
|
let fn_nm;
|
||||||
if ccx.sess.opts.debuginfo {
|
if false /*ccx.sess.opts.debuginfo*/ { //XXX this triggers duplicate LLVM symbols
|
||||||
fn_nm = mangle_internal_name_by_type_only(ccx, t, "glue_" + name);
|
fn_nm = mangle_internal_name_by_type_only(ccx, t, "glue_" + name);
|
||||||
} else {
|
} else {
|
||||||
fn_nm = mangle_internal_name_by_seq(ccx, "glue_" + name);
|
fn_nm = mangle_internal_name_by_seq(ccx, "glue_" + name);
|
||||||
|
@ -4672,8 +4672,7 @@ fn trans_crate(sess: session::session, crate: @ast::crate, tcx: ty::ctxt,
|
||||||
lib::llvm::associate_type(tn, "tydesc", tydesc_type);
|
lib::llvm::associate_type(tn, "tydesc", tydesc_type);
|
||||||
let crate_map = decl_crate_map(sess, link_meta.name, llmod);
|
let crate_map = decl_crate_map(sess, link_meta.name, llmod);
|
||||||
let dbg_cx = if sess.opts.debuginfo {
|
let dbg_cx = if sess.opts.debuginfo {
|
||||||
option::some(@{llmetadata: map::int_hash(),
|
option::some(debuginfo::mk_ctxt(llmod_id))
|
||||||
names: new_namegen()})
|
|
||||||
} else {
|
} else {
|
||||||
option::none
|
option::none
|
||||||
};
|
};
|
||||||
|
|
|
@ -114,7 +114,7 @@ type crate_ctxt = {
|
||||||
builder: BuilderRef_res,
|
builder: BuilderRef_res,
|
||||||
shape_cx: shape::ctxt,
|
shape_cx: shape::ctxt,
|
||||||
crate_map: ValueRef,
|
crate_map: ValueRef,
|
||||||
dbg_cx: option<@debuginfo::debug_ctxt>,
|
dbg_cx: option<debuginfo::debug_ctxt>,
|
||||||
mutable do_not_commit_warning_issued: bool};
|
mutable do_not_commit_warning_issued: bool};
|
||||||
|
|
||||||
// Types used for llself.
|
// Types used for llself.
|
||||||
|
|
|
@ -1,3 +1,4 @@
|
||||||
|
import std::map;
|
||||||
import std::map::hashmap;
|
import std::map::hashmap;
|
||||||
import lib::llvm::llvm;
|
import lib::llvm::llvm;
|
||||||
import lib::llvm::ValueRef;
|
import lib::llvm::ValueRef;
|
||||||
|
@ -17,6 +18,7 @@ export create_function;
|
||||||
export create_arg;
|
export create_arg;
|
||||||
export update_source_pos;
|
export update_source_pos;
|
||||||
export debug_ctxt;
|
export debug_ctxt;
|
||||||
|
export mk_ctxt;
|
||||||
|
|
||||||
const LLVMDebugVersion: int = (9 << 16);
|
const LLVMDebugVersion: int = (9 << 16);
|
||||||
|
|
||||||
|
@ -75,8 +77,7 @@ fn llnull() -> ValueRef unsafe {
|
||||||
|
|
||||||
fn add_named_metadata(cx: @crate_ctxt, name: str, val: ValueRef) {
|
fn add_named_metadata(cx: @crate_ctxt, name: str, val: ValueRef) {
|
||||||
str::as_c_str(name, {|sbuf|
|
str::as_c_str(name, {|sbuf|
|
||||||
llvm::LLVMAddNamedMetadataOperand(cx.llmod, sbuf,
|
llvm::LLVMAddNamedMetadataOperand(cx.llmod, sbuf, val)
|
||||||
val)
|
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -84,9 +85,16 @@ fn add_named_metadata(cx: @crate_ctxt, name: str, val: ValueRef) {
|
||||||
|
|
||||||
type debug_ctxt = {
|
type debug_ctxt = {
|
||||||
llmetadata: metadata_cache,
|
llmetadata: metadata_cache,
|
||||||
names: namegen
|
names: namegen,
|
||||||
|
crate_file: str
|
||||||
};
|
};
|
||||||
|
|
||||||
|
fn mk_ctxt(crate: str) -> debug_ctxt {
|
||||||
|
{llmetadata: map::int_hash(),
|
||||||
|
names: new_namegen(),
|
||||||
|
crate_file: crate}
|
||||||
|
}
|
||||||
|
|
||||||
fn update_cache(cache: metadata_cache, mdtag: int, val: debug_metadata) {
|
fn update_cache(cache: metadata_cache, mdtag: int, val: debug_metadata) {
|
||||||
let existing = if cache.contains_key(mdtag) {
|
let existing = if cache.contains_key(mdtag) {
|
||||||
cache.get(mdtag)
|
cache.get(mdtag)
|
||||||
|
@ -99,7 +107,7 @@ fn update_cache(cache: metadata_cache, mdtag: int, val: debug_metadata) {
|
||||||
type metadata<T> = {node: ValueRef, data: T};
|
type metadata<T> = {node: ValueRef, data: T};
|
||||||
|
|
||||||
type file_md = {path: str};
|
type file_md = {path: str};
|
||||||
type compile_unit_md = {path: str};
|
type compile_unit_md = {name: str};
|
||||||
type subprogram_md = {id: ast::node_id};
|
type subprogram_md = {id: ast::node_id};
|
||||||
type local_var_md = {id: ast::node_id};
|
type local_var_md = {id: ast::node_id};
|
||||||
type tydesc_md = {hash: uint};
|
type tydesc_md = {hash: uint};
|
||||||
|
@ -154,41 +162,35 @@ fn cached_metadata<T: copy>(cache: metadata_cache, mdtag: int,
|
||||||
ret option::none;
|
ret option::none;
|
||||||
}
|
}
|
||||||
|
|
||||||
fn create_compile_unit(cx: @crate_ctxt, full_path: str)
|
fn create_compile_unit(cx: @crate_ctxt)
|
||||||
-> @metadata<compile_unit_md> unsafe {
|
-> @metadata<compile_unit_md> unsafe {
|
||||||
let cache = get_cache(cx);
|
let cache = get_cache(cx);
|
||||||
|
let crate_name = option::get(cx.dbg_cx).crate_file;
|
||||||
let tg = CompileUnitTag;
|
let tg = CompileUnitTag;
|
||||||
alt cached_metadata::<@metadata<compile_unit_md>>(cache, tg,
|
alt cached_metadata::<@metadata<compile_unit_md>>(cache, tg,
|
||||||
{|md| md.data.path == full_path}) {
|
{|md| md.data.name == crate_name}) {
|
||||||
option::some(md) { ret md; }
|
option::some(md) { ret md; }
|
||||||
option::none {}
|
option::none {}
|
||||||
}
|
}
|
||||||
|
|
||||||
let work_dir = cx.sess.working_dir;
|
let (_, work_dir) = get_file_path_and_dir(cx.sess.working_dir,
|
||||||
let file_path = if str::starts_with(full_path, work_dir) {
|
crate_name);
|
||||||
str::slice(full_path, str::len(work_dir), str::len(full_path))
|
|
||||||
} else {
|
|
||||||
full_path
|
|
||||||
};
|
|
||||||
let unit_metadata = [lltag(tg),
|
let unit_metadata = [lltag(tg),
|
||||||
llunused(),
|
llunused(),
|
||||||
lli32(DW_LANG_RUST),
|
lli32(DW_LANG_RUST),
|
||||||
llstr(file_path),
|
llstr(crate_name),
|
||||||
llstr(work_dir),
|
llstr(work_dir),
|
||||||
llstr(#env["CFG_VERSION"]),
|
llstr(#env["CFG_VERSION"]),
|
||||||
lli1(false), // main compile unit
|
lli1(true), // deprecated: main compile unit
|
||||||
lli1(cx.sess.opts.optimize != 0u),
|
lli1(cx.sess.opts.optimize != 0u),
|
||||||
llstr(""), // flags (???)
|
llstr(""), // flags (???)
|
||||||
lli32(0) // runtime version (???)
|
lli32(0) // runtime version (???)
|
||||||
// list of enum types
|
|
||||||
// list of retained values
|
|
||||||
// list of subprograms
|
|
||||||
// list of global variables
|
|
||||||
];
|
];
|
||||||
let unit_node = llmdnode(unit_metadata);
|
let unit_node = llmdnode(unit_metadata);
|
||||||
add_named_metadata(cx, "llvm.dbg.cu", unit_node);
|
add_named_metadata(cx, "llvm.dbg.cu", unit_node);
|
||||||
let mdval = @{node: unit_node, data: {path: full_path}};
|
let mdval = @{node: unit_node, data: {name: crate_name}};
|
||||||
update_cache(cache, tg, compile_unit_metadata(mdval));
|
update_cache(cache, tg, compile_unit_metadata(mdval));
|
||||||
|
|
||||||
ret mdval;
|
ret mdval;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -196,6 +198,15 @@ fn get_cache(cx: @crate_ctxt) -> metadata_cache {
|
||||||
option::get(cx.dbg_cx).llmetadata
|
option::get(cx.dbg_cx).llmetadata
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn get_file_path_and_dir(work_dir: str, full_path: str) -> (str, str) {
|
||||||
|
(if str::starts_with(full_path, work_dir) {
|
||||||
|
str::slice(full_path, str::len(work_dir) + 1u,
|
||||||
|
str::len(full_path))
|
||||||
|
} else {
|
||||||
|
full_path
|
||||||
|
}, work_dir)
|
||||||
|
}
|
||||||
|
|
||||||
fn create_file(cx: @crate_ctxt, full_path: str) -> @metadata<file_md> {
|
fn create_file(cx: @crate_ctxt, full_path: str) -> @metadata<file_md> {
|
||||||
let cache = get_cache(cx);;
|
let cache = get_cache(cx);;
|
||||||
let tg = FileDescriptorTag;
|
let tg = FileDescriptorTag;
|
||||||
|
@ -205,12 +216,12 @@ fn create_file(cx: @crate_ctxt, full_path: str) -> @metadata<file_md> {
|
||||||
option::none {}
|
option::none {}
|
||||||
}
|
}
|
||||||
|
|
||||||
let fname = path::basename(full_path);
|
let (file_path, work_dir) = get_file_path_and_dir(cx.sess.working_dir,
|
||||||
let path = path::dirname(full_path);
|
full_path);
|
||||||
let unit_node = create_compile_unit(cx, full_path).node;
|
let unit_node = create_compile_unit(cx).node;
|
||||||
let file_md = [lltag(tg),
|
let file_md = [lltag(tg),
|
||||||
llstr(fname),
|
llstr(file_path),
|
||||||
llstr(path),
|
llstr(work_dir),
|
||||||
unit_node];
|
unit_node];
|
||||||
let val = llmdnode(file_md);
|
let val = llmdnode(file_md);
|
||||||
let mdval = @{node: val, data: {path: full_path}};
|
let mdval = @{node: val, data: {path: full_path}};
|
||||||
|
@ -310,7 +321,7 @@ fn create_basic_type(cx: @crate_ctxt, t: ty::t, ty: ast::prim_ty, span: span)
|
||||||
|
|
||||||
let fname = filename_from_span(cx, span);
|
let fname = filename_from_span(cx, span);
|
||||||
let file_node = create_file(cx, fname);
|
let file_node = create_file(cx, fname);
|
||||||
let cu_node = create_compile_unit(cx, fname);
|
let cu_node = create_compile_unit(cx);
|
||||||
let (size, align) = size_and_align_of(cx, t);
|
let (size, align) = size_and_align_of(cx, t);
|
||||||
let lldata = [lltag(tg),
|
let lldata = [lltag(tg),
|
||||||
cu_node.node,
|
cu_node.node,
|
||||||
|
@ -463,7 +474,7 @@ fn create_composite_type(type_tag: int, name: str, file: ValueRef, line: int,
|
||||||
lli32(line), // source line definition
|
lli32(line), // source line definition
|
||||||
lli64(size), // size of members
|
lli64(size), // size of members
|
||||||
lli64(align), // align
|
lli64(align), // align
|
||||||
lli64(offset), // offset
|
lli32/*64*/(offset), // offset
|
||||||
lli32(0), // flags
|
lli32(0), // flags
|
||||||
if option::is_none(derived) {
|
if option::is_none(derived) {
|
||||||
llnull()
|
llnull()
|
||||||
|
@ -781,13 +792,9 @@ fn create_function(fcx: fn_ctxt) -> @metadata<subprogram_md> {
|
||||||
option::none {}
|
option::none {}
|
||||||
}
|
}
|
||||||
|
|
||||||
let path = path_str(fcx.path);
|
|
||||||
|
|
||||||
let loc = codemap::lookup_char_pos(cx.sess.codemap,
|
let loc = codemap::lookup_char_pos(cx.sess.codemap,
|
||||||
sp.lo);
|
sp.lo);
|
||||||
let file_node = create_file(cx, loc.file.name).node;
|
let file_node = create_file(cx, loc.file.name).node;
|
||||||
let key = if cx.item_symbols.contains_key(fcx.id) { fcx.id } else { id };
|
|
||||||
let mangled = cx.item_symbols.get(key);
|
|
||||||
let ty_node = if cx.sess.opts.extra_debuginfo {
|
let ty_node = if cx.sess.opts.extra_debuginfo {
|
||||||
alt ret_ty.node {
|
alt ret_ty.node {
|
||||||
ast::ty_nil { llnull() }
|
ast::ty_nil { llnull() }
|
||||||
|
@ -804,17 +811,17 @@ fn create_function(fcx: fn_ctxt) -> @metadata<subprogram_md> {
|
||||||
llunused(),
|
llunused(),
|
||||||
file_node,
|
file_node,
|
||||||
llstr(ident),
|
llstr(ident),
|
||||||
llstr(path), //XXX fully-qualified C++ name
|
llstr(ident), //XXX fully-qualified C++ name
|
||||||
llstr(mangled), //XXX MIPS name?????
|
llstr(""), //XXX MIPS name?????
|
||||||
file_node,
|
file_node,
|
||||||
lli32(loc.line as int),
|
lli32(loc.line as int),
|
||||||
sub_node,
|
sub_node,
|
||||||
lli1(false), //XXX static (check export)
|
lli1(false), //XXX static (check export)
|
||||||
lli1(true), // not extern
|
lli1(true), // defined in compilation unit
|
||||||
lli32(DW_VIRTUALITY_none), // virtual-ness
|
lli32(DW_VIRTUALITY_none), // virtual-ness
|
||||||
lli32(0i), //index into virt func
|
lli32(0i), //index into virt func
|
||||||
llnull(), // base type with vtbl
|
/*llnull()*/ lli32(0), // base type with vtbl
|
||||||
lli1(false), // artificial
|
lli32(256), // flags
|
||||||
lli1(cx.sess.opts.optimize != 0u),
|
lli1(cx.sess.opts.optimize != 0u),
|
||||||
fcx.llfn
|
fcx.llfn
|
||||||
//list of template params
|
//list of template params
|
||||||
|
@ -825,5 +832,6 @@ fn create_function(fcx: fn_ctxt) -> @metadata<subprogram_md> {
|
||||||
add_named_metadata(cx, "llvm.dbg.sp", val);
|
add_named_metadata(cx, "llvm.dbg.sp", val);
|
||||||
let mdval = @{node: val, data: {id: id}};
|
let mdval = @{node: val, data: {id: id}};
|
||||||
update_cache(cache, SubprogramTag, subprogram_metadata(mdval));
|
update_cache(cache, SubprogramTag, subprogram_metadata(mdval));
|
||||||
|
|
||||||
ret mdval;
|
ret mdval;
|
||||||
}
|
}
|
||||||
|
|
|
@ -155,7 +155,7 @@ fn build_session() -> (session::session, @mutable bool) {
|
||||||
let error_handlers = build_error_handlers(codemap);
|
let error_handlers = build_error_handlers(codemap);
|
||||||
let {emitter, span_handler, ignore_errors} = error_handlers;
|
let {emitter, span_handler, ignore_errors} = error_handlers;
|
||||||
|
|
||||||
let session = driver::build_session_(sopts, ".", codemap, emitter,
|
let session = driver::build_session_(sopts, codemap, emitter,
|
||||||
span_handler);
|
span_handler);
|
||||||
(session, ignore_errors)
|
(session, ignore_errors)
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue