Coverage Report

Created: 2026-02-26 06:27

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
92
{
57
92
    if (val == FU_ELF_SECTION_HEADER_TYPE_NULL)
58
5
        return "null";
59
87
    if (val == FU_ELF_SECTION_HEADER_TYPE_PROGBITS)
60
1
        return "progbits";
61
86
    if (val == FU_ELF_SECTION_HEADER_TYPE_SYMTAB)
62
1
        return "symtab";
63
85
    if (val == FU_ELF_SECTION_HEADER_TYPE_STRTAB)
64
0
        return "strtab";
65
85
    if (val == FU_ELF_SECTION_HEADER_TYPE_RELA)
66
1
        return "rela";
67
84
    if (val == FU_ELF_SECTION_HEADER_TYPE_HASH)
68
1
        return "hash";
69
83
    if (val == FU_ELF_SECTION_HEADER_TYPE_DYNAMIC)
70
1
        return "dynamic";
71
82
    if (val == FU_ELF_SECTION_HEADER_TYPE_NOTE)
72
1
        return "note";
73
81
    if (val == FU_ELF_SECTION_HEADER_TYPE_NOBITS)
74
1
        return "nobits";
75
80
    if (val == FU_ELF_SECTION_HEADER_TYPE_REL)
76
1
        return "rel";
77
79
    if (val == FU_ELF_SECTION_HEADER_TYPE_SHLIB)
78
1
        return "shlib";
79
78
    if (val == FU_ELF_SECTION_HEADER_TYPE_DYNSYM)
80
1
        return "dynsym";
81
77
    if (val == FU_ELF_SECTION_HEADER_TYPE_INIT_ARRAY)
82
1
        return "init-array";
83
76
    if (val == FU_ELF_SECTION_HEADER_TYPE_FINI_ARRAY)
84
1
        return "fini-array";
85
75
    if (val == FU_ELF_SECTION_HEADER_TYPE_PREINIT_ARRAY)
86
1
        return "preinit-array";
87
74
    if (val == FU_ELF_SECTION_HEADER_TYPE_GROUP)
88
1
        return "group";
89
73
    if (val == FU_ELF_SECTION_HEADER_TYPE_SYMTAB_SHNDX)
90
1
        return "symtab-shndx";
91
72
    if (val == FU_ELF_SECTION_HEADER_TYPE_NUM)
92
1
        return "num";
93
71
    return NULL;
94
72
}
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.12k
{
111
2.12k
    g_return_if_fail(st != NULL);
112
2.12k
    if (st->refcount == 0) {
113
0
        g_critical("FuStructElfFileHeader64le refcount already zero");
114
0
        return;
115
0
    }
116
2.12k
    if (--st->refcount > 0)
117
0
        return;
118
2.12k
    if (st->buf != NULL)
119
2.12k
        g_byte_array_unref(st->buf);
120
2.12k
    g_free(st);
121
2.12k
}
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.12k
{
128
2.12k
    FuStructElfFileHeader64le *st = g_new0(FuStructElfFileHeader64le, 1);
129
2.12k
    st->refcount = 1;
130
2.12k
    return st;
131
2.12k
}
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
1.81k
{
149
1.81k
    g_return_val_if_fail(st != NULL, 0x0);
150
1.81k
    return st->buf->data[4];
151
1.81k
}
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
1.81k
{
158
1.81k
    g_return_val_if_fail(st != NULL, 0x0);
159
1.81k
    return st->buf->data[5];
160
1.81k
}
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
1.80k
{
167
1.80k
    g_return_val_if_fail(st != NULL, 0x0);
168
1.80k
    return st->buf->data[6];
169
1.80k
}
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
1.84k
{
212
1.84k
    g_return_val_if_fail(st != NULL, 0x0);
213
1.84k
    return fu_memread_uint32(st->buf->data + 20, G_LITTLE_ENDIAN);
214
1.84k
}
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
883
{
230
883
    g_return_val_if_fail(st != NULL, 0x0);
231
883
    return fu_memread_uint64(st->buf->data + 32, G_LITTLE_ENDIAN);
232
883
}
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
784
{
239
784
    g_return_val_if_fail(st != NULL, 0x0);
240
784
    return fu_memread_uint64(st->buf->data + 40, G_LITTLE_ENDIAN);
241
784
}
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
883
{
266
883
    g_return_val_if_fail(st != NULL, 0x0);
267
883
    return fu_memread_uint16(st->buf->data + 54, G_LITTLE_ENDIAN);
268
883
}
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
883
{
275
883
    g_return_val_if_fail(st != NULL, 0x0);
276
883
    return fu_memread_uint16(st->buf->data + 56, G_LITTLE_ENDIAN);
277
883
}
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
12.0M
{
284
12.0M
    g_return_val_if_fail(st != NULL, 0x0);
285
12.0M
    return fu_memread_uint16(st->buf->data + 58, G_LITTLE_ENDIAN);
286
12.0M
}
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
784
{
293
784
    g_return_val_if_fail(st != NULL, 0x0);
294
784
    return fu_memread_uint16(st->buf->data + 60, G_LITTLE_ENDIAN);
295
784
}
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
6.28M
{
302
6.28M
    g_return_val_if_fail(st != NULL, 0x0);
303
6.28M
    return fu_memread_uint16(st->buf->data + 62, G_LITTLE_ENDIAN);
304
6.28M
}
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
245
{
313
245
    gsize len;
314
245
    g_return_val_if_fail(st != NULL, FALSE);
315
245
    g_return_val_if_fail(error == NULL || *error == NULL, FALSE);
316
245
    if (value == NULL) {
317
0
        memset(st->buf->data + 0, 0x0, 4);
318
0
        return TRUE;
319
0
    }
320
245
    len = strlen(value);
321
245
    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
245
    return fu_memcpy_safe(st->buf->data, st->buf->len, 0, (const guint8 *)value, len, 0x0, len, error);
330
245
}
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
245
{
337
245
    g_return_if_fail(st != NULL);
338
245
    st->buf->data[4] = value;
339
245
}
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
245
{
346
245
    g_return_if_fail(st != NULL);
347
245
    st->buf->data[5] = value;
348
245
}
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
245
{
355
245
    g_return_if_fail(st != NULL);
356
245
    st->buf->data[6] = value;
357
245
}
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
245
{
364
245
    g_return_if_fail(st != NULL);
365
245
    st->buf->data[7] = value;
366
245
}
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
245
{
400
245
    g_return_if_fail(st != NULL);
401
245
    fu_memwrite_uint32(st->buf->data + 20, value, G_LITTLE_ENDIAN);
402
245
}
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
168
{
409
168
    g_return_if_fail(st != NULL);
410
168
    fu_memwrite_uint64(st->buf->data + 24, value, G_LITTLE_ENDIAN);
411
168
}
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
245
{
418
245
    g_return_if_fail(st != NULL);
419
245
    fu_memwrite_uint64(st->buf->data + 32, value, G_LITTLE_ENDIAN);
420
245
}
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
168
{
427
168
    g_return_if_fail(st != NULL);
428
168
    fu_memwrite_uint64(st->buf->data + 40, value, G_LITTLE_ENDIAN);
429
168
}
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
245
{
445
245
    g_return_if_fail(st != NULL);
446
245
    fu_memwrite_uint16(st->buf->data + 52, value, G_LITTLE_ENDIAN);
447
245
}
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
168
{
454
168
    g_return_if_fail(st != NULL);
455
168
    fu_memwrite_uint16(st->buf->data + 54, value, G_LITTLE_ENDIAN);
456
168
}
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
168
{
463
168
    g_return_if_fail(st != NULL);
464
168
    fu_memwrite_uint16(st->buf->data + 56, value, G_LITTLE_ENDIAN);
465
168
}
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
168
{
472
168
    g_return_if_fail(st != NULL);
473
168
    fu_memwrite_uint16(st->buf->data + 58, value, G_LITTLE_ENDIAN);
474
168
}
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
168
{
481
168
    g_return_if_fail(st != NULL);
482
168
    fu_memwrite_uint16(st->buf->data + 60, value, G_LITTLE_ENDIAN);
483
168
}
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
168
{
490
168
    g_return_if_fail(st != NULL);
491
168
    fu_memwrite_uint16(st->buf->data + 62, value, G_LITTLE_ENDIAN);
492
168
}
493
/**
494
 * fu_struct_elf_file_header64le_new: (skip):
495
 **/
496
FuStructElfFileHeader64le *
497
fu_struct_elf_file_header64le_new(void)
498
245
{
499
245
    FuStructElfFileHeader64le *st = fu_struct_elf_file_header64le_new_internal();
500
245
    st->buf = g_byte_array_sized_new(64);
501
245
    fu_byte_array_set_size(st->buf, 64, 0x0);
502
245
    fu_struct_elf_file_header64le_set_ei_magic(st, "\x7F\x45\x4C\x46", NULL);
503
245
    fu_struct_elf_file_header64le_set_ei_class(st, 0x2);
504
245
    fu_struct_elf_file_header64le_set_ei_data(st, 0x1);
505
245
    fu_struct_elf_file_header64le_set_ei_version(st, 0x1);
506
245
    fu_struct_elf_file_header64le_set_ei_osabi(st, 0x3);
507
245
    fu_struct_elf_file_header64le_set_version(st, 0x1);
508
245
    fu_struct_elf_file_header64le_set_phoff(st, 64);
509
245
    fu_struct_elf_file_header64le_set_ehsize(st, 64);
510
245
    return st;
511
245
}
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
1.85k
{
574
1.85k
    g_return_val_if_fail(st != NULL, FALSE);
575
1.85k
    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
1.81k
    if (fu_struct_elf_file_header64le_get_ei_class(st) != 0x2) {
586
3
        g_set_error_literal(error,
587
3
                            FWUPD_ERROR,
588
3
                            FWUPD_ERROR_INVALID_DATA,
589
3
                            "constant FuStructElfFileHeader64le.ei_class was not valid");
590
3
        return FALSE;
591
3
    }
592
1.81k
    if (fu_struct_elf_file_header64le_get_ei_data(st) != 0x1) {
593
8
        g_set_error_literal(error,
594
8
                            FWUPD_ERROR,
595
8
                            FWUPD_ERROR_INVALID_DATA,
596
8
                            "constant FuStructElfFileHeader64le.ei_data was not valid");
597
8
        return FALSE;
598
8
    }
599
1.80k
    if (fu_struct_elf_file_header64le_get_ei_version(st) != 0x1) {
600
2
        g_set_error_literal(error,
601
2
                            FWUPD_ERROR,
602
2
                            FWUPD_ERROR_INVALID_DATA,
603
2
                            "constant FuStructElfFileHeader64le.ei_version was not valid");
604
2
        return FALSE;
605
2
    }
606
1.80k
    if (fu_struct_elf_file_header64le_get_version(st) != 0x1) {
607
39
        g_set_error(error,
608
39
                    FWUPD_ERROR,
609
39
                    FWUPD_ERROR_INVALID_DATA,
610
39
                    "constant FuStructElfFileHeader64le.version was not valid, "
611
39
                    "expected 0x%x and got 0x%x",
612
39
                    (guint) 0x1,
613
39
                    (guint) fu_struct_elf_file_header64le_get_version(st));
614
39
        return FALSE;
615
39
    }
616
1.76k
    return TRUE;
617
1.80k
}
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
993
{
624
993
    g_autoptr(FuStructElfFileHeader64le) st = fu_struct_elf_file_header64le_new_internal();
625
993
    g_return_val_if_fail(G_IS_INPUT_STREAM(stream), FALSE);
626
993
    g_return_val_if_fail(error == NULL || *error == NULL, FALSE);
627
993
    st->buf = fu_input_stream_read_byte_array(stream, offset, 64, NULL, error);
628
993
    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
993
    if (st->buf->len != 64) {
633
21
        g_set_error(error,
634
21
                    FWUPD_ERROR,
635
21
                    FWUPD_ERROR_INVALID_DATA,
636
21
                    "FuStructElfFileHeader64le requested 0x%x and got 0x%x",
637
21
                    (guint) 64,
638
21
                    (guint) st->buf->len);
639
21
        return FALSE;
640
21
    }
641
972
    return fu_struct_elf_file_header64le_validate_internal(st, error);
642
993
}
643
static gboolean
644
fu_struct_elf_file_header64le_parse_internal(FuStructElfFileHeader64le *st, GError **error)
645
883
{
646
883
    if (g_getenv("FWUPD_VERBOSE") != NULL) {
647
0
        g_autofree gchar *str = fu_struct_elf_file_header64le_to_string(st);
648
0
        g_debug("%s", str);
649
0
    }
650
883
    if (!fu_struct_elf_file_header64le_validate_internal(st, error))
651
0
        return FALSE;
652
883
    return TRUE;
653
883
}
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
883
{
660
883
    g_autoptr(FuStructElfFileHeader64le) st = fu_struct_elf_file_header64le_new_internal();
661
883
    st->buf = fu_input_stream_read_byte_array(stream, offset, 64, NULL, error);
662
883
    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
883
    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
883
    if (!fu_struct_elf_file_header64le_parse_internal(st, error))
676
0
        return NULL;
677
883
    return g_steal_pointer(&st);
678
883
}
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.09M
{
695
3.09M
    g_return_if_fail(st != NULL);
696
3.09M
    if (st->refcount == 0) {
697
0
        g_critical("FuStructElfProgramHeader64le refcount already zero");
698
0
        return;
699
0
    }
700
3.09M
    if (--st->refcount > 0)
701
0
        return;
702
3.09M
    if (st->buf != NULL)
703
3.09M
        g_byte_array_unref(st->buf);
704
3.09M
    g_free(st);
705
3.09M
}
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.09M
{
712
3.09M
    FuStructElfProgramHeader64le *st = g_new0(FuStructElfProgramHeader64le, 1);
713
3.09M
    st->refcount = 1;
714
3.09M
    return st;
715
3.09M
}
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
168
{
816
168
    g_return_if_fail(st != NULL);
817
168
    fu_memwrite_uint64(st->buf->data + 12, value, G_LITTLE_ENDIAN);
818
168
}
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
168
{
825
168
    g_return_if_fail(st != NULL);
826
168
    fu_memwrite_uint64(st->buf->data + 20, value, G_LITTLE_ENDIAN);
827
168
}
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
168
{
834
168
    g_return_if_fail(st != NULL);
835
168
    fu_memwrite_uint64(st->buf->data + 28, value, G_LITTLE_ENDIAN);
836
168
}
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
168
{
843
168
    g_return_if_fail(st != NULL);
844
168
    fu_memwrite_uint64(st->buf->data + 36, value, G_LITTLE_ENDIAN);
845
168
}
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
245
{
870
245
    FuStructElfProgramHeader64le *st = fu_struct_elf_program_header64le_new_internal();
871
245
    st->buf = g_byte_array_sized_new(56);
872
245
    fu_byte_array_set_size(st->buf, 56, 0x0);
873
245
    return st;
874
245
}
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_validate_internal(FuStructElfProgramHeader64le *st, GError **error)
905
3.09M
{
906
3.09M
    g_return_val_if_fail(st != NULL, FALSE);
907
3.09M
    return TRUE;
908
3.09M
}
909
static gboolean
910
fu_struct_elf_program_header64le_parse_internal(FuStructElfProgramHeader64le *st, GError **error)
911
3.09M
{
912
3.09M
    if (g_getenv("FWUPD_VERBOSE") != NULL) {
913
0
        g_autofree gchar *str = fu_struct_elf_program_header64le_to_string(st);
914
0
        g_debug("%s", str);
915
0
    }
916
3.09M
    if (!fu_struct_elf_program_header64le_validate_internal(st, error))
917
0
        return FALSE;
918
3.09M
    return TRUE;
919
3.09M
}
920
/**
921
 * fu_struct_elf_program_header64le_parse_stream: (skip):
922
 **/
923
FuStructElfProgramHeader64le *
924
fu_struct_elf_program_header64le_parse_stream(GInputStream *stream, gsize offset, GError **error)
925
3.09M
{
926
3.09M
    g_autoptr(FuStructElfProgramHeader64le) st = fu_struct_elf_program_header64le_new_internal();
927
3.09M
    st->buf = fu_input_stream_read_byte_array(stream, offset, 56, NULL, error);
928
3.09M
    if (st->buf == NULL) {
929
92
        g_prefix_error(error, "FuStructElfProgramHeader64le failed read of 0x%x: ", (guint) 56);
930
92
        return NULL;
931
92
    }
932
3.09M
    if (st->buf->len != 56) {
933
7
        g_set_error(error,
934
7
                    FWUPD_ERROR,
935
7
                    FWUPD_ERROR_INVALID_DATA,
936
7
                    "FuStructElfProgramHeader64le requested 0x%x and got 0x%x",
937
7
                    (guint) 56,
938
7
                    (guint) st->buf->len);
939
7
        return NULL;
940
7
    }
941
3.09M
    if (!fu_struct_elf_program_header64le_parse_internal(st, error))
942
0
        return NULL;
943
3.09M
    return g_steal_pointer(&st);
944
3.09M
}
945
/**
946
 * fu_struct_elf_section_header64le_ref: (skip):
947
 **/
948
FuStructElfSectionHeader64le *
949
fu_struct_elf_section_header64le_ref(FuStructElfSectionHeader64le *st)
950
0
{
951
0
    g_return_val_if_fail(st != NULL, NULL);
952
0
    st->refcount++;
953
0
    return st;
954
0
}
955
/**
956
 * fu_struct_elf_section_header64le_unref: (skip):
957
 **/
958
void
959
fu_struct_elf_section_header64le_unref(FuStructElfSectionHeader64le *st)
960
12.0M
{
961
12.0M
    g_return_if_fail(st != NULL);
962
12.0M
    if (st->refcount == 0) {
963
0
        g_critical("FuStructElfSectionHeader64le refcount already zero");
964
0
        return;
965
0
    }
966
12.0M
    if (--st->refcount > 0)
967
0
        return;
968
12.0M
    if (st->buf != NULL)
969
12.0M
        g_byte_array_unref(st->buf);
970
12.0M
    g_free(st);
971
12.0M
}
972
/**
973
 * fu_struct_elf_section_header64le_new_internal: (skip):
974
 **/
975
static FuStructElfSectionHeader64le *
976
fu_struct_elf_section_header64le_new_internal(void)
977
12.0M
{
978
12.0M
    FuStructElfSectionHeader64le *st = g_new0(FuStructElfSectionHeader64le, 1);
979
12.0M
    st->refcount = 1;
980
12.0M
    return st;
981
12.0M
}
982
983
/* getters */
984
/**
985
 * fu_struct_elf_section_header64le_get_name: (skip):
986
 **/
987
guint32
988
fu_struct_elf_section_header64le_get_name(const FuStructElfSectionHeader64le *st)
989
6.12M
{
990
6.12M
    g_return_val_if_fail(st != NULL, 0x0);
991
6.12M
    return fu_memread_uint32(st->buf->data + 0, G_LITTLE_ENDIAN);
992
6.12M
}
993
/**
994
 * fu_struct_elf_section_header64le_get_type: (skip):
995
 **/
996
FuElfSectionHeaderType
997
fu_struct_elf_section_header64le_get_type(const FuStructElfSectionHeader64le *st)
998
24.7M
{
999
24.7M
    g_return_val_if_fail(st != NULL, 0x0);
1000
24.7M
    return fu_memread_uint32(st->buf->data + 4, G_LITTLE_ENDIAN);
1001
24.7M
}
1002
/**
1003
 * fu_struct_elf_section_header64le_get_flags: (skip):
1004
 **/
1005
guint64
1006
fu_struct_elf_section_header64le_get_flags(const FuStructElfSectionHeader64le *st)
1007
0
{
1008
0
    g_return_val_if_fail(st != NULL, 0x0);
1009
0
    return fu_memread_uint64(st->buf->data + 8, G_LITTLE_ENDIAN);
1010
0
}
1011
/**
1012
 * fu_struct_elf_section_header64le_get_addr: (skip):
1013
 **/
1014
guint64
1015
fu_struct_elf_section_header64le_get_addr(const FuStructElfSectionHeader64le *st)
1016
0
{
1017
0
    g_return_val_if_fail(st != NULL, 0x0);
1018
0
    return fu_memread_uint64(st->buf->data + 16, G_LITTLE_ENDIAN);
1019
0
}
1020
/**
1021
 * fu_struct_elf_section_header64le_get_offset: (skip):
1022
 **/
1023
guint64
1024
fu_struct_elf_section_header64le_get_offset(const FuStructElfSectionHeader64le *st)
1025
6.28M
{
1026
6.28M
    g_return_val_if_fail(st != NULL, 0x0);
1027
6.28M
    return fu_memread_uint64(st->buf->data + 24, G_LITTLE_ENDIAN);
1028
6.28M
}
1029
/**
1030
 * fu_struct_elf_section_header64le_get_size: (skip):
1031
 **/
1032
guint64
1033
fu_struct_elf_section_header64le_get_size(const FuStructElfSectionHeader64le *st)
1034
6.28M
{
1035
6.28M
    g_return_val_if_fail(st != NULL, 0x0);
1036
6.28M
    return fu_memread_uint64(st->buf->data + 32, G_LITTLE_ENDIAN);
1037
6.28M
}
1038
/**
1039
 * fu_struct_elf_section_header64le_get_link: (skip):
1040
 **/
1041
guint32
1042
fu_struct_elf_section_header64le_get_link(const FuStructElfSectionHeader64le *st)
1043
0
{
1044
0
    g_return_val_if_fail(st != NULL, 0x0);
1045
0
    return fu_memread_uint32(st->buf->data + 40, G_LITTLE_ENDIAN);
1046
0
}
1047
/**
1048
 * fu_struct_elf_section_header64le_get_info: (skip):
1049
 **/
1050
guint32
1051
fu_struct_elf_section_header64le_get_info(const FuStructElfSectionHeader64le *st)
1052
0
{
1053
0
    g_return_val_if_fail(st != NULL, 0x0);
1054
0
    return fu_memread_uint32(st->buf->data + 44, G_LITTLE_ENDIAN);
1055
0
}
1056
/**
1057
 * fu_struct_elf_section_header64le_get_addralign: (skip):
1058
 **/
1059
guint64
1060
fu_struct_elf_section_header64le_get_addralign(const FuStructElfSectionHeader64le *st)
1061
0
{
1062
0
    g_return_val_if_fail(st != NULL, 0x0);
1063
0
    return fu_memread_uint64(st->buf->data + 48, G_LITTLE_ENDIAN);
1064
0
}
1065
/**
1066
 * fu_struct_elf_section_header64le_get_entsize: (skip):
1067
 **/
1068
guint64
1069
fu_struct_elf_section_header64le_get_entsize(const FuStructElfSectionHeader64le *st)
1070
0
{
1071
0
    g_return_val_if_fail(st != NULL, 0x0);
1072
0
    return fu_memread_uint64(st->buf->data + 56, G_LITTLE_ENDIAN);
1073
0
}
1074
1075
/* setters */
1076
/**
1077
 * fu_struct_elf_section_header64le_set_name: (skip):
1078
 **/
1079
void
1080
fu_struct_elf_section_header64le_set_name(FuStructElfSectionHeader64le *st, guint32 value)
1081
168
{
1082
168
    g_return_if_fail(st != NULL);
1083
168
    fu_memwrite_uint32(st->buf->data + 0, value, G_LITTLE_ENDIAN);
1084
168
}
1085
/**
1086
 * fu_struct_elf_section_header64le_set_type: (skip):
1087
 **/
1088
void
1089
fu_struct_elf_section_header64le_set_type(FuStructElfSectionHeader64le *st, FuElfSectionHeaderType value)
1090
168
{
1091
168
    g_return_if_fail(st != NULL);
1092
168
    fu_memwrite_uint32(st->buf->data + 4, value, G_LITTLE_ENDIAN);
1093
168
}
1094
/**
1095
 * fu_struct_elf_section_header64le_set_flags: (skip):
1096
 **/
1097
void
1098
fu_struct_elf_section_header64le_set_flags(FuStructElfSectionHeader64le *st, guint64 value)
1099
0
{
1100
0
    g_return_if_fail(st != NULL);
1101
0
    fu_memwrite_uint64(st->buf->data + 8, value, G_LITTLE_ENDIAN);
1102
0
}
1103
/**
1104
 * fu_struct_elf_section_header64le_set_addr: (skip):
1105
 **/
1106
void
1107
fu_struct_elf_section_header64le_set_addr(FuStructElfSectionHeader64le *st, guint64 value)
1108
0
{
1109
0
    g_return_if_fail(st != NULL);
1110
0
    fu_memwrite_uint64(st->buf->data + 16, value, G_LITTLE_ENDIAN);
1111
0
}
1112
/**
1113
 * fu_struct_elf_section_header64le_set_offset: (skip):
1114
 **/
1115
void
1116
fu_struct_elf_section_header64le_set_offset(FuStructElfSectionHeader64le *st, guint64 value)
1117
168
{
1118
168
    g_return_if_fail(st != NULL);
1119
168
    fu_memwrite_uint64(st->buf->data + 24, value, G_LITTLE_ENDIAN);
1120
168
}
1121
/**
1122
 * fu_struct_elf_section_header64le_set_size: (skip):
1123
 **/
1124
void
1125
fu_struct_elf_section_header64le_set_size(FuStructElfSectionHeader64le *st, guint64 value)
1126
168
{
1127
168
    g_return_if_fail(st != NULL);
1128
168
    fu_memwrite_uint64(st->buf->data + 32, value, G_LITTLE_ENDIAN);
1129
168
}
1130
/**
1131
 * fu_struct_elf_section_header64le_set_link: (skip):
1132
 **/
1133
void
1134
fu_struct_elf_section_header64le_set_link(FuStructElfSectionHeader64le *st, guint32 value)
1135
0
{
1136
0
    g_return_if_fail(st != NULL);
1137
0
    fu_memwrite_uint32(st->buf->data + 40, value, G_LITTLE_ENDIAN);
1138
0
}
1139
/**
1140
 * fu_struct_elf_section_header64le_set_info: (skip):
1141
 **/
1142
void
1143
fu_struct_elf_section_header64le_set_info(FuStructElfSectionHeader64le *st, guint32 value)
1144
0
{
1145
0
    g_return_if_fail(st != NULL);
1146
0
    fu_memwrite_uint32(st->buf->data + 44, value, G_LITTLE_ENDIAN);
1147
0
}
1148
/**
1149
 * fu_struct_elf_section_header64le_set_addralign: (skip):
1150
 **/
1151
void
1152
fu_struct_elf_section_header64le_set_addralign(FuStructElfSectionHeader64le *st, guint64 value)
1153
0
{
1154
0
    g_return_if_fail(st != NULL);
1155
0
    fu_memwrite_uint64(st->buf->data + 48, value, G_LITTLE_ENDIAN);
1156
0
}
1157
/**
1158
 * fu_struct_elf_section_header64le_set_entsize: (skip):
1159
 **/
1160
void
1161
fu_struct_elf_section_header64le_set_entsize(FuStructElfSectionHeader64le *st, guint64 value)
1162
0
{
1163
0
    g_return_if_fail(st != NULL);
1164
0
    fu_memwrite_uint64(st->buf->data + 56, value, G_LITTLE_ENDIAN);
1165
0
}
1166
/**
1167
 * fu_struct_elf_section_header64le_new: (skip):
1168
 **/
1169
FuStructElfSectionHeader64le *
1170
fu_struct_elf_section_header64le_new(void)
1171
168
{
1172
168
    FuStructElfSectionHeader64le *st = fu_struct_elf_section_header64le_new_internal();
1173
168
    st->buf = g_byte_array_sized_new(64);
1174
168
    fu_byte_array_set_size(st->buf, 64, 0x0);
1175
168
    return st;
1176
168
}
1177
/**
1178
 * fu_struct_elf_section_header64le_to_string: (skip):
1179
 **/
1180
static gchar *
1181
fu_struct_elf_section_header64le_to_string(const FuStructElfSectionHeader64le *st)
1182
0
{
1183
0
    g_autoptr(GString) str = g_string_new("FuStructElfSectionHeader64le:\n");
1184
0
    g_return_val_if_fail(st != NULL, NULL);
1185
0
    g_string_append_printf(str, "  name: 0x%x\n",
1186
0
                           (guint) fu_struct_elf_section_header64le_get_name(st));
1187
0
    {
1188
0
        const gchar *tmp = fu_elf_section_header_type_to_string(fu_struct_elf_section_header64le_get_type(st));
1189
0
        if (tmp != NULL) {
1190
0
            g_string_append_printf(str, "  type: 0x%x [%s]\n", (guint) fu_struct_elf_section_header64le_get_type(st), tmp);
1191
0
        } else {
1192
0
            g_string_append_printf(str, "  type: 0x%x\n", (guint) fu_struct_elf_section_header64le_get_type(st));
1193
0
        }
1194
0
    }
1195
0
    g_string_append_printf(str, "  flags: 0x%x\n",
1196
0
                           (guint) fu_struct_elf_section_header64le_get_flags(st));
1197
0
    g_string_append_printf(str, "  addr: 0x%x\n",
1198
0
                           (guint) fu_struct_elf_section_header64le_get_addr(st));
1199
0
    g_string_append_printf(str, "  offset: 0x%x\n",
1200
0
                           (guint) fu_struct_elf_section_header64le_get_offset(st));
1201
0
    g_string_append_printf(str, "  size: 0x%x\n",
1202
0
                           (guint) fu_struct_elf_section_header64le_get_size(st));
1203
0
    g_string_append_printf(str, "  link: 0x%x\n",
1204
0
                           (guint) fu_struct_elf_section_header64le_get_link(st));
1205
0
    g_string_append_printf(str, "  info: 0x%x\n",
1206
0
                           (guint) fu_struct_elf_section_header64le_get_info(st));
1207
0
    g_string_append_printf(str, "  addralign: 0x%x\n",
1208
0
                           (guint) fu_struct_elf_section_header64le_get_addralign(st));
1209
0
    g_string_append_printf(str, "  entsize: 0x%x\n",
1210
0
                           (guint) fu_struct_elf_section_header64le_get_entsize(st));
1211
0
    if (str->len > 0)
1212
0
        g_string_set_size(str, str->len - 1);
1213
0
    return g_string_free(g_steal_pointer(&str), FALSE);
1214
0
}
1215
static gboolean
1216
fu_struct_elf_section_header64le_validate_internal(FuStructElfSectionHeader64le *st, GError **error)
1217
12.0M
{
1218
12.0M
    g_return_val_if_fail(st != NULL, FALSE);
1219
12.0M
    return TRUE;
1220
12.0M
}
1221
static gboolean
1222
fu_struct_elf_section_header64le_parse_internal(FuStructElfSectionHeader64le *st, GError **error)
1223
12.0M
{
1224
12.0M
    if (g_getenv("FWUPD_VERBOSE") != NULL) {
1225
0
        g_autofree gchar *str = fu_struct_elf_section_header64le_to_string(st);
1226
0
        g_debug("%s", str);
1227
0
    }
1228
12.0M
    if (!fu_struct_elf_section_header64le_validate_internal(st, error))
1229
0
        return FALSE;
1230
12.0M
    return TRUE;
1231
12.0M
}
1232
/**
1233
 * fu_struct_elf_section_header64le_parse_stream: (skip):
1234
 **/
1235
FuStructElfSectionHeader64le *
1236
fu_struct_elf_section_header64le_parse_stream(GInputStream *stream, gsize offset, GError **error)
1237
12.0M
{
1238
12.0M
    g_autoptr(FuStructElfSectionHeader64le) st = fu_struct_elf_section_header64le_new_internal();
1239
12.0M
    st->buf = fu_input_stream_read_byte_array(stream, offset, 64, NULL, error);
1240
12.0M
    if (st->buf == NULL) {
1241
64
        g_prefix_error(error, "FuStructElfSectionHeader64le failed read of 0x%x: ", (guint) 64);
1242
64
        return NULL;
1243
64
    }
1244
12.0M
    if (st->buf->len != 64) {
1245
13
        g_set_error(error,
1246
13
                    FWUPD_ERROR,
1247
13
                    FWUPD_ERROR_INVALID_DATA,
1248
13
                    "FuStructElfSectionHeader64le requested 0x%x and got 0x%x",
1249
13
                    (guint) 64,
1250
13
                    (guint) st->buf->len);
1251
13
        return NULL;
1252
13
    }
1253
12.0M
    if (!fu_struct_elf_section_header64le_parse_internal(st, error))
1254
0
        return NULL;
1255
12.0M
    return g_steal_pointer(&st);
1256
12.0M
}