/* Test program for dwfl_getmodules bug. Copyright (C) 2008 Red Hat, Inc. This file is part of elfutils. This file is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. elfutils is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ #include #include #include #include #include ELFUTILS_HEADER(dwfl) #include ELFUTILS_HEADER(elf) static const Dwfl_Callbacks cb = { NULL, NULL, NULL, NULL, }; int main (int argc, char **argv) { assert (argc == 2); Dwfl *dwfl = dwfl_begin (&cb); int fd = open (argv[1], O_RDONLY); assert (fd != -1); Elf *elf = elf_begin (fd, ELF_C_READ, NULL); (void) dwfl_core_file_report (dwfl, elf, argv[0]); /* testcore-noncontig contains a shared library mapped between non-contiguous segments of another shared library: [...] 7f14e458c000-7f14e45ae000 00000000 139264 /usr/lib64/ld-2.17.so (1) 7f14e4795000-7f14e4798000 00000000 12288 /usr/lib64/firefox/liblgpllibs.so (2) 7f14e4798000-7f14e479d000 00003000 20480 /usr/lib64/firefox/liblgpllibs.so 7f14e479d000-7f14e479f000 00008000 8192 /usr/lib64/firefox/liblgpllibs.so 7f14e479f000-7f14e47a0000 00009000 4096 /usr/lib64/firefox/liblgpllibs.so 7f14e47a0000-7f14e47a1000 0000a000 4096 /usr/lib64/firefox/liblgpllibs.so (3) 7f14e47ad000-7f14e47ae000 00021000 4096 /usr/lib64/ld-2.17.so (4) 7f14e47ae000-7f14e47af000 00022000 4096 /usr/lib64/ld-2.17.so */ /* First segment of the non-contiguous module (1). */ int seg = dwfl_addrsegment (dwfl, 0x7f14e458c000, NULL); assert (seg == 32); /* First segment of the module within the non-contiguous module's address range (2). */ seg = dwfl_addrsegment (dwfl, 0x7f14e4795000, NULL); assert (seg == 33); /* Last segment of the module within the non-contiguous module's address range (3). */ seg = dwfl_addrsegment (dwfl, 0x7f14e47a0000, NULL); assert (seg == 37); /* First segment of non-contiguous module following its address space gap (4). */ seg = dwfl_addrsegment (dwfl, 0x7f14e47ad000, NULL); assert (seg == 40); dwfl_end (dwfl); elf_end (elf); return 0; }