Previously this was incorrectly assumed to be an ULEB128. Hilarity ensued.
This appears to be the case in both DWARF 3, DWARF 4, and LSB 5. --- src/readelf.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/readelf.c b/src/readelf.c index 5f6e4ed..7c3237f 100644 --- a/src/readelf.c +++ b/src/readelf.c @@ -4971,7 +4971,7 @@ print_cfa_program (const unsigned char *readp, const unsigned char *const endp, case DW_CFA_set_loc: if ((uint64_t) (endp - readp) < 1) goto invalid; - get_uleb128 (op1, readp, endp); + op1 = read_addr_unaligned_inc (ptr_size, dbg, readp); op1 += vma_base; printf (" set_loc %" PRIu64 "\n", op1 * code_align); break;