/* libunwind - a platform-independent unwind library
   Copyright (C) 2006-2007 IBM
   Contributed by
     Corey Ashford <cjashfor@us.ibm.com>
     Jose Flavio Aguilar Paulino <jflavio@br.ibm.com> <joseflavio@gmail.com>

This file is part of libunwind.

Permission is hereby granted, free of charge, to any person obtaining
a copy of this software and associated documentation files (the
"Software"), to deal in the Software without restriction, including
without limitation the rights to use, copy, modify, merge, publish,
distribute, sublicense, and/or sell copies of the Software, and to
permit persons to whom the Software is furnished to do so, subject to
the following conditions:

The above copyright notice and this permission notice shall be
included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.  */

#include "unwind_i.h"
#include "dwarf_i.h"

HIDDEN define_lock (ppc64_lock);
HIDDEN int tdep_init_done;

/* The API register numbers are exactly the same as the .eh_frame
   registers, for now at least.  */
HIDDEN const uint8_t dwarf_to_unw_regnum_map[DWARF_REGNUM_MAP_LENGTH] =
  {
	[UNW_PPC64_R0]=UNW_PPC64_R0,
	[UNW_PPC64_R1]=UNW_PPC64_R1,
	[UNW_PPC64_R2]=UNW_PPC64_R2,
	[UNW_PPC64_R3]=UNW_PPC64_R3,
	[UNW_PPC64_R4]=UNW_PPC64_R4,
	[UNW_PPC64_R5]=UNW_PPC64_R5,
	[UNW_PPC64_R6]=UNW_PPC64_R6,
	[UNW_PPC64_R7]=UNW_PPC64_R7,
	[UNW_PPC64_R8]=UNW_PPC64_R8,
	[UNW_PPC64_R9]=UNW_PPC64_R9,
	[UNW_PPC64_R10]=UNW_PPC64_R10,
	[UNW_PPC64_R11]=UNW_PPC64_R11,
	[UNW_PPC64_R12]=UNW_PPC64_R12,
	[UNW_PPC64_R13]=UNW_PPC64_R13,
	[UNW_PPC64_R14]=UNW_PPC64_R14,
	[UNW_PPC64_R15]=UNW_PPC64_R15,
	[UNW_PPC64_R16]=UNW_PPC64_R16,
	[UNW_PPC64_R17]=UNW_PPC64_R17,
	[UNW_PPC64_R18]=UNW_PPC64_R18,
	[UNW_PPC64_R19]=UNW_PPC64_R19,
	[UNW_PPC64_R20]=UNW_PPC64_R20,
	[UNW_PPC64_R21]=UNW_PPC64_R21,
	[UNW_PPC64_R22]=UNW_PPC64_R22,
	[UNW_PPC64_R23]=UNW_PPC64_R23,
	[UNW_PPC64_R24]=UNW_PPC64_R24,
	[UNW_PPC64_R25]=UNW_PPC64_R25,
	[UNW_PPC64_R26]=UNW_PPC64_R26,
	[UNW_PPC64_R27]=UNW_PPC64_R27,
	[UNW_PPC64_R28]=UNW_PPC64_R28,
	[UNW_PPC64_R29]=UNW_PPC64_R29,
	[UNW_PPC64_R30]=UNW_PPC64_R30,
	[UNW_PPC64_R31]=UNW_PPC64_R31,

	[UNW_PPC64_F0]=UNW_PPC64_F0,
	[UNW_PPC64_F1]=UNW_PPC64_F1,
	[UNW_PPC64_F2]=UNW_PPC64_F2,
	[UNW_PPC64_F3]=UNW_PPC64_F3,
	[UNW_PPC64_F4]=UNW_PPC64_F4,
	[UNW_PPC64_F5]=UNW_PPC64_F5,
	[UNW_PPC64_F6]=UNW_PPC64_F6,
	[UNW_PPC64_F7]=UNW_PPC64_F7,
	[UNW_PPC64_F8]=UNW_PPC64_F8,
	[UNW_PPC64_F9]=UNW_PPC64_F9,
	[UNW_PPC64_F10]=UNW_PPC64_F10,
	[UNW_PPC64_F11]=UNW_PPC64_F11,
	[UNW_PPC64_F12]=UNW_PPC64_F12,
	[UNW_PPC64_F13]=UNW_PPC64_F13,
	[UNW_PPC64_F14]=UNW_PPC64_F14,
	[UNW_PPC64_F15]=UNW_PPC64_F15,
	[UNW_PPC64_F16]=UNW_PPC64_F16,
	[UNW_PPC64_F17]=UNW_PPC64_F17,
	[UNW_PPC64_F18]=UNW_PPC64_F18,
	[UNW_PPC64_F19]=UNW_PPC64_F19,
	[UNW_PPC64_F20]=UNW_PPC64_F20,
	[UNW_PPC64_F21]=UNW_PPC64_F21,
	[UNW_PPC64_F22]=UNW_PPC64_F22,
	[UNW_PPC64_F23]=UNW_PPC64_F23,
	[UNW_PPC64_F24]=UNW_PPC64_F24,
	[UNW_PPC64_F25]=UNW_PPC64_F25,
	[UNW_PPC64_F26]=UNW_PPC64_F26,
	[UNW_PPC64_F27]=UNW_PPC64_F27,
	[UNW_PPC64_F28]=UNW_PPC64_F28,
	[UNW_PPC64_F29]=UNW_PPC64_F29,
	[UNW_PPC64_F30]=UNW_PPC64_F30,
	[UNW_PPC64_F31]=UNW_PPC64_F31,

	[UNW_PPC64_LR]=UNW_PPC64_LR,
	[UNW_PPC64_CTR]=UNW_PPC64_CTR,
	[UNW_PPC64_ARG_POINTER]=UNW_PPC64_ARG_POINTER,

	[UNW_PPC64_CR0]=UNW_PPC64_CR0,
	[UNW_PPC64_CR1]=UNW_PPC64_CR1,
	[UNW_PPC64_CR2]=UNW_PPC64_CR2,
	[UNW_PPC64_CR3]=UNW_PPC64_CR3,
	[UNW_PPC64_CR4]=UNW_PPC64_CR4,
	[UNW_PPC64_CR5]=UNW_PPC64_CR5,
	[UNW_PPC64_CR6]=UNW_PPC64_CR6,
	[UNW_PPC64_CR7]=UNW_PPC64_CR7,

	[UNW_PPC64_XER]=UNW_PPC64_XER,

	[UNW_PPC64_V0]=UNW_PPC64_V0,
	[UNW_PPC64_V1]=UNW_PPC64_V1,
	[UNW_PPC64_V2]=UNW_PPC64_V2,
	[UNW_PPC64_V3]=UNW_PPC64_V3,
	[UNW_PPC64_V4]=UNW_PPC64_V4,
	[UNW_PPC64_V5]=UNW_PPC64_V5,
	[UNW_PPC64_V6]=UNW_PPC64_V6,
	[UNW_PPC64_V7]=UNW_PPC64_V7,
	[UNW_PPC64_V8]=UNW_PPC64_V8,
	[UNW_PPC64_V9]=UNW_PPC64_V9,
	[UNW_PPC64_V10]=UNW_PPC64_V10,
	[UNW_PPC64_V11]=UNW_PPC64_V11,
	[UNW_PPC64_V12]=UNW_PPC64_V12,
	[UNW_PPC64_V13]=UNW_PPC64_V13,
	[UNW_PPC64_V14]=UNW_PPC64_V14,
	[UNW_PPC64_V15]=UNW_PPC64_V15,
	[UNW_PPC64_V16]=UNW_PPC64_V16,
	[UNW_PPC64_V17]=UNW_PPC64_V17,
	[UNW_PPC64_V18]=UNW_PPC64_V18,
	[UNW_PPC64_V19]=UNW_PPC64_V19,
	[UNW_PPC64_V20]=UNW_PPC64_V20,
	[UNW_PPC64_V21]=UNW_PPC64_V21,
	[UNW_PPC64_V22]=UNW_PPC64_V22,
	[UNW_PPC64_V23]=UNW_PPC64_V23,
	[UNW_PPC64_V24]=UNW_PPC64_V24,
	[UNW_PPC64_V25]=UNW_PPC64_V25,
	[UNW_PPC64_V26]=UNW_PPC64_V26,
	[UNW_PPC64_V27]=UNW_PPC64_V27,
	[UNW_PPC64_V28]=UNW_PPC64_V28,
	[UNW_PPC64_V29]=UNW_PPC64_V29,
	[UNW_PPC64_V30]=UNW_PPC64_V30,
	[UNW_PPC64_V31]=UNW_PPC64_V31,

	[UNW_PPC64_VRSAVE]=UNW_PPC64_VRSAVE,
	[UNW_PPC64_VSCR]=UNW_PPC64_VSCR,
	[UNW_PPC64_SPE_ACC]=UNW_PPC64_SPE_ACC,
	[UNW_PPC64_SPEFSCR]=UNW_PPC64_SPEFSCR,
  };

HIDDEN void
tdep_init (void)
{
  intrmask_t saved_mask;

  sigfillset (&unwi_full_mask);

  lock_acquire (&ppc64_lock, saved_mask);
  {
    if (tdep_init_done)
      /* another thread else beat us to it... */
      goto out;

    mi_init ();

    dwarf_init ();

#ifndef UNW_REMOTE_ONLY
    ppc64_local_addr_space_init ();
#endif
    tdep_init_done = 1;	/* signal that we're initialized... */
  }
 out:
  lock_release (&ppc64_lock, saved_mask);
}
