@@ -76,7 +76,7 @@ private unsafe void Read32(ElfReader reader)
7676 ref var entry = ref MemoryMarshal . GetReference ( span ) ;
7777 while ( batch . HasNext ( ) )
7878 {
79- ref var rel = ref batch . ReadNext ( ) ;
79+ ref var rel = ref batch . Read ( ) ;
8080 entry . Offset = reader . Decode ( rel . r_offset ) ;
8181 var r_info = reader . Decode ( rel . r_info ) ;
8282 entry . Type = new ElfRelocationType ( Parent ! . Arch , r_info & 0xFF ) ;
@@ -91,7 +91,7 @@ private unsafe void Read32(ElfReader reader)
9191 ref var entry = ref MemoryMarshal . GetReference ( span ) ;
9292 while ( batch . HasNext ( ) )
9393 {
94- ref var rel = ref batch . ReadNext ( ) ;
94+ ref var rel = ref batch . Read ( ) ;
9595 entry . Offset = reader . Decode ( rel . r_offset ) ;
9696 var r_info = reader . Decode ( rel . r_info ) ;
9797 entry . Type = new ElfRelocationType ( Parent ! . Arch , r_info & 0xFF ) ;
@@ -115,7 +115,7 @@ private unsafe void Read64(ElfReader reader)
115115 ref var entry = ref MemoryMarshal . GetReference ( span ) ;
116116 while ( batch . HasNext ( ) )
117117 {
118- ref var rel = ref batch . ReadNext ( ) ;
118+ ref var rel = ref batch . Read ( ) ;
119119 entry . Offset = reader . Decode ( rel . r_offset ) ;
120120 var r_info = reader . Decode ( rel . r_info ) ;
121121 entry . Type = new ElfRelocationType ( Parent ! . Arch , ( uint ) ( r_info & 0xFFFFFFFF ) ) ;
@@ -130,7 +130,7 @@ private unsafe void Read64(ElfReader reader)
130130 ref var entry = ref MemoryMarshal . GetReference ( span ) ;
131131 while ( batch . HasNext ( ) )
132132 {
133- ref var rel = ref batch . ReadNext ( ) ;
133+ ref var rel = ref batch . Read ( ) ;
134134 entry . Offset = reader . Decode ( rel . r_offset ) ;
135135 var r_info = reader . Decode ( rel . r_info ) ;
136136 entry . Type = new ElfRelocationType ( Parent ! . Arch , ( uint ) ( r_info & 0xFFFFFFFF ) ) ;
@@ -143,66 +143,76 @@ private unsafe void Read64(ElfReader reader)
143143
144144 private void Write32 ( ElfWriter writer )
145145 {
146+ var entries = CollectionsMarshal . AsSpan ( _entries ) ;
146147 if ( IsRelocationWithAddends )
147148 {
149+ using var batch = new BatchDataWriter < ElfNative . Elf32_Rela > ( writer . Stream , entries . Length ) ;
148150 // Write all entries
149- for ( int i = 0 ; i < Entries . Count ; i ++ )
151+ var rel = new ElfNative . Elf32_Rela ( ) ;
152+ for ( int i = 0 ; i < entries . Length ; i ++ )
150153 {
151- var entry = Entries [ i ] ;
154+ ref var entry = ref entries [ i ] ;
152155
153- var rel = new ElfNative . Elf32_Rela ( ) ;
154156 writer . Encode ( out rel . r_offset , ( uint ) entry . Offset ) ;
155157 uint r_info = entry . Info32 ;
156158 writer . Encode ( out rel . r_info , r_info ) ;
157159 writer . Encode ( out rel . r_addend , ( int ) entry . Addend ) ;
158- writer . Write ( rel ) ;
160+
161+ batch . Write ( rel ) ;
159162 }
160163 }
161164 else
162165 {
166+ using var batch = new BatchDataWriter < ElfNative . Elf32_Rel > ( writer . Stream , entries . Length ) ;
163167 // Write all entries
164- for ( int i = 0 ; i < Entries . Count ; i ++ )
168+ var rel = new ElfNative . Elf32_Rel ( ) ;
169+ for ( int i = 0 ; i < entries . Length ; i ++ )
165170 {
166- var entry = Entries [ i ] ;
171+ ref var entry = ref entries [ i ] ;
167172
168- var rel = new ElfNative . Elf32_Rel ( ) ;
169173 writer . Encode ( out rel . r_offset , ( uint ) entry . Offset ) ;
170174 uint r_info = entry . Info32 ;
171175 writer . Encode ( out rel . r_info , r_info ) ;
172- writer . Write ( rel ) ;
176+
177+ batch . Write ( rel ) ;
173178 }
174179 }
175180 }
176181
177182 private void Write64 ( ElfWriter writer )
178183 {
184+ var entries = CollectionsMarshal . AsSpan ( _entries ) ;
179185 if ( IsRelocationWithAddends )
180186 {
187+ using var batch = new BatchDataWriter < ElfNative . Elf64_Rela > ( writer . Stream , entries . Length ) ;
188+ var rel = new ElfNative . Elf64_Rela ( ) ;
181189 // Write all entries
182- for ( int i = 0 ; i < Entries . Count ; i ++ )
190+ for ( int i = 0 ; i < entries . Length ; i ++ )
183191 {
184- var entry = Entries [ i ] ;
192+ ref var entry = ref entries [ i ] ;
185193
186- var rel = new ElfNative . Elf64_Rela ( ) ;
187194 writer . Encode ( out rel . r_offset , entry . Offset ) ;
188195 ulong r_info = entry . Info64 ;
189196 writer . Encode ( out rel . r_info , r_info ) ;
190197 writer . Encode ( out rel . r_addend , entry . Addend ) ;
191- writer . Write ( rel ) ;
198+
199+ batch . Write ( rel ) ;
192200 }
193201 }
194202 else
195203 {
204+ using var batch = new BatchDataWriter < ElfNative . Elf64_Rel > ( writer . Stream , entries . Length ) ;
205+ var rel = new ElfNative . Elf64_Rel ( ) ;
196206 // Write all entries
197- for ( int i = 0 ; i < Entries . Count ; i ++ )
207+ for ( int i = 0 ; i < entries . Length ; i ++ )
198208 {
199- var entry = Entries [ i ] ;
209+ ref var entry = ref entries [ i ] ;
200210
201- var rel = new ElfNative . Elf64_Rel ( ) ;
202211 writer . Encode ( out rel . r_offset , ( uint ) entry . Offset ) ;
203212 ulong r_info = entry . Info64 ;
204213 writer . Encode ( out rel . r_info , r_info ) ;
205- writer . Write ( rel ) ;
214+
215+ batch . Write ( rel ) ;
206216 }
207217 }
208218 }
0 commit comments