Coverage Report

Created: 2025-11-24 06:59

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