Coverage Report

Created: 2026-06-15 06:54

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