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