| 1 | // SPDX-License-Identifier: GPL-2.0 |
| 2 | #include <stdlib.h> |
| 3 | #include <dwarf.h> |
| 4 | #include <elfutils/libdw.h> |
| 5 | #include <elfutils/libdwfl.h> |
| 6 | #include <elfutils/version.h> |
| 7 | |
| 8 | int test_libdw(void) |
| 9 | { |
| 10 | Dwarf *dbg = dwarf_begin(fildes: 0, cmd: DWARF_C_READ); |
| 11 | |
| 12 | return dbg == NULL; |
| 13 | } |
| 14 | |
| 15 | int test_libdw_unwind(void) |
| 16 | { |
| 17 | /* |
| 18 | * This function is guarded via: __nonnull_attribute__ (1, 2). |
| 19 | * Passing '1' as arguments value. This code is never executed, |
| 20 | * only compiled. |
| 21 | */ |
| 22 | dwfl_thread_getframes(thread: (void *) 1, callback: (void *) 1, NULL); |
| 23 | return 0; |
| 24 | } |
| 25 | |
| 26 | int test_libdw_getlocations(void) |
| 27 | { |
| 28 | Dwarf_Addr base, start, end; |
| 29 | Dwarf_Attribute attr; |
| 30 | Dwarf_Op *op; |
| 31 | size_t nops; |
| 32 | ptrdiff_t offset = 0; |
| 33 | |
| 34 | return (int)dwarf_getlocations(attr: &attr, offset, basep: &base, startp: &start, endp: &end, expr: &op, exprlen: &nops); |
| 35 | } |
| 36 | |
| 37 | int test_libdw_getcfi(void) |
| 38 | { |
| 39 | Dwarf *dwarf = NULL; |
| 40 | |
| 41 | return dwarf_getcfi(dwarf) == NULL; |
| 42 | } |
| 43 | |
| 44 | int test_elfutils(void) |
| 45 | { |
| 46 | Dwarf_CFI *cfi = NULL; |
| 47 | |
| 48 | dwarf_cfi_end(cache: cfi); |
| 49 | return 0; |
| 50 | } |
| 51 | |
| 52 | int main(void) |
| 53 | { |
| 54 | return test_libdw() + test_libdw_unwind() + test_libdw_getlocations() + |
| 55 | test_libdw_getcfi() + test_elfutils(); |
| 56 | } |
| 57 | |