14499bb29a6214b5df5b3b21e03c6b4f3c8f26cfdJose Flavio Aguilar Paulino/* libunwind - a platform-independent unwind library
24499bb29a6214b5df5b3b21e03c6b4f3c8f26cfdJose Flavio Aguilar Paulino   Copyright (C) 2006-2007 IBM
34499bb29a6214b5df5b3b21e03c6b4f3c8f26cfdJose Flavio Aguilar Paulino   Contributed by
44499bb29a6214b5df5b3b21e03c6b4f3c8f26cfdJose Flavio Aguilar Paulino     Corey Ashford <cjashfor@us.ibm.com>
54499bb29a6214b5df5b3b21e03c6b4f3c8f26cfdJose Flavio Aguilar Paulino     Jose Flavio Aguilar Paulino <jflavio@br.ibm.com> <joseflavio@gmail.com>
64499bb29a6214b5df5b3b21e03c6b4f3c8f26cfdJose Flavio Aguilar Paulino
74499bb29a6214b5df5b3b21e03c6b4f3c8f26cfdJose Flavio Aguilar PaulinoThis file is part of libunwind.
84499bb29a6214b5df5b3b21e03c6b4f3c8f26cfdJose Flavio Aguilar Paulino
94499bb29a6214b5df5b3b21e03c6b4f3c8f26cfdJose Flavio Aguilar PaulinoPermission is hereby granted, free of charge, to any person obtaining
104499bb29a6214b5df5b3b21e03c6b4f3c8f26cfdJose Flavio Aguilar Paulinoa copy of this software and associated documentation files (the
114499bb29a6214b5df5b3b21e03c6b4f3c8f26cfdJose Flavio Aguilar Paulino"Software"), to deal in the Software without restriction, including
124499bb29a6214b5df5b3b21e03c6b4f3c8f26cfdJose Flavio Aguilar Paulinowithout limitation the rights to use, copy, modify, merge, publish,
134499bb29a6214b5df5b3b21e03c6b4f3c8f26cfdJose Flavio Aguilar Paulinodistribute, sublicense, and/or sell copies of the Software, and to
144499bb29a6214b5df5b3b21e03c6b4f3c8f26cfdJose Flavio Aguilar Paulinopermit persons to whom the Software is furnished to do so, subject to
154499bb29a6214b5df5b3b21e03c6b4f3c8f26cfdJose Flavio Aguilar Paulinothe following conditions:
164499bb29a6214b5df5b3b21e03c6b4f3c8f26cfdJose Flavio Aguilar Paulino
174499bb29a6214b5df5b3b21e03c6b4f3c8f26cfdJose Flavio Aguilar PaulinoThe above copyright notice and this permission notice shall be
184499bb29a6214b5df5b3b21e03c6b4f3c8f26cfdJose Flavio Aguilar Paulinoincluded in all copies or substantial portions of the Software.
194499bb29a6214b5df5b3b21e03c6b4f3c8f26cfdJose Flavio Aguilar Paulino
204499bb29a6214b5df5b3b21e03c6b4f3c8f26cfdJose Flavio Aguilar PaulinoTHE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
214499bb29a6214b5df5b3b21e03c6b4f3c8f26cfdJose Flavio Aguilar PaulinoEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
224499bb29a6214b5df5b3b21e03c6b4f3c8f26cfdJose Flavio Aguilar PaulinoMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
234499bb29a6214b5df5b3b21e03c6b4f3c8f26cfdJose Flavio Aguilar PaulinoNONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
244499bb29a6214b5df5b3b21e03c6b4f3c8f26cfdJose Flavio Aguilar PaulinoLIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
254499bb29a6214b5df5b3b21e03c6b4f3c8f26cfdJose Flavio Aguilar PaulinoOF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
264499bb29a6214b5df5b3b21e03c6b4f3c8f26cfdJose Flavio Aguilar PaulinoWITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.  */
274499bb29a6214b5df5b3b21e03c6b4f3c8f26cfdJose Flavio Aguilar Paulino
284499bb29a6214b5df5b3b21e03c6b4f3c8f26cfdJose Flavio Aguilar Paulino#include "unwind_i.h"
294499bb29a6214b5df5b3b21e03c6b4f3c8f26cfdJose Flavio Aguilar Paulino#include "dwarf_i.h"
304499bb29a6214b5df5b3b21e03c6b4f3c8f26cfdJose Flavio Aguilar Paulino
31aebba1f8a7dee9b9ae3e70128ad48de69ca90b15Tommi RantalaHIDDEN define_lock (ppc32_lock);
325d0f376b08126b51a001d7cdfba1ec4e0d644f54Tommi RantalaHIDDEN int tdep_init_done;
334499bb29a6214b5df5b3b21e03c6b4f3c8f26cfdJose Flavio Aguilar Paulino
344499bb29a6214b5df5b3b21e03c6b4f3c8f26cfdJose Flavio Aguilar Paulino/* The API register numbers are exactly the same as the .eh_frame
354499bb29a6214b5df5b3b21e03c6b4f3c8f26cfdJose Flavio Aguilar Paulino   registers, for now at least.  */
36ee8df2628891435ebb95eee04668d5bbd6995723Tommi RantalaHIDDEN const uint8_t dwarf_to_unw_regnum_map[DWARF_REGNUM_MAP_LENGTH] =
374499bb29a6214b5df5b3b21e03c6b4f3c8f26cfdJose Flavio Aguilar Paulino  {
384499bb29a6214b5df5b3b21e03c6b4f3c8f26cfdJose Flavio Aguilar Paulino	[UNW_PPC32_R0]=UNW_PPC32_R0,
394499bb29a6214b5df5b3b21e03c6b4f3c8f26cfdJose Flavio Aguilar Paulino	[UNW_PPC32_R1]=UNW_PPC32_R1,
404499bb29a6214b5df5b3b21e03c6b4f3c8f26cfdJose Flavio Aguilar Paulino	[UNW_PPC32_R2]=UNW_PPC32_R2,
414499bb29a6214b5df5b3b21e03c6b4f3c8f26cfdJose Flavio Aguilar Paulino	[UNW_PPC32_R3]=UNW_PPC32_R3,
424499bb29a6214b5df5b3b21e03c6b4f3c8f26cfdJose Flavio Aguilar Paulino	[UNW_PPC32_R4]=UNW_PPC32_R4,
434499bb29a6214b5df5b3b21e03c6b4f3c8f26cfdJose Flavio Aguilar Paulino	[UNW_PPC32_R5]=UNW_PPC32_R5,
444499bb29a6214b5df5b3b21e03c6b4f3c8f26cfdJose Flavio Aguilar Paulino	[UNW_PPC32_R6]=UNW_PPC32_R6,
454499bb29a6214b5df5b3b21e03c6b4f3c8f26cfdJose Flavio Aguilar Paulino	[UNW_PPC32_R7]=UNW_PPC32_R7,
464499bb29a6214b5df5b3b21e03c6b4f3c8f26cfdJose Flavio Aguilar Paulino	[UNW_PPC32_R8]=UNW_PPC32_R8,
474499bb29a6214b5df5b3b21e03c6b4f3c8f26cfdJose Flavio Aguilar Paulino	[UNW_PPC32_R9]=UNW_PPC32_R9,
484499bb29a6214b5df5b3b21e03c6b4f3c8f26cfdJose Flavio Aguilar Paulino	[UNW_PPC32_R10]=UNW_PPC32_R10,
494499bb29a6214b5df5b3b21e03c6b4f3c8f26cfdJose Flavio Aguilar Paulino	[UNW_PPC32_R11]=UNW_PPC32_R11,
504499bb29a6214b5df5b3b21e03c6b4f3c8f26cfdJose Flavio Aguilar Paulino	[UNW_PPC32_R12]=UNW_PPC32_R12,
514499bb29a6214b5df5b3b21e03c6b4f3c8f26cfdJose Flavio Aguilar Paulino	[UNW_PPC32_R13]=UNW_PPC32_R13,
524499bb29a6214b5df5b3b21e03c6b4f3c8f26cfdJose Flavio Aguilar Paulino	[UNW_PPC32_R14]=UNW_PPC32_R14,
534499bb29a6214b5df5b3b21e03c6b4f3c8f26cfdJose Flavio Aguilar Paulino	[UNW_PPC32_R15]=UNW_PPC32_R15,
544499bb29a6214b5df5b3b21e03c6b4f3c8f26cfdJose Flavio Aguilar Paulino	[UNW_PPC32_R16]=UNW_PPC32_R16,
554499bb29a6214b5df5b3b21e03c6b4f3c8f26cfdJose Flavio Aguilar Paulino	[UNW_PPC32_R17]=UNW_PPC32_R17,
564499bb29a6214b5df5b3b21e03c6b4f3c8f26cfdJose Flavio Aguilar Paulino	[UNW_PPC32_R18]=UNW_PPC32_R18,
574499bb29a6214b5df5b3b21e03c6b4f3c8f26cfdJose Flavio Aguilar Paulino	[UNW_PPC32_R19]=UNW_PPC32_R19,
584499bb29a6214b5df5b3b21e03c6b4f3c8f26cfdJose Flavio Aguilar Paulino	[UNW_PPC32_R20]=UNW_PPC32_R20,
594499bb29a6214b5df5b3b21e03c6b4f3c8f26cfdJose Flavio Aguilar Paulino	[UNW_PPC32_R21]=UNW_PPC32_R21,
604499bb29a6214b5df5b3b21e03c6b4f3c8f26cfdJose Flavio Aguilar Paulino	[UNW_PPC32_R22]=UNW_PPC32_R22,
614499bb29a6214b5df5b3b21e03c6b4f3c8f26cfdJose Flavio Aguilar Paulino	[UNW_PPC32_R23]=UNW_PPC32_R23,
624499bb29a6214b5df5b3b21e03c6b4f3c8f26cfdJose Flavio Aguilar Paulino	[UNW_PPC32_R24]=UNW_PPC32_R24,
634499bb29a6214b5df5b3b21e03c6b4f3c8f26cfdJose Flavio Aguilar Paulino	[UNW_PPC32_R25]=UNW_PPC32_R25,
644499bb29a6214b5df5b3b21e03c6b4f3c8f26cfdJose Flavio Aguilar Paulino	[UNW_PPC32_R26]=UNW_PPC32_R26,
654499bb29a6214b5df5b3b21e03c6b4f3c8f26cfdJose Flavio Aguilar Paulino	[UNW_PPC32_R27]=UNW_PPC32_R27,
664499bb29a6214b5df5b3b21e03c6b4f3c8f26cfdJose Flavio Aguilar Paulino	[UNW_PPC32_R28]=UNW_PPC32_R28,
674499bb29a6214b5df5b3b21e03c6b4f3c8f26cfdJose Flavio Aguilar Paulino	[UNW_PPC32_R29]=UNW_PPC32_R29,
684499bb29a6214b5df5b3b21e03c6b4f3c8f26cfdJose Flavio Aguilar Paulino	[UNW_PPC32_R30]=UNW_PPC32_R30,
694499bb29a6214b5df5b3b21e03c6b4f3c8f26cfdJose Flavio Aguilar Paulino	[UNW_PPC32_R31]=UNW_PPC32_R31,
704499bb29a6214b5df5b3b21e03c6b4f3c8f26cfdJose Flavio Aguilar Paulino
719ea6af8ed5ee7b07f8de6d774bc6df2b7320f0e8Jose Flavio Aguilar Paulino	[UNW_PPC32_CTR]=UNW_PPC32_CTR,
729ea6af8ed5ee7b07f8de6d774bc6df2b7320f0e8Jose Flavio Aguilar Paulino	[UNW_PPC32_XER]=UNW_PPC32_XER,
739ea6af8ed5ee7b07f8de6d774bc6df2b7320f0e8Jose Flavio Aguilar Paulino	[UNW_PPC32_CCR]=UNW_PPC32_CCR,
749ea6af8ed5ee7b07f8de6d774bc6df2b7320f0e8Jose Flavio Aguilar Paulino	[UNW_PPC32_LR]=UNW_PPC32_LR,
759ea6af8ed5ee7b07f8de6d774bc6df2b7320f0e8Jose Flavio Aguilar Paulino	[UNW_PPC32_FPSCR]=UNW_PPC32_FPSCR,
769ea6af8ed5ee7b07f8de6d774bc6df2b7320f0e8Jose Flavio Aguilar Paulino
774499bb29a6214b5df5b3b21e03c6b4f3c8f26cfdJose Flavio Aguilar Paulino	[UNW_PPC32_F0]=UNW_PPC32_F0,
784499bb29a6214b5df5b3b21e03c6b4f3c8f26cfdJose Flavio Aguilar Paulino	[UNW_PPC32_F1]=UNW_PPC32_F1,
794499bb29a6214b5df5b3b21e03c6b4f3c8f26cfdJose Flavio Aguilar Paulino	[UNW_PPC32_F2]=UNW_PPC32_F2,
804499bb29a6214b5df5b3b21e03c6b4f3c8f26cfdJose Flavio Aguilar Paulino	[UNW_PPC32_F3]=UNW_PPC32_F3,
814499bb29a6214b5df5b3b21e03c6b4f3c8f26cfdJose Flavio Aguilar Paulino	[UNW_PPC32_F4]=UNW_PPC32_F4,
824499bb29a6214b5df5b3b21e03c6b4f3c8f26cfdJose Flavio Aguilar Paulino	[UNW_PPC32_F5]=UNW_PPC32_F5,
834499bb29a6214b5df5b3b21e03c6b4f3c8f26cfdJose Flavio Aguilar Paulino	[UNW_PPC32_F6]=UNW_PPC32_F6,
844499bb29a6214b5df5b3b21e03c6b4f3c8f26cfdJose Flavio Aguilar Paulino	[UNW_PPC32_F7]=UNW_PPC32_F7,
854499bb29a6214b5df5b3b21e03c6b4f3c8f26cfdJose Flavio Aguilar Paulino	[UNW_PPC32_F8]=UNW_PPC32_F8,
864499bb29a6214b5df5b3b21e03c6b4f3c8f26cfdJose Flavio Aguilar Paulino	[UNW_PPC32_F9]=UNW_PPC32_F9,
874499bb29a6214b5df5b3b21e03c6b4f3c8f26cfdJose Flavio Aguilar Paulino	[UNW_PPC32_F10]=UNW_PPC32_F10,
884499bb29a6214b5df5b3b21e03c6b4f3c8f26cfdJose Flavio Aguilar Paulino	[UNW_PPC32_F11]=UNW_PPC32_F11,
894499bb29a6214b5df5b3b21e03c6b4f3c8f26cfdJose Flavio Aguilar Paulino	[UNW_PPC32_F12]=UNW_PPC32_F12,
904499bb29a6214b5df5b3b21e03c6b4f3c8f26cfdJose Flavio Aguilar Paulino	[UNW_PPC32_F13]=UNW_PPC32_F13,
914499bb29a6214b5df5b3b21e03c6b4f3c8f26cfdJose Flavio Aguilar Paulino	[UNW_PPC32_F14]=UNW_PPC32_F14,
924499bb29a6214b5df5b3b21e03c6b4f3c8f26cfdJose Flavio Aguilar Paulino	[UNW_PPC32_F15]=UNW_PPC32_F15,
934499bb29a6214b5df5b3b21e03c6b4f3c8f26cfdJose Flavio Aguilar Paulino	[UNW_PPC32_F16]=UNW_PPC32_F16,
944499bb29a6214b5df5b3b21e03c6b4f3c8f26cfdJose Flavio Aguilar Paulino	[UNW_PPC32_F17]=UNW_PPC32_F17,
954499bb29a6214b5df5b3b21e03c6b4f3c8f26cfdJose Flavio Aguilar Paulino	[UNW_PPC32_F18]=UNW_PPC32_F18,
964499bb29a6214b5df5b3b21e03c6b4f3c8f26cfdJose Flavio Aguilar Paulino	[UNW_PPC32_F19]=UNW_PPC32_F19,
974499bb29a6214b5df5b3b21e03c6b4f3c8f26cfdJose Flavio Aguilar Paulino	[UNW_PPC32_F20]=UNW_PPC32_F20,
984499bb29a6214b5df5b3b21e03c6b4f3c8f26cfdJose Flavio Aguilar Paulino	[UNW_PPC32_F21]=UNW_PPC32_F21,
994499bb29a6214b5df5b3b21e03c6b4f3c8f26cfdJose Flavio Aguilar Paulino	[UNW_PPC32_F22]=UNW_PPC32_F22,
1004499bb29a6214b5df5b3b21e03c6b4f3c8f26cfdJose Flavio Aguilar Paulino	[UNW_PPC32_F23]=UNW_PPC32_F23,
1014499bb29a6214b5df5b3b21e03c6b4f3c8f26cfdJose Flavio Aguilar Paulino	[UNW_PPC32_F24]=UNW_PPC32_F24,
1024499bb29a6214b5df5b3b21e03c6b4f3c8f26cfdJose Flavio Aguilar Paulino	[UNW_PPC32_F25]=UNW_PPC32_F25,
1034499bb29a6214b5df5b3b21e03c6b4f3c8f26cfdJose Flavio Aguilar Paulino	[UNW_PPC32_F26]=UNW_PPC32_F26,
1044499bb29a6214b5df5b3b21e03c6b4f3c8f26cfdJose Flavio Aguilar Paulino	[UNW_PPC32_F27]=UNW_PPC32_F27,
1054499bb29a6214b5df5b3b21e03c6b4f3c8f26cfdJose Flavio Aguilar Paulino	[UNW_PPC32_F28]=UNW_PPC32_F28,
1064499bb29a6214b5df5b3b21e03c6b4f3c8f26cfdJose Flavio Aguilar Paulino	[UNW_PPC32_F29]=UNW_PPC32_F29,
1074499bb29a6214b5df5b3b21e03c6b4f3c8f26cfdJose Flavio Aguilar Paulino	[UNW_PPC32_F30]=UNW_PPC32_F30,
1084499bb29a6214b5df5b3b21e03c6b4f3c8f26cfdJose Flavio Aguilar Paulino	[UNW_PPC32_F31]=UNW_PPC32_F31,
1099ea6af8ed5ee7b07f8de6d774bc6df2b7320f0e8Jose Flavio Aguilar Paulino};
1104499bb29a6214b5df5b3b21e03c6b4f3c8f26cfdJose Flavio Aguilar Paulino
1114499bb29a6214b5df5b3b21e03c6b4f3c8f26cfdJose Flavio Aguilar PaulinoHIDDEN void
1124499bb29a6214b5df5b3b21e03c6b4f3c8f26cfdJose Flavio Aguilar Paulinotdep_init (void)
1134499bb29a6214b5df5b3b21e03c6b4f3c8f26cfdJose Flavio Aguilar Paulino{
1144499bb29a6214b5df5b3b21e03c6b4f3c8f26cfdJose Flavio Aguilar Paulino  intrmask_t saved_mask;
1154499bb29a6214b5df5b3b21e03c6b4f3c8f26cfdJose Flavio Aguilar Paulino
1164499bb29a6214b5df5b3b21e03c6b4f3c8f26cfdJose Flavio Aguilar Paulino  sigfillset (&unwi_full_mask);
1174499bb29a6214b5df5b3b21e03c6b4f3c8f26cfdJose Flavio Aguilar Paulino
11884d4150668d83a98420cc91e00026159c3d74a81Paul Pluzhnikov  lock_acquire (&ppc32_lock, saved_mask);
1194499bb29a6214b5df5b3b21e03c6b4f3c8f26cfdJose Flavio Aguilar Paulino  {
1205d0f376b08126b51a001d7cdfba1ec4e0d644f54Tommi Rantala    if (tdep_init_done)
1214499bb29a6214b5df5b3b21e03c6b4f3c8f26cfdJose Flavio Aguilar Paulino      /* another thread else beat us to it... */
1224499bb29a6214b5df5b3b21e03c6b4f3c8f26cfdJose Flavio Aguilar Paulino      goto out;
1234499bb29a6214b5df5b3b21e03c6b4f3c8f26cfdJose Flavio Aguilar Paulino
1244499bb29a6214b5df5b3b21e03c6b4f3c8f26cfdJose Flavio Aguilar Paulino    mi_init ();
1254499bb29a6214b5df5b3b21e03c6b4f3c8f26cfdJose Flavio Aguilar Paulino
1264499bb29a6214b5df5b3b21e03c6b4f3c8f26cfdJose Flavio Aguilar Paulino    dwarf_init ();
1274499bb29a6214b5df5b3b21e03c6b4f3c8f26cfdJose Flavio Aguilar Paulino
1284499bb29a6214b5df5b3b21e03c6b4f3c8f26cfdJose Flavio Aguilar Paulino#ifndef UNW_REMOTE_ONLY
1294499bb29a6214b5df5b3b21e03c6b4f3c8f26cfdJose Flavio Aguilar Paulino    ppc32_local_addr_space_init ();
1304499bb29a6214b5df5b3b21e03c6b4f3c8f26cfdJose Flavio Aguilar Paulino#endif
1315d0f376b08126b51a001d7cdfba1ec4e0d644f54Tommi Rantala    tdep_init_done = 1;	/* signal that we're initialized... */
1324499bb29a6214b5df5b3b21e03c6b4f3c8f26cfdJose Flavio Aguilar Paulino  }
1334499bb29a6214b5df5b3b21e03c6b4f3c8f26cfdJose Flavio Aguilar Paulino out:
13484d4150668d83a98420cc91e00026159c3d74a81Paul Pluzhnikov  lock_release (&ppc32_lock, saved_mask);
1354499bb29a6214b5df5b3b21e03c6b4f3c8f26cfdJose Flavio Aguilar Paulino}
136