Coverage Report

Created: 2025-12-14 06:56

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