@@ -69,7 +69,6 @@ impl Arch for ArchSuperH {
6969 & self ,
7070 resolved : ResolvedInstructionRef ,
7171 _diff_config : & DiffObjConfig ,
72- _code : Option < & [ u8 ] > ,
7372 cb : & mut dyn FnMut ( InstructionPart ) -> Result < ( ) > ,
7473 ) -> Result < ( ) > {
7574 let opcode = u16:: from_be_bytes ( resolved. code . try_into ( ) . unwrap ( ) ) ;
@@ -78,13 +77,13 @@ impl Arch for ArchSuperH {
7877
7978 sh2_disasm ( 0 , opcode, true , & mut parts, & resolved, & mut branch_dest) ;
8079
81- if let Some ( code ) = _code {
80+ if let Some ( symbol_data ) = resolved . section . symbol_data ( resolved . symbol ) {
8281 // scan for data
8382 // map of instruction offsets to data target offsets
8483 let mut data_offsets: HashMap < u64 , DataInfo > = HashMap :: < u64 , DataInfo > :: new ( ) ;
8584
8685 let mut pos: u64 = 0 ;
87- for chunk in code . chunks_exact ( 2 ) {
86+ for chunk in symbol_data . chunks_exact ( 2 ) {
8887 let opcode = u16:: from_be_bytes ( chunk. try_into ( ) . unwrap ( ) ) ;
8988 // mov.w
9089 if ( opcode & 0xf000 ) == 0x9000 {
@@ -105,19 +104,19 @@ impl Arch for ArchSuperH {
105104
106105 // add the data info
107106 if let Some ( value) = data_offsets. get ( & pos) {
108- if value. size == 2 && value. address as usize + 1 < code . len ( ) {
107+ if value. size == 2 && value. address as usize + 1 < symbol_data . len ( ) {
109108 let data = u16:: from_be_bytes (
110- code [ value. address as usize ..value. address as usize + 2 ]
109+ symbol_data [ value. address as usize ..value. address as usize + 2 ]
111110 . try_into ( )
112111 . unwrap ( ) ,
113112 ) ;
114113 parts. push ( InstructionPart :: basic ( " /* " ) ) ;
115114 parts. push ( InstructionPart :: basic ( "0x" ) ) ;
116115 parts. push ( InstructionPart :: basic ( format ! ( "{:04X}" , data) ) ) ;
117116 parts. push ( InstructionPart :: basic ( " */" ) ) ;
118- } else if value. size == 4 && value. address as usize + 3 < code . len ( ) {
117+ } else if value. size == 4 && value. address as usize + 3 < symbol_data . len ( ) {
119118 let data = u32:: from_be_bytes (
120- code [ value. address as usize ..value. address as usize + 4 ]
119+ symbol_data [ value. address as usize ..value. address as usize + 4 ]
121120 . try_into ( )
122121 . unwrap ( ) ,
123122 ) ;
@@ -213,7 +212,7 @@ mod test {
213212 use std:: fmt:: { self , Display } ;
214213
215214 use super :: * ;
216- use crate :: obj:: { InstructionArg , Symbol } ;
215+ use crate :: obj:: { InstructionArg , Section , SectionData , Symbol } ;
217216
218217 impl Display for InstructionPart < ' _ > {
219218 fn fmt ( & self , f : & mut fmt:: Formatter ) -> fmt:: Result {
@@ -261,7 +260,6 @@ mod test {
261260 ..Default :: default ( )
262261 } ,
263262 & DiffObjConfig :: default ( ) ,
264- None ,
265263 & mut |part| {
266264 parts. push ( part. into_static ( ) ) ;
267265 Ok ( ( ) )
@@ -340,7 +338,6 @@ mod test {
340338 ..Default :: default ( )
341339 } ,
342340 & DiffObjConfig :: default ( ) ,
343- None ,
344341 & mut |part| {
345342 parts. push ( part. into_static ( ) ) ;
346343 Ok ( ( ) )
@@ -424,7 +421,6 @@ mod test {
424421 ..Default :: default ( )
425422 } ,
426423 & DiffObjConfig :: default ( ) ,
427- None ,
428424 & mut |part| {
429425 parts. push ( part. into_static ( ) ) ;
430426 Ok ( ( ) )
@@ -462,7 +458,6 @@ mod test {
462458 ..Default :: default ( )
463459 } ,
464460 & DiffObjConfig :: default ( ) ,
465- None ,
466461 & mut |part| {
467462 parts. push ( part. into_static ( ) ) ;
468463 Ok ( ( ) )
@@ -512,7 +507,6 @@ mod test {
512507 ..Default :: default ( )
513508 } ,
514509 & DiffObjConfig :: default ( ) ,
515- None ,
516510 & mut |part| {
517511 parts. push ( part. into_static ( ) ) ;
518512 Ok ( ( ) )
@@ -549,7 +543,6 @@ mod test {
549543 ..Default :: default ( )
550544 } ,
551545 & DiffObjConfig :: default ( ) ,
552- None ,
553546 & mut |part| {
554547 parts. push ( part. into_static ( ) ) ;
555548 Ok ( ( ) )
@@ -589,7 +582,6 @@ mod test {
589582 ..Default :: default ( )
590583 } ,
591584 & DiffObjConfig :: default ( ) ,
592- None ,
593585 & mut |part| {
594586 parts. push ( part. into_static ( ) ) ;
595587 Ok ( ( ) )
@@ -629,7 +621,6 @@ mod test {
629621 ..Default :: default ( )
630622 } ,
631623 & DiffObjConfig :: default ( ) ,
632- None ,
633624 & mut |part| {
634625 parts. push ( part. into_static ( ) ) ;
635626 Ok ( ( ) )
@@ -662,7 +653,6 @@ mod test {
662653 ..Default :: default ( )
663654 } ,
664655 & DiffObjConfig :: default ( ) ,
665- None ,
666656 & mut |part| {
667657 parts. push ( part. into_static ( ) ) ;
668658 Ok ( ( ) )
@@ -692,7 +682,6 @@ mod test {
692682 ..Default :: default ( )
693683 } ,
694684 & DiffObjConfig :: default ( ) ,
695- None ,
696685 & mut |part| {
697686 parts. push ( part. into_static ( ) ) ;
698687 Ok ( ( ) )
@@ -716,7 +705,6 @@ mod test {
716705 code. extend_from_slice ( & 0x00B0_u16 . to_be_bytes ( ) ) ;
717706
718707 for & ( opcode, addr, expected_str) in ops {
719- let code_slice = & code;
720708 let mut parts = Vec :: new ( ) ;
721709
722710 arch. display_instruction (
@@ -725,12 +713,18 @@ mod test {
725713 code : & opcode. to_be_bytes ( ) ,
726714 symbol : & Symbol {
727715 address : 0x0606F378 , // func base address
716+ size : code. len ( ) as u64 ,
717+ ..Default :: default ( )
718+ } ,
719+ section : & Section {
720+ address : 0x0606F378 ,
721+ size : code. len ( ) as u64 ,
722+ data : SectionData ( code. clone ( ) ) ,
728723 ..Default :: default ( )
729724 } ,
730725 ..Default :: default ( )
731726 } ,
732727 & DiffObjConfig :: default ( ) ,
733- Some ( code_slice) ,
734728 & mut |part| {
735729 parts. push ( part. into_static ( ) ) ;
736730 Ok ( ( ) )
@@ -765,12 +759,18 @@ mod test {
765759 code : & opcode. to_be_bytes ( ) ,
766760 symbol : & Symbol {
767761 address : 0x0606F378 , // func base address
762+ size : code. len ( ) as u64 ,
763+ ..Default :: default ( )
764+ } ,
765+ section : & Section {
766+ address : 0x0606F378 ,
767+ size : code. len ( ) as u64 ,
768+ data : SectionData ( code. clone ( ) ) ,
768769 ..Default :: default ( )
769770 } ,
770771 ..Default :: default ( )
771772 } ,
772773 & DiffObjConfig :: default ( ) ,
773- Some ( code_slice) ,
774774 & mut |part| {
775775 parts. push ( part. into_static ( ) ) ;
776776 Ok ( ( ) )
0 commit comments