diff options
| author | Srinivas Reddy Thatiparthy <thatiparthysreenivas@gmail.com> | 2016-05-29 16:06:29 +0530 |
|---|---|---|
| committer | Srinivas Reddy Thatiparthy <thatiparthysreenivas@gmail.com> | 2016-06-05 23:34:23 +0530 |
| commit | 00bbc27276a3696522aef1d66bcc955b8e862ae9 (patch) | |
| tree | a59aa67fd599c542553989ffe75c432a09aaf330 /src/libpanic_unwind/dwarf | |
| parent | 8cbffc5bcfbc4696173678d50d519e9e61676265 (diff) | |
run rustfmt on libpanic_unwind folder
Diffstat (limited to 'src/libpanic_unwind/dwarf')
| -rw-r--r-- | src/libpanic_unwind/dwarf/eh.rs | 75 | ||||
| -rw-r--r-- | src/libpanic_unwind/dwarf/mod.rs | 30 |
2 files changed, 51 insertions, 54 deletions
diff --git a/src/libpanic_unwind/dwarf/eh.rs b/src/libpanic_unwind/dwarf/eh.rs index 1c3fca98a1f..0ad6a74d101 100644 --- a/src/libpanic_unwind/dwarf/eh.rs +++ b/src/libpanic_unwind/dwarf/eh.rs @@ -24,36 +24,35 @@ use dwarf::DwarfReader; use core::mem; -pub const DW_EH_PE_omit : u8 = 0xFF; -pub const DW_EH_PE_absptr : u8 = 0x00; - -pub const DW_EH_PE_uleb128 : u8 = 0x01; -pub const DW_EH_PE_udata2 : u8 = 0x02; -pub const DW_EH_PE_udata4 : u8 = 0x03; -pub const DW_EH_PE_udata8 : u8 = 0x04; -pub const DW_EH_PE_sleb128 : u8 = 0x09; -pub const DW_EH_PE_sdata2 : u8 = 0x0A; -pub const DW_EH_PE_sdata4 : u8 = 0x0B; -pub const DW_EH_PE_sdata8 : u8 = 0x0C; - -pub const DW_EH_PE_pcrel : u8 = 0x10; -pub const DW_EH_PE_textrel : u8 = 0x20; -pub const DW_EH_PE_datarel : u8 = 0x30; -pub const DW_EH_PE_funcrel : u8 = 0x40; -pub const DW_EH_PE_aligned : u8 = 0x50; - -pub const DW_EH_PE_indirect : u8 = 0x80; +pub const DW_EH_PE_omit: u8 = 0xFF; +pub const DW_EH_PE_absptr: u8 = 0x00; + +pub const DW_EH_PE_uleb128: u8 = 0x01; +pub const DW_EH_PE_udata2: u8 = 0x02; +pub const DW_EH_PE_udata4: u8 = 0x03; +pub const DW_EH_PE_udata8: u8 = 0x04; +pub const DW_EH_PE_sleb128: u8 = 0x09; +pub const DW_EH_PE_sdata2: u8 = 0x0A; +pub const DW_EH_PE_sdata4: u8 = 0x0B; +pub const DW_EH_PE_sdata8: u8 = 0x0C; + +pub const DW_EH_PE_pcrel: u8 = 0x10; +pub const DW_EH_PE_textrel: u8 = 0x20; +pub const DW_EH_PE_datarel: u8 = 0x30; +pub const DW_EH_PE_funcrel: u8 = 0x40; +pub const DW_EH_PE_aligned: u8 = 0x50; + +pub const DW_EH_PE_indirect: u8 = 0x80; #[derive(Copy, Clone)] pub struct EHContext { - pub ip: usize, // Current instruction pointer + pub ip: usize, // Current instruction pointer pub func_start: usize, // Address of the current function pub text_start: usize, // Address of the code section pub data_start: usize, // Address of the data section } -pub unsafe fn find_landing_pad(lsda: *const u8, context: &EHContext) - -> Option<usize> { +pub unsafe fn find_landing_pad(lsda: *const u8, context: &EHContext) -> Option<usize> { if lsda.is_null() { return None; } @@ -80,7 +79,7 @@ pub unsafe fn find_landing_pad(lsda: *const u8, context: &EHContext) let action_table = reader.ptr.offset(call_site_table_length as isize); // Return addresses point 1 byte past the call instruction, which could // be in the next IP range. - let ip = context.ip-1; + let ip = context.ip - 1; while reader.ptr < action_table { let cs_start = read_encoded_pointer(&mut reader, context, call_site_encoding); @@ -90,7 +89,7 @@ pub unsafe fn find_landing_pad(lsda: *const u8, context: &EHContext) // Callsite table is sorted by cs_start, so if we've passed the ip, we // may stop searching. if ip < func_start + cs_start { - break + break; } if ip < func_start + cs_start + cs_len { if cs_lpad != 0 { @@ -114,13 +113,13 @@ fn round_up(unrounded: usize, align: usize) -> usize { unsafe fn read_encoded_pointer(reader: &mut DwarfReader, context: &EHContext, - encoding: u8) -> usize { + encoding: u8) + -> usize { assert!(encoding != DW_EH_PE_omit); // DW_EH_PE_aligned implies it's an absolute pointer value if encoding == DW_EH_PE_aligned { - reader.ptr = round_up(reader.ptr as usize, - mem::size_of::<usize>()) as *const u8; + reader.ptr = round_up(reader.ptr as usize, mem::size_of::<usize>()) as *const u8; return reader.read::<usize>(); } @@ -134,20 +133,26 @@ unsafe fn read_encoded_pointer(reader: &mut DwarfReader, DW_EH_PE_sdata2 => reader.read::<i16>() as usize, DW_EH_PE_sdata4 => reader.read::<i32>() as usize, DW_EH_PE_sdata8 => reader.read::<i64>() as usize, - _ => panic!() + _ => panic!(), }; result += match encoding & 0x70 { DW_EH_PE_absptr => 0, // relative to address of the encoded value, despite the name DW_EH_PE_pcrel => reader.ptr as usize, - DW_EH_PE_textrel => { assert!(context.text_start != 0); - context.text_start }, - DW_EH_PE_datarel => { assert!(context.data_start != 0); - context.data_start }, - DW_EH_PE_funcrel => { assert!(context.func_start != 0); - context.func_start }, - _ => panic!() + DW_EH_PE_textrel => { + assert!(context.text_start != 0); + context.text_start + } + DW_EH_PE_datarel => { + assert!(context.data_start != 0); + context.data_start + } + DW_EH_PE_funcrel => { + assert!(context.func_start != 0); + context.func_start + } + _ => panic!(), }; if encoding & DW_EH_PE_indirect != 0 { diff --git a/src/libpanic_unwind/dwarf/mod.rs b/src/libpanic_unwind/dwarf/mod.rs index cde21f90811..5c05ac11d30 100644 --- a/src/libpanic_unwind/dwarf/mod.rs +++ b/src/libpanic_unwind/dwarf/mod.rs @@ -21,25 +21,22 @@ pub mod eh; use core::mem; pub struct DwarfReader { - pub ptr : *const u8 + pub ptr: *const u8, } #[repr(C,packed)] struct Unaligned<T>(T); impl DwarfReader { - - pub fn new(ptr : *const u8) -> DwarfReader { - DwarfReader { - ptr : ptr - } + pub fn new(ptr: *const u8) -> DwarfReader { + DwarfReader { ptr: ptr } } // DWARF streams are packed, so e.g. a u32 would not necessarily be aligned // on a 4-byte boundary. This may cause problems on platforms with strict // alignment requirements. By wrapping data in a "packed" struct, we are // telling the backend to generate "misalignment-safe" code. - pub unsafe fn read<T:Copy>(&mut self) -> T { + pub unsafe fn read<T: Copy>(&mut self) -> T { let Unaligned(result) = *(self.ptr as *const Unaligned<T>); self.ptr = self.ptr.offset(mem::size_of::<T>() as isize); result @@ -48,9 +45,9 @@ impl DwarfReader { // ULEB128 and SLEB128 encodings are defined in Section 7.6 - "Variable // Length Data". pub unsafe fn read_uleb128(&mut self) -> u64 { - let mut shift : usize = 0; - let mut result : u64 = 0; - let mut byte : u8; + let mut shift: usize = 0; + let mut result: u64 = 0; + let mut byte: u8; loop { byte = self.read::<u8>(); result |= ((byte & 0x7F) as u64) << shift; @@ -63,9 +60,9 @@ impl DwarfReader { } pub unsafe fn read_sleb128(&mut self) -> i64 { - let mut shift : usize = 0; - let mut result : u64 = 0; - let mut byte : u8; + let mut shift: usize = 0; + let mut result: u64 = 0; + let mut byte: u8; loop { byte = self.read::<u8>(); result |= ((byte & 0x7F) as u64) << shift; @@ -84,12 +81,7 @@ impl DwarfReader { #[test] fn dwarf_reader() { - let encoded: &[u8] = &[1, - 2, 3, - 4, 5, 6, 7, - 0xE5, 0x8E, 0x26, - 0x9B, 0xF1, 0x59, - 0xFF, 0xFF]; + let encoded: &[u8] = &[1, 2, 3, 4, 5, 6, 7, 0xE5, 0x8E, 0x26, 0x9B, 0xF1, 0x59, 0xFF, 0xFF]; let mut reader = DwarfReader::new(encoded.as_ptr()); |
