Skip to content

Commit 178a679

Browse files
committed
---
yaml --- r: 6812 b: refs/heads/master c: e95c56f h: refs/heads/master v: v3
1 parent 4219192 commit 178a679

File tree

2 files changed

+35
-10
lines changed

2 files changed

+35
-10
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: 544bcfece238d47ca600fd09cef1f282a7a9bb26
2+
refs/heads/master: e95c56f8554bd4c13876e999d3372408ffd732e7

trunk/src/comp/middle/debuginfo.rs

Lines changed: 34 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ const DW_VIRTUALITY_none: int = 0;
1515
const CompileUnitTag: int = 17;
1616
const FileDescriptorTag: int = 41;
1717
const SubprogramTag: int = 46;
18+
const SubroutineTag: int = 21;
1819
const BasicTypeDescriptorTag: int = 36;
1920
const AutoVariableTag: int = 256;
2021
const ArgVariableTag: int = 257;
@@ -54,8 +55,8 @@ fn llmdnode(elems: [ValueRef]) -> ValueRef unsafe {
5455
fn llunused() -> ValueRef {
5556
lli32(0x0)
5657
}
57-
fn llnull() -> ValueRef {
58-
C_null(T_ptr(T_nil()))
58+
fn llnull() -> ValueRef unsafe {
59+
unsafe::reinterpret_cast(std::ptr::null::<ValueRef>())
5960
}
6061

6162
fn update_cache(cache: metadata_cache, mdtag: int, val: debug_metadata) {
@@ -191,10 +192,8 @@ fn get_block_metadata(cx: @block_ctxt) -> @metadata<block_md> {
191192
option::none. {}
192193
}
193194
let parent = alt cx.parent {
194-
trans_common::parent_none. { llnull() }
195-
trans_common::parent_some(bcx) {
196-
get_block_metadata(bcx).node
197-
}
195+
trans_common::parent_none. { function_metadata_from_block(cx).node }
196+
trans_common::parent_some(bcx) { get_block_metadata(cx).node }
198197
};
199198
let file_node = get_file_metadata(bcx_ccx(cx), fname);
200199
let unique_id = alt cache.find(LexicalBlockTag) {
@@ -259,6 +258,14 @@ fn get_ty_metadata(cx: @crate_ctxt, t: ty::t, ty: @ast::ty) -> @metadata<tydesc_
259258
ret mdval;
260259
}
261260

261+
fn function_metadata_from_block(bcx: @block_ctxt) -> @metadata<subprogram_md> {
262+
let cx = bcx_ccx(bcx);
263+
let fcx = bcx_fcx(bcx);
264+
let fn_node = cx.ast_map.get(fcx.id);
265+
let fn_item = alt fn_node { ast_map::node_item(item) { item } };
266+
get_function_metadata(cx, fn_item, fcx.llfn)
267+
}
268+
262269
fn get_local_var_metadata(bcx: @block_ctxt, local: @ast::local)
263270
-> @metadata<local_var_md> unsafe {
264271
let cx = bcx_ccx(bcx);
@@ -276,9 +283,12 @@ fn get_local_var_metadata(bcx: @block_ctxt, local: @ast::local)
276283
let ty = trans::node_id_type(cx, local.node.id);
277284
let tymd = get_ty_metadata(cx, ty, local.node.ty);
278285
let filemd = get_file_metadata(cx, loc.filename);
279-
let blockmd = get_block_metadata(bcx);
286+
let context = alt bcx.parent {
287+
trans_common::parent_none. { function_metadata_from_block(bcx).node }
288+
trans_common::parent_some(_) { get_block_metadata(bcx).node }
289+
};
280290
let lldata = [lltag(AutoVariableTag),
281-
blockmd.node, //XXX block context (maybe subprogram if possible?)
291+
context, // context
282292
llstr(name), // name
283293
filemd.node,
284294
lli32(loc.line as int), // line
@@ -388,6 +398,21 @@ fn get_function_metadata(cx: @crate_ctxt, item: @ast::item,
388398
_ { get_ty_metadata(cx, ty::node_id_to_type(ccx_tcx(cx), item.id),
389399
ret_ty).node }
390400
};
401+
let sub_type = llmdnode([ty_node]);
402+
let sub_metadata = [lltag(SubroutineTag),
403+
file_node,
404+
llstr(""),
405+
file_node,
406+
lli32(0),
407+
lli64(0),
408+
lli64(0),
409+
lli64(0),
410+
lli32(0),
411+
llnull(),
412+
sub_type,
413+
lli32(0),
414+
llnull()];
415+
let sub_node = llmdnode(sub_metadata);
391416
let fn_metadata = [lltag(SubprogramTag),
392417
llunused(),
393418
file_node,
@@ -396,7 +421,7 @@ fn get_function_metadata(cx: @crate_ctxt, item: @ast::item,
396421
llstr(mangled), //XXX MIPS name?????
397422
file_node,
398423
lli32(loc.line as int),
399-
ty_node,
424+
sub_node,
400425
lli1(false), //XXX static (check export)
401426
lli1(true), // not extern
402427
lli32(DW_VIRTUALITY_none), // virtual-ness

0 commit comments

Comments
 (0)