1b4da85ded5de790aa2cddd6d725970945c97df89Petr Machata/* Test program for dwarf_ranges
2b4da85ded5de790aa2cddd6d725970945c97df89Petr Machata   Copyright (C) 2015 Red Hat, Inc.
3b4da85ded5de790aa2cddd6d725970945c97df89Petr Machata   This file is part of elfutils.
4b4da85ded5de790aa2cddd6d725970945c97df89Petr Machata
5b4da85ded5de790aa2cddd6d725970945c97df89Petr Machata   This file is free software; you can redistribute it and/or modify
6b4da85ded5de790aa2cddd6d725970945c97df89Petr Machata   it under the terms of the GNU General Public License as published by
7b4da85ded5de790aa2cddd6d725970945c97df89Petr Machata   the Free Software Foundation; either version 3 of the License, or
8b4da85ded5de790aa2cddd6d725970945c97df89Petr Machata   (at your option) any later version.
9b4da85ded5de790aa2cddd6d725970945c97df89Petr Machata
10b4da85ded5de790aa2cddd6d725970945c97df89Petr Machata   elfutils is distributed in the hope that it will be useful, but
11b4da85ded5de790aa2cddd6d725970945c97df89Petr Machata   WITHOUT ANY WARRANTY; without even the implied warranty of
12b4da85ded5de790aa2cddd6d725970945c97df89Petr Machata   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13b4da85ded5de790aa2cddd6d725970945c97df89Petr Machata   GNU General Public License for more details.
14b4da85ded5de790aa2cddd6d725970945c97df89Petr Machata
15b4da85ded5de790aa2cddd6d725970945c97df89Petr Machata   You should have received a copy of the GNU General Public License
16b4da85ded5de790aa2cddd6d725970945c97df89Petr Machata   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
17b4da85ded5de790aa2cddd6d725970945c97df89Petr Machata
18b4da85ded5de790aa2cddd6d725970945c97df89Petr Machata#include <config.h>
19b4da85ded5de790aa2cddd6d725970945c97df89Petr Machata#include ELFUTILS_HEADER(dw)
20b4da85ded5de790aa2cddd6d725970945c97df89Petr Machata#include <dwarf.h>
21b4da85ded5de790aa2cddd6d725970945c97df89Petr Machata#include <sys/types.h>
22b4da85ded5de790aa2cddd6d725970945c97df89Petr Machata#include <sys/stat.h>
23b4da85ded5de790aa2cddd6d725970945c97df89Petr Machata#include <fcntl.h>
24b4da85ded5de790aa2cddd6d725970945c97df89Petr Machata#include <stdio.h>
25b4da85ded5de790aa2cddd6d725970945c97df89Petr Machata#include <stdint.h>
26b4da85ded5de790aa2cddd6d725970945c97df89Petr Machata#include <stdlib.h>
27b4da85ded5de790aa2cddd6d725970945c97df89Petr Machata#include <assert.h>
28b4da85ded5de790aa2cddd6d725970945c97df89Petr Machata#include <inttypes.h>
29b4da85ded5de790aa2cddd6d725970945c97df89Petr Machata
30b4da85ded5de790aa2cddd6d725970945c97df89Petr Machataint
31b4da85ded5de790aa2cddd6d725970945c97df89Petr Machatamain (int argc, char *argv[])
32b4da85ded5de790aa2cddd6d725970945c97df89Petr Machata{
33b4da85ded5de790aa2cddd6d725970945c97df89Petr Machata  assert (argc >= 3);
34b4da85ded5de790aa2cddd6d725970945c97df89Petr Machata  const char *name = argv[1];
35b4da85ded5de790aa2cddd6d725970945c97df89Petr Machata  ptrdiff_t cuoff = strtol (argv[2], NULL, 0);
36b4da85ded5de790aa2cddd6d725970945c97df89Petr Machata
37b4da85ded5de790aa2cddd6d725970945c97df89Petr Machata  int fd = open (name, O_RDONLY);
38b4da85ded5de790aa2cddd6d725970945c97df89Petr Machata  Dwarf *dbg = dwarf_begin (fd, DWARF_C_READ);
39b4da85ded5de790aa2cddd6d725970945c97df89Petr Machata
40b4da85ded5de790aa2cddd6d725970945c97df89Petr Machata  Dwarf_Die cudie_mem, *cudie = dwarf_offdie (dbg, cuoff, &cudie_mem);
41b4da85ded5de790aa2cddd6d725970945c97df89Petr Machata
42b4da85ded5de790aa2cddd6d725970945c97df89Petr Machata  Dwarf_Addr base, start, end;
43b4da85ded5de790aa2cddd6d725970945c97df89Petr Machata  for (ptrdiff_t off = 0;
44b4da85ded5de790aa2cddd6d725970945c97df89Petr Machata       (off = dwarf_ranges (cudie, off, &base, &start, &end)); )
45b4da85ded5de790aa2cddd6d725970945c97df89Petr Machata    if (off == -1)
46b4da85ded5de790aa2cddd6d725970945c97df89Petr Machata      {
47b4da85ded5de790aa2cddd6d725970945c97df89Petr Machata	puts (dwarf_errmsg (dwarf_errno ()));
48b4da85ded5de790aa2cddd6d725970945c97df89Petr Machata	break;
49b4da85ded5de790aa2cddd6d725970945c97df89Petr Machata      }
50b4da85ded5de790aa2cddd6d725970945c97df89Petr Machata    else
51b4da85ded5de790aa2cddd6d725970945c97df89Petr Machata      fprintf (stderr, "%"PRIx64"..%"PRIx64" (base %"PRIx64")\n",
52b4da85ded5de790aa2cddd6d725970945c97df89Petr Machata	       start, end, base);
53b4da85ded5de790aa2cddd6d725970945c97df89Petr Machata
54b4da85ded5de790aa2cddd6d725970945c97df89Petr Machata  dwarf_end (dbg);
55b4da85ded5de790aa2cddd6d725970945c97df89Petr Machata
56b4da85ded5de790aa2cddd6d725970945c97df89Petr Machata  return 0;
57b4da85ded5de790aa2cddd6d725970945c97df89Petr Machata}
58