@@ -76,7 +76,7 @@ private unsafe void Read32(ElfReader reader)
76
76
ref var entry = ref MemoryMarshal . GetReference ( span ) ;
77
77
while ( batch . HasNext ( ) )
78
78
{
79
- ref var rel = ref batch . ReadNext ( ) ;
79
+ ref var rel = ref batch . Read ( ) ;
80
80
entry . Offset = reader . Decode ( rel . r_offset ) ;
81
81
var r_info = reader . Decode ( rel . r_info ) ;
82
82
entry . Type = new ElfRelocationType ( Parent ! . Arch , r_info & 0xFF ) ;
@@ -91,7 +91,7 @@ private unsafe void Read32(ElfReader reader)
91
91
ref var entry = ref MemoryMarshal . GetReference ( span ) ;
92
92
while ( batch . HasNext ( ) )
93
93
{
94
- ref var rel = ref batch . ReadNext ( ) ;
94
+ ref var rel = ref batch . Read ( ) ;
95
95
entry . Offset = reader . Decode ( rel . r_offset ) ;
96
96
var r_info = reader . Decode ( rel . r_info ) ;
97
97
entry . Type = new ElfRelocationType ( Parent ! . Arch , r_info & 0xFF ) ;
@@ -115,7 +115,7 @@ private unsafe void Read64(ElfReader reader)
115
115
ref var entry = ref MemoryMarshal . GetReference ( span ) ;
116
116
while ( batch . HasNext ( ) )
117
117
{
118
- ref var rel = ref batch . ReadNext ( ) ;
118
+ ref var rel = ref batch . Read ( ) ;
119
119
entry . Offset = reader . Decode ( rel . r_offset ) ;
120
120
var r_info = reader . Decode ( rel . r_info ) ;
121
121
entry . Type = new ElfRelocationType ( Parent ! . Arch , ( uint ) ( r_info & 0xFFFFFFFF ) ) ;
@@ -130,7 +130,7 @@ private unsafe void Read64(ElfReader reader)
130
130
ref var entry = ref MemoryMarshal . GetReference ( span ) ;
131
131
while ( batch . HasNext ( ) )
132
132
{
133
- ref var rel = ref batch . ReadNext ( ) ;
133
+ ref var rel = ref batch . Read ( ) ;
134
134
entry . Offset = reader . Decode ( rel . r_offset ) ;
135
135
var r_info = reader . Decode ( rel . r_info ) ;
136
136
entry . Type = new ElfRelocationType ( Parent ! . Arch , ( uint ) ( r_info & 0xFFFFFFFF ) ) ;
@@ -143,66 +143,76 @@ private unsafe void Read64(ElfReader reader)
143
143
144
144
private void Write32 ( ElfWriter writer )
145
145
{
146
+ var entries = CollectionsMarshal . AsSpan ( _entries ) ;
146
147
if ( IsRelocationWithAddends )
147
148
{
149
+ using var batch = new BatchDataWriter < ElfNative . Elf32_Rela > ( writer . Stream , entries . Length ) ;
148
150
// 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 ++ )
150
153
{
151
- var entry = Entries [ i ] ;
154
+ ref var entry = ref entries [ i ] ;
152
155
153
- var rel = new ElfNative . Elf32_Rela ( ) ;
154
156
writer . Encode ( out rel . r_offset , ( uint ) entry . Offset ) ;
155
157
uint r_info = entry . Info32 ;
156
158
writer . Encode ( out rel . r_info , r_info ) ;
157
159
writer . Encode ( out rel . r_addend , ( int ) entry . Addend ) ;
158
- writer . Write ( rel ) ;
160
+
161
+ batch . Write ( rel ) ;
159
162
}
160
163
}
161
164
else
162
165
{
166
+ using var batch = new BatchDataWriter < ElfNative . Elf32_Rel > ( writer . Stream , entries . Length ) ;
163
167
// 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 ++ )
165
170
{
166
- var entry = Entries [ i ] ;
171
+ ref var entry = ref entries [ i ] ;
167
172
168
- var rel = new ElfNative . Elf32_Rel ( ) ;
169
173
writer . Encode ( out rel . r_offset , ( uint ) entry . Offset ) ;
170
174
uint r_info = entry . Info32 ;
171
175
writer . Encode ( out rel . r_info , r_info ) ;
172
- writer . Write ( rel ) ;
176
+
177
+ batch . Write ( rel ) ;
173
178
}
174
179
}
175
180
}
176
181
177
182
private void Write64 ( ElfWriter writer )
178
183
{
184
+ var entries = CollectionsMarshal . AsSpan ( _entries ) ;
179
185
if ( IsRelocationWithAddends )
180
186
{
187
+ using var batch = new BatchDataWriter < ElfNative . Elf64_Rela > ( writer . Stream , entries . Length ) ;
188
+ var rel = new ElfNative . Elf64_Rela ( ) ;
181
189
// Write all entries
182
- for ( int i = 0 ; i < Entries . Count ; i ++ )
190
+ for ( int i = 0 ; i < entries . Length ; i ++ )
183
191
{
184
- var entry = Entries [ i ] ;
192
+ ref var entry = ref entries [ i ] ;
185
193
186
- var rel = new ElfNative . Elf64_Rela ( ) ;
187
194
writer . Encode ( out rel . r_offset , entry . Offset ) ;
188
195
ulong r_info = entry . Info64 ;
189
196
writer . Encode ( out rel . r_info , r_info ) ;
190
197
writer . Encode ( out rel . r_addend , entry . Addend ) ;
191
- writer . Write ( rel ) ;
198
+
199
+ batch . Write ( rel ) ;
192
200
}
193
201
}
194
202
else
195
203
{
204
+ using var batch = new BatchDataWriter < ElfNative . Elf64_Rel > ( writer . Stream , entries . Length ) ;
205
+ var rel = new ElfNative . Elf64_Rel ( ) ;
196
206
// Write all entries
197
- for ( int i = 0 ; i < Entries . Count ; i ++ )
207
+ for ( int i = 0 ; i < entries . Length ; i ++ )
198
208
{
199
- var entry = Entries [ i ] ;
209
+ ref var entry = ref entries [ i ] ;
200
210
201
- var rel = new ElfNative . Elf64_Rel ( ) ;
202
211
writer . Encode ( out rel . r_offset , ( uint ) entry . Offset ) ;
203
212
ulong r_info = entry . Info64 ;
204
213
writer . Encode ( out rel . r_info , r_info ) ;
205
- writer . Write ( rel ) ;
214
+
215
+ batch . Write ( rel ) ;
206
216
}
207
217
}
208
218
}
0 commit comments