@@ -2,103 +2,57 @@ use flatbuffers::FlatBufferBuilder;
22use prost:: Message ;
33use solfuzz_agave:: context_generated as fbs_ctx;
44use solfuzz_agave:: elf_generated as fbs_elf;
5- use solfuzz_agave:: metadata_generated as fbs_meta;
65use solfuzz_agave:: proto as pb;
7- use solfuzz_agave:: utils:: fd_hash:: fd_hash_u64_without_seed;
8- use solfuzz_agave:: utils:: fd_hash:: fd_hash_without_seed;
96use std:: env;
107use std:: fs;
118use std:: io;
129use std:: path:: PathBuf ;
1310
14- fn convert_fixture_proto_to_flatbuf ( input : & pb:: ElfLoaderFixture ) -> Vec < u8 > {
11+ fn convert_ctx_proto_to_flatbuf ( input : & pb:: ElfLoaderCtx ) -> Vec < u8 > {
1512 let mut fbb = FlatBufferBuilder :: new ( ) ;
1613
17- // metadata
18- let metadata_off = input. metadata . as_ref ( ) . map ( |m| {
19- let ent = fbb. create_string ( & m. fn_entrypoint ) ;
20- fbs_meta:: FixtureMetadata :: create (
21- & mut fbb,
22- & fbs_meta:: FixtureMetadataArgs {
23- fn_entrypoint : Some ( ent) ,
24- } ,
25- )
26- } ) ;
27-
2814 // input ctx
29- let input_off = input. input . as_ref ( ) . map ( |ctx| {
30- let features_off = {
31- let ctx_features = ctx. features . clone ( ) . unwrap_or_default ( ) ;
32- let vec_off = if ctx_features. features . is_empty ( ) {
33- fbb. create_vector :: < u64 > ( & [ ] )
34- } else {
35- fbb. create_vector ( & ctx_features. features )
36- } ;
37- fbs_ctx:: FeatureSet :: create (
38- & mut fbb,
39- & fbs_ctx:: FeatureSetArgs {
40- features : Some ( vec_off) ,
41- } ,
42- )
43- } ;
44- let elf_off = ctx. elf . as_ref ( ) . map ( |elf| fbb. create_vector ( & elf. data ) ) ;
45- fbs_elf:: ELFLoaderCtx :: create (
15+ let features_off = input. features . as_ref ( ) . map ( |features| {
16+ let vec_off = fbb. create_vector ( & features. features ) ;
17+ fbs_ctx:: FeatureSet :: create (
4618 & mut fbb,
47- & fbs_elf:: ELFLoaderCtxArgs {
48- elf_data : elf_off,
49- features : Some ( features_off) ,
50- deploy_checks : ctx. deploy_checks ,
19+ & fbs_ctx:: FeatureSetArgs {
20+ features : Some ( vec_off) ,
5121 } ,
5222 )
5323 } ) ;
5424
55- // output effects
56- let output_off = input. output . as_ref ( ) . map ( |eff| {
57- let ( rodata_hash, calldests_hash) = if eff. error != 0 {
58- ( 0 , 0 )
59- } else {
60- ( fd_hash_without_seed ( & eff. rodata ) , unsafe {
61- fd_hash_u64_without_seed ( & eff. calldests )
62- } )
63- } ;
64- fbs_elf:: ELFLoaderEffects :: create (
65- & mut fbb,
66- & fbs_elf:: ELFLoaderEffectsArgs {
67- rodata_hash : Some ( & fbs_ctx:: XXHash :: new ( & rodata_hash. to_le_bytes ( ) ) ) ,
68- text_cnt : eff. text_cnt ,
69- text_off : eff. text_off ,
70- entry_pc : eff. entry_pc ,
71- calldests_hash : Some ( & fbs_ctx:: XXHash :: new ( & calldests_hash. to_le_bytes ( ) ) ) ,
72- err_code : eff. error as u8 ,
73- } ,
74- )
75- } ) ;
25+ let elf_off = input
26+ . elf
27+ . as_ref ( )
28+ . map ( |elf| fbb. create_vector ( elf. data . as_slice ( ) ) ) ;
7629
77- let fixture_off = fbs_elf:: ELFLoaderFixture :: create (
30+ let ctx_off = fbs_elf:: ELFLoaderCtx :: create (
7831 & mut fbb,
79- & fbs_elf:: ELFLoaderFixtureArgs {
80- metadata : metadata_off ,
81- input : input_off ,
82- output : output_off ,
32+ & fbs_elf:: ELFLoaderCtxArgs {
33+ elf_data : elf_off ,
34+ features : features_off ,
35+ deploy_checks : input . deploy_checks ,
8336 } ,
8437 ) ;
85- fbb. finish ( fixture_off, None ) ;
38+
39+ fbb. finish ( ctx_off, None ) ;
8640 fbb. finished_data ( ) . to_vec ( )
8741}
8842
8943fn read_file ( path : & PathBuf ) -> io:: Result < Vec < u8 > > {
9044 fs:: read ( path)
9145}
9246
93- fn decode_fixture ( bytes : & [ u8 ] ) -> Result < pb:: ElfLoaderFixture , prost:: DecodeError > {
94- pb:: ElfLoaderFixture :: decode ( bytes)
47+ fn decode_ctx ( bytes : & [ u8 ] ) -> Result < pb:: ElfLoaderCtx , prost:: DecodeError > {
48+ pb:: ElfLoaderCtx :: decode ( bytes)
9549}
9650
9751fn process_file ( path : & PathBuf , out_dir : & PathBuf ) -> i32 {
9852 match read_file ( path) {
99- Ok ( bytes) => match decode_fixture ( & bytes) {
100- Ok ( fixture ) => {
101- let out = convert_fixture_proto_to_flatbuf ( & fixture ) ;
53+ Ok ( bytes) => match decode_ctx ( & bytes) {
54+ Ok ( ctx ) => {
55+ let out = convert_ctx_proto_to_flatbuf ( & ctx ) ;
10256 // Write to output directory with same filename
10357 if let Err ( e) = fs:: create_dir_all ( out_dir) {
10458 eprintln ! (
@@ -129,7 +83,7 @@ fn process_file(path: &PathBuf, out_dir: &PathBuf) -> i32 {
12983 }
13084 Err ( e) => {
13185 eprintln ! (
132- "{}: failed to decode protobuf ElfLoaderFixture : {}" ,
86+ "{}: failed to decode protobuf ElfLoaderCtx : {}" ,
13387 path. display( ) ,
13488 e
13589 ) ;
0 commit comments