1/* Test program for fetching debuginfo with debuginfo-server.
2   Copyright (C) 2019 Red Hat, Inc.
3   This file is part of elfutils.
4
5   This file is free software; you can redistribute it and/or modify
6   it under the terms of the GNU General Public License as published by
7   the Free Software Foundation; either version 3 of the License, or
8   (at your option) any later version.
9
10   elfutils is distributed in the hope that it will be useful, but
11   WITHOUT ANY WARRANTY; without even the implied warranty of
12   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13   GNU General Public License for more details.
14
15   You should have received a copy of the GNU General Public License
16   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
17
18
19#ifdef HAVE_CONFIG_H
20# include <config.h>
21#endif
22#include <stdio.h>
23#include ELFUTILS_HEADER(dwfl)
24#include <elf.h>
25#include <dwarf.h>
26#include <argp.h>
27#include <assert.h>
28#include <string.h>
29
30static const char *debuginfo_path = "";
31static const Dwfl_Callbacks cb  =
32  {
33    NULL,
34    dwfl_standard_find_debuginfo,
35    NULL,
36    (char **)&debuginfo_path,
37  };
38
39int
40main (int argc __attribute__ ((unused)), char **argv)
41{
42  int expect_pass = strcmp(argv[3], "0");
43  Dwarf_Addr bias = 0;
44  Dwfl *dwfl = dwfl_begin(&cb);
45  dwfl_report_begin(dwfl);
46
47  /* Open an executable.  */
48  Dwfl_Module *mod = dwfl_report_offline(dwfl, argv[2], argv[2], -1);
49
50  /* The corresponding debuginfo will not be found in debuginfo_path
51     (since it's empty), causing the server to be queried.  */
52
53  Dwarf *res = dwfl_module_getdwarf(mod, &bias);
54  if (expect_pass)
55    assert(res);
56  else
57    assert(!res);
58
59  dwfl_end (dwfl);
60
61  return 0;
62}
63