test-static-link-loc.c revision 6b55e0ab51eee7dbea679fda2b37ecf61f0025e5
1907e49826ad4fd79d19851dc79bd972fd70996d8mostang.com!davidm/* libunwind - a platform-independent unwind library
2907e49826ad4fd79d19851dc79bd972fd70996d8mostang.com!davidm   Copyright (C) 2004 Hewlett-Packard Co
3907e49826ad4fd79d19851dc79bd972fd70996d8mostang.com!davidm	Contributed by David Mosberger-Tang <davidm@hpl.hp.com>
4907e49826ad4fd79d19851dc79bd972fd70996d8mostang.com!davidm
5907e49826ad4fd79d19851dc79bd972fd70996d8mostang.com!davidmThis file is part of libunwind.
6907e49826ad4fd79d19851dc79bd972fd70996d8mostang.com!davidm
7907e49826ad4fd79d19851dc79bd972fd70996d8mostang.com!davidmCopyright (c) 2003 Hewlett-Packard Co.
8907e49826ad4fd79d19851dc79bd972fd70996d8mostang.com!davidm
9907e49826ad4fd79d19851dc79bd972fd70996d8mostang.com!davidmPermission is hereby granted, free of charge, to any person obtaining
10907e49826ad4fd79d19851dc79bd972fd70996d8mostang.com!davidma copy of this software and associated documentation files (the
11907e49826ad4fd79d19851dc79bd972fd70996d8mostang.com!davidm"Software"), to deal in the Software without restriction, including
12907e49826ad4fd79d19851dc79bd972fd70996d8mostang.com!davidmwithout limitation the rights to use, copy, modify, merge, publish,
13907e49826ad4fd79d19851dc79bd972fd70996d8mostang.com!davidmdistribute, sublicense, and/or sell copies of the Software, and to
14907e49826ad4fd79d19851dc79bd972fd70996d8mostang.com!davidmpermit persons to whom the Software is furnished to do so, subject to
15907e49826ad4fd79d19851dc79bd972fd70996d8mostang.com!davidmthe following conditions:
16907e49826ad4fd79d19851dc79bd972fd70996d8mostang.com!davidm
17907e49826ad4fd79d19851dc79bd972fd70996d8mostang.com!davidmThe above copyright notice and this permission notice shall be
18907e49826ad4fd79d19851dc79bd972fd70996d8mostang.com!davidmincluded in all copies or substantial portions of the Software.
19907e49826ad4fd79d19851dc79bd972fd70996d8mostang.com!davidm
20907e49826ad4fd79d19851dc79bd972fd70996d8mostang.com!davidmTHE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
21907e49826ad4fd79d19851dc79bd972fd70996d8mostang.com!davidmEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
22907e49826ad4fd79d19851dc79bd972fd70996d8mostang.com!davidmMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
23907e49826ad4fd79d19851dc79bd972fd70996d8mostang.com!davidmNONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
24907e49826ad4fd79d19851dc79bd972fd70996d8mostang.com!davidmLIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
25907e49826ad4fd79d19851dc79bd972fd70996d8mostang.com!davidmOF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
26907e49826ad4fd79d19851dc79bd972fd70996d8mostang.com!davidmWITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.  */
27907e49826ad4fd79d19851dc79bd972fd70996d8mostang.com!davidm
28907e49826ad4fd79d19851dc79bd972fd70996d8mostang.com!davidm/* The purpose of this program is simply to link in all libunwind-API
29907e49826ad4fd79d19851dc79bd972fd70996d8mostang.com!davidm   functions both in their local-only and generic variants and to make
30907e49826ad4fd79d19851dc79bd972fd70996d8mostang.com!davidm   sure that the final result can be linked statically.  */
31907e49826ad4fd79d19851dc79bd972fd70996d8mostang.com!davidm
32907e49826ad4fd79d19851dc79bd972fd70996d8mostang.com!davidm#include <stdio.h>
33907e49826ad4fd79d19851dc79bd972fd70996d8mostang.com!davidm
34907e49826ad4fd79d19851dc79bd972fd70996d8mostang.com!davidm#define UNW_LOCAL_ONLY
35907e49826ad4fd79d19851dc79bd972fd70996d8mostang.com!davidm#include <libunwind.h>
366b55e0ab51eee7dbea679fda2b37ecf61f0025e5Tommi Rantala#include "compiler.h"
37907e49826ad4fd79d19851dc79bd972fd70996d8mostang.com!davidm
38907e49826ad4fd79d19851dc79bd972fd70996d8mostang.com!davidmextern int test_generic (void);
39907e49826ad4fd79d19851dc79bd972fd70996d8mostang.com!davidm
40907e49826ad4fd79d19851dc79bd972fd70996d8mostang.com!davidmint verbose;
41907e49826ad4fd79d19851dc79bd972fd70996d8mostang.com!davidm
42907e49826ad4fd79d19851dc79bd972fd70996d8mostang.com!davidm#ifdef UNW_REMOTE_ONLY
43907e49826ad4fd79d19851dc79bd972fd70996d8mostang.com!davidm
44907e49826ad4fd79d19851dc79bd972fd70996d8mostang.com!davidmint
45907e49826ad4fd79d19851dc79bd972fd70996d8mostang.com!davidmtest_local (void)
46907e49826ad4fd79d19851dc79bd972fd70996d8mostang.com!davidm{
47907e49826ad4fd79d19851dc79bd972fd70996d8mostang.com!davidm  return 0;
48907e49826ad4fd79d19851dc79bd972fd70996d8mostang.com!davidm}
49907e49826ad4fd79d19851dc79bd972fd70996d8mostang.com!davidm
50907e49826ad4fd79d19851dc79bd972fd70996d8mostang.com!davidm#else /* !UNW_REMOTE_ONLY */
51907e49826ad4fd79d19851dc79bd972fd70996d8mostang.com!davidm
52907e49826ad4fd79d19851dc79bd972fd70996d8mostang.com!davidmstatic void *funcs[] =
53907e49826ad4fd79d19851dc79bd972fd70996d8mostang.com!davidm  {
54907e49826ad4fd79d19851dc79bd972fd70996d8mostang.com!davidm    (void *) &unw_get_reg,
55907e49826ad4fd79d19851dc79bd972fd70996d8mostang.com!davidm    (void *) &unw_get_fpreg,
56907e49826ad4fd79d19851dc79bd972fd70996d8mostang.com!davidm    (void *) &unw_set_reg,
57907e49826ad4fd79d19851dc79bd972fd70996d8mostang.com!davidm    (void *) &unw_set_fpreg,
58907e49826ad4fd79d19851dc79bd972fd70996d8mostang.com!davidm    (void *) &unw_resume,
59907e49826ad4fd79d19851dc79bd972fd70996d8mostang.com!davidm    (void *) &unw_create_addr_space,
60907e49826ad4fd79d19851dc79bd972fd70996d8mostang.com!davidm    (void *) &unw_destroy_addr_space,
61907e49826ad4fd79d19851dc79bd972fd70996d8mostang.com!davidm    (void *) &unw_get_accessors,
62907e49826ad4fd79d19851dc79bd972fd70996d8mostang.com!davidm    (void *) &unw_flush_cache,
63907e49826ad4fd79d19851dc79bd972fd70996d8mostang.com!davidm    (void *) &unw_set_caching_policy,
64907e49826ad4fd79d19851dc79bd972fd70996d8mostang.com!davidm    (void *) &unw_regname,
65907e49826ad4fd79d19851dc79bd972fd70996d8mostang.com!davidm    (void *) &unw_get_proc_info,
66907e49826ad4fd79d19851dc79bd972fd70996d8mostang.com!davidm    (void *) &unw_get_save_loc,
67907e49826ad4fd79d19851dc79bd972fd70996d8mostang.com!davidm    (void *) &unw_is_signal_frame,
68907e49826ad4fd79d19851dc79bd972fd70996d8mostang.com!davidm    (void *) &unw_get_proc_name,
69907e49826ad4fd79d19851dc79bd972fd70996d8mostang.com!davidm    (void *) &_U_dyn_register,
70907e49826ad4fd79d19851dc79bd972fd70996d8mostang.com!davidm    (void *) &_U_dyn_cancel
71907e49826ad4fd79d19851dc79bd972fd70996d8mostang.com!davidm  };
72907e49826ad4fd79d19851dc79bd972fd70996d8mostang.com!davidm
73907e49826ad4fd79d19851dc79bd972fd70996d8mostang.com!davidmint
74907e49826ad4fd79d19851dc79bd972fd70996d8mostang.com!davidmtest_local (void)
75907e49826ad4fd79d19851dc79bd972fd70996d8mostang.com!davidm{
76907e49826ad4fd79d19851dc79bd972fd70996d8mostang.com!davidm  unw_context_t uc;
77907e49826ad4fd79d19851dc79bd972fd70996d8mostang.com!davidm  unw_cursor_t c;
78907e49826ad4fd79d19851dc79bd972fd70996d8mostang.com!davidm
79907e49826ad4fd79d19851dc79bd972fd70996d8mostang.com!davidm  if (verbose)
80907e49826ad4fd79d19851dc79bd972fd70996d8mostang.com!davidm    printf (__FILE__": funcs[0]=%p\n", funcs[0]);
81907e49826ad4fd79d19851dc79bd972fd70996d8mostang.com!davidm
82907e49826ad4fd79d19851dc79bd972fd70996d8mostang.com!davidm  unw_getcontext (&uc);
83907e49826ad4fd79d19851dc79bd972fd70996d8mostang.com!davidm  unw_init_local (&c, &uc);
84907e49826ad4fd79d19851dc79bd972fd70996d8mostang.com!davidm  unw_init_remote (&c, unw_local_addr_space, &uc);
85907e49826ad4fd79d19851dc79bd972fd70996d8mostang.com!davidm  return unw_step (&c);
86907e49826ad4fd79d19851dc79bd972fd70996d8mostang.com!davidm}
87907e49826ad4fd79d19851dc79bd972fd70996d8mostang.com!davidm
88907e49826ad4fd79d19851dc79bd972fd70996d8mostang.com!davidm#endif /* !UNW_REMOTE_ONLY */
89907e49826ad4fd79d19851dc79bd972fd70996d8mostang.com!davidm
90907e49826ad4fd79d19851dc79bd972fd70996d8mostang.com!davidmint
916b55e0ab51eee7dbea679fda2b37ecf61f0025e5Tommi Rantalamain (int argc, char **argv UNUSED)
92907e49826ad4fd79d19851dc79bd972fd70996d8mostang.com!davidm{
93907e49826ad4fd79d19851dc79bd972fd70996d8mostang.com!davidm  if (argc > 1)
94907e49826ad4fd79d19851dc79bd972fd70996d8mostang.com!davidm    verbose = 1;
95907e49826ad4fd79d19851dc79bd972fd70996d8mostang.com!davidm
96907e49826ad4fd79d19851dc79bd972fd70996d8mostang.com!davidm  if (test_local () < 0)
97907e49826ad4fd79d19851dc79bd972fd70996d8mostang.com!davidm    return -1;
98907e49826ad4fd79d19851dc79bd972fd70996d8mostang.com!davidm  if (test_generic () < 0)
99907e49826ad4fd79d19851dc79bd972fd70996d8mostang.com!davidm    return -1;
100907e49826ad4fd79d19851dc79bd972fd70996d8mostang.com!davidm  return 0;
101907e49826ad4fd79d19851dc79bd972fd70996d8mostang.com!davidm}
102