Coverage Report

Created: 2026-01-09 07:21

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