18d5b1aeeffb80515197fd7aeee0b3fbfac904ecdTommi Rantala/* libunwind - a platform-independent unwind library 28d5b1aeeffb80515197fd7aeee0b3fbfac904ecdTommi Rantala Copyright (C) 2008 CodeSourcery 38d5b1aeeffb80515197fd7aeee0b3fbfac904ecdTommi Rantala Copyright (C) 2012 Tommi Rantala <tt.rantala@gmail.com> 48d5b1aeeffb80515197fd7aeee0b3fbfac904ecdTommi Rantala 58d5b1aeeffb80515197fd7aeee0b3fbfac904ecdTommi RantalaThis file is part of libunwind. 68d5b1aeeffb80515197fd7aeee0b3fbfac904ecdTommi Rantala 78d5b1aeeffb80515197fd7aeee0b3fbfac904ecdTommi RantalaPermission is hereby granted, free of charge, to any person obtaining 88d5b1aeeffb80515197fd7aeee0b3fbfac904ecdTommi Rantalaa copy of this software and associated documentation files (the 98d5b1aeeffb80515197fd7aeee0b3fbfac904ecdTommi Rantala"Software"), to deal in the Software without restriction, including 108d5b1aeeffb80515197fd7aeee0b3fbfac904ecdTommi Rantalawithout limitation the rights to use, copy, modify, merge, publish, 118d5b1aeeffb80515197fd7aeee0b3fbfac904ecdTommi Rantaladistribute, sublicense, and/or sell copies of the Software, and to 128d5b1aeeffb80515197fd7aeee0b3fbfac904ecdTommi Rantalapermit persons to whom the Software is furnished to do so, subject to 138d5b1aeeffb80515197fd7aeee0b3fbfac904ecdTommi Rantalathe following conditions: 148d5b1aeeffb80515197fd7aeee0b3fbfac904ecdTommi Rantala 158d5b1aeeffb80515197fd7aeee0b3fbfac904ecdTommi RantalaThe above copyright notice and this permission notice shall be 168d5b1aeeffb80515197fd7aeee0b3fbfac904ecdTommi Rantalaincluded in all copies or substantial portions of the Software. 178d5b1aeeffb80515197fd7aeee0b3fbfac904ecdTommi Rantala 188d5b1aeeffb80515197fd7aeee0b3fbfac904ecdTommi RantalaTHE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 198d5b1aeeffb80515197fd7aeee0b3fbfac904ecdTommi RantalaEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 208d5b1aeeffb80515197fd7aeee0b3fbfac904ecdTommi RantalaMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 218d5b1aeeffb80515197fd7aeee0b3fbfac904ecdTommi RantalaNONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE 228d5b1aeeffb80515197fd7aeee0b3fbfac904ecdTommi RantalaLIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION 238d5b1aeeffb80515197fd7aeee0b3fbfac904ecdTommi RantalaOF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION 248d5b1aeeffb80515197fd7aeee0b3fbfac904ecdTommi RantalaWITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ 258d5b1aeeffb80515197fd7aeee0b3fbfac904ecdTommi Rantala 268d5b1aeeffb80515197fd7aeee0b3fbfac904ecdTommi Rantala#include "unwind_i.h" 278d5b1aeeffb80515197fd7aeee0b3fbfac904ecdTommi Rantala#include "dwarf_i.h" 288d5b1aeeffb80515197fd7aeee0b3fbfac904ecdTommi Rantala 298d5b1aeeffb80515197fd7aeee0b3fbfac904ecdTommi RantalaHIDDEN define_lock (sh_lock); 308d5b1aeeffb80515197fd7aeee0b3fbfac904ecdTommi RantalaHIDDEN int tdep_init_done; 318d5b1aeeffb80515197fd7aeee0b3fbfac904ecdTommi Rantala 328d5b1aeeffb80515197fd7aeee0b3fbfac904ecdTommi RantalaHIDDEN void 338d5b1aeeffb80515197fd7aeee0b3fbfac904ecdTommi Rantalatdep_init (void) 348d5b1aeeffb80515197fd7aeee0b3fbfac904ecdTommi Rantala{ 358d5b1aeeffb80515197fd7aeee0b3fbfac904ecdTommi Rantala intrmask_t saved_mask; 368d5b1aeeffb80515197fd7aeee0b3fbfac904ecdTommi Rantala 378d5b1aeeffb80515197fd7aeee0b3fbfac904ecdTommi Rantala sigfillset (&unwi_full_mask); 388d5b1aeeffb80515197fd7aeee0b3fbfac904ecdTommi Rantala 398d5b1aeeffb80515197fd7aeee0b3fbfac904ecdTommi Rantala lock_acquire (&sh_lock, saved_mask); 408d5b1aeeffb80515197fd7aeee0b3fbfac904ecdTommi Rantala { 418d5b1aeeffb80515197fd7aeee0b3fbfac904ecdTommi Rantala if (tdep_init_done) 428d5b1aeeffb80515197fd7aeee0b3fbfac904ecdTommi Rantala /* another thread else beat us to it... */ 438d5b1aeeffb80515197fd7aeee0b3fbfac904ecdTommi Rantala goto out; 448d5b1aeeffb80515197fd7aeee0b3fbfac904ecdTommi Rantala 458d5b1aeeffb80515197fd7aeee0b3fbfac904ecdTommi Rantala mi_init (); 468d5b1aeeffb80515197fd7aeee0b3fbfac904ecdTommi Rantala 478d5b1aeeffb80515197fd7aeee0b3fbfac904ecdTommi Rantala dwarf_init (); 488d5b1aeeffb80515197fd7aeee0b3fbfac904ecdTommi Rantala 498d5b1aeeffb80515197fd7aeee0b3fbfac904ecdTommi Rantala#ifndef UNW_REMOTE_ONLY 508d5b1aeeffb80515197fd7aeee0b3fbfac904ecdTommi Rantala sh_local_addr_space_init (); 518d5b1aeeffb80515197fd7aeee0b3fbfac904ecdTommi Rantala#endif 528d5b1aeeffb80515197fd7aeee0b3fbfac904ecdTommi Rantala tdep_init_done = 1; /* signal that we're initialized... */ 538d5b1aeeffb80515197fd7aeee0b3fbfac904ecdTommi Rantala } 548d5b1aeeffb80515197fd7aeee0b3fbfac904ecdTommi Rantala out: 558d5b1aeeffb80515197fd7aeee0b3fbfac904ecdTommi Rantala lock_release (&sh_lock, saved_mask); 568d5b1aeeffb80515197fd7aeee0b3fbfac904ecdTommi Rantala} 57