@@ -656,7 +656,7 @@ pub trait UnwindSection<R: Reader>: Clone + Debug + _UnwindSectionPrivate<R> {
656656 let offset = UnwindOffset :: into ( offset) ;
657657 let input = & mut self . section ( ) . clone ( ) ;
658658 input. skip ( offset) ?;
659- CommonInformationEntry :: parse ( bases, self , input)
659+ CommonInformationEntry :: parse ( bases, self , input, offset )
660660 }
661661
662662 /// Parse the `PartialFrameDescriptionEntry` at the given offset.
@@ -668,7 +668,7 @@ pub trait UnwindSection<R: Reader>: Clone + Debug + _UnwindSectionPrivate<R> {
668668 let offset = UnwindOffset :: into ( offset) ;
669669 let input = & mut self . section ( ) . clone ( ) ;
670670 input. skip ( offset) ?;
671- PartialFrameDescriptionEntry :: parse_partial ( self , bases, input)
671+ PartialFrameDescriptionEntry :: parse_partial ( self , bases, input, offset )
672672 }
673673
674674 /// Parse the `FrameDescriptionEntry` at the given offset.
@@ -1103,7 +1103,7 @@ where
11031103 } else {
11041104 let cie_offset = R :: Offset :: from_u64 ( cie_id_or_offset) ?;
11051105 let cie_offset = match section. resolve_cie_offset ( cie_offset_base, cie_offset) {
1106- None => return Err ( Error :: OffsetOutOfBounds ) ,
1106+ None => return Err ( Error :: OffsetOutOfBounds ( cie_id_or_offset ) ) ,
11071107 Some ( cie_offset) => cie_offset,
11081108 } ;
11091109
@@ -1316,11 +1316,12 @@ impl<R: Reader> CommonInformationEntry<R> {
13161316 bases : & BaseAddresses ,
13171317 section : & Section ,
13181318 input : & mut R ,
1319+ offset : R :: Offset ,
13191320 ) -> Result < CommonInformationEntry < R > > {
13201321 match parse_cfi_entry ( bases, section, input) ? {
13211322 Some ( CieOrFde :: Cie ( cie) ) => Ok ( cie) ,
1322- Some ( CieOrFde :: Fde ( _) ) => Err ( Error :: NotCieId ) ,
1323- None => Err ( Error :: NoEntryAtGivenOffset ) ,
1323+ Some ( CieOrFde :: Fde ( _) ) => Err ( Error :: NotCieId ( offset . into_u64 ( ) ) ) ,
1324+ None => Err ( Error :: NoEntryAtGivenOffset ( offset . into_u64 ( ) ) ) ,
13241325 }
13251326 }
13261327
@@ -1348,7 +1349,7 @@ impl<R: Reader> CommonInformationEntry<R> {
13481349 let address_size = rest. read_address_size ( ) ?;
13491350 let segment_size = rest. read_u8 ( ) ?;
13501351 if segment_size != 0 {
1351- return Err ( Error :: UnsupportedSegmentSize ) ;
1352+ return Err ( Error :: UnsupportedSegmentSize ( segment_size ) ) ;
13521353 }
13531354 address_size
13541355 } else {
@@ -1543,11 +1544,12 @@ where
15431544 section : & Section ,
15441545 bases : & ' bases BaseAddresses ,
15451546 input : & mut R ,
1547+ offset : R :: Offset ,
15461548 ) -> Result < PartialFrameDescriptionEntry < ' bases , Section , R > > {
15471549 match parse_cfi_entry ( bases, section, input) ? {
1548- Some ( CieOrFde :: Cie ( _) ) => Err ( Error :: NotFdePointer ) ,
1550+ Some ( CieOrFde :: Cie ( _) ) => Err ( Error :: NotFdePointer ( offset . into_u64 ( ) ) ) ,
15491551 Some ( CieOrFde :: Fde ( partial) ) => Ok ( partial) ,
1550- None => Err ( Error :: NoEntryAtGivenOffset ) ,
1552+ None => Err ( Error :: NoEntryAtGivenOffset ( offset . into_u64 ( ) ) ) ,
15511553 }
15521554 }
15531555
@@ -3780,7 +3782,7 @@ mod tests {
37803782 let bases = Default :: default ( ) ;
37813783 match parse_cfi_entry ( & bases, & section, input) {
37823784 Ok ( Some ( CieOrFde :: Fde ( partial) ) ) => partial. parse ( get_cie) ,
3783- Ok ( _) => Err ( Error :: NoEntryAtGivenOffset ) ,
3785+ Ok ( _) => Err ( Error :: NoEntryAtGivenOffset ( 0 ) ) ,
37843786 Err ( e) => Err ( e) ,
37853787 }
37863788 }
@@ -3984,7 +3986,7 @@ mod tests {
39843986 debug_frame. set_address_size ( address_size) ;
39853987 let input = & mut EndianSlice :: new ( & section, E :: default ( ) ) ;
39863988 let bases = Default :: default ( ) ;
3987- let result = CommonInformationEntry :: parse ( & bases, & debug_frame, input) ;
3989+ let result = CommonInformationEntry :: parse ( & bases, & debug_frame, input, 0 ) ;
39883990 let result = result. map ( |cie| ( * input, cie) ) . map_eof ( & section) ;
39893991 assert_eq ! ( result, expected) ;
39903992 }
@@ -4038,7 +4040,7 @@ mod tests {
40384040 . B32 ( 4 )
40394041 // Not the CIE Id.
40404042 . B32 ( 0xbad1_bad2 ) ;
4041- assert_parse_cie ( kind, section, 8 , Err ( Error :: NotCieId ) ) ;
4043+ assert_parse_cie ( kind, section, 8 , Err ( Error :: NotCieId ( 0 ) ) ) ;
40424044 }
40434045
40444046 #[ test]
@@ -4179,7 +4181,8 @@ mod tests {
41794181 CommonInformationEntry :: parse(
41804182 & bases,
41814183 & debug_frame,
4182- & mut EndianSlice :: new( & contents, LittleEndian )
4184+ & mut EndianSlice :: new( & contents, LittleEndian ) ,
4185+ 0 ,
41834186 )
41844187 . map_eof( & contents) ,
41854188 Err ( Error :: UnexpectedEof ( ReaderOffsetId ( 4 ) ) )
@@ -6691,7 +6694,7 @@ mod tests {
66916694
66926695 assert_eq ! (
66936696 eh_frame. cie_from_offset( & bases, EhFrameOffset ( 0 ) ) ,
6694- Err ( Error :: NoEntryAtGivenOffset )
6697+ Err ( Error :: NoEntryAtGivenOffset ( 0 ) )
66956698 ) ;
66966699 }
66976700
@@ -6713,7 +6716,7 @@ mod tests {
67136716
67146717 assert_eq ! (
67156718 debug_frame. cie_from_offset( & bases, DebugFrameOffset ( 0 ) ) ,
6716- Err ( Error :: NoEntryAtGivenOffset )
6719+ Err ( Error :: NoEntryAtGivenOffset ( 0 ) )
67176720 ) ;
67186721 }
67196722
@@ -6763,7 +6766,7 @@ mod tests {
67636766 let buf = [ 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 ] ;
67646767 assert_eq ! (
67656768 resolve_cie_offset( & buf, buf. len( ) + 4 + 2 ) ,
6766- Err ( Error :: OffsetOutOfBounds )
6769+ Err ( Error :: OffsetOutOfBounds ( buf . len ( ) as u64 + 4 + 2 ) )
67676770 ) ;
67686771 }
67696772
@@ -6772,7 +6775,7 @@ mod tests {
67726775 let buf = [ 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 ] ;
67736776 assert_eq ! (
67746777 resolve_cie_offset( & buf, usize :: MAX ) ,
6775- Err ( Error :: OffsetOutOfBounds )
6778+ Err ( Error :: OffsetOutOfBounds ( u32 :: MAX as u64 ) )
67766779 ) ;
67776780 }
67786781
@@ -6853,7 +6856,7 @@ mod tests {
68536856 let section = Section :: with_endian ( kind. endian ( ) )
68546857 . cie ( kind, None , & mut cie)
68556858 . mark ( & end_of_cie)
6856- . fde ( kind, 99_999_999_999_999 , & mut fde) ;
6859+ . fde ( kind, 99_999_999 , & mut fde) ;
68576860
68586861 section. start ( ) . set_const ( 0 ) ;
68596862 let section = section. get_contents ( ) . unwrap ( ) ;
@@ -6865,7 +6868,7 @@ mod tests {
68656868 & mut section. range_from ( end_of_cie. value ( ) . unwrap ( ) as usize ..) ,
68666869 UnwindSection :: cie_from_offset,
68676870 ) ;
6868- assert_eq ! ( result, Err ( Error :: OffsetOutOfBounds ) ) ;
6871+ assert_eq ! ( result, Err ( Error :: OffsetOutOfBounds ( 99_999_999 ) ) ) ;
68696872 }
68706873
68716874 #[ test]
0 commit comments