Coverage Report

Created: 2025-08-26 06:55

/work/fu-elf-struct.c
Line
Count
Source (jump to first uncovered line)
1
/* auto-generated, do not modify */
2
#include "config.h"
3
4
#include "fu-elf-struct.h"
5
#include "fu-byte-array.h"
6
#include "fu-mem-private.h"
7
#include "fu-string.h"
8
9
#ifdef G_LOG_DOMAIN
10
  #undef G_LOG_DOMAIN
11
#endif
12
0
#define G_LOG_DOMAIN "FuStruct"
13
14
static const gchar *
15
fu_elf_file_header_type_to_string(FuElfFileHeaderType val)
16
0
{
17
0
    if (val == FU_ELF_FILE_HEADER_TYPE_NONE)
18
0
        return "none";
19
0
    if (val == FU_ELF_FILE_HEADER_TYPE_REL)
20
0
        return "rel";
21
0
    if (val == FU_ELF_FILE_HEADER_TYPE_EXEC)
22
0
        return "exec";
23
0
    if (val == FU_ELF_FILE_HEADER_TYPE_DYN)
24
0
        return "dyn";
25
0
    if (val == FU_ELF_FILE_HEADER_TYPE_CORE)
26
0
        return "core";
27
0
    return NULL;
28
0
}
29
30
const gchar *
31
fu_elf_section_header_type_to_string(FuElfSectionHeaderType val)
32
130
{
33
130
    if (val == FU_ELF_SECTION_HEADER_TYPE_NULL)
34
5
        return "null";
35
125
    if (val == FU_ELF_SECTION_HEADER_TYPE_PROGBITS)
36
1
        return "progbits";
37
124
    if (val == FU_ELF_SECTION_HEADER_TYPE_SYMTAB)
38
1
        return "symtab";
39
123
    if (val == FU_ELF_SECTION_HEADER_TYPE_STRTAB)
40
0
        return "strtab";
41
123
    if (val == FU_ELF_SECTION_HEADER_TYPE_RELA)
42
1
        return "rela";
43
122
    if (val == FU_ELF_SECTION_HEADER_TYPE_HASH)
44
1
        return "hash";
45
121
    if (val == FU_ELF_SECTION_HEADER_TYPE_DYNAMIC)
46
1
        return "dynamic";
47
120
    if (val == FU_ELF_SECTION_HEADER_TYPE_NOTE)
48
1
        return "note";
49
119
    if (val == FU_ELF_SECTION_HEADER_TYPE_NOBITS)
50
1
        return "nobits";
51
118
    if (val == FU_ELF_SECTION_HEADER_TYPE_REL)
52
1
        return "rel";
53
117
    if (val == FU_ELF_SECTION_HEADER_TYPE_SHLIB)
54
1
        return "shlib";
55
116
    if (val == FU_ELF_SECTION_HEADER_TYPE_DYNSYM)
56
1
        return "dynsym";
57
115
    if (val == FU_ELF_SECTION_HEADER_TYPE_INIT_ARRAY)
58
1
        return "init-array";
59
114
    if (val == FU_ELF_SECTION_HEADER_TYPE_FINI_ARRAY)
60
1
        return "fini-array";
61
113
    if (val == FU_ELF_SECTION_HEADER_TYPE_PREINIT_ARRAY)
62
1
        return "preinit-array";
63
112
    if (val == FU_ELF_SECTION_HEADER_TYPE_GROUP)
64
1
        return "group";
65
111
    if (val == FU_ELF_SECTION_HEADER_TYPE_SYMTAB_SHNDX)
66
1
        return "symtab-shndx";
67
110
    if (val == FU_ELF_SECTION_HEADER_TYPE_NUM)
68
1
        return "num";
69
109
    return NULL;
70
110
}
71
/* getters */
72
/**
73
 * fu_struct_elf_file_header64le_get_ei_magic: (skip):
74
 **/
75
static gchar *
76
fu_struct_elf_file_header64le_get_ei_magic(const FuStructElfFileHeader64le *st)
77
3.70M
{
78
3.70M
    g_return_val_if_fail(st != NULL, NULL);
79
3.70M
    return fu_memstrsafe(st->data, st->len, 0, 4, NULL);
80
3.70M
}
81
/**
82
 * fu_struct_elf_file_header64le_get_ei_class: (skip):
83
 **/
84
static guint8
85
fu_struct_elf_file_header64le_get_ei_class(const FuStructElfFileHeader64le *st)
86
4.25k
{
87
4.25k
    g_return_val_if_fail(st != NULL, 0x0);
88
4.25k
    return st->data[4];
89
4.25k
}
90
/**
91
 * fu_struct_elf_file_header64le_get_ei_data: (skip):
92
 **/
93
static guint8
94
fu_struct_elf_file_header64le_get_ei_data(const FuStructElfFileHeader64le *st)
95
3.80k
{
96
3.80k
    g_return_val_if_fail(st != NULL, 0x0);
97
3.80k
    return st->data[5];
98
3.80k
}
99
/**
100
 * fu_struct_elf_file_header64le_get_ei_version: (skip):
101
 **/
102
static guint8
103
fu_struct_elf_file_header64le_get_ei_version(const FuStructElfFileHeader64le *st)
104
3.59k
{
105
3.59k
    g_return_val_if_fail(st != NULL, 0x0);
106
3.59k
    return st->data[6];
107
3.59k
}
108
/**
109
 * fu_struct_elf_file_header64le_get_ei_osabi: (skip):
110
 **/
111
guint8
112
fu_struct_elf_file_header64le_get_ei_osabi(const FuStructElfFileHeader64le *st)
113
0
{
114
0
    g_return_val_if_fail(st != NULL, 0x0);
115
0
    return st->data[7];
116
0
}
117
/**
118
 * fu_struct_elf_file_header64le_get_ei_abiversion: (skip):
119
 **/
120
guint8
121
fu_struct_elf_file_header64le_get_ei_abiversion(const FuStructElfFileHeader64le *st)
122
0
{
123
0
    g_return_val_if_fail(st != NULL, 0x0);
124
0
    return st->data[8];
125
0
}
126
/**
127
 * fu_struct_elf_file_header64le_get_type: (skip):
128
 **/
129
FuElfFileHeaderType
130
fu_struct_elf_file_header64le_get_type(const FuStructElfFileHeader64le *st)
131
0
{
132
0
    g_return_val_if_fail(st != NULL, 0x0);
133
0
    return fu_memread_uint16(st->data + 16, G_LITTLE_ENDIAN);
134
0
}
135
/**
136
 * fu_struct_elf_file_header64le_get_machine: (skip):
137
 **/
138
guint16
139
fu_struct_elf_file_header64le_get_machine(const FuStructElfFileHeader64le *st)
140
0
{
141
0
    g_return_val_if_fail(st != NULL, 0x0);
142
0
    return fu_memread_uint16(st->data + 18, G_LITTLE_ENDIAN);
143
0
}
144
/**
145
 * fu_struct_elf_file_header64le_get_version: (skip):
146
 **/
147
static guint32
148
fu_struct_elf_file_header64le_get_version(const FuStructElfFileHeader64le *st)
149
4.74k
{
150
4.74k
    g_return_val_if_fail(st != NULL, 0x0);
151
4.74k
    return fu_memread_uint32(st->data + 20, G_LITTLE_ENDIAN);
152
4.74k
}
153
/**
154
 * fu_struct_elf_file_header64le_get_entry: (skip):
155
 **/
156
guint64
157
fu_struct_elf_file_header64le_get_entry(const FuStructElfFileHeader64le *st)
158
0
{
159
0
    g_return_val_if_fail(st != NULL, 0x0);
160
0
    return fu_memread_uint64(st->data + 24, G_LITTLE_ENDIAN);
161
0
}
162
/**
163
 * fu_struct_elf_file_header64le_get_phoff: (skip):
164
 **/
165
guint64
166
fu_struct_elf_file_header64le_get_phoff(const FuStructElfFileHeader64le *st)
167
1.01k
{
168
1.01k
    g_return_val_if_fail(st != NULL, 0x0);
169
1.01k
    return fu_memread_uint64(st->data + 32, G_LITTLE_ENDIAN);
170
1.01k
}
171
/**
172
 * fu_struct_elf_file_header64le_get_shoff: (skip):
173
 **/
174
guint64
175
fu_struct_elf_file_header64le_get_shoff(const FuStructElfFileHeader64le *st)
176
868
{
177
868
    g_return_val_if_fail(st != NULL, 0x0);
178
868
    return fu_memread_uint64(st->data + 40, G_LITTLE_ENDIAN);
179
868
}
180
/**
181
 * fu_struct_elf_file_header64le_get_flags: (skip):
182
 **/
183
guint32
184
fu_struct_elf_file_header64le_get_flags(const FuStructElfFileHeader64le *st)
185
0
{
186
0
    g_return_val_if_fail(st != NULL, 0x0);
187
0
    return fu_memread_uint32(st->data + 48, G_LITTLE_ENDIAN);
188
0
}
189
/**
190
 * fu_struct_elf_file_header64le_get_ehsize: (skip):
191
 **/
192
guint16
193
fu_struct_elf_file_header64le_get_ehsize(const FuStructElfFileHeader64le *st)
194
0
{
195
0
    g_return_val_if_fail(st != NULL, 0x0);
196
0
    return fu_memread_uint16(st->data + 52, G_LITTLE_ENDIAN);
197
0
}
198
/**
199
 * fu_struct_elf_file_header64le_get_phentsize: (skip):
200
 **/
201
guint16
202
fu_struct_elf_file_header64le_get_phentsize(const FuStructElfFileHeader64le *st)
203
1.01k
{
204
1.01k
    g_return_val_if_fail(st != NULL, 0x0);
205
1.01k
    return fu_memread_uint16(st->data + 54, G_LITTLE_ENDIAN);
206
1.01k
}
207
/**
208
 * fu_struct_elf_file_header64le_get_phnum: (skip):
209
 **/
210
guint16
211
fu_struct_elf_file_header64le_get_phnum(const FuStructElfFileHeader64le *st)
212
1.01k
{
213
1.01k
    g_return_val_if_fail(st != NULL, 0x0);
214
1.01k
    return fu_memread_uint16(st->data + 56, G_LITTLE_ENDIAN);
215
1.01k
}
216
/**
217
 * fu_struct_elf_file_header64le_get_shentsize: (skip):
218
 **/
219
guint16
220
fu_struct_elf_file_header64le_get_shentsize(const FuStructElfFileHeader64le *st)
221
12.2M
{
222
12.2M
    g_return_val_if_fail(st != NULL, 0x0);
223
12.2M
    return fu_memread_uint16(st->data + 58, G_LITTLE_ENDIAN);
224
12.2M
}
225
/**
226
 * fu_struct_elf_file_header64le_get_shnum: (skip):
227
 **/
228
guint16
229
fu_struct_elf_file_header64le_get_shnum(const FuStructElfFileHeader64le *st)
230
868
{
231
868
    g_return_val_if_fail(st != NULL, 0x0);
232
868
    return fu_memread_uint16(st->data + 60, G_LITTLE_ENDIAN);
233
868
}
234
/**
235
 * fu_struct_elf_file_header64le_get_shstrndx: (skip):
236
 **/
237
guint16
238
fu_struct_elf_file_header64le_get_shstrndx(const FuStructElfFileHeader64le *st)
239
4.08M
{
240
4.08M
    g_return_val_if_fail(st != NULL, 0x0);
241
4.08M
    return fu_memread_uint16(st->data + 62, G_LITTLE_ENDIAN);
242
4.08M
}
243
244
/* setters */
245
/**
246
 * fu_struct_elf_file_header64le_set_ei_magic: (skip):
247
 **/
248
static gboolean
249
fu_struct_elf_file_header64le_set_ei_magic(FuStructElfFileHeader64le *st, const gchar *value, GError **error)
250
241
{
251
241
    gsize len;
252
241
    g_return_val_if_fail(st != NULL, FALSE);
253
241
    g_return_val_if_fail(error == NULL || *error == NULL, FALSE);
254
241
    if (value == NULL) {
255
0
        memset(st->data + 0, 0x0, 4);
256
0
        return TRUE;
257
0
    }
258
241
    len = strlen(value);
259
241
    if (len > 4) {
260
0
        g_set_error(error,
261
0
                    FWUPD_ERROR,
262
0
                    FWUPD_ERROR_INVALID_DATA,
263
0
                    "string '%s' (0x%x bytes) does not fit in FuStructElfFileHeader64le.ei_magic (0x%x bytes)",
264
0
                    value, (guint) len, (guint) 4);
265
0
        return FALSE;
266
0
    }
267
241
    return fu_memcpy_safe(st->data, st->len, 0, (const guint8 *)value, len, 0x0, len, error);
268
241
}
269
/**
270
 * fu_struct_elf_file_header64le_set_ei_class: (skip):
271
 **/
272
static void
273
fu_struct_elf_file_header64le_set_ei_class(FuStructElfFileHeader64le *st, guint8 value)
274
241
{
275
241
    g_return_if_fail(st != NULL);
276
241
    st->data[4] = value;
277
241
}
278
/**
279
 * fu_struct_elf_file_header64le_set_ei_data: (skip):
280
 **/
281
static void
282
fu_struct_elf_file_header64le_set_ei_data(FuStructElfFileHeader64le *st, guint8 value)
283
241
{
284
241
    g_return_if_fail(st != NULL);
285
241
    st->data[5] = value;
286
241
}
287
/**
288
 * fu_struct_elf_file_header64le_set_ei_version: (skip):
289
 **/
290
static void
291
fu_struct_elf_file_header64le_set_ei_version(FuStructElfFileHeader64le *st, guint8 value)
292
241
{
293
241
    g_return_if_fail(st != NULL);
294
241
    st->data[6] = value;
295
241
}
296
/**
297
 * fu_struct_elf_file_header64le_set_ei_osabi: (skip):
298
 **/
299
void
300
fu_struct_elf_file_header64le_set_ei_osabi(FuStructElfFileHeader64le *st, guint8 value)
301
241
{
302
241
    g_return_if_fail(st != NULL);
303
241
    st->data[7] = value;
304
241
}
305
/**
306
 * fu_struct_elf_file_header64le_set_ei_abiversion: (skip):
307
 **/
308
void
309
fu_struct_elf_file_header64le_set_ei_abiversion(FuStructElfFileHeader64le *st, guint8 value)
310
0
{
311
0
    g_return_if_fail(st != NULL);
312
0
    st->data[8] = value;
313
0
}
314
/**
315
 * fu_struct_elf_file_header64le_set_type: (skip):
316
 **/
317
void
318
fu_struct_elf_file_header64le_set_type(FuStructElfFileHeader64le *st, FuElfFileHeaderType value)
319
0
{
320
0
    g_return_if_fail(st != NULL);
321
0
    fu_memwrite_uint16(st->data + 16, value, G_LITTLE_ENDIAN);
322
0
}
323
/**
324
 * fu_struct_elf_file_header64le_set_machine: (skip):
325
 **/
326
void
327
fu_struct_elf_file_header64le_set_machine(FuStructElfFileHeader64le *st, guint16 value)
328
0
{
329
0
    g_return_if_fail(st != NULL);
330
0
    fu_memwrite_uint16(st->data + 18, value, G_LITTLE_ENDIAN);
331
0
}
332
/**
333
 * fu_struct_elf_file_header64le_set_version: (skip):
334
 **/
335
static void
336
fu_struct_elf_file_header64le_set_version(FuStructElfFileHeader64le *st, guint32 value)
337
241
{
338
241
    g_return_if_fail(st != NULL);
339
241
    fu_memwrite_uint32(st->data + 20, value, G_LITTLE_ENDIAN);
340
241
}
341
/**
342
 * fu_struct_elf_file_header64le_set_entry: (skip):
343
 **/
344
void
345
fu_struct_elf_file_header64le_set_entry(FuStructElfFileHeader64le *st, guint64 value)
346
124
{
347
124
    g_return_if_fail(st != NULL);
348
124
    fu_memwrite_uint64(st->data + 24, value, G_LITTLE_ENDIAN);
349
124
}
350
/**
351
 * fu_struct_elf_file_header64le_set_phoff: (skip):
352
 **/
353
void
354
fu_struct_elf_file_header64le_set_phoff(FuStructElfFileHeader64le *st, guint64 value)
355
241
{
356
241
    g_return_if_fail(st != NULL);
357
241
    fu_memwrite_uint64(st->data + 32, value, G_LITTLE_ENDIAN);
358
241
}
359
/**
360
 * fu_struct_elf_file_header64le_set_shoff: (skip):
361
 **/
362
void
363
fu_struct_elf_file_header64le_set_shoff(FuStructElfFileHeader64le *st, guint64 value)
364
124
{
365
124
    g_return_if_fail(st != NULL);
366
124
    fu_memwrite_uint64(st->data + 40, value, G_LITTLE_ENDIAN);
367
124
}
368
/**
369
 * fu_struct_elf_file_header64le_set_flags: (skip):
370
 **/
371
void
372
fu_struct_elf_file_header64le_set_flags(FuStructElfFileHeader64le *st, guint32 value)
373
0
{
374
0
    g_return_if_fail(st != NULL);
375
0
    fu_memwrite_uint32(st->data + 48, value, G_LITTLE_ENDIAN);
376
0
}
377
/**
378
 * fu_struct_elf_file_header64le_set_ehsize: (skip):
379
 **/
380
void
381
fu_struct_elf_file_header64le_set_ehsize(FuStructElfFileHeader64le *st, guint16 value)
382
241
{
383
241
    g_return_if_fail(st != NULL);
384
241
    fu_memwrite_uint16(st->data + 52, value, G_LITTLE_ENDIAN);
385
241
}
386
/**
387
 * fu_struct_elf_file_header64le_set_phentsize: (skip):
388
 **/
389
void
390
fu_struct_elf_file_header64le_set_phentsize(FuStructElfFileHeader64le *st, guint16 value)
391
124
{
392
124
    g_return_if_fail(st != NULL);
393
124
    fu_memwrite_uint16(st->data + 54, value, G_LITTLE_ENDIAN);
394
124
}
395
/**
396
 * fu_struct_elf_file_header64le_set_phnum: (skip):
397
 **/
398
void
399
fu_struct_elf_file_header64le_set_phnum(FuStructElfFileHeader64le *st, guint16 value)
400
124
{
401
124
    g_return_if_fail(st != NULL);
402
124
    fu_memwrite_uint16(st->data + 56, value, G_LITTLE_ENDIAN);
403
124
}
404
/**
405
 * fu_struct_elf_file_header64le_set_shentsize: (skip):
406
 **/
407
void
408
fu_struct_elf_file_header64le_set_shentsize(FuStructElfFileHeader64le *st, guint16 value)
409
124
{
410
124
    g_return_if_fail(st != NULL);
411
124
    fu_memwrite_uint16(st->data + 58, value, G_LITTLE_ENDIAN);
412
124
}
413
/**
414
 * fu_struct_elf_file_header64le_set_shnum: (skip):
415
 **/
416
void
417
fu_struct_elf_file_header64le_set_shnum(FuStructElfFileHeader64le *st, guint16 value)
418
124
{
419
124
    g_return_if_fail(st != NULL);
420
124
    fu_memwrite_uint16(st->data + 60, value, G_LITTLE_ENDIAN);
421
124
}
422
/**
423
 * fu_struct_elf_file_header64le_set_shstrndx: (skip):
424
 **/
425
void
426
fu_struct_elf_file_header64le_set_shstrndx(FuStructElfFileHeader64le *st, guint16 value)
427
124
{
428
124
    g_return_if_fail(st != NULL);
429
124
    fu_memwrite_uint16(st->data + 62, value, G_LITTLE_ENDIAN);
430
124
}
431
/**
432
 * fu_struct_elf_file_header64le_new: (skip):
433
 **/
434
FuStructElfFileHeader64le *
435
fu_struct_elf_file_header64le_new(void)
436
241
{
437
241
    FuStructElfFileHeader64le *st = g_byte_array_sized_new(64);
438
241
    fu_byte_array_set_size(st, 64, 0x0);
439
241
    fu_struct_elf_file_header64le_set_ei_magic(st, "\x7F\x45\x4C\x46", NULL);
440
241
    fu_struct_elf_file_header64le_set_ei_class(st, 0x2);
441
241
    fu_struct_elf_file_header64le_set_ei_data(st, 0x1);
442
241
    fu_struct_elf_file_header64le_set_ei_version(st, 0x1);
443
241
    fu_struct_elf_file_header64le_set_ei_osabi(st, 0x3);
444
241
    fu_struct_elf_file_header64le_set_version(st, 0x1);
445
241
    fu_struct_elf_file_header64le_set_phoff(st, 64);
446
241
    fu_struct_elf_file_header64le_set_ehsize(st, 64);
447
241
    return st;
448
241
}
449
/**
450
 * fu_struct_elf_file_header64le_to_string: (skip):
451
 **/
452
static gchar *
453
fu_struct_elf_file_header64le_to_string(const FuStructElfFileHeader64le *st)
454
0
{
455
0
    g_autoptr(GString) str = g_string_new("FuStructElfFileHeader64le:\n");
456
0
    g_return_val_if_fail(st != NULL, NULL);
457
0
    g_string_append_printf(str, "  ei_osabi: 0x%x\n",
458
0
                           (guint) fu_struct_elf_file_header64le_get_ei_osabi(st));
459
0
    g_string_append_printf(str, "  ei_abiversion: 0x%x\n",
460
0
                           (guint) fu_struct_elf_file_header64le_get_ei_abiversion(st));
461
0
    {
462
0
        const gchar *tmp = fu_elf_file_header_type_to_string(fu_struct_elf_file_header64le_get_type(st));
463
0
        if (tmp != NULL) {
464
0
            g_string_append_printf(str, "  type: 0x%x [%s]\n", (guint) fu_struct_elf_file_header64le_get_type(st), tmp);
465
0
        } else {
466
0
            g_string_append_printf(str, "  type: 0x%x\n", (guint) fu_struct_elf_file_header64le_get_type(st));
467
0
        }
468
0
    }
469
0
    g_string_append_printf(str, "  machine: 0x%x\n",
470
0
                           (guint) fu_struct_elf_file_header64le_get_machine(st));
471
0
    g_string_append_printf(str, "  entry: 0x%x\n",
472
0
                           (guint) fu_struct_elf_file_header64le_get_entry(st));
473
0
    g_string_append_printf(str, "  phoff: 0x%x\n",
474
0
                           (guint) fu_struct_elf_file_header64le_get_phoff(st));
475
0
    g_string_append_printf(str, "  shoff: 0x%x\n",
476
0
                           (guint) fu_struct_elf_file_header64le_get_shoff(st));
477
0
    g_string_append_printf(str, "  flags: 0x%x\n",
478
0
                           (guint) fu_struct_elf_file_header64le_get_flags(st));
479
0
    g_string_append_printf(str, "  ehsize: 0x%x\n",
480
0
                           (guint) fu_struct_elf_file_header64le_get_ehsize(st));
481
0
    g_string_append_printf(str, "  phentsize: 0x%x\n",
482
0
                           (guint) fu_struct_elf_file_header64le_get_phentsize(st));
483
0
    g_string_append_printf(str, "  phnum: 0x%x\n",
484
0
                           (guint) fu_struct_elf_file_header64le_get_phnum(st));
485
0
    g_string_append_printf(str, "  shentsize: 0x%x\n",
486
0
                           (guint) fu_struct_elf_file_header64le_get_shentsize(st));
487
0
    g_string_append_printf(str, "  shnum: 0x%x\n",
488
0
                           (guint) fu_struct_elf_file_header64le_get_shnum(st));
489
0
    g_string_append_printf(str, "  shstrndx: 0x%x\n",
490
0
                           (guint) fu_struct_elf_file_header64le_get_shstrndx(st));
491
0
    if (str->len > 0)
492
0
        g_string_set_size(str, str->len - 1);
493
0
    return g_string_free(g_steal_pointer(&str), FALSE);
494
0
}
495
static gboolean
496
fu_struct_elf_file_header64le_validate_internal(FuStructElfFileHeader64le *st, GError **error)
497
3.70M
{
498
3.70M
    g_return_val_if_fail(st != NULL, FALSE);
499
3.70M
    if (strncmp((const gchar *) (st->data + 0), "\x7F\x45\x4C\x46", 4) != 0) {
500
3.70M
        g_autofree gchar *str = fu_struct_elf_file_header64le_get_ei_magic(st);
501
3.70M
        g_set_error(error,
502
3.70M
                    FWUPD_ERROR,
503
3.70M
                    FWUPD_ERROR_INVALID_DATA,
504
3.70M
                    "constant FuStructElfFileHeader64le.ei_magic was not valid, "
505
3.70M
                    "expected '\x7F\x45\x4C\x46' and got '%s'",
506
3.70M
                    str);
507
3.70M
        return FALSE;
508
3.70M
    }
509
4.25k
    if (fu_struct_elf_file_header64le_get_ei_class(st) != 0x2) {
510
446
        g_set_error_literal(error,
511
446
                            FWUPD_ERROR,
512
446
                            FWUPD_ERROR_INVALID_DATA,
513
446
                            "constant FuStructElfFileHeader64le.ei_class was not valid");
514
446
        return FALSE;
515
446
    }
516
3.80k
    if (fu_struct_elf_file_header64le_get_ei_data(st) != 0x1) {
517
207
        g_set_error_literal(error,
518
207
                            FWUPD_ERROR,
519
207
                            FWUPD_ERROR_INVALID_DATA,
520
207
                            "constant FuStructElfFileHeader64le.ei_data was not valid");
521
207
        return FALSE;
522
207
    }
523
3.59k
    if (fu_struct_elf_file_header64le_get_ei_version(st) != 0x1) {
524
205
        g_set_error_literal(error,
525
205
                            FWUPD_ERROR,
526
205
                            FWUPD_ERROR_INVALID_DATA,
527
205
                            "constant FuStructElfFileHeader64le.ei_version was not valid");
528
205
        return FALSE;
529
205
    }
530
3.39k
    if (fu_struct_elf_file_header64le_get_version(st) != 0x1) {
531
1.35k
        g_set_error(error,
532
1.35k
                    FWUPD_ERROR,
533
1.35k
                    FWUPD_ERROR_INVALID_DATA,
534
1.35k
                    "constant FuStructElfFileHeader64le.version was not valid, "
535
1.35k
                    "expected 0x%x and got 0x%x",
536
1.35k
                    (guint) 0x1,
537
1.35k
                    (guint) fu_struct_elf_file_header64le_get_version(st));
538
1.35k
        return FALSE;
539
1.35k
    }
540
2.03k
    return TRUE;
541
3.39k
}
542
/**
543
 * fu_struct_elf_file_header64le_validate_stream: (skip):
544
 **/
545
gboolean
546
fu_struct_elf_file_header64le_validate_stream(GInputStream *stream, gsize offset, GError **error)
547
3.71M
{
548
3.71M
    g_autoptr(GByteArray) st = NULL;
549
3.71M
    g_return_val_if_fail(G_IS_INPUT_STREAM(stream), FALSE);
550
3.71M
    g_return_val_if_fail(error == NULL || *error == NULL, FALSE);
551
3.71M
    st = fu_input_stream_read_byte_array(stream, offset, 64, NULL, error);
552
3.71M
    if (st == NULL) {
553
0
        g_prefix_error(error, "FuStructElfFileHeader64le failed read of 0x%x: ", (guint) 64);
554
0
        return FALSE;
555
0
    }
556
3.71M
    if (st->len != 64) {
557
12.2k
        g_set_error(error,
558
12.2k
                    FWUPD_ERROR,
559
12.2k
                    FWUPD_ERROR_INVALID_DATA,
560
12.2k
                    "FuStructElfFileHeader64le requested 0x%x and got 0x%x",
561
12.2k
                    (guint) 64,
562
12.2k
                    (guint) st->len);
563
12.2k
        return FALSE;
564
12.2k
    }
565
3.70M
    return fu_struct_elf_file_header64le_validate_internal(st, error);
566
3.71M
}
567
static gboolean
568
fu_struct_elf_file_header64le_parse_internal(FuStructElfFileHeader64le *st, GError **error)
569
1.01k
{
570
1.01k
    if (g_getenv("FWUPD_VERBOSE") != NULL) {
571
0
        g_autofree gchar *str = fu_struct_elf_file_header64le_to_string(st);
572
0
        g_debug("%s", str);
573
0
    }
574
1.01k
    if (!fu_struct_elf_file_header64le_validate_internal(st, error))
575
0
        return FALSE;
576
1.01k
    return TRUE;
577
1.01k
}
578
/**
579
 * fu_struct_elf_file_header64le_parse_stream: (skip):
580
 **/
581
FuStructElfFileHeader64le *
582
fu_struct_elf_file_header64le_parse_stream(GInputStream *stream, gsize offset, GError **error)
583
1.01k
{
584
1.01k
    g_autoptr(GByteArray) st = NULL;
585
1.01k
    st = fu_input_stream_read_byte_array(stream, offset, 64, NULL, error);
586
1.01k
    if (st == NULL) {
587
0
        g_prefix_error(error, "FuStructElfFileHeader64le failed read of 0x%x: ", (guint) 64);
588
0
        return NULL;
589
0
    }
590
1.01k
    if (st->len != 64) {
591
0
        g_set_error(error,
592
0
                    FWUPD_ERROR,
593
0
                    FWUPD_ERROR_INVALID_DATA,
594
0
                    "FuStructElfFileHeader64le requested 0x%x and got 0x%x",
595
0
                    (guint) 64,
596
0
                    (guint) st->len);
597
0
        return NULL;
598
0
    }
599
1.01k
    if (!fu_struct_elf_file_header64le_parse_internal(st, error))
600
0
        return NULL;
601
1.01k
    return g_steal_pointer(&st);
602
1.01k
}
603
/* getters */
604
/**
605
 * fu_struct_elf_program_header64le_get_flags: (skip):
606
 **/
607
guint32
608
fu_struct_elf_program_header64le_get_flags(const FuStructElfProgramHeader64le *st)
609
0
{
610
0
    g_return_val_if_fail(st != NULL, 0x0);
611
0
    return fu_memread_uint32(st->data + 0, G_LITTLE_ENDIAN);
612
0
}
613
/**
614
 * fu_struct_elf_program_header64le_get_offset: (skip):
615
 **/
616
guint64
617
fu_struct_elf_program_header64le_get_offset(const FuStructElfProgramHeader64le *st)
618
0
{
619
0
    g_return_val_if_fail(st != NULL, 0x0);
620
0
    return fu_memread_uint64(st->data + 4, G_LITTLE_ENDIAN);
621
0
}
622
/**
623
 * fu_struct_elf_program_header64le_get_vaddr: (skip):
624
 **/
625
guint64
626
fu_struct_elf_program_header64le_get_vaddr(const FuStructElfProgramHeader64le *st)
627
0
{
628
0
    g_return_val_if_fail(st != NULL, 0x0);
629
0
    return fu_memread_uint64(st->data + 12, G_LITTLE_ENDIAN);
630
0
}
631
/**
632
 * fu_struct_elf_program_header64le_get_paddr: (skip):
633
 **/
634
guint64
635
fu_struct_elf_program_header64le_get_paddr(const FuStructElfProgramHeader64le *st)
636
0
{
637
0
    g_return_val_if_fail(st != NULL, 0x0);
638
0
    return fu_memread_uint64(st->data + 20, G_LITTLE_ENDIAN);
639
0
}
640
/**
641
 * fu_struct_elf_program_header64le_get_filesz: (skip):
642
 **/
643
guint64
644
fu_struct_elf_program_header64le_get_filesz(const FuStructElfProgramHeader64le *st)
645
0
{
646
0
    g_return_val_if_fail(st != NULL, 0x0);
647
0
    return fu_memread_uint64(st->data + 28, G_LITTLE_ENDIAN);
648
0
}
649
/**
650
 * fu_struct_elf_program_header64le_get_memsz: (skip):
651
 **/
652
guint64
653
fu_struct_elf_program_header64le_get_memsz(const FuStructElfProgramHeader64le *st)
654
0
{
655
0
    g_return_val_if_fail(st != NULL, 0x0);
656
0
    return fu_memread_uint64(st->data + 36, G_LITTLE_ENDIAN);
657
0
}
658
/**
659
 * fu_struct_elf_program_header64le_get_flags2: (skip):
660
 **/
661
guint32
662
fu_struct_elf_program_header64le_get_flags2(const FuStructElfProgramHeader64le *st)
663
0
{
664
0
    g_return_val_if_fail(st != NULL, 0x0);
665
0
    return fu_memread_uint32(st->data + 44, G_LITTLE_ENDIAN);
666
0
}
667
/**
668
 * fu_struct_elf_program_header64le_get_align: (skip):
669
 **/
670
guint64
671
fu_struct_elf_program_header64le_get_align(const FuStructElfProgramHeader64le *st)
672
0
{
673
0
    g_return_val_if_fail(st != NULL, 0x0);
674
0
    return fu_memread_uint64(st->data + 48, G_LITTLE_ENDIAN);
675
0
}
676
677
/* setters */
678
/**
679
 * fu_struct_elf_program_header64le_set_flags: (skip):
680
 **/
681
void
682
fu_struct_elf_program_header64le_set_flags(FuStructElfProgramHeader64le *st, guint32 value)
683
0
{
684
0
    g_return_if_fail(st != NULL);
685
0
    fu_memwrite_uint32(st->data + 0, value, G_LITTLE_ENDIAN);
686
0
}
687
/**
688
 * fu_struct_elf_program_header64le_set_offset: (skip):
689
 **/
690
void
691
fu_struct_elf_program_header64le_set_offset(FuStructElfProgramHeader64le *st, guint64 value)
692
0
{
693
0
    g_return_if_fail(st != NULL);
694
0
    fu_memwrite_uint64(st->data + 4, value, G_LITTLE_ENDIAN);
695
0
}
696
/**
697
 * fu_struct_elf_program_header64le_set_vaddr: (skip):
698
 **/
699
void
700
fu_struct_elf_program_header64le_set_vaddr(FuStructElfProgramHeader64le *st, guint64 value)
701
124
{
702
124
    g_return_if_fail(st != NULL);
703
124
    fu_memwrite_uint64(st->data + 12, value, G_LITTLE_ENDIAN);
704
124
}
705
/**
706
 * fu_struct_elf_program_header64le_set_paddr: (skip):
707
 **/
708
void
709
fu_struct_elf_program_header64le_set_paddr(FuStructElfProgramHeader64le *st, guint64 value)
710
124
{
711
124
    g_return_if_fail(st != NULL);
712
124
    fu_memwrite_uint64(st->data + 20, value, G_LITTLE_ENDIAN);
713
124
}
714
/**
715
 * fu_struct_elf_program_header64le_set_filesz: (skip):
716
 **/
717
void
718
fu_struct_elf_program_header64le_set_filesz(FuStructElfProgramHeader64le *st, guint64 value)
719
124
{
720
124
    g_return_if_fail(st != NULL);
721
124
    fu_memwrite_uint64(st->data + 28, value, G_LITTLE_ENDIAN);
722
124
}
723
/**
724
 * fu_struct_elf_program_header64le_set_memsz: (skip):
725
 **/
726
void
727
fu_struct_elf_program_header64le_set_memsz(FuStructElfProgramHeader64le *st, guint64 value)
728
124
{
729
124
    g_return_if_fail(st != NULL);
730
124
    fu_memwrite_uint64(st->data + 36, value, G_LITTLE_ENDIAN);
731
124
}
732
/**
733
 * fu_struct_elf_program_header64le_set_flags2: (skip):
734
 **/
735
void
736
fu_struct_elf_program_header64le_set_flags2(FuStructElfProgramHeader64le *st, guint32 value)
737
0
{
738
0
    g_return_if_fail(st != NULL);
739
0
    fu_memwrite_uint32(st->data + 44, value, G_LITTLE_ENDIAN);
740
0
}
741
/**
742
 * fu_struct_elf_program_header64le_set_align: (skip):
743
 **/
744
void
745
fu_struct_elf_program_header64le_set_align(FuStructElfProgramHeader64le *st, guint64 value)
746
0
{
747
0
    g_return_if_fail(st != NULL);
748
0
    fu_memwrite_uint64(st->data + 48, value, G_LITTLE_ENDIAN);
749
0
}
750
/**
751
 * fu_struct_elf_program_header64le_new: (skip):
752
 **/
753
FuStructElfProgramHeader64le *
754
fu_struct_elf_program_header64le_new(void)
755
241
{
756
241
    FuStructElfProgramHeader64le *st = g_byte_array_sized_new(56);
757
241
    fu_byte_array_set_size(st, 56, 0x0);
758
241
    return st;
759
241
}
760
/**
761
 * fu_struct_elf_program_header64le_to_string: (skip):
762
 **/
763
static gchar *
764
fu_struct_elf_program_header64le_to_string(const FuStructElfProgramHeader64le *st)
765
0
{
766
0
    g_autoptr(GString) str = g_string_new("FuStructElfProgramHeader64le:\n");
767
0
    g_return_val_if_fail(st != NULL, NULL);
768
0
    g_string_append_printf(str, "  flags: 0x%x\n",
769
0
                           (guint) fu_struct_elf_program_header64le_get_flags(st));
770
0
    g_string_append_printf(str, "  offset: 0x%x\n",
771
0
                           (guint) fu_struct_elf_program_header64le_get_offset(st));
772
0
    g_string_append_printf(str, "  vaddr: 0x%x\n",
773
0
                           (guint) fu_struct_elf_program_header64le_get_vaddr(st));
774
0
    g_string_append_printf(str, "  paddr: 0x%x\n",
775
0
                           (guint) fu_struct_elf_program_header64le_get_paddr(st));
776
0
    g_string_append_printf(str, "  filesz: 0x%x\n",
777
0
                           (guint) fu_struct_elf_program_header64le_get_filesz(st));
778
0
    g_string_append_printf(str, "  memsz: 0x%x\n",
779
0
                           (guint) fu_struct_elf_program_header64le_get_memsz(st));
780
0
    g_string_append_printf(str, "  flags2: 0x%x\n",
781
0
                           (guint) fu_struct_elf_program_header64le_get_flags2(st));
782
0
    g_string_append_printf(str, "  align: 0x%x\n",
783
0
                           (guint) fu_struct_elf_program_header64le_get_align(st));
784
0
    if (str->len > 0)
785
0
        g_string_set_size(str, str->len - 1);
786
0
    return g_string_free(g_steal_pointer(&str), FALSE);
787
0
}
788
static gboolean
789
fu_struct_elf_program_header64le_validate_internal(FuStructElfProgramHeader64le *st, GError **error)
790
3.10M
{
791
3.10M
    g_return_val_if_fail(st != NULL, FALSE);
792
3.10M
    return TRUE;
793
3.10M
}
794
static gboolean
795
fu_struct_elf_program_header64le_parse_internal(FuStructElfProgramHeader64le *st, GError **error)
796
3.10M
{
797
3.10M
    if (g_getenv("FWUPD_VERBOSE") != NULL) {
798
0
        g_autofree gchar *str = fu_struct_elf_program_header64le_to_string(st);
799
0
        g_debug("%s", str);
800
0
    }
801
3.10M
    if (!fu_struct_elf_program_header64le_validate_internal(st, error))
802
0
        return FALSE;
803
3.10M
    return TRUE;
804
3.10M
}
805
/**
806
 * fu_struct_elf_program_header64le_parse_stream: (skip):
807
 **/
808
FuStructElfProgramHeader64le *
809
fu_struct_elf_program_header64le_parse_stream(GInputStream *stream, gsize offset, GError **error)
810
3.10M
{
811
3.10M
    g_autoptr(GByteArray) st = NULL;
812
3.10M
    st = fu_input_stream_read_byte_array(stream, offset, 56, NULL, error);
813
3.10M
    if (st == NULL) {
814
131
        g_prefix_error(error, "FuStructElfProgramHeader64le failed read of 0x%x: ", (guint) 56);
815
131
        return NULL;
816
131
    }
817
3.10M
    if (st->len != 56) {
818
20
        g_set_error(error,
819
20
                    FWUPD_ERROR,
820
20
                    FWUPD_ERROR_INVALID_DATA,
821
20
                    "FuStructElfProgramHeader64le requested 0x%x and got 0x%x",
822
20
                    (guint) 56,
823
20
                    (guint) st->len);
824
20
        return NULL;
825
20
    }
826
3.10M
    if (!fu_struct_elf_program_header64le_parse_internal(st, error))
827
0
        return NULL;
828
3.10M
    return g_steal_pointer(&st);
829
3.10M
}
830
/* getters */
831
/**
832
 * fu_struct_elf_section_header64le_get_name: (skip):
833
 **/
834
guint32
835
fu_struct_elf_section_header64le_get_name(const FuStructElfSectionHeader64le *st)
836
3.78M
{
837
3.78M
    g_return_val_if_fail(st != NULL, 0x0);
838
3.78M
    return fu_memread_uint32(st->data + 0, G_LITTLE_ENDIAN);
839
3.78M
}
840
/**
841
 * fu_struct_elf_section_header64le_get_type: (skip):
842
 **/
843
FuElfSectionHeaderType
844
fu_struct_elf_section_header64le_get_type(const FuStructElfSectionHeader64le *st)
845
15.5M
{
846
15.5M
    g_return_val_if_fail(st != NULL, 0x0);
847
15.5M
    return fu_memread_uint32(st->data + 4, G_LITTLE_ENDIAN);
848
15.5M
}
849
/**
850
 * fu_struct_elf_section_header64le_get_flags: (skip):
851
 **/
852
guint64
853
fu_struct_elf_section_header64le_get_flags(const FuStructElfSectionHeader64le *st)
854
0
{
855
0
    g_return_val_if_fail(st != NULL, 0x0);
856
0
    return fu_memread_uint64(st->data + 8, G_LITTLE_ENDIAN);
857
0
}
858
/**
859
 * fu_struct_elf_section_header64le_get_addr: (skip):
860
 **/
861
guint64
862
fu_struct_elf_section_header64le_get_addr(const FuStructElfSectionHeader64le *st)
863
0
{
864
0
    g_return_val_if_fail(st != NULL, 0x0);
865
0
    return fu_memread_uint64(st->data + 16, G_LITTLE_ENDIAN);
866
0
}
867
/**
868
 * fu_struct_elf_section_header64le_get_offset: (skip):
869
 **/
870
guint64
871
fu_struct_elf_section_header64le_get_offset(const FuStructElfSectionHeader64le *st)
872
4.08M
{
873
4.08M
    g_return_val_if_fail(st != NULL, 0x0);
874
4.08M
    return fu_memread_uint64(st->data + 24, G_LITTLE_ENDIAN);
875
4.08M
}
876
/**
877
 * fu_struct_elf_section_header64le_get_size: (skip):
878
 **/
879
guint64
880
fu_struct_elf_section_header64le_get_size(const FuStructElfSectionHeader64le *st)
881
4.08M
{
882
4.08M
    g_return_val_if_fail(st != NULL, 0x0);
883
4.08M
    return fu_memread_uint64(st->data + 32, G_LITTLE_ENDIAN);
884
4.08M
}
885
/**
886
 * fu_struct_elf_section_header64le_get_link: (skip):
887
 **/
888
guint32
889
fu_struct_elf_section_header64le_get_link(const FuStructElfSectionHeader64le *st)
890
0
{
891
0
    g_return_val_if_fail(st != NULL, 0x0);
892
0
    return fu_memread_uint32(st->data + 40, G_LITTLE_ENDIAN);
893
0
}
894
/**
895
 * fu_struct_elf_section_header64le_get_info: (skip):
896
 **/
897
guint32
898
fu_struct_elf_section_header64le_get_info(const FuStructElfSectionHeader64le *st)
899
0
{
900
0
    g_return_val_if_fail(st != NULL, 0x0);
901
0
    return fu_memread_uint32(st->data + 44, G_LITTLE_ENDIAN);
902
0
}
903
/**
904
 * fu_struct_elf_section_header64le_get_addralign: (skip):
905
 **/
906
guint64
907
fu_struct_elf_section_header64le_get_addralign(const FuStructElfSectionHeader64le *st)
908
0
{
909
0
    g_return_val_if_fail(st != NULL, 0x0);
910
0
    return fu_memread_uint64(st->data + 48, G_LITTLE_ENDIAN);
911
0
}
912
/**
913
 * fu_struct_elf_section_header64le_get_entsize: (skip):
914
 **/
915
guint64
916
fu_struct_elf_section_header64le_get_entsize(const FuStructElfSectionHeader64le *st)
917
0
{
918
0
    g_return_val_if_fail(st != NULL, 0x0);
919
0
    return fu_memread_uint64(st->data + 56, G_LITTLE_ENDIAN);
920
0
}
921
922
/* setters */
923
/**
924
 * fu_struct_elf_section_header64le_set_name: (skip):
925
 **/
926
void
927
fu_struct_elf_section_header64le_set_name(FuStructElfSectionHeader64le *st, guint32 value)
928
124
{
929
124
    g_return_if_fail(st != NULL);
930
124
    fu_memwrite_uint32(st->data + 0, value, G_LITTLE_ENDIAN);
931
124
}
932
/**
933
 * fu_struct_elf_section_header64le_set_type: (skip):
934
 **/
935
void
936
fu_struct_elf_section_header64le_set_type(FuStructElfSectionHeader64le *st, FuElfSectionHeaderType value)
937
124
{
938
124
    g_return_if_fail(st != NULL);
939
124
    fu_memwrite_uint32(st->data + 4, value, G_LITTLE_ENDIAN);
940
124
}
941
/**
942
 * fu_struct_elf_section_header64le_set_flags: (skip):
943
 **/
944
void
945
fu_struct_elf_section_header64le_set_flags(FuStructElfSectionHeader64le *st, guint64 value)
946
0
{
947
0
    g_return_if_fail(st != NULL);
948
0
    fu_memwrite_uint64(st->data + 8, value, G_LITTLE_ENDIAN);
949
0
}
950
/**
951
 * fu_struct_elf_section_header64le_set_addr: (skip):
952
 **/
953
void
954
fu_struct_elf_section_header64le_set_addr(FuStructElfSectionHeader64le *st, guint64 value)
955
0
{
956
0
    g_return_if_fail(st != NULL);
957
0
    fu_memwrite_uint64(st->data + 16, value, G_LITTLE_ENDIAN);
958
0
}
959
/**
960
 * fu_struct_elf_section_header64le_set_offset: (skip):
961
 **/
962
void
963
fu_struct_elf_section_header64le_set_offset(FuStructElfSectionHeader64le *st, guint64 value)
964
124
{
965
124
    g_return_if_fail(st != NULL);
966
124
    fu_memwrite_uint64(st->data + 24, value, G_LITTLE_ENDIAN);
967
124
}
968
/**
969
 * fu_struct_elf_section_header64le_set_size: (skip):
970
 **/
971
void
972
fu_struct_elf_section_header64le_set_size(FuStructElfSectionHeader64le *st, guint64 value)
973
124
{
974
124
    g_return_if_fail(st != NULL);
975
124
    fu_memwrite_uint64(st->data + 32, value, G_LITTLE_ENDIAN);
976
124
}
977
/**
978
 * fu_struct_elf_section_header64le_set_link: (skip):
979
 **/
980
void
981
fu_struct_elf_section_header64le_set_link(FuStructElfSectionHeader64le *st, guint32 value)
982
0
{
983
0
    g_return_if_fail(st != NULL);
984
0
    fu_memwrite_uint32(st->data + 40, value, G_LITTLE_ENDIAN);
985
0
}
986
/**
987
 * fu_struct_elf_section_header64le_set_info: (skip):
988
 **/
989
void
990
fu_struct_elf_section_header64le_set_info(FuStructElfSectionHeader64le *st, guint32 value)
991
0
{
992
0
    g_return_if_fail(st != NULL);
993
0
    fu_memwrite_uint32(st->data + 44, value, G_LITTLE_ENDIAN);
994
0
}
995
/**
996
 * fu_struct_elf_section_header64le_set_addralign: (skip):
997
 **/
998
void
999
fu_struct_elf_section_header64le_set_addralign(FuStructElfSectionHeader64le *st, guint64 value)
1000
0
{
1001
0
    g_return_if_fail(st != NULL);
1002
0
    fu_memwrite_uint64(st->data + 48, value, G_LITTLE_ENDIAN);
1003
0
}
1004
/**
1005
 * fu_struct_elf_section_header64le_set_entsize: (skip):
1006
 **/
1007
void
1008
fu_struct_elf_section_header64le_set_entsize(FuStructElfSectionHeader64le *st, guint64 value)
1009
0
{
1010
0
    g_return_if_fail(st != NULL);
1011
0
    fu_memwrite_uint64(st->data + 56, value, G_LITTLE_ENDIAN);
1012
0
}
1013
/**
1014
 * fu_struct_elf_section_header64le_new: (skip):
1015
 **/
1016
FuStructElfSectionHeader64le *
1017
fu_struct_elf_section_header64le_new(void)
1018
124
{
1019
124
    FuStructElfSectionHeader64le *st = g_byte_array_sized_new(64);
1020
124
    fu_byte_array_set_size(st, 64, 0x0);
1021
124
    return st;
1022
124
}
1023
/**
1024
 * fu_struct_elf_section_header64le_to_string: (skip):
1025
 **/
1026
static gchar *
1027
fu_struct_elf_section_header64le_to_string(const FuStructElfSectionHeader64le *st)
1028
0
{
1029
0
    g_autoptr(GString) str = g_string_new("FuStructElfSectionHeader64le:\n");
1030
0
    g_return_val_if_fail(st != NULL, NULL);
1031
0
    g_string_append_printf(str, "  name: 0x%x\n",
1032
0
                           (guint) fu_struct_elf_section_header64le_get_name(st));
1033
0
    {
1034
0
        const gchar *tmp = fu_elf_section_header_type_to_string(fu_struct_elf_section_header64le_get_type(st));
1035
0
        if (tmp != NULL) {
1036
0
            g_string_append_printf(str, "  type: 0x%x [%s]\n", (guint) fu_struct_elf_section_header64le_get_type(st), tmp);
1037
0
        } else {
1038
0
            g_string_append_printf(str, "  type: 0x%x\n", (guint) fu_struct_elf_section_header64le_get_type(st));
1039
0
        }
1040
0
    }
1041
0
    g_string_append_printf(str, "  flags: 0x%x\n",
1042
0
                           (guint) fu_struct_elf_section_header64le_get_flags(st));
1043
0
    g_string_append_printf(str, "  addr: 0x%x\n",
1044
0
                           (guint) fu_struct_elf_section_header64le_get_addr(st));
1045
0
    g_string_append_printf(str, "  offset: 0x%x\n",
1046
0
                           (guint) fu_struct_elf_section_header64le_get_offset(st));
1047
0
    g_string_append_printf(str, "  size: 0x%x\n",
1048
0
                           (guint) fu_struct_elf_section_header64le_get_size(st));
1049
0
    g_string_append_printf(str, "  link: 0x%x\n",
1050
0
                           (guint) fu_struct_elf_section_header64le_get_link(st));
1051
0
    g_string_append_printf(str, "  info: 0x%x\n",
1052
0
                           (guint) fu_struct_elf_section_header64le_get_info(st));
1053
0
    g_string_append_printf(str, "  addralign: 0x%x\n",
1054
0
                           (guint) fu_struct_elf_section_header64le_get_addralign(st));
1055
0
    g_string_append_printf(str, "  entsize: 0x%x\n",
1056
0
                           (guint) fu_struct_elf_section_header64le_get_entsize(st));
1057
0
    if (str->len > 0)
1058
0
        g_string_set_size(str, str->len - 1);
1059
0
    return g_string_free(g_steal_pointer(&str), FALSE);
1060
0
}
1061
static gboolean
1062
fu_struct_elf_section_header64le_validate_internal(FuStructElfSectionHeader64le *st, GError **error)
1063
12.2M
{
1064
12.2M
    g_return_val_if_fail(st != NULL, FALSE);
1065
12.2M
    return TRUE;
1066
12.2M
}
1067
static gboolean
1068
fu_struct_elf_section_header64le_parse_internal(FuStructElfSectionHeader64le *st, GError **error)
1069
12.2M
{
1070
12.2M
    if (g_getenv("FWUPD_VERBOSE") != NULL) {
1071
0
        g_autofree gchar *str = fu_struct_elf_section_header64le_to_string(st);
1072
0
        g_debug("%s", str);
1073
0
    }
1074
12.2M
    if (!fu_struct_elf_section_header64le_validate_internal(st, error))
1075
0
        return FALSE;
1076
12.2M
    return TRUE;
1077
12.2M
}
1078
/**
1079
 * fu_struct_elf_section_header64le_parse_stream: (skip):
1080
 **/
1081
FuStructElfSectionHeader64le *
1082
fu_struct_elf_section_header64le_parse_stream(GInputStream *stream, gsize offset, GError **error)
1083
12.2M
{
1084
12.2M
    g_autoptr(GByteArray) st = NULL;
1085
12.2M
    st = fu_input_stream_read_byte_array(stream, offset, 64, NULL, error);
1086
12.2M
    if (st == NULL) {
1087
67
        g_prefix_error(error, "FuStructElfSectionHeader64le failed read of 0x%x: ", (guint) 64);
1088
67
        return NULL;
1089
67
    }
1090
12.2M
    if (st->len != 64) {
1091
20
        g_set_error(error,
1092
20
                    FWUPD_ERROR,
1093
20
                    FWUPD_ERROR_INVALID_DATA,
1094
20
                    "FuStructElfSectionHeader64le requested 0x%x and got 0x%x",
1095
20
                    (guint) 64,
1096
20
                    (guint) st->len);
1097
20
        return NULL;
1098
20
    }
1099
12.2M
    if (!fu_struct_elf_section_header64le_parse_internal(st, error))
1100
0
        return NULL;
1101
12.2M
    return g_steal_pointer(&st);
1102
12.2M
}