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