Coverage Report

Created: 2025-11-11 06:44

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