Fixed remaining issues to pass debug-test/* tests.
Made debugger scripts source line insensitive.
This commit is contained in:
parent
62e86e044d
commit
65dd6218af
9 changed files with 73 additions and 28 deletions
|
@ -2045,6 +2045,14 @@ pub mod llvm {
|
||||||
AlwaysPreserve: bool,
|
AlwaysPreserve: bool,
|
||||||
Flags: c_uint,
|
Flags: c_uint,
|
||||||
ArgNo: c_uint) -> DIVariable;
|
ArgNo: c_uint) -> DIVariable;
|
||||||
|
|
||||||
|
#[fast_ffi]
|
||||||
|
pub unsafe fn LLVMDIBuilderCreateArrayType(
|
||||||
|
Builder: DIBuilderRef,
|
||||||
|
Size: c_ulonglong,
|
||||||
|
AlignInBits: c_ulonglong,
|
||||||
|
Ty: DIType,
|
||||||
|
Subscripts: DIArray) -> DIType;
|
||||||
|
|
||||||
#[fast_ffi]
|
#[fast_ffi]
|
||||||
pub unsafe fn LLVMDIBuilderCreateVectorType(
|
pub unsafe fn LLVMDIBuilderCreateVectorType(
|
||||||
|
|
|
@ -24,6 +24,7 @@ use util::ppaux::ty_to_str;
|
||||||
use core::hashmap::HashMap;
|
use core::hashmap::HashMap;
|
||||||
use core::libc;
|
use core::libc;
|
||||||
use core::libc::c_uint;
|
use core::libc::c_uint;
|
||||||
|
use core::cmp;
|
||||||
use core::ptr;
|
use core::ptr;
|
||||||
use core::str::as_c_str;
|
use core::str::as_c_str;
|
||||||
use core::sys;
|
use core::sys;
|
||||||
|
@ -204,8 +205,7 @@ fn create_block(bcx: block) -> DILexicalBlock {
|
||||||
|
|
||||||
fn size_and_align_of(cx: @CrateContext, t: ty::t) -> (uint, uint) {
|
fn size_and_align_of(cx: @CrateContext, t: ty::t) -> (uint, uint) {
|
||||||
let llty = type_of::type_of(cx, t);
|
let llty = type_of::type_of(cx, t);
|
||||||
(machine::llsize_of_real(cx, llty),
|
(machine::llsize_of_real(cx, llty), machine::llalign_of_min(cx, llty))
|
||||||
machine::llalign_of_pref(cx, llty))
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fn create_basic_type(cx: @CrateContext, t: ty::t, span: span) -> DIType{
|
fn create_basic_type(cx: @CrateContext, t: ty::t, span: span) -> DIType{
|
||||||
|
@ -277,6 +277,7 @@ struct StructContext {
|
||||||
|
|
||||||
impl StructContext {
|
impl StructContext {
|
||||||
fn create(cx: @CrateContext, file: DIFile, name: ~str, line: uint) -> ~StructContext {
|
fn create(cx: @CrateContext, file: DIFile, name: ~str, line: uint) -> ~StructContext {
|
||||||
|
debug!("StructContext::create: %s", name);
|
||||||
let scx = ~StructContext {
|
let scx = ~StructContext {
|
||||||
cx: cx,
|
cx: cx,
|
||||||
file: file,
|
file: file,
|
||||||
|
@ -284,39 +285,48 @@ impl StructContext {
|
||||||
line: line,
|
line: line,
|
||||||
members: ~[],
|
members: ~[],
|
||||||
total_size: 0,
|
total_size: 0,
|
||||||
align: 64 //XXX different alignment per arch?
|
align: 1
|
||||||
};
|
};
|
||||||
return scx;
|
return scx;
|
||||||
}
|
}
|
||||||
|
|
||||||
fn add_member(&mut self, name: &str, line: uint, size: uint, align: uint, ty: DIType) {
|
fn add_member(&mut self, name: &str, line: uint, size: uint, align: uint, ty: DIType) {
|
||||||
|
debug!("StructContext(%s)::add_member: %s, size=%u, align=%u", self.name, name, size, align);
|
||||||
|
let offset = roundup(self.total_size, align);
|
||||||
let mem_t = do as_c_str(name) |name| { unsafe {
|
let mem_t = do as_c_str(name) |name| { unsafe {
|
||||||
llvm::LLVMDIBuilderCreateMemberType(dbg_cx(self.cx).builder,
|
llvm::LLVMDIBuilderCreateMemberType(dbg_cx(self.cx).builder,
|
||||||
ptr::null(), name, self.file, line as c_uint,
|
ptr::null(), name, self.file, line as c_uint,
|
||||||
size * 8 as u64, align * 8 as u64, self.total_size as u64,
|
size * 8 as u64, align * 8 as u64, offset * 8 as u64,
|
||||||
0, ty)
|
0, ty)
|
||||||
}};
|
}};
|
||||||
// XXX What about member alignment???
|
|
||||||
self.members.push(mem_t);
|
self.members.push(mem_t);
|
||||||
self.total_size += size * 8;
|
self.total_size = offset + size;
|
||||||
|
// struct alignment is the max alignment of its' members
|
||||||
|
self.align = cmp::max(self.align, align);
|
||||||
}
|
}
|
||||||
|
|
||||||
fn finalize(&self) -> DICompositeType {
|
fn finalize(&self) -> DICompositeType {
|
||||||
|
debug!("StructContext(%s)::finalize: total_size=%u, align=%u", self.name, self.total_size, self.align);
|
||||||
let dcx = dbg_cx(self.cx);
|
let dcx = dbg_cx(self.cx);
|
||||||
let members_md = create_DIArray(dcx.builder, self.members);
|
let members_md = create_DIArray(dcx.builder, self.members);
|
||||||
|
|
||||||
let struct_md =
|
let struct_md =
|
||||||
do as_c_str(self.name) |name| { unsafe {
|
do as_c_str(self.name) |name| { unsafe {
|
||||||
llvm::LLVMDIBuilderCreateStructType(
|
llvm::LLVMDIBuilderCreateStructType(
|
||||||
dcx.builder, ptr::null(), name,
|
dcx.builder, self.file, name,
|
||||||
self.file, self.line as c_uint,
|
self.file, self.line as c_uint,
|
||||||
self.total_size as u64, self.align as u64, 0, ptr::null(),
|
self.total_size * 8 as u64, self.align * 8 as u64, 0, ptr::null(),
|
||||||
members_md, 0, ptr::null())
|
members_md, 0, ptr::null())
|
||||||
}};
|
}};
|
||||||
return struct_md;
|
return struct_md;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[inline(always)]
|
||||||
|
fn roundup(x: uint, a: uint) -> uint {
|
||||||
|
((x + (a - 1)) / a) * a
|
||||||
|
}
|
||||||
|
|
||||||
fn create_struct(cx: @CrateContext, t: ty::t, fields: ~[ty::field], span: span) -> DICompositeType {
|
fn create_struct(cx: @CrateContext, t: ty::t, fields: ~[ty::field], span: span) -> DICompositeType {
|
||||||
let loc = span_start(cx, span);
|
let loc = span_start(cx, span);
|
||||||
let file_md = create_file(cx, loc.file.name);
|
let file_md = create_file(cx, loc.file.name);
|
||||||
|
@ -390,12 +400,12 @@ fn create_fixed_vec(cx: @CrateContext, vec_t: ty::t, elem_t: ty::t,
|
||||||
let (size, align) = size_and_align_of(cx, elem_t);
|
let (size, align) = size_and_align_of(cx, elem_t);
|
||||||
|
|
||||||
let subrange = unsafe {
|
let subrange = unsafe {
|
||||||
llvm::LLVMDIBuilderGetOrCreateSubrange(dcx.builder, 0_i64, (len-1) as i64) };
|
llvm::LLVMDIBuilderGetOrCreateSubrange(dcx.builder, 0_i64, len as i64) };
|
||||||
|
|
||||||
let subscripts = create_DIArray(dcx.builder, [subrange]);
|
let subscripts = create_DIArray(dcx.builder, [subrange]);
|
||||||
return unsafe {
|
return unsafe {
|
||||||
llvm::LLVMDIBuilderCreateVectorType(dcx.builder,
|
llvm::LLVMDIBuilderCreateArrayType(dcx.builder,
|
||||||
size * len as u64, align as u64, elem_ty_md, subscripts)
|
size * len * 8 as u64, align * 8 as u64, elem_ty_md, subscripts)
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -418,8 +428,8 @@ fn create_boxed_vec(cx: @CrateContext, vec_t: ty::t, elem_t: ty::t,
|
||||||
let name = fmt!("[%s]", ty_to_str(cx.tcx, elem_t));
|
let name = fmt!("[%s]", ty_to_str(cx.tcx, elem_t));
|
||||||
|
|
||||||
let subscripts = create_DIArray(dcx.builder, [subrange]);
|
let subscripts = create_DIArray(dcx.builder, [subrange]);
|
||||||
let data_ptr = unsafe { llvm::LLVMDIBuilderCreateVectorType(dcx.builder,
|
let data_ptr = unsafe { llvm::LLVMDIBuilderCreateArrayType(dcx.builder,
|
||||||
arr_size as u64, arr_align as u64, elem_ty_md, subscripts) };
|
arr_size * 8 as u64, arr_align * 8 as u64, elem_ty_md, subscripts) };
|
||||||
vec_scx.add_member("data", 0, 0, // clang says the size should be 0
|
vec_scx.add_member("data", 0, 0, // clang says the size should be 0
|
||||||
sys::min_align_of::<u8>(), data_ptr);
|
sys::min_align_of::<u8>(), data_ptr);
|
||||||
let vec_md = vec_scx.finalize();
|
let vec_md = vec_scx.finalize();
|
||||||
|
|
|
@ -725,6 +725,17 @@ extern "C" LLVMValueRef LLVMDIBuilderCreateLocalVariable(
|
||||||
unwrapDI<DIType>(Ty), AlwaysPreserve, Flags, ArgNo));
|
unwrapDI<DIType>(Ty), AlwaysPreserve, Flags, ArgNo));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
extern "C" LLVMValueRef LLVMDIBuilderCreateArrayType(
|
||||||
|
DIBuilderRef Builder,
|
||||||
|
uint64_t Size,
|
||||||
|
uint64_t AlignInBits,
|
||||||
|
LLVMValueRef Ty,
|
||||||
|
LLVMValueRef Subscripts) {
|
||||||
|
return wrap(Builder->createArrayType(Size, AlignInBits,
|
||||||
|
unwrapDI<DIType>(Ty),
|
||||||
|
unwrapDI<DIArray>(Subscripts)));
|
||||||
|
}
|
||||||
|
|
||||||
extern "C" LLVMValueRef LLVMDIBuilderCreateVectorType(
|
extern "C" LLVMValueRef LLVMDIBuilderCreateVectorType(
|
||||||
DIBuilderRef Builder,
|
DIBuilderRef Builder,
|
||||||
uint64_t Size,
|
uint64_t Size,
|
||||||
|
|
|
@ -601,6 +601,7 @@ LLVMDIBuilderCreatePointerType
|
||||||
LLVMDIBuilderCreateMemberType
|
LLVMDIBuilderCreateMemberType
|
||||||
LLVMDIBuilderCreateStructType
|
LLVMDIBuilderCreateStructType
|
||||||
LLVMDIBuilderGetOrCreateSubrange
|
LLVMDIBuilderGetOrCreateSubrange
|
||||||
|
LLVMDIBuilderCreateArrayType
|
||||||
LLVMDIBuilderCreateVectorType
|
LLVMDIBuilderCreateVectorType
|
||||||
LLVMDIBuilderCreateSubroutineType
|
LLVMDIBuilderCreateSubroutineType
|
||||||
LLVMDIBuilderGetOrCreateArray
|
LLVMDIBuilderGetOrCreateArray
|
||||||
|
|
|
@ -8,7 +8,7 @@
|
||||||
// option. This file may not be copied, modified, or distributed
|
// option. This file may not be copied, modified, or distributed
|
||||||
// except according to those terms.
|
// except according to those terms.
|
||||||
|
|
||||||
// xfail-test
|
// xfail-win32 Broken because of LLVM bug: http://llvm.org/bugs/show_bug.cgi?id=16249
|
||||||
|
|
||||||
// Caveats - gdb prints any 8-bit value (meaning rust i8 and u8 values)
|
// Caveats - gdb prints any 8-bit value (meaning rust i8 and u8 values)
|
||||||
// as its numerical value along with its associated ASCII char, there
|
// as its numerical value along with its associated ASCII char, there
|
||||||
|
@ -17,8 +17,9 @@
|
||||||
// its numerical value.
|
// its numerical value.
|
||||||
|
|
||||||
// compile-flags:-Z extra-debug-info
|
// compile-flags:-Z extra-debug-info
|
||||||
// debugger:break 67
|
// debugger:break _zzz
|
||||||
// debugger:run
|
// debugger:run
|
||||||
|
// debugger:finish
|
||||||
// debugger:print b
|
// debugger:print b
|
||||||
// check:$1 = false
|
// check:$1 = false
|
||||||
// debugger:print i
|
// debugger:print i
|
||||||
|
@ -66,5 +67,7 @@ fn main() {
|
||||||
let f: float = 1.5;
|
let f: float = 1.5;
|
||||||
let f32: f32 = 2.5;
|
let f32: f32 = 2.5;
|
||||||
let f64: f64 = 3.5;
|
let f64: f64 = 3.5;
|
||||||
let _z = ();
|
_zzz();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn _zzz() {()}
|
||||||
|
|
|
@ -8,12 +8,13 @@
|
||||||
// option. This file may not be copied, modified, or distributed
|
// option. This file may not be copied, modified, or distributed
|
||||||
// except according to those terms.
|
// except according to those terms.
|
||||||
|
|
||||||
// xfail-test
|
// xfail-win32 Broken because of LLVM bug: http://llvm.org/bugs/show_bug.cgi?id=16249
|
||||||
|
|
||||||
// compile-flags:-Z extra-debug-info
|
// compile-flags:-Z extra-debug-info
|
||||||
// debugger:set print pretty off
|
// debugger:set print pretty off
|
||||||
// debugger:break 29
|
// debugger:break _zzz
|
||||||
// debugger:run
|
// debugger:run
|
||||||
|
// debugger:finish
|
||||||
// debugger:print a->boxed
|
// debugger:print a->boxed
|
||||||
// check:$1 = 1
|
// check:$1 = 1
|
||||||
// debugger:print b->boxed
|
// debugger:print b->boxed
|
||||||
|
@ -28,5 +29,7 @@ fn main() {
|
||||||
let b = ~(2, 3.5);
|
let b = ~(2, 3.5);
|
||||||
let c = @4;
|
let c = @4;
|
||||||
let d = @false;
|
let d = @false;
|
||||||
let _z = 0;
|
_zzz();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn _zzz() {()}
|
|
@ -8,12 +8,13 @@
|
||||||
// option. This file may not be copied, modified, or distributed
|
// option. This file may not be copied, modified, or distributed
|
||||||
// except according to those terms.
|
// except according to those terms.
|
||||||
|
|
||||||
// xfail-test
|
// xfail-win32 Broken because of LLVM bug: http://llvm.org/bugs/show_bug.cgi?id=16249
|
||||||
|
|
||||||
// compile-flags:-Z extra-debug-info
|
// compile-flags:-Z extra-debug-info
|
||||||
// debugger:set print pretty off
|
// debugger:set print pretty off
|
||||||
// debugger:break 29
|
// debugger:break _zzz
|
||||||
// debugger:run
|
// debugger:run
|
||||||
|
// debugger:finish
|
||||||
// debugger:print pair
|
// debugger:print pair
|
||||||
// check:$1 = {x = 1, y = 2}
|
// check:$1 = {x = 1, y = 2}
|
||||||
// debugger:print pair.x
|
// debugger:print pair.x
|
||||||
|
@ -28,5 +29,7 @@ struct Pair {
|
||||||
|
|
||||||
fn main() {
|
fn main() {
|
||||||
let pair = Pair { x: 1, y: 2 };
|
let pair = Pair { x: 1, y: 2 };
|
||||||
let _z = ();
|
_zzz();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn _zzz() {()}
|
|
@ -8,16 +8,19 @@
|
||||||
// option. This file may not be copied, modified, or distributed
|
// option. This file may not be copied, modified, or distributed
|
||||||
// except according to those terms.
|
// except according to those terms.
|
||||||
|
|
||||||
// xfail-test
|
// xfail-win32 Broken because of LLVM bug: http://llvm.org/bugs/show_bug.cgi?id=16249
|
||||||
|
|
||||||
// compile-flags:-Z extra-debug-info
|
// compile-flags:-Z extra-debug-info
|
||||||
// debugger:set print pretty off
|
// debugger:set print pretty off
|
||||||
// debugger:break 20
|
// debugger:break _zzz
|
||||||
// debugger:run
|
// debugger:run
|
||||||
|
// debugger:finish
|
||||||
// debugger:print t
|
// debugger:print t
|
||||||
// check:$1 = {4, 5.5, true}
|
// check:$1 = {4, 5.5, true}
|
||||||
|
|
||||||
fn main() {
|
fn main() {
|
||||||
let t = (4, 5.5, true);
|
let t = (4, 5.5, true);
|
||||||
let _z = ();
|
_zzz();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn _zzz() {()}
|
|
@ -8,12 +8,13 @@
|
||||||
// option. This file may not be copied, modified, or distributed
|
// option. This file may not be copied, modified, or distributed
|
||||||
// except according to those terms.
|
// except according to those terms.
|
||||||
|
|
||||||
// xfail-test
|
// xfail-win32 Broken because of LLVM bug: http://llvm.org/bugs/show_bug.cgi?id=16249
|
||||||
|
|
||||||
// compile-flags:-Z extra-debug-info
|
// compile-flags:-Z extra-debug-info
|
||||||
// debugger:set print pretty off
|
// debugger:set print pretty off
|
||||||
// debugger:break 29
|
// debugger:break _zzz
|
||||||
// debugger:run
|
// debugger:run
|
||||||
|
// debugger:finish
|
||||||
// debugger:print a
|
// debugger:print a
|
||||||
// check:$1 = {1, 2, 3}
|
// check:$1 = {1, 2, 3}
|
||||||
// debugger:print b.vec[0]
|
// debugger:print b.vec[0]
|
||||||
|
@ -28,5 +29,7 @@ fn main() {
|
||||||
let b = &[4, 5, 6];
|
let b = &[4, 5, 6];
|
||||||
let c = @[7, 8, 9];
|
let c = @[7, 8, 9];
|
||||||
let d = ~[10, 11, 12];
|
let d = ~[10, 11, 12];
|
||||||
let _z = 0;
|
_zzz();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn _zzz() {()}
|
Loading…
Add table
Add a link
Reference in a new issue