Index: libunwind/Makefile.am
===================================================================
--- libunwind.orig/Makefile.am
+++ libunwind/Makefile.am
@@ -9,6 +9,10 @@ include_HEADERS_tdep = include/libunwind
else
if ARCH_X86_64
include_HEADERS_tdep = include/libunwind-x86_64.h
+else
+if ARCH_PPC64
+include_HEADERS_tdep = include/libunwind-ppc64.h
+endif # ARCH_PPC64
endif # ARCH_X86_64
endif # ARCH_X86
endif # ARCH_HPPA
@@ -40,6 +44,8 @@ EXTRA_DIST = include/dwarf.h include/dwa
include/libunwind-x86.h include/tdep-x86/libunwind_i.h \
include/tdep-x86/jmpbuf.h include/tdep-x86/dwarf-config.h \
include/libunwind-x86_64.h include/tdep-x86_64/libunwind_i.h \
- include/tdep-x86_64/jmpbuf.h include/tdep-x86_64/dwarf-config.h
+ include/tdep-x86_64/jmpbuf.h include/tdep-x86_64/dwarf-config.h \
+ include/libunwind-ppc64.h include/tdep-ppc64/dwarf-config.h \
+ include/tdep-ppc64/jmpbuf.h include/tdep-ppc64/libunwind_i.h
DISTCLEANFILES = include/libunwind.h include/tdep
Index: libunwind/include/libunwind-ppc64.h
===================================================================
--- /dev/null
+++ libunwind/include/libunwind-ppc64.h
@@ -0,0 +1,262 @@
+/* libunwind - a platform-independent unwind library
+ Copyright (C) 2002-2004 Hewlett-Packard Co
+ Contributed by David Mosberger-Tang
+
+ Copied from libunwind-x86_64.h, modified slightly for building
+ frysk successfully on ppc64, by Wu Zhou
+ Will be replaced when libunwind is ready on ppc64 platform.
+
+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. */
+
+#ifndef LIBUNWIND_H
+#define LIBUNWIND_H
+
+#if defined(__cplusplus) || defined(c_plusplus)
+extern "C" {
+#endif
+
+#include
+#include
+
+#define UNW_TARGET ppc64
+#define UNW_TARGET_PPC64 1
+
+#define _U_TDEP_QP_TRUE 0 /* see libunwind-dynamic.h */
+
+/*
+ * This needs to be big enough to accommodate "struct cursor", while
+ * leaving some slack for future expansion. Changing this value will
+ * require recompiling all users of this library. Stack allocation is
+ * relatively cheap and unwind-state copying is relatively rare, so we want
+ * to err on making it rather too big than too small.
+ *
+ * To simplify this whole process, we are at least initially taking the
+ * tack that UNW_PPC64_* map straight across to the .eh_frame column register
+ * numbers. These register numbers come from gcc's source in
+ * gcc/config/rs6000/rs6000.h
+ *
+ * UNW_TDEP_CURSOR_LEN is in terms of unw_word_t size. Since we have 115
+ * elements in the loc array, each sized 2 * unw_word_t, plus the rest of
+ * the cursor struct, this puts us at about 2 * 115 + 40 = 270. Let's
+ * round that up to 280.
+ */
+
+#define UNW_TDEP_CURSOR_LEN 280
+
+#if __WORDSIZE==32
+typedef uint32_t unw_word_t;
+typedef int32_t unw_sword_t;
+#else
+typedef uint64_t unw_word_t;
+typedef int64_t unw_sword_t;
+#endif
+
+typedef long double unw_tdep_fpreg_t;
+
+/*
+ * Vector register (in PowerPC64 used for AltiVec registers)
+ */
+typedef struct {
+ uint64_t halves[2];
+} unw_tdep_vreg_t;
+
+typedef enum
+ {
+ UNW_PPC64_R0,
+ UNW_PPC64_R1, /* called STACK_POINTER in gcc */
+ UNW_PPC64_R2,
+ UNW_PPC64_R3,
+ UNW_PPC64_R4,
+ UNW_PPC64_R5,
+ UNW_PPC64_R6,
+ UNW_PPC64_R7,
+ UNW_PPC64_R8,
+ UNW_PPC64_R9,
+ UNW_PPC64_R10,
+ UNW_PPC64_R11, /* called STATIC_CHAIN in gcc */
+ UNW_PPC64_R12,
+ UNW_PPC64_R13,
+ UNW_PPC64_R14,
+ UNW_PPC64_R15,
+ UNW_PPC64_R16,
+ UNW_PPC64_R17,
+ UNW_PPC64_R18,
+ UNW_PPC64_R19,
+ UNW_PPC64_R20,
+ UNW_PPC64_R21,
+ UNW_PPC64_R22,
+ UNW_PPC64_R23,
+ UNW_PPC64_R24,
+ UNW_PPC64_R25,
+ UNW_PPC64_R26,
+ UNW_PPC64_R27,
+ UNW_PPC64_R28,
+ UNW_PPC64_R29,
+ UNW_PPC64_R30,
+ UNW_PPC64_R31, /* called HARD_FRAME_POINTER in gcc */
+
+ UNW_PPC64_F0 = 32,
+ UNW_PPC64_F1,
+ UNW_PPC64_F2,
+ UNW_PPC64_F3,
+ UNW_PPC64_F4,
+ UNW_PPC64_F5,
+ UNW_PPC64_F6,
+ UNW_PPC64_F7,
+ UNW_PPC64_F8,
+ UNW_PPC64_F9,
+ UNW_PPC64_F10,
+ UNW_PPC64_F11,
+ UNW_PPC64_F12,
+ UNW_PPC64_F13,
+ UNW_PPC64_F14,
+ UNW_PPC64_F15,
+ UNW_PPC64_F16,
+ UNW_PPC64_F17,
+ UNW_PPC64_F18,
+ UNW_PPC64_F19,
+ UNW_PPC64_F20,
+ UNW_PPC64_F21,
+ UNW_PPC64_F22,
+ UNW_PPC64_F23,
+ UNW_PPC64_F24,
+ UNW_PPC64_F25,
+ UNW_PPC64_F26,
+ UNW_PPC64_F27,
+ UNW_PPC64_F28,
+ UNW_PPC64_F29,
+ UNW_PPC64_F30,
+ UNW_PPC64_F31,
+ /* Note that there doesn't appear to be an .eh_frame register column
+ for the FPSCR register. I don't know why this is. Since .eh_frame
+ info is what this implementation uses for unwinding, we have no way
+ to unwind this register, and so we will not expose an FPSCR register
+ number in the libunwind API.
+ */
+
+ UNW_PPC64_LR = 65,
+ UNW_PPC64_CTR = 66,
+ UNW_PPC64_ARG_POINTER = 67,
+
+ UNW_PPC64_CR0 = 68,
+ UNW_PPC64_CR1,
+ UNW_PPC64_CR2,
+ UNW_PPC64_CR3,
+ UNW_PPC64_CR4,
+ /* CR5 .. CR7 are currently unused */
+ UNW_PPC64_CR5,
+ UNW_PPC64_CR6,
+ UNW_PPC64_CR7,
+
+ UNW_PPC64_XER = 76,
+
+ UNW_PPC64_V0 = 77,
+ UNW_PPC64_V1,
+ UNW_PPC64_V2,
+ UNW_PPC64_V3,
+ UNW_PPC64_V4,
+ UNW_PPC64_V5,
+ UNW_PPC64_V6,
+ UNW_PPC64_V7,
+ UNW_PPC64_V8,
+ UNW_PPC64_V9,
+ UNW_PPC64_V10,
+ UNW_PPC64_V11,
+ UNW_PPC64_V12,
+ UNW_PPC64_V13,
+ UNW_PPC64_V14,
+ UNW_PPC64_V15,
+ UNW_PPC64_V16,
+ UNW_PPC64_V17,
+ UNW_PPC64_V18,
+ UNW_PPC64_V19,
+ UNW_PPC64_V20,
+ UNW_PPC64_V21,
+ UNW_PPC64_V22,
+ UNW_PPC64_V23,
+ UNW_PPC64_V24,
+ UNW_PPC64_V25,
+ UNW_PPC64_V26,
+ UNW_PPC64_V27,
+ UNW_PPC64_V28,
+ UNW_PPC64_V29,
+ UNW_PPC64_V30,
+ UNW_PPC64_V31,
+
+ UNW_PPC64_VRSAVE = 109,
+ UNW_PPC64_VSCR = 110,
+ UNW_PPC64_SPE_ACC = 111,
+ UNW_PPC64_SPEFSCR = 112,
+
+ /* frame info (read-only) */
+ UNW_PPC64_FRAME_POINTER,
+ UNW_PPC64_NIP,
+
+
+ UNW_TDEP_LAST_REG = UNW_PPC64_NIP,
+
+ UNW_TDEP_IP = UNW_PPC64_NIP,
+ UNW_TDEP_SP = UNW_PPC64_R1,
+ UNW_TDEP_EH = UNW_PPC64_R12
+ }
+ppc64_regnum_t;
+
+/*
+ * According to David Edelsohn, GNU gcc uses R3, R4, R5, and maybe R6 for
+ * passing parameters to exception handlers.
+ */
+
+#define UNW_TDEP_NUM_EH_REGS 4
+
+typedef struct unw_tdep_save_loc
+ {
+ /* Additional target-dependent info on a save location. */
+ }
+unw_tdep_save_loc_t;
+
+/* On ppc64, we can directly use ucontext_t as the unwind context. */
+typedef ucontext_t unw_tdep_context_t;
+
+/* XXX this is not ideal: an application should not be prevented from
+ using the "getcontext" name just because it's using libunwind. We
+ can't just use __getcontext() either, because that isn't exported
+ by glibc... */
+#define unw_tdep_getcontext(uc) (getcontext (uc), 0)
+
+#include "libunwind-dynamic.h"
+
+typedef struct
+ {
+ /* no ppc64-specific auxiliary proc-info */
+ }
+unw_tdep_proc_info_t;
+
+#include "libunwind-common.h"
+
+#define unw_tdep_is_fpreg UNW_ARCH_OBJ(is_fpreg)
+extern int unw_tdep_is_fpreg (int);
+
+#if defined(__cplusplus) || defined(c_plusplus)
+}
+#endif
+
+#endif /* LIBUNWIND_H */
Index: libunwind/include/tdep-ppc64/dwarf-config.h
===================================================================
--- /dev/null
+++ libunwind/include/tdep-ppc64/dwarf-config.h
@@ -0,0 +1,54 @@
+/* libunwind - a platform-independent unwind library
+ Copyright (c) 2003, 2005 Hewlett-Packard Development Company, L.P.
+ Contributed by David Mosberger-Tang
+
+ Copied from libunwind-x86_64.h, modified slightly for building
+ frysk successfully on ppc64, by Wu Zhou
+ Will be replaced when libunwind is ready on ppc64 platform.
+
+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. */
+
+#ifndef dwarf_config_h
+#define dwarf_config_h
+
+/* For PPC64, 48 GPRs + 33 FPRs + 33 AltiVec + 1 SPE */
+#define DWARF_NUM_PRESERVED_REGS 115
+
+#define DWARF_REGNUM_MAP_LENGTH 115
+
+/* Return TRUE if the ADDR_SPACE uses big-endian byte-order. */
+#define dwarf_is_big_endian(addr_space) 1
+
+/* Convert a pointer to a dwarf_cursor structure to a pointer to
+ unw_cursor_t. */
+#define dwarf_to_cursor(c) ((unw_cursor_t *) (c))
+
+typedef struct dwarf_loc
+ {
+ unw_word_t val;
+#ifndef UNW_LOCAL_ONLY
+ unw_word_t type; /* see X86_LOC_TYPE_* macros. */
+#endif
+ }
+dwarf_loc_t;
+
+#endif /* dwarf_config_h */
Index: libunwind/include/tdep-ppc64/jmpbuf.h
===================================================================
--- /dev/null
+++ libunwind/include/tdep-ppc64/jmpbuf.h
@@ -0,0 +1,35 @@
+/* libunwind - a platform-independent unwind library
+ Copyright (C) 2004 Hewlett-Packard Co
+ Contributed by David Mosberger-Tang
+
+ Copied from libunwind-x86_64.h, modified slightly for building
+ frysk successfully on ppc64, by Wu Zhou
+ Will be replaced when libunwind is ready on ppc64 platform.
+
+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. */
+
+/* Use glibc's jump-buffer indices; NPTL peeks at SP: */
+
+#define JB_SP 6
+#define JB_RP 7
+#define JB_MASK_SAVED 8
+#define JB_MASK 9
Index: libunwind/include/tdep-ppc64/libunwind_i.h
===================================================================
--- /dev/null
+++ libunwind/include/tdep-ppc64/libunwind_i.h
@@ -0,0 +1,299 @@
+/* libunwind - a platform-independent unwind library
+ Copyright (C) 2002-2005 Hewlett-Packard Co
+ Contributed by David Mosberger-Tang
+
+ Copied from libunwind-x86_64.h, modified slightly for building
+ frysk successfully on ppc64, by Wu Zhou
+ Will be replaced when libunwind is ready on ppc64 platform.
+
+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. */
+
+#ifndef PPC64_LIBUNWIND_I_H
+#define PPC64_LIBUNWIND_I_H
+
+/* Target-dependent definitions that are internal to libunwind but need
+ to be shared with target-independent code. */
+
+#include
+#include
+
+#include "elf64.h"
+#include "dwarf.h"
+#include "mempool.h"
+
+struct unw_addr_space
+{
+ struct unw_accessors acc;
+ unw_caching_policy_t caching_policy;
+#ifdef HAVE_ATOMIC_OPS_H
+ AO_t cache_generation;
+#else
+ uint32_t cache_generation;
+#endif
+ unw_word_t dyn_generation; /* see dyn-common.h */
+ unw_word_t dyn_info_list_addr; /* (cached) dyn_info_list_addr */
+ struct dwarf_rs_cache global_cache;
+};
+
+struct cursor
+{
+ struct dwarf_cursor dwarf; /* must be first */
+
+ /* Format of sigcontext structure and address at which it is
+ stored: */
+ enum
+ {
+ PPC64_SCF_NONE, /* no signal frame encountered */
+ PPC64_SCF_LINUX_RT_SIGFRAME /* POSIX ucontext_t */
+ }
+ sigcontext_format;
+ unw_word_t sigcontext_addr;
+};
+
+#define DWARF_GET_LOC(l) ((l).val)
+
+#ifdef UNW_LOCAL_ONLY
+# define DWARF_NULL_LOC DWARF_LOC (0, 0)
+# define DWARF_IS_NULL_LOC(l) (DWARF_GET_LOC (l) == 0)
+# define DWARF_LOC(r, t) ((dwarf_loc_t) { .val = (r) })
+# define DWARF_IS_REG_LOC(l) 0
+# define DWARF_IS_FP_LOC(l) 0
+# define DWARF_IS_V_LOC(l) 0
+# define DWARF_MEM_LOC(c,m) DWARF_LOC ((m), 0)
+# define DWARF_REG_LOC(c,r) (DWARF_LOC((unw_word_t) \
+ tdep_uc_addr((c)->as_arg, (r)), 0))
+# define DWARF_FPREG_LOC(c,r) (DWARF_LOC((unw_word_t) \
+ tdep_uc_addr((c)->as_arg, (r)), 0))
+# define DWARF_VREG_LOC(c,r) (DWARF_LOC((unw_word_t) \
+ tdep_uc_addr((c)->as_arg, (r)), 0))
+#else /* !UNW_LOCAL_ONLY */
+
+# define DWARF_LOC_TYPE_FP (1 << 0)
+# define DWARF_LOC_TYPE_REG (1 << 1)
+# define DWARF_LOC_TYPE_V (1 << 2)
+# define DWARF_NULL_LOC DWARF_LOC (0, 0)
+# define DWARF_IS_NULL_LOC(l) \
+ ({ dwarf_loc_t _l = (l); _l.val == 0 && _l.type == 0; })
+# define DWARF_LOC(r, t) ((dwarf_loc_t) { .val = (r), .type = (t) })
+# define DWARF_IS_REG_LOC(l) (((l).type & DWARF_LOC_TYPE_REG) != 0)
+# define DWARF_IS_FP_LOC(l) (((l).type & DWARF_LOC_TYPE_FP) != 0)
+# define DWARF_IS_V_LOC(l) (((l).type & DWARF_LOC_TYPE_V) != 0)
+# define DWARF_MEM_LOC(c,m) DWARF_LOC ((m), 0)
+# define DWARF_REG_LOC(c,r) DWARF_LOC((r), DWARF_LOC_TYPE_REG)
+# define DWARF_FPREG_LOC(c,r) DWARF_LOC((r), (DWARF_LOC_TYPE_REG \
+ | DWARF_LOC_TYPE_FP))
+# define DWARF_VREG_LOC(c,r) DWARF_LOC((r), (DWARF_LOC_TYPE_REG \
+ | DWARF_LOC_TYPE_V))
+
+#endif /* !UNW_LOCAL_ONLY */
+
+static inline int
+dwarf_getvr (struct dwarf_cursor *c, dwarf_loc_t loc, unw_vreg_t * val)
+{
+ unw_word_t *valp = (unw_word_t *) val;
+ unw_word_t addr;
+ int ret;
+
+ if (DWARF_IS_NULL_LOC (loc))
+ return -UNW_EBADREG;
+
+ assert (DWARF_IS_V_LOC (loc));
+ assert (!DWARF_IS_FP_LOC (loc));
+
+ if (DWARF_IS_REG_LOC (loc))
+ return (*c->as->acc.access_vreg) (c->as, DWARF_GET_LOC (loc),
+ val, 0, c->as_arg);
+
+ addr = DWARF_GET_LOC (loc);
+
+ if ((ret = (*c->as->acc.access_mem) (c->as, addr + 0, valp,
+ 0, c->as_arg)) < 0)
+ return ret;
+
+ return (*c->as->acc.access_mem) (c->as, addr + 8, valp + 1, 0, c->as_arg);
+}
+
+static inline int
+dwarf_putvr (struct dwarf_cursor *c, dwarf_loc_t loc, unw_vreg_t val)
+{
+ unw_word_t *valp = (unw_word_t *) & val;
+ unw_word_t addr;
+ int ret;
+
+ if (DWARF_IS_NULL_LOC (loc))
+ return -UNW_EBADREG;
+
+ assert (DWARF_IS_V_LOC (loc));
+ assert (!DWARF_IS_FP_LOC (loc));
+
+ if (DWARF_IS_REG_LOC (loc))
+ return (*c->as->acc.access_vreg) (c->as, DWARF_GET_LOC (loc),
+ &val, 1, c->as_arg);
+
+ addr = DWARF_GET_LOC (loc);
+ if ((ret = (*c->as->acc.access_mem) (c->as, addr + 0, valp,
+ 1, c->as_arg)) < 0)
+ return ret;
+
+ return (*c->as->acc.access_mem) (c->as, addr + 8, valp + 1, 1, c->as_arg);
+}
+
+static inline int
+dwarf_getfp (struct dwarf_cursor *c, dwarf_loc_t loc, unw_fpreg_t * val)
+{
+ unw_word_t *valp = (unw_word_t *) val;
+ unw_word_t addr;
+
+ if (DWARF_IS_NULL_LOC (loc))
+ return -UNW_EBADREG;
+
+ assert (DWARF_IS_FP_LOC (loc));
+ assert (!DWARF_IS_V_LOC (loc));
+
+ if (DWARF_IS_REG_LOC (loc))
+ return (*c->as->acc.access_fpreg) (c->as, DWARF_GET_LOC (loc),
+ val, 0, c->as_arg);
+
+ addr = DWARF_GET_LOC (loc);
+ return (*c->as->acc.access_mem) (c->as, addr + 0, valp, 0, c->as_arg);
+
+}
+
+static inline int
+dwarf_putfp (struct dwarf_cursor *c, dwarf_loc_t loc, unw_fpreg_t val)
+{
+ unw_word_t *valp = (unw_word_t *) & val;
+ unw_word_t addr;
+
+ if (DWARF_IS_NULL_LOC (loc))
+ return -UNW_EBADREG;
+
+ assert (DWARF_IS_FP_LOC (loc));
+ assert (!DWARF_IS_V_LOC (loc));
+
+ if (DWARF_IS_REG_LOC (loc))
+ return (*c->as->acc.access_fpreg) (c->as, DWARF_GET_LOC (loc),
+ &val, 1, c->as_arg);
+
+ addr = DWARF_GET_LOC (loc);
+
+ return (*c->as->acc.access_mem) (c->as, addr + 0, valp, 1, c->as_arg);
+}
+
+static inline int
+dwarf_get (struct dwarf_cursor *c, dwarf_loc_t loc, unw_word_t * val)
+{
+ if (DWARF_IS_NULL_LOC (loc))
+ return -UNW_EBADREG;
+
+ /* If a code-generator were to save a value of type unw_word_t in a
+ floating-point register, we would have to support this case. I
+ suppose it could happen with MMX registers, but does it really
+ happen? */
+ assert (!DWARF_IS_FP_LOC (loc));
+ assert (!DWARF_IS_V_LOC (loc));
+
+ if (DWARF_IS_REG_LOC (loc))
+ return (*c->as->acc.access_reg) (c->as, DWARF_GET_LOC (loc), val,
+ 0, c->as_arg);
+ else
+ return (*c->as->acc.access_mem) (c->as, DWARF_GET_LOC (loc), val,
+ 0, c->as_arg);
+}
+
+static inline int
+dwarf_put (struct dwarf_cursor *c, dwarf_loc_t loc, unw_word_t val)
+{
+ if (DWARF_IS_NULL_LOC (loc))
+ return -UNW_EBADREG;
+
+ /* If a code-generator were to save a value of type unw_word_t in a
+ floating-point register, we would have to support this case. I
+ suppose it could happen with MMX registers, but does it really
+ happen? */
+ assert (!DWARF_IS_FP_LOC (loc));
+ assert (!DWARF_IS_V_LOC (loc));
+
+ if (DWARF_IS_REG_LOC (loc))
+ return (*c->as->acc.access_reg) (c->as, DWARF_GET_LOC (loc), &val,
+ 1, c->as_arg);
+ else
+ return (*c->as->acc.access_mem) (c->as, DWARF_GET_LOC (loc), &val,
+ 1, c->as_arg);
+}
+
+
+
+#define tdep_needs_initialization UNW_OBJ(needs_initialization)
+#define tdep_init UNW_OBJ(init)
+/* Platforms that support UNW_INFO_FORMAT_TABLE need to define
+ tdep_search_unwind_table. */
+#define tdep_search_unwind_table dwarf_search_unwind_table
+#define tdep_uc_addr UNW_ARCH_OBJ(uc_addr)
+#define tdep_get_elf_image UNW_ARCH_OBJ(get_elf_image)
+#define tdep_get_func_addr UNW_ARCH_OBJ(get_func_addr)
+#define tdep_access_reg UNW_OBJ(access_reg)
+#define tdep_access_fpreg UNW_OBJ(access_fpreg)
+#define tdep_access_vreg UNW_OBJ(access_vreg)
+
+#ifdef UNW_LOCAL_ONLY
+# define tdep_find_proc_info(c,ip,n) \
+ dwarf_find_proc_info((c)->as, (ip), &(c)->pi, (n), \
+ (c)->as_arg)
+# define tdep_put_unwind_info(as,pi,arg) \
+ dwarf_put_unwind_info((as), (pi), (arg))
+#else
+# define tdep_find_proc_info(c,ip,n) \
+ (*(c)->as->acc.find_proc_info)((c)->as, (ip), &(c)->pi, (n), \
+ (c)->as_arg)
+# define tdep_put_unwind_info(as,pi,arg) \
+ (*(as)->acc.put_unwind_info)((as), (pi), (arg))
+#endif
+
+extern int tdep_fetch_proc_info_post (struct dwarf_cursor *c, unw_word_t ip,
+ int need_unwind_info);
+
+#define tdep_get_as(c) ((c)->dwarf.as)
+#define tdep_get_as_arg(c) ((c)->dwarf.as_arg)
+#define tdep_get_ip(c) ((c)->dwarf.ip)
+#define tdep_big_endian(as) 1
+
+extern int tdep_needs_initialization;
+
+extern void tdep_init (void);
+extern int tdep_search_unwind_table (unw_addr_space_t as, unw_word_t ip,
+ unw_dyn_info_t * di,
+ unw_proc_info_t * pi,
+ int need_unwind_info, void *arg);
+extern void *tdep_uc_addr (ucontext_t * uc, int reg);
+extern int tdep_get_elf_image (struct elf_image *ei, pid_t pid, unw_word_t ip,
+ unsigned long *segbase, unsigned long *mapoff);
+extern int tdep_access_reg (struct cursor *c, unw_regnum_t reg,
+ unw_word_t * valp, int write);
+extern int tdep_access_fpreg (struct cursor *c, unw_regnum_t reg,
+ unw_fpreg_t * valp, int write);
+extern int tdep_access_vreg (struct cursor *c, unw_regnum_t reg,
+ unw_vreg_t * valp, int write);
+
+extern int tdep_get_func_addr (unw_addr_space_t as, unw_word_t addr, unw_word_t *func_addr, void *arg);
+
+#endif /* PPC64_LIBUNWIND_I_H */
Index: libunwind/src/Makefile.am
===================================================================
--- libunwind.orig/src/Makefile.am
+++ libunwind/src/Makefile.am
@@ -38,6 +38,7 @@ libunwind_setjmp_la_SOURCES_ia64 = ia64/
libunwind_setjmp_la_SOURCES_hppa = hppa/siglongjmp.S
libunwind_setjmp_la_SOURCES_x86 = x86/longjmp.S x86/siglongjmp.S
libunwind_setjmp_la_SOURCES_x86_64 = x86_64/longjmp.S x86_64/siglongjmp.S
+libunwind_setjmp_la_SOURCES_ppc64 = ppc64/longjmp.S ppc64/siglongjmp.S
### libunwind:
@@ -55,6 +56,7 @@ libunwind_la_SOURCES_generic = \
mi/Gput_dynamic_unwind_info.c mi/Gdestroy_addr_space.c \
mi/Gget_reg.c mi/Gset_reg.c \
mi/Gget_fpreg.c mi/Gset_fpreg.c \
+ mi/Gget_vreg.c mi/Gset_vreg.c \
mi/Gset_caching_policy.c
# List of arch-independent files needed by local-only library (libunwind):
@@ -160,7 +162,8 @@ libunwind_la_SOURCES_x86 = $(libunwind_l
$(libunwind_la_SOURCES_local) \
$(dwarf_SOURCES_local) \
dwarf/Lfind_proc_info-lsb.c \
- x86/Lcreate_addr_space.c x86/Lget_save_loc.c x86/Lglobal.c \
+ x86/Lcreate_addr_space.c \
+ x86/Lget_save_loc.c x86/Lglobal.c \
x86/Linit.c x86/Linit_local.c x86/Linit_remote.c \
x86/Lis_signal_frame.c x86/Lget_proc_info.c x86/Lregs.c \
x86/Lresume.c x86/Lstep.c
@@ -170,7 +173,8 @@ libunwind_x86_la_SOURCES_x86 = $(libunwi
$(libunwind_la_SOURCES_generic) \
$(dwarf_SOURCES_generic) \
dwarf/Gfind_proc_info-lsb.c \
- x86/Gcreate_addr_space.c x86/Gget_save_loc.c x86/Gglobal.c \
+ x86/Gcreate_addr_space.c x86/Gget_func_addr.c \
+ x86/Gget_save_loc.c x86/Gglobal.c \
x86/Ginit.c x86/Ginit_local.c x86/Ginit_remote.c \
x86/Gis_signal_frame.c x86/Gget_proc_info.c x86/Gregs.c \
x86/Gresume.c x86/Gstep.c
@@ -203,6 +207,34 @@ libunwind_x86_64_la_SOURCES_x86_64 = $(l
x86_64/Gis_signal_frame.c x86_64/Gget_proc_info.c x86_64/Gregs.c \
x86_64/Gresume.c x86_64/Gstep.c
+# The list of files that go both into libunwind and libunwind-ppc64:
+libunwind_la_SOURCES_ppc64_common = $(libunwind_la_SOURCES_common) \
+ $(dwarf_SOURCES_common) \
+ elf64.c elf64.h \
+ ppc64/init.h ppc64/unwind_i.h ppc64/ucontext_i.h \
+ ppc64/is_fpreg.c ppc64/regname.c
+
+# The list of files that go into libunwind:
+libunwind_la_SOURCES_ppc64 = $(libunwind_la_SOURCES_ppc64_common) \
+ $(libunwind_la_SOURCES_local) \
+ $(dwarf_SOURCES_local) \
+ dwarf/Lfind_proc_info-lsb.c \
+ ppc64/Lglobal.c ppc64/Linit.c ppc64/Linit_local.c \
+ ppc64/Lis_signal_frame.c ppc64/Lget_proc_info.c ppc64/Lregs.c \
+ ppc64/Lresume.c ppc64/Lstep.c
+
+# The list of files that go into libunwind-ppc64:
+libunwind_ppc64_la_SOURCES_ppc64 = $(libunwind_la_SOURCES_ppc64_common) \
+ $(libunwind_la_SOURCES_generic) \
+ $(dwarf_SOURCES_generic) \
+ dwarf/Gfind_proc_info-lsb.c \
+ ppc64/Gcreate_addr_space.c \
+ ppc64/Gget_func_addr.c ppc64/Gget_proc_info.c \
+ ppc64/Gget_save_loc.c ppc64/Gglobal.c \
+ ppc64/Ginit.c ppc64/Ginit_local.c ppc64/Ginit_remote.c \
+ ppc64/Gis_signal_frame.c ppc64/Gregs.c ppc64/Gresume.c \
+ ppc64/Gstep.c
+
if REMOTE_ONLY
install-exec-hook:
# Nothing to do here....
@@ -283,6 +315,20 @@ if !REMOTE_ONLY
endif
libunwind_setjmp_la_SOURCES = $(libunwind_setjmp_la_SOURCES_common) \
$(libunwind_setjmp_la_SOURCES_x86_64)
+
+else
+if ARCH_PPC64
+ lib_LTLIBRARIES_arch = libunwind-ppc64.la
+ libunwind_la_SOURCES = $(libunwind_la_SOURCES_ppc64)
+ libunwind_ppc64_la_SOURCES = $(libunwind_ppc64_la_SOURCES_ppc64)
+ libunwind_ppc64_la_LDFLAGS = $(COMMON_SO_LDFLAGS) -version-info $(SOVERSION)
+if !REMOTE_ONLY
+ libunwind_ppc64_la_LIBADD = libunwind.la -lc
+endif
+ libunwind_setjmp_la_SOURCES = $(libunwind_setjmp_la_SOURCES_common) \
+ $(libunwind_setjmp_la_SOURCES_ppc64)
+
+endif # ARCH_PPC64
endif # ARCH_X86_64
endif # ARCH_X86
endif # ARCH_HPPA
@@ -321,7 +367,9 @@ EXTRA_DIST = elfxx.h elfxx.c unwind/unwi
$(libunwind_setjmp_la_SOURCES_hppa) \
$(libunwind_setjmp_la_SOURCES_ia64) \
$(libunwind_setjmp_la_SOURCES_x86) \
- $(libunwind_setjmp_la_SOURCES_x86_64)
+ $(libunwind_setjmp_la_SOURCES_x86_64) \
+ $(libunwind_setjmp_la_SOURCES_ppc64)
+
# The -version-info flag accepts an argument of the form
# `current[:revision[:age]]'. So, passing `-version-info 3:12:1' sets
Index: libunwind/src/ppc64/Gcreate_addr_space.c
===================================================================
--- /dev/null
+++ libunwind/src/ppc64/Gcreate_addr_space.c
@@ -0,0 +1,56 @@
+/* libunwind - a platform-independent unwind library
+ Copyright (C) 2003 Hewlett-Packard Co
+ Contributed by David Mosberger-Tang
+
+ Copied from src/x86_64/, modified slightly (or made empty stubs) for
+ building frysk successfully on ppc64, by Wu Zhou
+ Will be replaced when libunwind is ready on ppc64 platform.
+
+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
+
+#include "unwind_i.h"
+
+PROTECTED unw_addr_space_t
+unw_create_addr_space (unw_accessors_t *a, int byte_order)
+{
+#ifdef UNW_LOCAL_ONLY
+ return NULL;
+#else
+ unw_addr_space_t as = malloc (sizeof (*as));
+
+ if (!as)
+ return NULL;
+
+ memset (as, 0, sizeof (*as));
+
+ as->acc = *a;
+
+ /*
+ * Linux ppc64 supports only big-endian.
+ */
+ if (byte_order != 0 && byte_order != __BIG_ENDIAN)
+ return NULL;
+ return as;
+#endif
+}
Index: libunwind/src/ppc64/Gget_func_addr.c
===================================================================
--- /dev/null
+++ libunwind/src/ppc64/Gget_func_addr.c
@@ -0,0 +1,60 @@
+/* libunwind - a platform-independent unwind library
+ Copyright (C) 2002, 2004 Hewlett-Packard Co
+ Contributed by David Mosberger-Tang
+
+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. */
+
+/* This module was contributed by Corey Ashford address@hidden */
+
+/* func_descr_t is defined in /usr/include/asm-ppc64/types.h, but is
+visible only to kernel code. Let's use the same definition here, copied
+from that .h file. If the definitiion in the above .h file changes, the
+definition below must be changed to match it. */
+
+typedef struct
+{
+ unsigned long entry;
+ unsigned long toc;
+ unsigned long env;
+} func_descr_t;
+
+#include "unwind_i.h"
+
+int
+tdep_get_func_addr (unw_addr_space_t as, unw_word_t addr,
+ unw_word_t *func_addr, void *arg)
+{
+ func_descr_t dummy;
+ unw_word_t offset;
+ unw_accessors_t *a;
+
+ a = unw_get_accessors (as);
+
+ /*
+ * This really is a fixed offset of zero, so this code is here in the
+ * event that someone decides to change the position of the entry
+ * component within the func_descr_t structure. (very unlikely)
+ */
+ offset = ((void *) &dummy.entry - (void *) &dummy);
+
+ return (a->access_mem) (as, addr + offset, func_addr, 0, arg) < 0;
+}
Index: libunwind/src/ppc64/Gget_proc_info.c
===================================================================
--- /dev/null
+++ libunwind/src/ppc64/Gget_proc_info.c
@@ -0,0 +1,37 @@
+/* libunwind - a platform-independent unwind library
+ Copyright (c) 2002-2003 Hewlett-Packard Development Company, L.P.
+ Contributed by David Mosberger-Tang
+
+ Copied from src/x86_64/, modified slightly (or made empty stubs) for
+ building frysk successfully on ppc64, by Wu Zhou
+ Will be replaced when libunwind is ready on ppc64 platform.
+
+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"
+
+PROTECTED int
+unw_get_proc_info (unw_cursor_t *cursor, unw_proc_info_t *pi)
+{
+ /* XXX: empty stub. */
+ return 0;
+}
Index: libunwind/src/ppc64/Gget_save_loc.c
===================================================================
--- /dev/null
+++ libunwind/src/ppc64/Gget_save_loc.c
@@ -0,0 +1,37 @@
+/* libunwind - a platform-independent unwind library
+ Copyright (C) 2004 Hewlett-Packard Co
+ Contributed by David Mosberger-Tang
+
+ Copied from src/x86_64/, modified slightly (or made empty stubs) for
+ building frysk successfully on ppc64, by Wu Zhou
+ Will be replaced when libunwind is ready on ppc64 platform.
+
+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"
+
+PROTECTED int
+unw_get_save_loc (unw_cursor_t *cursor, int reg, unw_save_loc_t *sloc)
+{
+ /* XXX: empty stub. */
+ return 0;
+}
Index: libunwind/src/ppc64/Gglobal.c
===================================================================
--- /dev/null
+++ libunwind/src/ppc64/Gglobal.c
@@ -0,0 +1,183 @@
+/* libunwind - a platform-independent unwind library
+ Copyright (c) 2003, 2005 Hewlett-Packard Development Company, L.P.
+
+ Contributed by Corey Ashford
+
+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 pthread_mutex_t ppc64_lock = PTHREAD_MUTEX_INITIALIZER;
+HIDDEN int tdep_needs_initialization = 1;
+
+/* The API register numbers are exactly the same as the .eh_frame
+ registers, for now at least. */
+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);
+
+ sigprocmask (SIG_SETMASK, &unwi_full_mask, &saved_mask);
+ mutex_lock (&ppc64_lock);
+ {
+ if (!tdep_needs_initialization)
+ /* another thread else beat us to it... */
+ goto out;
+
+ mi_init ();
+
+ dwarf_init ();
+
+#ifndef UNW_REMOTE_ONLY
+ ppc64_local_addr_space_init ();
+#endif
+ tdep_needs_initialization = 0; /* signal that we're initialized... */
+ }
+ out:
+ mutex_unlock (&ppc64_lock);
+ sigprocmask (SIG_SETMASK, &saved_mask, NULL);
+}
Index: libunwind/src/ppc64/Ginit.c
===================================================================
--- /dev/null
+++ libunwind/src/ppc64/Ginit.c
@@ -0,0 +1,266 @@
+/* libunwind - a platform-independent unwind library
+ Copyright (C) 2002, 2004 Hewlett-Packard Co
+
+Contributed by Corey Ashford
+
+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
+#include
+
+#include "ucontext_i.h"
+#include "unwind_i.h"
+
+#ifdef UNW_REMOTE_ONLY
+
+/* unw_local_addr_space is a NULL pointer in this case. */
+PROTECTED unw_addr_space_t unw_local_addr_space;
+
+#else /* !UNW_REMOTE_ONLY */
+
+static struct unw_addr_space local_addr_space;
+
+PROTECTED unw_addr_space_t unw_local_addr_space = &local_addr_space;
+
+
+#define PAGE_SIZE 4096
+#define PAGE_START(a) ((a) & ~(PAGE_SIZE-1))
+
+
+static void *
+uc_addr (ucontext_t *uc, int reg)
+{
+ void *addr;
+
+ if ((unsigned) (reg - UNW_PPC64_R0) < 32)
+ addr = &uc->uc_mcontext.gp_regs[reg - UNW_PPC64_R0];
+
+ else if ((unsigned) (reg - UNW_PPC64_F0) < 32)
+ addr = &uc->uc_mcontext.fp_regs[reg - UNW_PPC64_F0];
+
+ else if ((unsigned) (reg - UNW_PPC64_V0) < 32)
+ addr = (uc->uc_mcontext.v_regs == 0) ? NULL : &uc->uc_mcontext.v_regs->vrregs[reg - UNW_PPC64_V0][0];
+
+ else
+ {
+ unsigned gregs_idx;
+
+ switch (reg)
+ {
+ case UNW_PPC64_NIP:
+ gregs_idx = NIP_IDX;
+ break;
+ case UNW_PPC64_CTR:
+ gregs_idx = CTR_IDX;
+ break;
+ case UNW_PPC64_LR:
+ gregs_idx = LINK_IDX;
+ break;
+ case UNW_PPC64_XER:
+ gregs_idx = XER_IDX;
+ break;
+ case UNW_PPC64_CR0:
+ gregs_idx = CCR_IDX;
+ break;
+ default:
+ return NULL;
+ }
+ addr = &uc->uc_mcontext.gp_regs[gregs_idx];
+ }
+ return addr;
+}
+
+# ifdef UNW_LOCAL_ONLY
+
+HIDDEN void *
+tdep_uc_addr (ucontext_t *uc, int reg)
+{
+ return uc_addr (uc, reg);
+}
+
+# endif /* UNW_LOCAL_ONLY */
+
+HIDDEN unw_dyn_info_list_t _U_dyn_info_list;
+
+
+static void
+put_unwind_info (unw_addr_space_t as, unw_proc_info_t *proc_info, void *arg)
+{
+ /* it's a no-op */
+}
+
+static int
+get_dyn_info_list_addr (unw_addr_space_t as, unw_word_t *dyn_info_list_addr,
+ void *arg)
+{
+ *dyn_info_list_addr = (unw_word_t) &_U_dyn_info_list;
+ return 0;
+}
+
+static int
+access_mem (unw_addr_space_t as, unw_word_t addr, unw_word_t *val, int write,
+ void *arg)
+{
+ if (write)
+ {
+ Debug (12, "mem[%lx] <- %lx\n", addr, *val);
+ *(unw_word_t *) addr = *val;
+ }
+ else
+ {
+ *val = *(unw_word_t *) addr;
+ Debug (12, "mem[%lx] -> %lx\n", addr, *val);
+ }
+ return 0;
+}
+
+static int
+access_reg (unw_addr_space_t as, unw_regnum_t reg, unw_word_t *val,
+ int write, void *arg)
+{
+ unw_word_t *addr;
+ ucontext_t *uc = arg;
+
+ if ((unsigned int) (reg - UNW_PPC64_F0) < 32)
+ goto badreg;
+ if ((unsigned int) (reg - UNW_PPC64_V0) < 32)
+ goto badreg;
+
+ addr = uc_addr (uc, reg);
+ if (!addr)
+ goto badreg;
+
+ if (write)
+ {
+ *(unw_word_t *) addr = *val;
+ Debug (12, "%s <- %lx\n", unw_regname (reg), *val);
+ }
+ else
+ {
+ *val = *(unw_word_t *) addr;
+ Debug (12, "%s -> %lx\n", unw_regname (reg), *val);
+ }
+ return 0;
+
+badreg:
+ Debug (1, "bad register number %u\n", reg);
+ return -UNW_EBADREG;
+}
+
+static int
+access_fpreg (unw_addr_space_t as, unw_regnum_t reg, unw_fpreg_t *val,
+ int write, void *arg)
+{
+ ucontext_t *uc = arg;
+ unw_fpreg_t *addr;
+
+ if ((unsigned) (reg - UNW_PPC64_F0) > 32)
+ goto badreg;
+
+ if ((unsigned) (reg - UNW_PPC64_V0) < 32)
+ goto badreg;
+
+
+ addr = uc_addr (uc, reg);
+ if (!addr)
+ goto badreg;
+
+ if (write)
+ {
+ Debug (12, "%s <- %016Lf\n", unw_regname (reg), *val);
+ *(unw_fpreg_t *) addr = *val;
+ }
+ else
+ {
+ *val = *(unw_fpreg_t *) addr;
+ Debug (12, "%s -> %016Lf\n", unw_regname (reg), *val);
+ }
+ return 0;
+
+badreg:
+ Debug (1, "bad register number %u\n", reg);
+ /* attempt to access a non-preserved register */
+ return -UNW_EBADREG;
+}
+
+static int
+access_vreg (unw_addr_space_t as, unw_regnum_t reg, unw_vreg_t *val,
+ int write, void *arg)
+{
+ ucontext_t *uc = arg;
+ unw_fpreg_t *addr;
+
+ if ((unsigned) (reg - UNW_PPC64_V0) > 32)
+ goto badreg;
+
+
+ addr = uc_addr (uc, reg);
+ if (!addr)
+ goto badreg;
+
+ if (write)
+ {
+ Debug (12, "%s <- %016lx.%016lx\n",
+ unw_regname (reg), val->halves[0], val->halves[1]);
+ memcpy (addr, val, sizeof (unw_vreg_t));
+ }
+ else
+ {
+ memcpy (val, addr, sizeof (unw_vreg_t));
+ Debug (12, "%s -> %016lx.%016lx\n",
+ unw_regname (reg), val->halves[0], val->halves[1]);
+ }
+ return 0;
+
+badreg:
+ Debug (1, "bad register number %u\n", reg);
+ /* attempt to access a non-preserved register */
+ return -UNW_EBADREG;
+}
+
+static int
+get_static_proc_name (unw_addr_space_t as, unw_word_t ip,
+ char *buf, size_t buf_len, unw_word_t *offp,
+ void *arg)
+{
+ return _Uelf64_get_proc_name (getpid (), ip, buf, buf_len, offp);
+}
+
+HIDDEN void
+ppc64_local_addr_space_init (void)
+{
+ memset (&local_addr_space, 0, sizeof (local_addr_space));
+ local_addr_space.caching_policy = UNW_CACHE_GLOBAL;
+ local_addr_space.acc.find_proc_info = dwarf_find_proc_info;
+ local_addr_space.acc.put_unwind_info = put_unwind_info;
+ local_addr_space.acc.get_dyn_info_list_addr = get_dyn_info_list_addr;
+ local_addr_space.acc.access_mem = access_mem;
+ local_addr_space.acc.access_reg = access_reg;
+ local_addr_space.acc.access_fpreg = access_fpreg;
+ local_addr_space.acc.access_vreg = access_vreg;
+ local_addr_space.acc.resume = ppc64_local_resume;
+ local_addr_space.acc.get_proc_name = get_static_proc_name;
+ unw_flush_cache (&local_addr_space, 0, 0);
+
+}
+
+#endif /* !UNW_REMOTE_ONLY */
Index: libunwind/src/ppc64/Ginit_local.c
===================================================================
--- /dev/null
+++ libunwind/src/ppc64/Ginit_local.c
@@ -0,0 +1,59 @@
+/* libunwind - a platform-independent unwind library
+ Copyright (c) 2002-2003 Hewlett-Packard Development Company, L.P.
+ Contributed by David Mosberger-Tang
+
+ Copied from src/x86_64/, modified slightly (or made empty stubs) for
+ building frysk successfully on ppc64, by Wu Zhou
+ Will be replaced when libunwind is ready on ppc64 platform.
+
+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 "init.h"
+
+#ifdef UNW_REMOTE_ONLY
+
+PROTECTED int
+unw_init_local (unw_cursor_t *cursor, ucontext_t *uc)
+{
+ /* XXX: empty stub. */
+ return -UNW_EINVAL;
+}
+
+#else /* !UNW_REMOTE_ONLY */
+
+PROTECTED int
+unw_init_local (unw_cursor_t *cursor, ucontext_t *uc)
+{
+ struct cursor *c = (struct cursor *) cursor;
+
+ if (tdep_needs_initialization)
+ tdep_init ();
+
+ Debug (1, "(cursor=%p)\n", c);
+
+ c->dwarf.as = unw_local_addr_space;
+ c->dwarf.as_arg = uc;
+ return common_init (c);
+}
+
+#endif /* !UNW_REMOTE_ONLY */
Index: libunwind/src/ppc64/Ginit_remote.c
===================================================================
--- /dev/null
+++ libunwind/src/ppc64/Ginit_remote.c
@@ -0,0 +1,47 @@
+/* libunwind - a platform-independent unwind library
+ Copyright (c) 2003 Hewlett-Packard Development Company, L.P.
+
+Contributed by Corey Ashford
+
+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 "init.h"
+#include "unwind_i.h"
+
+PROTECTED int
+unw_init_remote (unw_cursor_t *cursor, unw_addr_space_t as, void *as_arg)
+{
+#ifdef UNW_LOCAL_ONLY
+ return -UNW_EINVAL;
+#else /* !UNW_LOCAL_ONLY */
+ struct cursor *c = (struct cursor *) cursor;
+
+ if (tdep_needs_initialization)
+ tdep_init ();
+
+ Debug (1, "(cursor=%p)\n", c);
+
+ c->dwarf.as = as;
+ c->dwarf.as_arg = as_arg;
+ return common_init (c);
+#endif /* !UNW_LOCAL_ONLY */
+}
Index: libunwind/src/ppc64/Gis_signal_frame.c
===================================================================
--- /dev/null
+++ libunwind/src/ppc64/Gis_signal_frame.c
@@ -0,0 +1,68 @@
+/* libunwind - a platform-independent unwind library
+ Copyright (C) 2002-2003 Hewlett-Packard Co
+ Contributed by David Mosberger-Tang
+
+ Copied from src/x86_64/, modified slightly (or made empty stubs) for
+ building frysk successfully on ppc64, by Wu Zhou
+ Will be replaced when libunwind is ready on ppc64 platform.
+
+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"
+
+PROTECTED int
+unw_is_signal_frame (unw_cursor_t * cursor)
+{
+ struct cursor *c = (struct cursor *) cursor;
+ unw_word_t w0, w1, ip;
+ unw_addr_space_t as;
+ unw_accessors_t *a;
+ void *arg;
+ int ret;
+
+ as = c->dwarf.as;
+ a = unw_get_accessors (as);
+ a->validate = 1; /* Don't trust the ip */
+ arg = c->dwarf.as_arg;
+
+ /* Check if return address points at sigreturn sequence.
+ on ppc64 Linux that is (see libc.so):
+ 0x38210080 addi r1, r1, 128 // pop the stack
+ 0x380000ac li r0, 172 // invoke system service 172
+ 0x44000002 sc
+ */
+
+ ip = c->dwarf.ip;
+ if (ip == 0)
+ return 0;
+
+ /* Read up two 8-byte words at the IP. We are only looking at 3
+ consecutive 32-bit words, so the second 8-byte word needs to be
+ shifted right by 32 bits (think big-endian) */
+
+ if ((ret = (*a->access_mem) (as, ip, &w0, 0, arg)) < 0
+ || (ret = (*a->access_mem) (as, ip + 8, &w1, 0, arg)) < 0)
+ return 0;
+ w1 >>= 32;
+ return (w0 == 0x38210080380000ac && w1 == 0x44000002);
+
+}
Index: libunwind/src/ppc64/Gregs.c
===================================================================
--- /dev/null
+++ libunwind/src/ppc64/Gregs.c
@@ -0,0 +1,105 @@
+/* libunwind - a platform-independent unwind library
+ Copyright (c) 2002-2004 Hewlett-Packard Development Company, L.P.
+
+Contributed by Corey Ashford
+
+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"
+
+HIDDEN int
+tdep_access_reg (struct cursor *c, unw_regnum_t reg, unw_word_t *valp,
+ int write)
+{
+ struct dwarf_loc loc;
+
+ switch (reg)
+ {
+ case UNW_TDEP_IP:
+ if (write)
+ {
+ c->dwarf.ip = *valp; /* update the IP cache */
+ if (c->dwarf.pi_valid && (*valp < c->dwarf.pi.start_ip
+ || *valp >= c->dwarf.pi.end_ip))
+ c->dwarf.pi_valid = 0; /* new IP outside of current proc */
+ }
+ else
+ *valp = c->dwarf.ip;
+ return 0;
+
+ case UNW_TDEP_SP:
+ if (write)
+ return -UNW_EREADONLYREG;
+ *valp = c->dwarf.cfa;
+ return 0;
+
+
+ default:
+ break;
+ }
+
+ /* make sure it's not an FP or VR register */
+ if ((((unsigned) (reg - UNW_PPC64_F0)) <= 31) ||
+ (((unsigned) (reg - UNW_PPC64_V0)) <= 31))
+ return -UNW_EBADREG;
+
+ loc = c->dwarf.loc[reg];
+
+ if (write)
+ return dwarf_put (&c->dwarf, loc, *valp);
+ else
+ return dwarf_get (&c->dwarf, loc, valp);
+}
+
+HIDDEN int
+tdep_access_fpreg (struct cursor *c, unw_regnum_t reg, unw_fpreg_t *valp,
+ int write)
+{
+ struct dwarf_loc loc;
+
+ if ((unsigned) (reg - UNW_PPC64_F0) >= 32)
+ return -UNW_EBADREG;
+
+ loc = c->dwarf.loc[reg];
+
+ if (write)
+ return dwarf_putfp (&c->dwarf, loc, *valp);
+ else
+ return dwarf_getfp (&c->dwarf, loc, valp);
+}
+
+HIDDEN int
+tdep_access_vreg (struct cursor *c, unw_regnum_t reg, unw_vreg_t *valp,
+ int write)
+{
+ struct dwarf_loc loc;
+
+ if ((unsigned) (reg - UNW_PPC64_V0) >= 32)
+ return -UNW_EBADREG;
+
+ loc = c->dwarf.loc[reg];
+
+ if (write)
+ return dwarf_putvr (&c->dwarf, loc, *valp);
+ else
+ return dwarf_getvr (&c->dwarf, loc, valp);
+}
Index: libunwind/src/ppc64/Gresume.c
===================================================================
--- /dev/null
+++ libunwind/src/ppc64/Gresume.c
@@ -0,0 +1,79 @@
+/* libunwind - a platform-independent unwind library
+ Copyright (c) 2002-2004 Hewlett-Packard Development Company, L.P.
+ Contributed by David Mosberger-Tang
+
+ Copied from src/x86_64/, modified slightly (or made empty stubs) for
+ building frysk successfully on ppc64, by Wu Zhou
+ Will be replaced when libunwind is ready on ppc64 platform.
+
+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
+
+#include "unwind_i.h"
+
+#ifndef UNW_REMOTE_ONLY
+
+#include
+
+/* sigreturn() is a no-op on x86_64 glibc. */
+
+static NORETURN inline long
+my_rt_sigreturn (void *new_sp)
+{
+ /* XXX: empty stub. */
+ abort ();
+}
+
+HIDDEN inline int
+ppc64_local_resume (unw_addr_space_t as, unw_cursor_t *cursor, void *arg)
+{
+ /* XXX: empty stub. */
+ return -UNW_EINVAL;
+}
+
+#endif /* !UNW_REMOTE_ONLY */
+
+/* This routine is responsible for copying the register values in
+ cursor C and establishing them as the current machine state. */
+
+static inline int
+establish_machine_state (struct cursor *c)
+{
+ /* XXX: empty stub. */
+ return 0;
+}
+
+PROTECTED int
+unw_resume (unw_cursor_t *cursor)
+{
+ struct cursor *c = (struct cursor *) cursor;
+ int ret;
+
+ Debug (1, "(cursor=%p)\n", c);
+
+ if ((ret = establish_machine_state (c)) < 0)
+ return ret;
+
+ return (*c->dwarf.as->acc.resume) (c->dwarf.as, (unw_cursor_t *) c,
+ c->dwarf.as_arg);
+}
Index: libunwind/src/ppc64/Gstep.asm
===================================================================
--- /dev/null
+++ libunwind/src/ppc64/Gstep.asm
@@ -0,0 +1,2029 @@
+
+Gstep.o: file format elf64-powerpc
+
+Disassembly of section .text:
+
+0000000000000000 <._Uppc64_step>:
+ 0: 7c 08 02 a6 mflr r0
+ 4: fb e1 ff f8 std r31,-8(r1)
+ 8: f8 01 00 10 std r0,16(r1)
+ c: f8 21 f5 e1 stdu r1,-2592(r1)
+ 10: 7c 3f 0b 78 mr r31,r1
+ 14: f8 7f 0a 50 std r3,2640(r31)
+ 18: e8 1f 0a 50 ld r0,2640(r31)
+ 1c: f8 1f 00 90 std r0,144(r31)
+ 20: e9 3f 00 90 ld r9,144(r31)
+ 24: e8 09 00 18 ld r0,24(r9)
+ 28: 2f a0 00 00 cmpdi cr7,r0,0
+ 2c: 40 9e 00 10 bne- cr7,3c <._Uppc64_step+0x3c>
+ 30: 38 00 00 00 li r0,0
+ 34: f8 1f 0a 00 std r0,2560(r31)
+ 38: 48 00 1d c4 b 1dfc <._Uppc64_step+0x1dfc>
+ 3c: e8 1f 00 90 ld r0,144(r31)
+ 40: 7c 03 03 78 mr r3,r0
+ 44: 48 00 00 01 bl 44 <._Uppc64_step+0x44>
+ 48: 60 00 00 00 nop
+ 4c: 7c 60 1b 78 mr r0,r3
+ 50: 90 1f 00 78 stw r0,120(r31)
+ 54: 80 1f 00 78 lwz r0,120(r31)
+ 58: 2f 80 00 00 cmpwi cr7,r0,0
+ 5c: 40 9c 00 24 bge- cr7,80 <._Uppc64_step+0x80>
+ 60: 80 1f 00 78 lwz r0,120(r31)
+ 64: 39 20 ff f6 li r9,-10
+ 68: 7f 80 48 00 cmpw cr7,r0,r9
+ 6c: 41 9e 00 14 beq- cr7,80 <._Uppc64_step+0x80>
+ 70: 80 1f 00 78 lwz r0,120(r31)
+ 74: 7c 00 07 b4 extsw r0,r0
+ 78: f8 1f 0a 00 std r0,2560(r31)
+ 7c: 48 00 1d 80 b 1dfc <._Uppc64_step+0x1dfc>
+ 80: 80 1f 00 78 lwz r0,120(r31)
+ 84: 7c 00 07 b4 extsw r0,r0
+ 88: 78 00 0f e0 rldicl r0,r0,1,63
+ 8c: 2f a0 00 00 cmpdi cr7,r0,0
+ 90: 41 9e 1d 54 beq- cr7,1de4 <._Uppc64_step+0x1de4>
+ 94: e8 7f 0a 50 ld r3,2640(r31)
+ 98: 48 00 00 01 bl 98 <._Uppc64_step+0x98>
+ 9c: 60 00 00 00 nop
+ a0: 7c 60 1b 78 mr r0,r3
+ a4: 2f a0 00 00 cmpdi cr7,r0,0
+ a8: 41 9e 1c 00 beq- cr7,1ca8 <._Uppc64_step+0x1ca8>
+ ac: e9 3f 00 90 ld r9,144(r31)
+ b0: e9 29 00 10 ld r9,16(r9)
+ b4: 38 09 00 80 addi r0,r9,128
+ b8: f8 1f 00 70 std r0,112(r31)
+ bc: e9 3f 00 90 ld r9,144(r31)
+ c0: 38 00 00 01 li r0,1
+ c4: 90 09 07 d8 stw r0,2008(r9)
+ c8: e9 3f 00 90 ld r9,144(r31)
+ cc: e8 1f 00 70 ld r0,112(r31)
+ d0: f8 09 07 e0 std r0,2016(r9)
+ d4: e9 3f 00 70 ld r9,112(r31)
+ d8: 38 09 00 f0 addi r0,r9,240
+ dc: f8 1f 09 78 std r0,2424(r31)
+ e0: 38 00 00 00 li r0,0
+ e4: f8 1f 09 80 std r0,2432(r31)
+ e8: 39 3f 09 78 addi r9,r31,2424
+ ec: e9 49 00 08 ld r10,8(r9)
+ f0: e9 29 00 00 ld r9,0(r9)
+ f4: 39 7f 09 c8 addi r11,r31,2504
+ f8: f9 2b 00 00 std r9,0(r11)
+ fc: f9 4b 00 08 std r10,8(r11)
+ 100: e9 3f 00 70 ld r9,112(r31)
+ 104: 38 09 01 e8 addi r0,r9,488
+ 108: f8 1f 09 68 std r0,2408(r31)
+ 10c: 38 00 00 00 li r0,0
+ 110: f8 1f 09 70 std r0,2416(r31)
+ 114: 39 3f 09 68 addi r9,r31,2408
+ 118: e9 49 00 08 ld r10,8(r9)
+ 11c: e9 29 00 00 ld r9,0(r9)
+ 120: 39 7f 09 d8 addi r11,r31,2520
+ 124: f9 2b 00 00 std r9,0(r11)
+ 128: f9 4b 00 08 std r10,8(r11)
+ 12c: e8 1f 00 90 ld r0,144(r31)
+ 130: e9 3f 00 90 ld r9,144(r31)
+ 134: 39 69 00 10 addi r11,r9,16
+ 138: 7c 03 03 78 mr r3,r0
+ 13c: 39 3f 09 c8 addi r9,r31,2504
+ 140: e8 89 00 00 ld r4,0(r9)
+ 144: e8 a9 00 08 ld r5,8(r9)
+ 148: 7d 66 5b 78 mr r6,r11
+ 14c: 48 00 00 19 bl 164 <._Uppc64_step+0x164>
+ 150: 7c 60 1b 78 mr r0,r3
+ 154: 90 1f 00 78 stw r0,120(r31)
+ 158: 80 1f 00 78 lwz r0,120(r31)
+ 15c: 2f 80 00 00 cmpwi cr7,r0,0
+ 160: 40 9c 00 14 bge- cr7,174 <._Uppc64_step+0x174>
+ 164: 80 1f 00 78 lwz r0,120(r31)
+ 168: 7c 00 07 b4 extsw r0,r0
+ 16c: f8 1f 0a 00 std r0,2560(r31)
+ 170: 48 00 1c 8c b 1dfc <._Uppc64_step+0x1dfc>
+ 174: e8 1f 00 90 ld r0,144(r31)
+ 178: e9 3f 00 90 ld r9,144(r31)
+ 17c: 39 69 00 18 addi r11,r9,24
+ 180: 7c 03 03 78 mr r3,r0
+ 184: 39 3f 09 d8 addi r9,r31,2520
+ 188: e8 89 00 00 ld r4,0(r9)
+ 18c: e8 a9 00 08 ld r5,8(r9)
+ 190: 7d 66 5b 78 mr r6,r11
+ 194: 48 00 00 19 bl 1ac <._Uppc64_step+0x1ac>
+ 198: 7c 60 1b 78 mr r0,r3
+ 19c: 90 1f 00 78 stw r0,120(r31)
+ 1a0: 80 1f 00 78 lwz r0,120(r31)
+ 1a4: 2f 80 00 00 cmpwi cr7,r0,0
+ 1a8: 40 9c 00 14 bge- cr7,1bc <._Uppc64_step+0x1bc>
+ 1ac: 80 1f 00 78 lwz r0,120(r31)
+ 1b0: 7c 00 07 b4 extsw r0,r0
+ 1b4: f8 1f 0a 00 std r0,2560(r31)
+ 1b8: 48 00 1c 44 b 1dfc <._Uppc64_step+0x1dfc>
+ 1bc: e9 3f 00 70 ld r9,112(r31)
+ 1c0: 38 09 00 e8 addi r0,r9,232
+ 1c4: f8 1f 09 58 std r0,2392(r31)
+ 1c8: 38 00 00 00 li r0,0
+ 1cc: f8 1f 09 60 std r0,2400(r31)
+ 1d0: e9 7f 00 90 ld r11,144(r31)
+ 1d4: 39 3f 09 58 addi r9,r31,2392
+ 1d8: e9 49 00 08 ld r10,8(r9)
+ 1dc: e9 29 00 00 ld r9,0(r9)
+ 1e0: 39 6b 00 58 addi r11,r11,88
+ 1e4: f9 2b 00 00 std r9,0(r11)
+ 1e8: f9 4b 00 08 std r10,8(r11)
+ 1ec: e9 3f 00 70 ld r9,112(r31)
+ 1f0: 38 09 00 f0 addi r0,r9,240
+ 1f4: f8 1f 09 48 std r0,2376(r31)
+ 1f8: 38 00 00 00 li r0,0
+ 1fc: f8 1f 09 50 std r0,2384(r31)
+ 200: e9 7f 00 90 ld r11,144(r31)
+ 204: 39 3f 09 48 addi r9,r31,2376
+ 208: e9 49 00 08 ld r10,8(r9)
+ 20c: e9 29 00 00 ld r9,0(r9)
+ 210: 39 6b 00 68 addi r11,r11,104
+ 214: f9 2b 00 00 std r9,0(r11)
+ 218: f9 4b 00 08 std r10,8(r11)
+ 21c: e9 3f 00 70 ld r9,112(r31)
+ 220: 38 09 00 f8 addi r0,r9,248
+ 224: f8 1f 09 38 std r0,2360(r31)
+ 228: 38 00 00 00 li r0,0
+ 22c: f8 1f 09 40 std r0,2368(r31)
+ 230: e9 7f 00 90 ld r11,144(r31)
+ 234: 39 3f 09 38 addi r9,r31,2360
+ 238: e9 49 00 08 ld r10,8(r9)
+ 23c: e9 29 00 00 ld r9,0(r9)
+ 240: 39 6b 00 78 addi r11,r11,120
+ 244: f9 2b 00 00 std r9,0(r11)
+ 248: f9 4b 00 08 std r10,8(r11)
+ 24c: e9 3f 00 70 ld r9,112(r31)
+ 250: 38 09 01 00 addi r0,r9,256
+ 254: f8 1f 09 28 std r0,2344(r31)
+ 258: 38 00 00 00 li r0,0
+ 25c: f8 1f 09 30 std r0,2352(r31)
+ 260: e9 7f 00 90 ld r11,144(r31)
+ 264: 39 3f 09 28 addi r9,r31,2344
+ 268: e9 49 00 08 ld r10,8(r9)
+ 26c: e9 29 00 00 ld r9,0(r9)
+ 270: 39 6b 00 88 addi r11,r11,136
+ 274: f9 2b 00 00 std r9,0(r11)
+ 278: f9 4b 00 08 std r10,8(r11)
+ 27c: e9 3f 00 70 ld r9,112(r31)
+ 280: 38 09 01 08 addi r0,r9,264
+ 284: f8 1f 09 18 std r0,2328(r31)
+ 288: 38 00 00 00 li r0,0
+ 28c: f8 1f 09 20 std r0,2336(r31)
+ 290: e9 7f 00 90 ld r11,144(r31)
+ 294: 39 3f 09 18 addi r9,r31,2328
+ 298: e9 49 00 08 ld r10,8(r9)
+ 29c: e9 29 00 00 ld r9,0(r9)
+ 2a0: 39 6b 00 98 addi r11,r11,152
+ 2a4: f9 2b 00 00 std r9,0(r11)
+ 2a8: f9 4b 00 08 std r10,8(r11)
+ 2ac: e9 3f 00 70 ld r9,112(r31)
+ 2b0: 38 09 01 10 addi r0,r9,272
+ 2b4: f8 1f 09 08 std r0,2312(r31)
+ 2b8: 38 00 00 00 li r0,0
+ 2bc: f8 1f 09 10 std r0,2320(r31)
+ 2c0: e9 7f 00 90 ld r11,144(r31)
+ 2c4: 39 3f 09 08 addi r9,r31,2312
+ 2c8: e9 49 00 08 ld r10,8(r9)
+ 2cc: e9 29 00 00 ld r9,0(r9)
+ 2d0: 39 6b 00 a8 addi r11,r11,168
+ 2d4: f9 2b 00 00 std r9,0(r11)
+ 2d8: f9 4b 00 08 std r10,8(r11)
+ 2dc: e9 3f 00 70 ld r9,112(r31)
+ 2e0: 38 09 01 18 addi r0,r9,280
+ 2e4: f8 1f 08 f8 std r0,2296(r31)
+ 2e8: 38 00 00 00 li r0,0
+ 2ec: f8 1f 09 00 std r0,2304(r31)
+ 2f0: e9 7f 00 90 ld r11,144(r31)
+ 2f4: 39 3f 08 f8 addi r9,r31,2296
+ 2f8: e9 49 00 08 ld r10,8(r9)
+ 2fc: e9 29 00 00 ld r9,0(r9)
+ 300: 39 6b 00 b8 addi r11,r11,184
+ 304: f9 2b 00 00 std r9,0(r11)
+ 308: f9 4b 00 08 std r10,8(r11)
+ 30c: e9 3f 00 70 ld r9,112(r31)
+ 310: 38 09 01 20 addi r0,r9,288
+ 314: f8 1f 08 e8 std r0,2280(r31)
+ 318: 38 00 00 00 li r0,0
+ 31c: f8 1f 08 f0 std r0,2288(r31)
+ 320: e9 7f 00 90 ld r11,144(r31)
+ 324: 39 3f 08 e8 addi r9,r31,2280
+ 328: e9 49 00 08 ld r10,8(r9)
+ 32c: e9 29 00 00 ld r9,0(r9)
+ 330: 39 6b 00 c8 addi r11,r11,200
+ 334: f9 2b 00 00 std r9,0(r11)
+ 338: f9 4b 00 08 std r10,8(r11)
+ 33c: e9 3f 00 70 ld r9,112(r31)
+ 340: 38 09 01 28 addi r0,r9,296
+ 344: f8 1f 08 d8 std r0,2264(r31)
+ 348: 38 00 00 00 li r0,0
+ 34c: f8 1f 08 e0 std r0,2272(r31)
+ 350: e9 7f 00 90 ld r11,144(r31)
+ 354: 39 3f 08 d8 addi r9,r31,2264
+ 358: e9 49 00 08 ld r10,8(r9)
+ 35c: e9 29 00 00 ld r9,0(r9)
+ 360: 39 6b 00 d8 addi r11,r11,216
+ 364: f9 2b 00 00 std r9,0(r11)
+ 368: f9 4b 00 08 std r10,8(r11)
+ 36c: e9 3f 00 70 ld r9,112(r31)
+ 370: 38 09 01 30 addi r0,r9,304
+ 374: f8 1f 08 c8 std r0,2248(r31)
+ 378: 38 00 00 00 li r0,0
+ 37c: f8 1f 08 d0 std r0,2256(r31)
+ 380: e9 7f 00 90 ld r11,144(r31)
+ 384: 39 3f 08 c8 addi r9,r31,2248
+ 388: e9 49 00 08 ld r10,8(r9)
+ 38c: e9 29 00 00 ld r9,0(r9)
+ 390: 39 6b 00 e8 addi r11,r11,232
+ 394: f9 2b 00 00 std r9,0(r11)
+ 398: f9 4b 00 08 std r10,8(r11)
+ 39c: e9 3f 00 70 ld r9,112(r31)
+ 3a0: 38 09 01 38 addi r0,r9,312
+ 3a4: f8 1f 08 b8 std r0,2232(r31)
+ 3a8: 38 00 00 00 li r0,0
+ 3ac: f8 1f 08 c0 std r0,2240(r31)
+ 3b0: e9 7f 00 90 ld r11,144(r31)
+ 3b4: 39 3f 08 b8 addi r9,r31,2232
+ 3b8: e9 49 00 08 ld r10,8(r9)
+ 3bc: e9 29 00 00 ld r9,0(r9)
+ 3c0: 39 6b 00 f8 addi r11,r11,248
+ 3c4: f9 2b 00 00 std r9,0(r11)
+ 3c8: f9 4b 00 08 std r10,8(r11)
+ 3cc: e9 3f 00 70 ld r9,112(r31)
+ 3d0: 38 09 01 40 addi r0,r9,320
+ 3d4: f8 1f 08 a8 std r0,2216(r31)
+ 3d8: 38 00 00 00 li r0,0
+ 3dc: f8 1f 08 b0 std r0,2224(r31)
+ 3e0: e9 7f 00 90 ld r11,144(r31)
+ 3e4: 39 3f 08 a8 addi r9,r31,2216
+ 3e8: e9 49 00 08 ld r10,8(r9)
+ 3ec: e9 29 00 00 ld r9,0(r9)
+ 3f0: 39 6b 01 08 addi r11,r11,264
+ 3f4: f9 2b 00 00 std r9,0(r11)
+ 3f8: f9 4b 00 08 std r10,8(r11)
+ 3fc: e9 3f 00 70 ld r9,112(r31)
+ 400: 38 09 01 48 addi r0,r9,328
+ 404: f8 1f 08 98 std r0,2200(r31)
+ 408: 38 00 00 00 li r0,0
+ 40c: f8 1f 08 a0 std r0,2208(r31)
+ 410: e9 7f 00 90 ld r11,144(r31)
+ 414: 39 3f 08 98 addi r9,r31,2200
+ 418: e9 49 00 08 ld r10,8(r9)
+ 41c: e9 29 00 00 ld r9,0(r9)
+ 420: 39 6b 01 18 addi r11,r11,280
+ 424: f9 2b 00 00 std r9,0(r11)
+ 428: f9 4b 00 08 std r10,8(r11)
+ 42c: e9 3f 00 70 ld r9,112(r31)
+ 430: 38 09 01 50 addi r0,r9,336
+ 434: f8 1f 08 88 std r0,2184(r31)
+ 438: 38 00 00 00 li r0,0
+ 43c: f8 1f 08 90 std r0,2192(r31)
+ 440: e9 7f 00 90 ld r11,144(r31)
+ 444: 39 3f 08 88 addi r9,r31,2184
+ 448: e9 49 00 08 ld r10,8(r9)
+ 44c: e9 29 00 00 ld r9,0(r9)
+ 450: 39 6b 01 28 addi r11,r11,296
+ 454: f9 2b 00 00 std r9,0(r11)
+ 458: f9 4b 00 08 std r10,8(r11)
+ 45c: e9 3f 00 70 ld r9,112(r31)
+ 460: 38 09 01 58 addi r0,r9,344
+ 464: f8 1f 08 78 std r0,2168(r31)
+ 468: 38 00 00 00 li r0,0
+ 46c: f8 1f 08 80 std r0,2176(r31)
+ 470: e9 7f 00 90 ld r11,144(r31)
+ 474: 39 3f 08 78 addi r9,r31,2168
+ 478: e9 49 00 08 ld r10,8(r9)
+ 47c: e9 29 00 00 ld r9,0(r9)
+ 480: 39 6b 01 38 addi r11,r11,312
+ 484: f9 2b 00 00 std r9,0(r11)
+ 488: f9 4b 00 08 std r10,8(r11)
+ 48c: e9 3f 00 70 ld r9,112(r31)
+ 490: 38 09 01 60 addi r0,r9,352
+ 494: f8 1f 08 68 std r0,2152(r31)
+ 498: 38 00 00 00 li r0,0
+ 49c: f8 1f 08 70 std r0,2160(r31)
+ 4a0: e9 7f 00 90 ld r11,144(r31)
+ 4a4: 39 3f 08 68 addi r9,r31,2152
+ 4a8: e9 49 00 08 ld r10,8(r9)
+ 4ac: e9 29 00 00 ld r9,0(r9)
+ 4b0: 39 6b 01 48 addi r11,r11,328
+ 4b4: f9 2b 00 00 std r9,0(r11)
+ 4b8: f9 4b 00 08 std r10,8(r11)
+ 4bc: e9 3f 00 70 ld r9,112(r31)
+ 4c0: 38 09 01 68 addi r0,r9,360
+ 4c4: f8 1f 08 58 std r0,2136(r31)
+ 4c8: 38 00 00 00 li r0,0
+ 4cc: f8 1f 08 60 std r0,2144(r31)
+ 4d0: e9 7f 00 90 ld r11,144(r31)
+ 4d4: 39 3f 08 58 addi r9,r31,2136
+ 4d8: e9 49 00 08 ld r10,8(r9)
+ 4dc: e9 29 00 00 ld r9,0(r9)
+ 4e0: 39 6b 01 58 addi r11,r11,344
+ 4e4: f9 2b 00 00 std r9,0(r11)
+ 4e8: f9 4b 00 08 std r10,8(r11)
+ 4ec: e9 3f 00 70 ld r9,112(r31)
+ 4f0: 38 09 01 70 addi r0,r9,368
+ 4f4: f8 1f 08 48 std r0,2120(r31)
+ 4f8: 38 00 00 00 li r0,0
+ 4fc: f8 1f 08 50 std r0,2128(r31)
+ 500: e9 7f 00 90 ld r11,144(r31)
+ 504: 39 3f 08 48 addi r9,r31,2120
+ 508: e9 49 00 08 ld r10,8(r9)
+ 50c: e9 29 00 00 ld r9,0(r9)
+ 510: 39 6b 01 68 addi r11,r11,360
+ 514: f9 2b 00 00 std r9,0(r11)
+ 518: f9 4b 00 08 std r10,8(r11)
+ 51c: e9 3f 00 70 ld r9,112(r31)
+ 520: 38 09 01 78 addi r0,r9,376
+ 524: f8 1f 08 38 std r0,2104(r31)
+ 528: 38 00 00 00 li r0,0
+ 52c: f8 1f 08 40 std r0,2112(r31)
+ 530: e9 7f 00 90 ld r11,144(r31)
+ 534: 39 3f 08 38 addi r9,r31,2104
+ 538: e9 49 00 08 ld r10,8(r9)
+ 53c: e9 29 00 00 ld r9,0(r9)
+ 540: 39 6b 01 78 addi r11,r11,376
+ 544: f9 2b 00 00 std r9,0(r11)
+ 548: f9 4b 00 08 std r10,8(r11)
+ 54c: e9 3f 00 70 ld r9,112(r31)
+ 550: 38 09 01 80 addi r0,r9,384
+ 554: f8 1f 08 28 std r0,2088(r31)
+ 558: 38 00 00 00 li r0,0
+ 55c: f8 1f 08 30 std r0,2096(r31)
+ 560: e9 7f 00 90 ld r11,144(r31)
+ 564: 39 3f 08 28 addi r9,r31,2088
+ 568: e9 49 00 08 ld r10,8(r9)
+ 56c: e9 29 00 00 ld r9,0(r9)
+ 570: 39 6b 01 88 addi r11,r11,392
+ 574: f9 2b 00 00 std r9,0(r11)
+ 578: f9 4b 00 08 std r10,8(r11)
+ 57c: e9 3f 00 70 ld r9,112(r31)
+ 580: 38 09 01 88 addi r0,r9,392
+ 584: f8 1f 08 18 std r0,2072(r31)
+ 588: 38 00 00 00 li r0,0
+ 58c: f8 1f 08 20 std r0,2080(r31)
+ 590: e9 7f 00 90 ld r11,144(r31)
+ 594: 39 3f 08 18 addi r9,r31,2072
+ 598: e9 49 00 08 ld r10,8(r9)
+ 59c: e9 29 00 00 ld r9,0(r9)
+ 5a0: 39 6b 01 98 addi r11,r11,408
+ 5a4: f9 2b 00 00 std r9,0(r11)
+ 5a8: f9 4b 00 08 std r10,8(r11)
+ 5ac: e9 3f 00 70 ld r9,112(r31)
+ 5b0: 38 09 01 90 addi r0,r9,400
+ 5b4: f8 1f 08 08 std r0,2056(r31)
+ 5b8: 38 00 00 00 li r0,0
+ 5bc: f8 1f 08 10 std r0,2064(r31)
+ 5c0: e9 7f 00 90 ld r11,144(r31)
+ 5c4: 39 3f 08 08 addi r9,r31,2056
+ 5c8: e9 49 00 08 ld r10,8(r9)
+ 5cc: e9 29 00 00 ld r9,0(r9)
+ 5d0: 39 6b 01 a8 addi r11,r11,424
+ 5d4: f9 2b 00 00 std r9,0(r11)
+ 5d8: f9 4b 00 08 std r10,8(r11)
+ 5dc: e9 3f 00 70 ld r9,112(r31)
+ 5e0: 38 09 01 98 addi r0,r9,408
+ 5e4: f8 1f 07 f8 std r0,2040(r31)
+ 5e8: 38 00 00 00 li r0,0
+ 5ec: f8 1f 08 00 std r0,2048(r31)
+ 5f0: e9 7f 00 90 ld r11,144(r31)
+ 5f4: 39 3f 07 f8 addi r9,r31,2040
+ 5f8: e9 49 00 08 ld r10,8(r9)
+ 5fc: e9 29 00 00 ld r9,0(r9)
+ 600: 39 6b 01 b8 addi r11,r11,440
+ 604: f9 2b 00 00 std r9,0(r11)
+ 608: f9 4b 00 08 std r10,8(r11)
+ 60c: e9 3f 00 70 ld r9,112(r31)
+ 610: 38 09 01 a0 addi r0,r9,416
+ 614: f8 1f 07 e8 std r0,2024(r31)
+ 618: 38 00 00 00 li r0,0
+ 61c: f8 1f 07 f0 std r0,2032(r31)
+ 620: e9 7f 00 90 ld r11,144(r31)
+ 624: 39 3f 07 e8 addi r9,r31,2024
+ 628: e9 49 00 08 ld r10,8(r9)
+ 62c: e9 29 00 00 ld r9,0(r9)
+ 630: 39 6b 01 c8 addi r11,r11,456
+ 634: f9 2b 00 00 std r9,0(r11)
+ 638: f9 4b 00 08 std r10,8(r11)
+ 63c: e9 3f 00 70 ld r9,112(r31)
+ 640: 38 09 01 a8 addi r0,r9,424
+ 644: f8 1f 07 d8 std r0,2008(r31)
+ 648: 38 00 00 00 li r0,0
+ 64c: f8 1f 07 e0 std r0,2016(r31)
+ 650: e9 7f 00 90 ld r11,144(r31)
+ 654: 39 3f 07 d8 addi r9,r31,2008
+ 658: e9 49 00 08 ld r10,8(r9)
+ 65c: e9 29 00 00 ld r9,0(r9)
+ 660: 39 6b 01 d8 addi r11,r11,472
+ 664: f9 2b 00 00 std r9,0(r11)
+ 668: f9 4b 00 08 std r10,8(r11)
+ 66c: e9 3f 00 70 ld r9,112(r31)
+ 670: 38 09 01 b0 addi r0,r9,432
+ 674: f8 1f 07 c8 std r0,1992(r31)
+ 678: 38 00 00 00 li r0,0
+ 67c: f8 1f 07 d0 std r0,2000(r31)
+ 680: e9 7f 00 90 ld r11,144(r31)
+ 684: 39 3f 07 c8 addi r9,r31,1992
+ 688: e9 49 00 08 ld r10,8(r9)
+ 68c: e9 29 00 00 ld r9,0(r9)
+ 690: 39 6b 01 e8 addi r11,r11,488
+ 694: f9 2b 00 00 std r9,0(r11)
+ 698: f9 4b 00 08 std r10,8(r11)
+ 69c: e9 3f 00 70 ld r9,112(r31)
+ 6a0: 38 09 01 b8 addi r0,r9,440
+ 6a4: f8 1f 07 b8 std r0,1976(r31)
+ 6a8: 38 00 00 00 li r0,0
+ 6ac: f8 1f 07 c0 std r0,1984(r31)
+ 6b0: e9 7f 00 90 ld r11,144(r31)
+ 6b4: 39 3f 07 b8 addi r9,r31,1976
+ 6b8: e9 49 00 08 ld r10,8(r9)
+ 6bc: e9 29 00 00 ld r9,0(r9)
+ 6c0: 39 6b 01 f8 addi r11,r11,504
+ 6c4: f9 2b 00 00 std r9,0(r11)
+ 6c8: f9 4b 00 08 std r10,8(r11)
+ 6cc: e9 3f 00 70 ld r9,112(r31)
+ 6d0: 38 09 01 c0 addi r0,r9,448
+ 6d4: f8 1f 07 a8 std r0,1960(r31)
+ 6d8: 38 00 00 00 li r0,0
+ 6dc: f8 1f 07 b0 std r0,1968(r31)
+ 6e0: e9 7f 00 90 ld r11,144(r31)
+ 6e4: 39 3f 07 a8 addi r9,r31,1960
+ 6e8: e9 49 00 08 ld r10,8(r9)
+ 6ec: e9 29 00 00 ld r9,0(r9)
+ 6f0: 39 6b 02 08 addi r11,r11,520
+ 6f4: f9 2b 00 00 std r9,0(r11)
+ 6f8: f9 4b 00 08 std r10,8(r11)
+ 6fc: e9 3f 00 70 ld r9,112(r31)
+ 700: 38 09 01 c8 addi r0,r9,456
+ 704: f8 1f 07 98 std r0,1944(r31)
+ 708: 38 00 00 00 li r0,0
+ 70c: f8 1f 07 a0 std r0,1952(r31)
+ 710: e9 7f 00 90 ld r11,144(r31)
+ 714: 39 3f 07 98 addi r9,r31,1944
+ 718: e9 49 00 08 ld r10,8(r9)
+ 71c: e9 29 00 00 ld r9,0(r9)
+ 720: 39 6b 02 18 addi r11,r11,536
+ 724: f9 2b 00 00 std r9,0(r11)
+ 728: f9 4b 00 08 std r10,8(r11)
+ 72c: e9 3f 00 70 ld r9,112(r31)
+ 730: 38 09 01 d0 addi r0,r9,464
+ 734: f8 1f 07 88 std r0,1928(r31)
+ 738: 38 00 00 00 li r0,0
+ 73c: f8 1f 07 90 std r0,1936(r31)
+ 740: e9 7f 00 90 ld r11,144(r31)
+ 744: 39 3f 07 88 addi r9,r31,1928
+ 748: e9 49 00 08 ld r10,8(r9)
+ 74c: e9 29 00 00 ld r9,0(r9)
+ 750: 39 6b 02 28 addi r11,r11,552
+ 754: f9 2b 00 00 std r9,0(r11)
+ 758: f9 4b 00 08 std r10,8(r11)
+ 75c: e9 3f 00 70 ld r9,112(r31)
+ 760: 38 09 01 d8 addi r0,r9,472
+ 764: f8 1f 07 78 std r0,1912(r31)
+ 768: 38 00 00 00 li r0,0
+ 76c: f8 1f 07 80 std r0,1920(r31)
+ 770: e9 7f 00 90 ld r11,144(r31)
+ 774: 39 3f 07 78 addi r9,r31,1912
+ 778: e9 49 00 08 ld r10,8(r9)
+ 77c: e9 29 00 00 ld r9,0(r9)
+ 780: 39 6b 02 38 addi r11,r11,568
+ 784: f9 2b 00 00 std r9,0(r11)
+ 788: f9 4b 00 08 std r10,8(r11)
+ 78c: e9 3f 00 70 ld r9,112(r31)
+ 790: 38 09 01 e0 addi r0,r9,480
+ 794: f8 1f 07 68 std r0,1896(r31)
+ 798: 38 00 00 00 li r0,0
+ 79c: f8 1f 07 70 std r0,1904(r31)
+ 7a0: e9 7f 00 90 ld r11,144(r31)
+ 7a4: 39 3f 07 68 addi r9,r31,1896
+ 7a8: e9 49 00 08 ld r10,8(r9)
+ 7ac: e9 29 00 00 ld r9,0(r9)
+ 7b0: 39 6b 02 48 addi r11,r11,584
+ 7b4: f9 2b 00 00 std r9,0(r11)
+ 7b8: f9 4b 00 08 std r10,8(r11)
+ 7bc: e9 3f 00 70 ld r9,112(r31)
+ 7c0: 38 09 02 08 addi r0,r9,520
+ 7c4: f8 1f 07 58 std r0,1880(r31)
+ 7c8: 38 00 00 00 li r0,0
+ 7cc: f8 1f 07 60 std r0,1888(r31)
+ 7d0: e9 7f 00 90 ld r11,144(r31)
+ 7d4: 39 3f 07 58 addi r9,r31,1880
+ 7d8: e9 49 00 08 ld r10,8(r9)
+ 7dc: e9 29 00 00 ld r9,0(r9)
+ 7e0: 39 6b 04 68 addi r11,r11,1128
+ 7e4: f9 2b 00 00 std r9,0(r11)
+ 7e8: f9 4b 00 08 std r10,8(r11)
+ 7ec: e9 3f 00 70 ld r9,112(r31)
+ 7f0: 38 09 02 00 addi r0,r9,512
+ 7f4: f8 1f 07 48 std r0,1864(r31)
+ 7f8: 38 00 00 00 li r0,0
+ 7fc: f8 1f 07 50 std r0,1872(r31)
+ 800: e9 7f 00 90 ld r11,144(r31)
+ 804: 39 3f 07 48 addi r9,r31,1864
+ 808: e9 49 00 08 ld r10,8(r9)
+ 80c: e9 29 00 00 ld r9,0(r9)
+ 810: 39 6b 04 78 addi r11,r11,1144
+ 814: f9 2b 00 00 std r9,0(r11)
+ 818: f9 4b 00 08 std r10,8(r11)
+ 81c: e9 3f 00 70 ld r9,112(r31)
+ 820: 38 09 02 18 addi r0,r9,536
+ 824: f8 1f 07 38 std r0,1848(r31)
+ 828: 38 00 00 00 li r0,0
+ 82c: f8 1f 07 40 std r0,1856(r31)
+ 830: e9 7f 00 90 ld r11,144(r31)
+ 834: 39 3f 07 38 addi r9,r31,1848
+ 838: e9 49 00 08 ld r10,8(r9)
+ 83c: e9 29 00 00 ld r9,0(r9)
+ 840: 39 6b 04 98 addi r11,r11,1176
+ 844: f9 2b 00 00 std r9,0(r11)
+ 848: f9 4b 00 08 std r10,8(r11)
+ 84c: e9 3f 00 70 ld r9,112(r31)
+ 850: 38 09 02 10 addi r0,r9,528
+ 854: f8 1f 07 28 std r0,1832(r31)
+ 858: 38 00 00 00 li r0,0
+ 85c: f8 1f 07 30 std r0,1840(r31)
+ 860: e9 7f 00 90 ld r11,144(r31)
+ 864: 39 3f 07 28 addi r9,r31,1832
+ 868: e9 49 00 08 ld r10,8(r9)
+ 86c: e9 29 00 00 ld r9,0(r9)
+ 870: 39 6b 05 18 addi r11,r11,1304
+ 874: f9 2b 00 00 std r9,0(r11)
+ 878: f9 4b 00 08 std r10,8(r11)
+ 87c: e9 3f 00 70 ld r9,112(r31)
+ 880: 38 09 01 e8 addi r0,r9,488
+ 884: f8 1f 07 18 std r0,1816(r31)
+ 888: 38 00 00 00 li r0,0
+ 88c: f8 1f 07 20 std r0,1824(r31)
+ 890: e9 7f 00 90 ld r11,144(r31)
+ 894: 39 3f 07 18 addi r9,r31,1816
+ 898: e9 49 00 08 ld r10,8(r9)
+ 89c: e9 29 00 00 ld r9,0(r9)
+ 8a0: 39 6b 07 78 addi r11,r11,1912
+ 8a4: f9 2b 00 00 std r9,0(r11)
+ 8a8: f9 4b 00 08 std r10,8(r11)
+ 8ac: e9 22 00 00 ld r9,0(r2)
+ 8b0: e9 49 00 08 ld r10,8(r9)
+ 8b4: e9 29 00 00 ld r9,0(r9)
+ 8b8: 39 7f 07 08 addi r11,r31,1800
+ 8bc: f9 2b 00 00 std r9,0(r11)
+ 8c0: f9 4b 00 08 std r10,8(r11)
+ 8c4: e9 7f 00 90 ld r11,144(r31)
+ 8c8: 39 3f 07 08 addi r9,r31,1800
+ 8cc: e9 49 00 08 ld r10,8(r9)
+ 8d0: e9 29 00 00 ld r9,0(r9)
+ 8d4: 39 6b 07 68 addi r11,r11,1896
+ 8d8: f9 2b 00 00 std r9,0(r11)
+ 8dc: f9 4b 00 08 std r10,8(r11)
+ 8e0: e9 3f 00 70 ld r9,112(r31)
+ 8e4: 38 09 02 68 addi r0,r9,616
+ 8e8: f8 1f 06 f8 std r0,1784(r31)
+ 8ec: 38 00 00 00 li r0,0
+ 8f0: f8 1f 07 00 std r0,1792(r31)
+ 8f4: e9 7f 00 90 ld r11,144(r31)
+ 8f8: 39 3f 06 f8 addi r9,r31,1784
+ 8fc: e9 49 00 08 ld r10,8(r9)
+ 900: e9 29 00 00 ld r9,0(r9)
+ 904: 39 6b 02 58 addi r11,r11,600
+ 908: f9 2b 00 00 std r9,0(r11)
+ 90c: f9 4b 00 08 std r10,8(r11)
+ 910: e9 3f 00 70 ld r9,112(r31)
+ 914: 38 09 02 70 addi r0,r9,624
+ 918: f8 1f 06 e8 std r0,1768(r31)
+ 91c: 38 00 00 00 li r0,0
+ 920: f8 1f 06 f0 std r0,1776(r31)
+ 924: e9 7f 00 90 ld r11,144(r31)
+ 928: 39 3f 06 e8 addi r9,r31,1768
+ 92c: e9 49 00 08 ld r10,8(r9)
+ 930: e9 29 00 00 ld r9,0(r9)
+ 934: 39 6b 02 68 addi r11,r11,616
+ 938: f9 2b 00 00 std r9,0(r11)
+ 93c: f9 4b 00 08 std r10,8(r11)
+ 940: e9 3f 00 70 ld r9,112(r31)
+ 944: 38 09 02 78 addi r0,r9,632
+ 948: f8 1f 06 d8 std r0,1752(r31)
+ 94c: 38 00 00 00 li r0,0
+ 950: f8 1f 06 e0 std r0,1760(r31)
+ 954: e9 7f 00 90 ld r11,144(r31)
+ 958: 39 3f 06 d8 addi r9,r31,1752
+ 95c: e9 49 00 08 ld r10,8(r9)
+ 960: e9 29 00 00 ld r9,0(r9)
+ 964: 39 6b 02 78 addi r11,r11,632
+ 968: f9 2b 00 00 std r9,0(r11)
+ 96c: f9 4b 00 08 std r10,8(r11)
+ 970: e9 3f 00 70 ld r9,112(r31)
+ 974: 38 09 02 80 addi r0,r9,640
+ 978: f8 1f 06 c8 std r0,1736(r31)
+ 97c: 38 00 00 00 li r0,0
+ 980: f8 1f 06 d0 std r0,1744(r31)
+ 984: e9 7f 00 90 ld r11,144(r31)
+ 988: 39 3f 06 c8 addi r9,r31,1736
+ 98c: e9 49 00 08 ld r10,8(r9)
+ 990: e9 29 00 00 ld r9,0(r9)
+ 994: 39 6b 02 88 addi r11,r11,648
+ 998: f9 2b 00 00 std r9,0(r11)
+ 99c: f9 4b 00 08 std r10,8(r11)
+ 9a0: e9 3f 00 70 ld r9,112(r31)
+ 9a4: 38 09 02 88 addi r0,r9,648
+ 9a8: f8 1f 06 b8 std r0,1720(r31)
+ 9ac: 38 00 00 00 li r0,0
+ 9b0: f8 1f 06 c0 std r0,1728(r31)
+ 9b4: e9 7f 00 90 ld r11,144(r31)
+ 9b8: 39 3f 06 b8 addi r9,r31,1720
+ 9bc: e9 49 00 08 ld r10,8(r9)
+ 9c0: e9 29 00 00 ld r9,0(r9)
+ 9c4: 39 6b 02 98 addi r11,r11,664
+ 9c8: f9 2b 00 00 std r9,0(r11)
+ 9cc: f9 4b 00 08 std r10,8(r11)
+ 9d0: e9 3f 00 70 ld r9,112(r31)
+ 9d4: 38 09 02 90 addi r0,r9,656
+ 9d8: f8 1f 06 a8 std r0,1704(r31)
+ 9dc: 38 00 00 00 li r0,0
+ 9e0: f8 1f 06 b0 std r0,1712(r31)
+ 9e4: e9 7f 00 90 ld r11,144(r31)
+ 9e8: 39 3f 06 a8 addi r9,r31,1704
+ 9ec: e9 49 00 08 ld r10,8(r9)
+ 9f0: e9 29 00 00 ld r9,0(r9)
+ 9f4: 39 6b 02 a8 addi r11,r11,680
+ 9f8: f9 2b 00 00 std r9,0(r11)
+ 9fc: f9 4b 00 08 std r10,8(r11)
+ a00: e9 3f 00 70 ld r9,112(r31)
+ a04: 38 09 02 98 addi r0,r9,664
+ a08: f8 1f 06 98 std r0,1688(r31)
+ a0c: 38 00 00 00 li r0,0
+ a10: f8 1f 06 a0 std r0,1696(r31)
+ a14: e9 7f 00 90 ld r11,144(r31)
+ a18: 39 3f 06 98 addi r9,r31,1688
+ a1c: e9 49 00 08 ld r10,8(r9)
+ a20: e9 29 00 00 ld r9,0(r9)
+ a24: 39 6b 02 b8 addi r11,r11,696
+ a28: f9 2b 00 00 std r9,0(r11)
+ a2c: f9 4b 00 08 std r10,8(r11)
+ a30: e9 3f 00 70 ld r9,112(r31)
+ a34: 38 09 02 a0 addi r0,r9,672
+ a38: f8 1f 06 88 std r0,1672(r31)
+ a3c: 38 00 00 00 li r0,0
+ a40: f8 1f 06 90 std r0,1680(r31)
+ a44: e9 7f 00 90 ld r11,144(r31)
+ a48: 39 3f 06 88 addi r9,r31,1672
+ a4c: e9 49 00 08 ld r10,8(r9)
+ a50: e9 29 00 00 ld r9,0(r9)
+ a54: 39 6b 02 c8 addi r11,r11,712
+ a58: f9 2b 00 00 std r9,0(r11)
+ a5c: f9 4b 00 08 std r10,8(r11)
+ a60: e9 3f 00 70 ld r9,112(r31)
+ a64: 38 09 02 a8 addi r0,r9,680
+ a68: f8 1f 06 78 std r0,1656(r31)
+ a6c: 38 00 00 00 li r0,0
+ a70: f8 1f 06 80 std r0,1664(r31)
+ a74: e9 7f 00 90 ld r11,144(r31)
+ a78: 39 3f 06 78 addi r9,r31,1656
+ a7c: e9 49 00 08 ld r10,8(r9)
+ a80: e9 29 00 00 ld r9,0(r9)
+ a84: 39 6b 02 d8 addi r11,r11,728
+ a88: f9 2b 00 00 std r9,0(r11)
+ a8c: f9 4b 00 08 std r10,8(r11)
+ a90: e9 3f 00 70 ld r9,112(r31)
+ a94: 38 09 02 b0 addi r0,r9,688
+ a98: f8 1f 06 68 std r0,1640(r31)
+ a9c: 38 00 00 00 li r0,0
+ aa0: f8 1f 06 70 std r0,1648(r31)
+ aa4: e9 7f 00 90 ld r11,144(r31)
+ aa8: 39 3f 06 68 addi r9,r31,1640
+ aac: e9 49 00 08 ld r10,8(r9)
+ ab0: e9 29 00 00 ld r9,0(r9)
+ ab4: 39 6b 02 e8 addi r11,r11,744
+ ab8: f9 2b 00 00 std r9,0(r11)
+ abc: f9 4b 00 08 std r10,8(r11)
+ ac0: e9 3f 00 70 ld r9,112(r31)
+ ac4: 38 09 02 b8 addi r0,r9,696
+ ac8: f8 1f 06 58 std r0,1624(r31)
+ acc: 38 00 00 00 li r0,0
+ ad0: f8 1f 06 60 std r0,1632(r31)
+ ad4: e9 7f 00 90 ld r11,144(r31)
+ ad8: 39 3f 06 58 addi r9,r31,1624
+ adc: e9 49 00 08 ld r10,8(r9)
+ ae0: e9 29 00 00 ld r9,0(r9)
+ ae4: 39 6b 02 f8 addi r11,r11,760
+ ae8: f9 2b 00 00 std r9,0(r11)
+ aec: f9 4b 00 08 std r10,8(r11)
+ af0: e9 3f 00 70 ld r9,112(r31)
+ af4: 38 09 02 c0 addi r0,r9,704
+ af8: f8 1f 06 48 std r0,1608(r31)
+ afc: 38 00 00 00 li r0,0
+ b00: f8 1f 06 50 std r0,1616(r31)
+ b04: e9 7f 00 90 ld r11,144(r31)
+ b08: 39 3f 06 48 addi r9,r31,1608
+ b0c: e9 49 00 08 ld r10,8(r9)
+ b10: e9 29 00 00 ld r9,0(r9)
+ b14: 39 6b 03 08 addi r11,r11,776
+ b18: f9 2b 00 00 std r9,0(r11)
+ b1c: f9 4b 00 08 std r10,8(r11)
+ b20: e9 3f 00 70 ld r9,112(r31)
+ b24: 38 09 02 c8 addi r0,r9,712
+ b28: f8 1f 06 38 std r0,1592(r31)
+ b2c: 38 00 00 00 li r0,0
+ b30: f8 1f 06 40 std r0,1600(r31)
+ b34: e9 7f 00 90 ld r11,144(r31)
+ b38: 39 3f 06 38 addi r9,r31,1592
+ b3c: e9 49 00 08 ld r10,8(r9)
+ b40: e9 29 00 00 ld r9,0(r9)
+ b44: 39 6b 03 18 addi r11,r11,792
+ b48: f9 2b 00 00 std r9,0(r11)
+ b4c: f9 4b 00 08 std r10,8(r11)
+ b50: e9 3f 00 70 ld r9,112(r31)
+ b54: 38 09 02 d0 addi r0,r9,720
+ b58: f8 1f 06 28 std r0,1576(r31)
+ b5c: 38 00 00 00 li r0,0
+ b60: f8 1f 06 30 std r0,1584(r31)
+ b64: e9 7f 00 90 ld r11,144(r31)
+ b68: 39 3f 06 28 addi r9,r31,1576
+ b6c: e9 49 00 08 ld r10,8(r9)
+ b70: e9 29 00 00 ld r9,0(r9)
+ b74: 39 6b 03 28 addi r11,r11,808
+ b78: f9 2b 00 00 std r9,0(r11)
+ b7c: f9 4b 00 08 std r10,8(r11)
+ b80: e9 3f 00 70 ld r9,112(r31)
+ b84: 38 09 02 d8 addi r0,r9,728
+ b88: f8 1f 06 18 std r0,1560(r31)
+ b8c: 38 00 00 00 li r0,0
+ b90: f8 1f 06 20 std r0,1568(r31)
+ b94: e9 7f 00 90 ld r11,144(r31)
+ b98: 39 3f 06 18 addi r9,r31,1560
+ b9c: e9 49 00 08 ld r10,8(r9)
+ ba0: e9 29 00 00 ld r9,0(r9)
+ ba4: 39 6b 03 38 addi r11,r11,824
+ ba8: f9 2b 00 00 std r9,0(r11)
+ bac: f9 4b 00 08 std r10,8(r11)
+ bb0: e9 3f 00 70 ld r9,112(r31)
+ bb4: 38 09 02 e0 addi r0,r9,736
+ bb8: f8 1f 06 08 std r0,1544(r31)
+ bbc: 38 00 00 00 li r0,0
+ bc0: f8 1f 06 10 std r0,1552(r31)
+ bc4: e9 7f 00 90 ld r11,144(r31)
+ bc8: 39 3f 06 08 addi r9,r31,1544
+ bcc: e9 49 00 08 ld r10,8(r9)
+ bd0: e9 29 00 00 ld r9,0(r9)
+ bd4: 39 6b 03 48 addi r11,r11,840
+ bd8: f9 2b 00 00 std r9,0(r11)
+ bdc: f9 4b 00 08 std r10,8(r11)
+ be0: e9 3f 00 70 ld r9,112(r31)
+ be4: 38 09 02 e8 addi r0,r9,744
+ be8: f8 1f 05 f8 std r0,1528(r31)
+ bec: 38 00 00 00 li r0,0
+ bf0: f8 1f 06 00 std r0,1536(r31)
+ bf4: e9 7f 00 90 ld r11,144(r31)
+ bf8: 39 3f 05 f8 addi r9,r31,1528
+ bfc: e9 49 00 08 ld r10,8(r9)
+ c00: e9 29 00 00 ld r9,0(r9)
+ c04: 39 6b 03 58 addi r11,r11,856
+ c08: f9 2b 00 00 std r9,0(r11)
+ c0c: f9 4b 00 08 std r10,8(r11)
+ c10: e9 3f 00 70 ld r9,112(r31)
+ c14: 38 09 02 f0 addi r0,r9,752
+ c18: f8 1f 05 e8 std r0,1512(r31)
+ c1c: 38 00 00 00 li r0,0
+ c20: f8 1f 05 f0 std r0,1520(r31)
+ c24: e9 7f 00 90 ld r11,144(r31)
+ c28: 39 3f 05 e8 addi r9,r31,1512
+ c2c: e9 49 00 08 ld r10,8(r9)
+ c30: e9 29 00 00 ld r9,0(r9)
+ c34: 39 6b 03 68 addi r11,r11,872
+ c38: f9 2b 00 00 std r9,0(r11)
+ c3c: f9 4b 00 08 std r10,8(r11)
+ c40: e9 3f 00 70 ld r9,112(r31)
+ c44: 38 09 02 f8 addi r0,r9,760
+ c48: f8 1f 05 d8 std r0,1496(r31)
+ c4c: 38 00 00 00 li r0,0
+ c50: f8 1f 05 e0 std r0,1504(r31)
+ c54: e9 7f 00 90 ld r11,144(r31)
+ c58: 39 3f 05 d8 addi r9,r31,1496
+ c5c: e9 49 00 08 ld r10,8(r9)
+ c60: e9 29 00 00 ld r9,0(r9)
+ c64: 39 6b 03 78 addi r11,r11,888
+ c68: f9 2b 00 00 std r9,0(r11)
+ c6c: f9 4b 00 08 std r10,8(r11)
+ c70: e9 3f 00 70 ld r9,112(r31)
+ c74: 38 09 03 00 addi r0,r9,768
+ c78: f8 1f 05 c8 std r0,1480(r31)
+ c7c: 38 00 00 00 li r0,0
+ c80: f8 1f 05 d0 std r0,1488(r31)
+ c84: e9 7f 00 90 ld r11,144(r31)
+ c88: 39 3f 05 c8 addi r9,r31,1480
+ c8c: e9 49 00 08 ld r10,8(r9)
+ c90: e9 29 00 00 ld r9,0(r9)
+ c94: 39 6b 03 88 addi r11,r11,904
+ c98: f9 2b 00 00 std r9,0(r11)
+ c9c: f9 4b 00 08 std r10,8(r11)
+ ca0: e9 3f 00 70 ld r9,112(r31)
+ ca4: 38 09 03 08 addi r0,r9,776
+ ca8: f8 1f 05 b8 std r0,1464(r31)
+ cac: 38 00 00 00 li r0,0
+ cb0: f8 1f 05 c0 std r0,1472(r31)
+ cb4: e9 7f 00 90 ld r11,144(r31)
+ cb8: 39 3f 05 b8 addi r9,r31,1464
+ cbc: e9 49 00 08 ld r10,8(r9)
+ cc0: e9 29 00 00 ld r9,0(r9)
+ cc4: 39 6b 03 98 addi r11,r11,920
+ cc8: f9 2b 00 00 std r9,0(r11)
+ ccc: f9 4b 00 08 std r10,8(r11)
+ cd0: e9 3f 00 70 ld r9,112(r31)
+ cd4: 38 09 03 10 addi r0,r9,784
+ cd8: f8 1f 05 a8 std r0,1448(r31)
+ cdc: 38 00 00 00 li r0,0
+ ce0: f8 1f 05 b0 std r0,1456(r31)
+ ce4: e9 7f 00 90 ld r11,144(r31)
+ ce8: 39 3f 05 a8 addi r9,r31,1448
+ cec: e9 49 00 08 ld r10,8(r9)
+ cf0: e9 29 00 00 ld r9,0(r9)
+ cf4: 39 6b 03 a8 addi r11,r11,936
+ cf8: f9 2b 00 00 std r9,0(r11)
+ cfc: f9 4b 00 08 std r10,8(r11)
+ d00: e9 3f 00 70 ld r9,112(r31)
+ d04: 38 09 03 18 addi r0,r9,792
+ d08: f8 1f 05 98 std r0,1432(r31)
+ d0c: 38 00 00 00 li r0,0
+ d10: f8 1f 05 a0 std r0,1440(r31)
+ d14: e9 7f 00 90 ld r11,144(r31)
+ d18: 39 3f 05 98 addi r9,r31,1432
+ d1c: e9 49 00 08 ld r10,8(r9)
+ d20: e9 29 00 00 ld r9,0(r9)
+ d24: 39 6b 03 b8 addi r11,r11,952
+ d28: f9 2b 00 00 std r9,0(r11)
+ d2c: f9 4b 00 08 std r10,8(r11)
+ d30: e9 3f 00 70 ld r9,112(r31)
+ d34: 38 09 03 20 addi r0,r9,800
+ d38: f8 1f 05 88 std r0,1416(r31)
+ d3c: 38 00 00 00 li r0,0
+ d40: f8 1f 05 90 std r0,1424(r31)
+ d44: e9 7f 00 90 ld r11,144(r31)
+ d48: 39 3f 05 88 addi r9,r31,1416
+ d4c: e9 49 00 08 ld r10,8(r9)
+ d50: e9 29 00 00 ld r9,0(r9)
+ d54: 39 6b 03 c8 addi r11,r11,968
+ d58: f9 2b 00 00 std r9,0(r11)
+ d5c: f9 4b 00 08 std r10,8(r11)
+ d60: e9 3f 00 70 ld r9,112(r31)
+ d64: 38 09 03 28 addi r0,r9,808
+ d68: f8 1f 05 78 std r0,1400(r31)
+ d6c: 38 00 00 00 li r0,0
+ d70: f8 1f 05 80 std r0,1408(r31)
+ d74: e9 7f 00 90 ld r11,144(r31)
+ d78: 39 3f 05 78 addi r9,r31,1400
+ d7c: e9 49 00 08 ld r10,8(r9)
+ d80: e9 29 00 00 ld r9,0(r9)
+ d84: 39 6b 03 d8 addi r11,r11,984
+ d88: f9 2b 00 00 std r9,0(r11)
+ d8c: f9 4b 00 08 std r10,8(r11)
+ d90: e9 3f 00 70 ld r9,112(r31)
+ d94: 38 09 03 30 addi r0,r9,816
+ d98: f8 1f 05 68 std r0,1384(r31)
+ d9c: 38 00 00 00 li r0,0
+ da0: f8 1f 05 70 std r0,1392(r31)
+ da4: e9 7f 00 90 ld r11,144(r31)
+ da8: 39 3f 05 68 addi r9,r31,1384
+ dac: e9 49 00 08 ld r10,8(r9)
+ db0: e9 29 00 00 ld r9,0(r9)
+ db4: 39 6b 03 e8 addi r11,r11,1000
+ db8: f9 2b 00 00 std r9,0(r11)
+ dbc: f9 4b 00 08 std r10,8(r11)
+ dc0: e9 3f 00 70 ld r9,112(r31)
+ dc4: 38 09 03 38 addi r0,r9,824
+ dc8: f8 1f 05 58 std r0,1368(r31)
+ dcc: 38 00 00 00 li r0,0
+ dd0: f8 1f 05 60 std r0,1376(r31)
+ dd4: e9 7f 00 90 ld r11,144(r31)
+ dd8: 39 3f 05 58 addi r9,r31,1368
+ ddc: e9 49 00 08 ld r10,8(r9)
+ de0: e9 29 00 00 ld r9,0(r9)
+ de4: 39 6b 03 f8 addi r11,r11,1016
+ de8: f9 2b 00 00 std r9,0(r11)
+ dec: f9 4b 00 08 std r10,8(r11)
+ df0: e9 3f 00 70 ld r9,112(r31)
+ df4: 38 09 03 40 addi r0,r9,832
+ df8: f8 1f 05 48 std r0,1352(r31)
+ dfc: 38 00 00 00 li r0,0
+ e00: f8 1f 05 50 std r0,1360(r31)
+ e04: e9 7f 00 90 ld r11,144(r31)
+ e08: 39 3f 05 48 addi r9,r31,1352
+ e0c: e9 49 00 08 ld r10,8(r9)
+ e10: e9 29 00 00 ld r9,0(r9)
+ e14: 39 6b 04 08 addi r11,r11,1032
+ e18: f9 2b 00 00 std r9,0(r11)
+ e1c: f9 4b 00 08 std r10,8(r11)
+ e20: e9 3f 00 70 ld r9,112(r31)
+ e24: 38 09 03 48 addi r0,r9,840
+ e28: f8 1f 05 38 std r0,1336(r31)
+ e2c: 38 00 00 00 li r0,0
+ e30: f8 1f 05 40 std r0,1344(r31)
+ e34: e9 7f 00 90 ld r11,144(r31)
+ e38: 39 3f 05 38 addi r9,r31,1336
+ e3c: e9 49 00 08 ld r10,8(r9)
+ e40: e9 29 00 00 ld r9,0(r9)
+ e44: 39 6b 04 18 addi r11,r11,1048
+ e48: f9 2b 00 00 std r9,0(r11)
+ e4c: f9 4b 00 08 std r10,8(r11)
+ e50: e9 3f 00 70 ld r9,112(r31)
+ e54: 38 09 03 50 addi r0,r9,848
+ e58: f8 1f 05 28 std r0,1320(r31)
+ e5c: 38 00 00 00 li r0,0
+ e60: f8 1f 05 30 std r0,1328(r31)
+ e64: e9 7f 00 90 ld r11,144(r31)
+ e68: 39 3f 05 28 addi r9,r31,1320
+ e6c: e9 49 00 08 ld r10,8(r9)
+ e70: e9 29 00 00 ld r9,0(r9)
+ e74: 39 6b 04 28 addi r11,r11,1064
+ e78: f9 2b 00 00 std r9,0(r11)
+ e7c: f9 4b 00 08 std r10,8(r11)
+ e80: e9 3f 00 70 ld r9,112(r31)
+ e84: 38 09 03 58 addi r0,r9,856
+ e88: f8 1f 05 18 std r0,1304(r31)
+ e8c: 38 00 00 00 li r0,0
+ e90: f8 1f 05 20 std r0,1312(r31)
+ e94: e9 7f 00 90 ld r11,144(r31)
+ e98: 39 3f 05 18 addi r9,r31,1304
+ e9c: e9 49 00 08 ld r10,8(r9)
+ ea0: e9 29 00 00 ld r9,0(r9)
+ ea4: 39 6b 04 38 addi r11,r11,1080
+ ea8: f9 2b 00 00 std r9,0(r11)
+ eac: f9 4b 00 08 std r10,8(r11)
+ eb0: e9 3f 00 70 ld r9,112(r31)
+ eb4: 38 09 03 60 addi r0,r9,864
+ eb8: f8 1f 05 08 std r0,1288(r31)
+ ebc: 38 00 00 00 li r0,0
+ ec0: f8 1f 05 10 std r0,1296(r31)
+ ec4: e9 7f 00 90 ld r11,144(r31)
+ ec8: 39 3f 05 08 addi r9,r31,1288
+ ecc: e9 49 00 08 ld r10,8(r9)
+ ed0: e9 29 00 00 ld r9,0(r9)
+ ed4: 39 6b 04 48 addi r11,r11,1096
+ ed8: f9 2b 00 00 std r9,0(r11)
+ edc: f9 4b 00 08 std r10,8(r11)
+ ee0: e9 3f 00 70 ld r9,112(r31)
+ ee4: 38 09 03 70 addi r0,r9,880
+ ee8: f8 1f 04 f8 std r0,1272(r31)
+ eec: 38 00 00 00 li r0,0
+ ef0: f8 1f 05 00 std r0,1280(r31)
+ ef4: 39 3f 04 f8 addi r9,r31,1272
+ ef8: e9 49 00 08 ld r10,8(r9)
+ efc: e9 29 00 00 ld r9,0(r9)
+ f00: 39 7f 09 e8 addi r11,r31,2536
+ f04: f9 2b 00 00 std r9,0(r11)
+ f08: f9 4b 00 08 std r10,8(r11)
+ f0c: e8 1f 00 90 ld r0,144(r31)
+ f10: 39 7f 09 a0 addi r11,r31,2464
+ f14: 7c 03 03 78 mr r3,r0
+ f18: 39 3f 09 e8 addi r9,r31,2536
+ f1c: e8 89 00 00 ld r4,0(r9)
+ f20: e8 a9 00 08 ld r5,8(r9)
+ f24: 7d 66 5b 78 mr r6,r11
+ f28: 48 00 00 19 bl f40 <._Uppc64_step+0xf40>
+ f2c: 7c 60 1b 78 mr r0,r3
+ f30: 90 1f 00 78 stw r0,120(r31)
+ f34: 80 1f 00 78 lwz r0,120(r31)
+ f38: 2f 80 00 00 cmpwi cr7,r0,0
+ f3c: 40 9c 00 14 bge- cr7,f50 <._Uppc64_step+0xf50>
+ f40: 80 1f 00 78 lwz r0,120(r31)
+ f44: 7c 00 07 b4 extsw r0,r0
+ f48: f8 1f 0a 00 std r0,2560(r31)
+ f4c: 48 00 0e b0 b 1dfc <._Uppc64_step+0x1dfc>
+ f50: e8 1f 09 a0 ld r0,2464(r31)
+ f54: 2f a0 00 00 cmpdi cr7,r0,0
+ f58: 41 9e 06 64 beq- cr7,15bc <._Uppc64_step+0x15bc>
+ f5c: e8 1f 09 a0 ld r0,2464(r31)
+ f60: f8 1f 04 e8 std r0,1256(r31)
+ f64: 38 00 00 00 li r0,0
+ f68: f8 1f 04 f0 std r0,1264(r31)
+ f6c: e9 7f 00 90 ld r11,144(r31)
+ f70: 39 3f 04 e8 addi r9,r31,1256
+ f74: e9 49 00 08 ld r10,8(r9)
+ f78: e9 29 00 00 ld r9,0(r9)
+ f7c: 39 6b 05 28 addi r11,r11,1320
+ f80: f9 2b 00 00 std r9,0(r11)
+ f84: f9 4b 00 08 std r10,8(r11)
+ f88: e9 3f 09 a0 ld r9,2464(r31)
+ f8c: 38 09 00 10 addi r0,r9,16
+ f90: f8 1f 04 d8 std r0,1240(r31)
+ f94: 38 00 00 00 li r0,0
+ f98: f8 1f 04 e0 std r0,1248(r31)
+ f9c: e9 7f 00 90 ld r11,144(r31)
+ fa0: 39 3f 04 d8 addi r9,r31,1240
+ fa4: e9 49 00 08 ld r10,8(r9)
+ fa8: e9 29 00 00 ld r9,0(r9)
+ fac: 39 6b 05 38 addi r11,r11,1336
+ fb0: f9 2b 00 00 std r9,0(r11)
+ fb4: f9 4b 00 08 std r10,8(r11)
+ fb8: e9 3f 09 a0 ld r9,2464(r31)
+ fbc: 38 09 00 20 addi r0,r9,32
+ fc0: f8 1f 04 c8 std r0,1224(r31)
+ fc4: 38 00 00 00 li r0,0
+ fc8: f8 1f 04 d0 std r0,1232(r31)
+ fcc: e9 7f 00 90 ld r11,144(r31)
+ fd0: 39 3f 04 c8 addi r9,r31,1224
+ fd4: e9 49 00 08 ld r10,8(r9)
+ fd8: e9 29 00 00 ld r9,0(r9)
+ fdc: 39 6b 05 48 addi r11,r11,1352
+ fe0: f9 2b 00 00 std r9,0(r11)
+ fe4: f9 4b 00 08 std r10,8(r11)
+ fe8: e9 3f 09 a0 ld r9,2464(r31)
+ fec: 38 09 00 30 addi r0,r9,48
+ ff0: f8 1f 04 b8 std r0,1208(r31)
+ ff4: 38 00 00 00 li r0,0
+ ff8: f8 1f 04 c0 std r0,1216(r31)
+ ffc: e9 7f 00 90 ld r11,144(r31)
+ 1000: 39 3f 04 b8 addi r9,r31,1208
+ 1004: e9 49 00 08 ld r10,8(r9)
+ 1008: e9 29 00 00 ld r9,0(r9)
+ 100c: 39 6b 05 58 addi r11,r11,1368
+ 1010: f9 2b 00 00 std r9,0(r11)
+ 1014: f9 4b 00 08 std r10,8(r11)
+ 1018: e9 3f 09 a0 ld r9,2464(r31)
+ 101c: 38 09 00 40 addi r0,r9,64
+ 1020: f8 1f 04 a8 std r0,1192(r31)
+ 1024: 38 00 00 00 li r0,0
+ 1028: f8 1f 04 b0 std r0,1200(r31)
+ 102c: e9 7f 00 90 ld r11,144(r31)
+ 1030: 39 3f 04 a8 addi r9,r31,1192
+ 1034: e9 49 00 08 ld r10,8(r9)
+ 1038: e9 29 00 00 ld r9,0(r9)
+ 103c: 39 6b 05 68 addi r11,r11,1384
+ 1040: f9 2b 00 00 std r9,0(r11)
+ 1044: f9 4b 00 08 std r10,8(r11)
+ 1048: e9 3f 09 a0 ld r9,2464(r31)
+ 104c: 38 09 00 50 addi r0,r9,80
+ 1050: f8 1f 04 98 std r0,1176(r31)
+ 1054: 38 00 00 00 li r0,0
+ 1058: f8 1f 04 a0 std r0,1184(r31)
+ 105c: e9 7f 00 90 ld r11,144(r31)
+ 1060: 39 3f 04 98 addi r9,r31,1176
+ 1064: e9 49 00 08 ld r10,8(r9)
+ 1068: e9 29 00 00 ld r9,0(r9)
+ 106c: 39 6b 05 78 addi r11,r11,1400
+ 1070: f9 2b 00 00 std r9,0(r11)
+ 1074: f9 4b 00 08 std r10,8(r11)
+ 1078: e9 3f 09 a0 ld r9,2464(r31)
+ 107c: 38 09 00 60 addi r0,r9,96
+ 1080: f8 1f 04 88 std r0,1160(r31)
+ 1084: 38 00 00 00 li r0,0
+ 1088: f8 1f 04 90 std r0,1168(r31)
+ 108c: e9 7f 00 90 ld r11,144(r31)
+ 1090: 39 3f 04 88 addi r9,r31,1160
+ 1094: e9 49 00 08 ld r10,8(r9)
+ 1098: e9 29 00 00 ld r9,0(r9)
+ 109c: 39 6b 05 88 addi r11,r11,1416
+ 10a0: f9 2b 00 00 std r9,0(r11)
+ 10a4: f9 4b 00 08 std r10,8(r11)
+ 10a8: e9 3f 09 a0 ld r9,2464(r31)
+ 10ac: 38 09 00 70 addi r0,r9,112
+ 10b0: f8 1f 04 78 std r0,1144(r31)
+ 10b4: 38 00 00 00 li r0,0
+ 10b8: f8 1f 04 80 std r0,1152(r31)
+ 10bc: e9 7f 00 90 ld r11,144(r31)
+ 10c0: 39 3f 04 78 addi r9,r31,1144
+ 10c4: e9 49 00 08 ld r10,8(r9)
+ 10c8: e9 29 00 00 ld r9,0(r9)
+ 10cc: 39 6b 05 98 addi r11,r11,1432
+ 10d0: f9 2b 00 00 std r9,0(r11)
+ 10d4: f9 4b 00 08 std r10,8(r11)
+ 10d8: e9 3f 09 a0 ld r9,2464(r31)
+ 10dc: 38 09 00 80 addi r0,r9,128
+ 10e0: f8 1f 04 68 std r0,1128(r31)
+ 10e4: 38 00 00 00 li r0,0
+ 10e8: f8 1f 04 70 std r0,1136(r31)
+ 10ec: e9 7f 00 90 ld r11,144(r31)
+ 10f0: 39 3f 04 68 addi r9,r31,1128
+ 10f4: e9 49 00 08 ld r10,8(r9)
+ 10f8: e9 29 00 00 ld r9,0(r9)
+ 10fc: 39 6b 05 a8 addi r11,r11,1448
+ 1100: f9 2b 00 00 std r9,0(r11)
+ 1104: f9 4b 00 08 std r10,8(r11)
+ 1108: e9 3f 09 a0 ld r9,2464(r31)
+ 110c: 38 09 00 90 addi r0,r9,144
+ 1110: f8 1f 04 58 std r0,1112(r31)
+ 1114: 38 00 00 00 li r0,0
+ 1118: f8 1f 04 60 std r0,1120(r31)
+ 111c: e9 7f 00 90 ld r11,144(r31)
+ 1120: 39 3f 04 58 addi r9,r31,1112
+ 1124: e9 49 00 08 ld r10,8(r9)
+ 1128: e9 29 00 00 ld r9,0(r9)
+ 112c: 39 6b 05 b8 addi r11,r11,1464
+ 1130: f9 2b 00 00 std r9,0(r11)
+ 1134: f9 4b 00 08 std r10,8(r11)
+ 1138: e9 3f 09 a0 ld r9,2464(r31)
+ 113c: 38 09 00 a0 addi r0,r9,160
+ 1140: f8 1f 04 48 std r0,1096(r31)
+ 1144: 38 00 00 00 li r0,0
+ 1148: f8 1f 04 50 std r0,1104(r31)
+ 114c: e9 7f 00 90 ld r11,144(r31)
+ 1150: 39 3f 04 48 addi r9,r31,1096
+ 1154: e9 49 00 08 ld r10,8(r9)
+ 1158: e9 29 00 00 ld r9,0(r9)
+ 115c: 39 6b 05 c8 addi r11,r11,1480
+ 1160: f9 2b 00 00 std r9,0(r11)
+ 1164: f9 4b 00 08 std r10,8(r11)
+ 1168: e9 3f 09 a0 ld r9,2464(r31)
+ 116c: 38 09 00 b0 addi r0,r9,176
+ 1170: f8 1f 04 38 std r0,1080(r31)
+ 1174: 38 00 00 00 li r0,0
+ 1178: f8 1f 04 40 std r0,1088(r31)
+ 117c: e9 7f 00 90 ld r11,144(r31)
+ 1180: 39 3f 04 38 addi r9,r31,1080
+ 1184: e9 49 00 08 ld r10,8(r9)
+ 1188: e9 29 00 00 ld r9,0(r9)
+ 118c: 39 6b 05 d8 addi r11,r11,1496
+ 1190: f9 2b 00 00 std r9,0(r11)
+ 1194: f9 4b 00 08 std r10,8(r11)
+ 1198: e9 3f 09 a0 ld r9,2464(r31)
+ 119c: 38 09 00 c0 addi r0,r9,192
+ 11a0: f8 1f 04 28 std r0,1064(r31)
+ 11a4: 38 00 00 00 li r0,0
+ 11a8: f8 1f 04 30 std r0,1072(r31)
+ 11ac: e9 7f 00 90 ld r11,144(r31)
+ 11b0: 39 3f 04 28 addi r9,r31,1064
+ 11b4: e9 49 00 08 ld r10,8(r9)
+ 11b8: e9 29 00 00 ld r9,0(r9)
+ 11bc: 39 6b 05 e8 addi r11,r11,1512
+ 11c0: f9 2b 00 00 std r9,0(r11)
+ 11c4: f9 4b 00 08 std r10,8(r11)
+ 11c8: e9 3f 09 a0 ld r9,2464(r31)
+ 11cc: 38 09 00 d0 addi r0,r9,208
+ 11d0: f8 1f 04 18 std r0,1048(r31)
+ 11d4: 38 00 00 00 li r0,0
+ 11d8: f8 1f 04 20 std r0,1056(r31)
+ 11dc: e9 7f 00 90 ld r11,144(r31)
+ 11e0: 39 3f 04 18 addi r9,r31,1048
+ 11e4: e9 49 00 08 ld r10,8(r9)
+ 11e8: e9 29 00 00 ld r9,0(r9)
+ 11ec: 39 6b 05 f8 addi r11,r11,1528
+ 11f0: f9 2b 00 00 std r9,0(r11)
+ 11f4: f9 4b 00 08 std r10,8(r11)
+ 11f8: e9 3f 09 a0 ld r9,2464(r31)
+ 11fc: 38 09 00 e0 addi r0,r9,224
+ 1200: f8 1f 04 08 std r0,1032(r31)
+ 1204: 38 00 00 00 li r0,0
+ 1208: f8 1f 04 10 std r0,1040(r31)
+ 120c: e9 7f 00 90 ld r11,144(r31)
+ 1210: 39 3f 04 08 addi r9,r31,1032
+ 1214: e9 49 00 08 ld r10,8(r9)
+ 1218: e9 29 00 00 ld r9,0(r9)
+ 121c: 39 6b 06 08 addi r11,r11,1544
+ 1220: f9 2b 00 00 std r9,0(r11)
+ 1224: f9 4b 00 08 std r10,8(r11)
+ 1228: e9 3f 09 a0 ld r9,2464(r31)
+ 122c: 38 09 00 f0 addi r0,r9,240
+ 1230: f8 1f 03 f8 std r0,1016(r31)
+ 1234: 38 00 00 00 li r0,0
+ 1238: f8 1f 04 00 std r0,1024(r31)
+ 123c: e9 7f 00 90 ld r11,144(r31)
+ 1240: 39 3f 03 f8 addi r9,r31,1016
+ 1244: e9 49 00 08 ld r10,8(r9)
+ 1248: e9 29 00 00 ld r9,0(r9)
+ 124c: 39 6b 06 18 addi r11,r11,1560
+ 1250: f9 2b 00 00 std r9,0(r11)
+ 1254: f9 4b 00 08 std r10,8(r11)
+ 1258: e9 3f 09 a0 ld r9,2464(r31)
+ 125c: 38 09 01 00 addi r0,r9,256
+ 1260: f8 1f 03 e8 std r0,1000(r31)
+ 1264: 38 00 00 00 li r0,0
+ 1268: f8 1f 03 f0 std r0,1008(r31)
+ 126c: e9 7f 00 90 ld r11,144(r31)
+ 1270: 39 3f 03 e8 addi r9,r31,1000
+ 1274: e9 49 00 08 ld r10,8(r9)
+ 1278: e9 29 00 00 ld r9,0(r9)
+ 127c: 39 6b 06 28 addi r11,r11,1576
+ 1280: f9 2b 00 00 std r9,0(r11)
+ 1284: f9 4b 00 08 std r10,8(r11)
+ 1288: e9 3f 09 a0 ld r9,2464(r31)
+ 128c: 38 09 01 10 addi r0,r9,272
+ 1290: f8 1f 03 d8 std r0,984(r31)
+ 1294: 38 00 00 00 li r0,0
+ 1298: f8 1f 03 e0 std r0,992(r31)
+ 129c: e9 7f 00 90 ld r11,144(r31)
+ 12a0: 39 3f 03 d8 addi r9,r31,984
+ 12a4: e9 49 00 08 ld r10,8(r9)
+ 12a8: e9 29 00 00 ld r9,0(r9)
+ 12ac: 39 6b 06 38 addi r11,r11,1592
+ 12b0: f9 2b 00 00 std r9,0(r11)
+ 12b4: f9 4b 00 08 std r10,8(r11)
+ 12b8: e9 3f 09 a0 ld r9,2464(r31)
+ 12bc: 38 09 01 20 addi r0,r9,288
+ 12c0: f8 1f 03 c8 std r0,968(r31)
+ 12c4: 38 00 00 00 li r0,0
+ 12c8: f8 1f 03 d0 std r0,976(r31)
+ 12cc: e9 7f 00 90 ld r11,144(r31)
+ 12d0: 39 3f 03 c8 addi r9,r31,968
+ 12d4: e9 49 00 08 ld r10,8(r9)
+ 12d8: e9 29 00 00 ld r9,0(r9)
+ 12dc: 39 6b 06 48 addi r11,r11,1608
+ 12e0: f9 2b 00 00 std r9,0(r11)
+ 12e4: f9 4b 00 08 std r10,8(r11)
+ 12e8: e9 3f 09 a0 ld r9,2464(r31)
+ 12ec: 38 09 01 30 addi r0,r9,304
+ 12f0: f8 1f 03 b8 std r0,952(r31)
+ 12f4: 38 00 00 00 li r0,0
+ 12f8: f8 1f 03 c0 std r0,960(r31)
+ 12fc: e9 7f 00 90 ld r11,144(r31)
+ 1300: 39 3f 03 b8 addi r9,r31,952
+ 1304: e9 49 00 08 ld r10,8(r9)
+ 1308: e9 29 00 00 ld r9,0(r9)
+ 130c: 39 6b 06 58 addi r11,r11,1624
+ 1310: f9 2b 00 00 std r9,0(r11)
+ 1314: f9 4b 00 08 std r10,8(r11)
+ 1318: e9 3f 09 a0 ld r9,2464(r31)
+ 131c: 38 09 01 40 addi r0,r9,320
+ 1320: f8 1f 03 a8 std r0,936(r31)
+ 1324: 38 00 00 00 li r0,0
+ 1328: f8 1f 03 b0 std r0,944(r31)
+ 132c: e9 7f 00 90 ld r11,144(r31)
+ 1330: 39 3f 03 a8 addi r9,r31,936
+ 1334: e9 49 00 08 ld r10,8(r9)
+ 1338: e9 29 00 00 ld r9,0(r9)
+ 133c: 39 6b 06 68 addi r11,r11,1640
+ 1340: f9 2b 00 00 std r9,0(r11)
+ 1344: f9 4b 00 08 std r10,8(r11)
+ 1348: e9 3f 09 a0 ld r9,2464(r31)
+ 134c: 38 09 01 50 addi r0,r9,336
+ 1350: f8 1f 03 98 std r0,920(r31)
+ 1354: 38 00 00 00 li r0,0
+ 1358: f8 1f 03 a0 std r0,928(r31)
+ 135c: e9 7f 00 90 ld r11,144(r31)
+ 1360: 39 3f 03 98 addi r9,r31,920
+ 1364: e9 49 00 08 ld r10,8(r9)
+ 1368: e9 29 00 00 ld r9,0(r9)
+ 136c: 39 6b 06 78 addi r11,r11,1656
+ 1370: f9 2b 00 00 std r9,0(r11)
+ 1374: f9 4b 00 08 std r10,8(r11)
+ 1378: e9 3f 09 a0 ld r9,2464(r31)
+ 137c: 38 09 01 60 addi r0,r9,352
+ 1380: f8 1f 03 88 std r0,904(r31)
+ 1384: 38 00 00 00 li r0,0
+ 1388: f8 1f 03 90 std r0,912(r31)
+ 138c: e9 7f 00 90 ld r11,144(r31)
+ 1390: 39 3f 03 88 addi r9,r31,904
+ 1394: e9 49 00 08 ld r10,8(r9)
+ 1398: e9 29 00 00 ld r9,0(r9)
+ 139c: 39 6b 06 88 addi r11,r11,1672
+ 13a0: f9 2b 00 00 std r9,0(r11)
+ 13a4: f9 4b 00 08 std r10,8(r11)
+ 13a8: e9 3f 09 a0 ld r9,2464(r31)
+ 13ac: 38 09 01 70 addi r0,r9,368
+ 13b0: f8 1f 03 78 std r0,888(r31)
+ 13b4: 38 00 00 00 li r0,0
+ 13b8: f8 1f 03 80 std r0,896(r31)
+ 13bc: e9 7f 00 90 ld r11,144(r31)
+ 13c0: 39 3f 03 78 addi r9,r31,888
+ 13c4: e9 49 00 08 ld r10,8(r9)
+ 13c8: e9 29 00 00 ld r9,0(r9)
+ 13cc: 39 6b 06 98 addi r11,r11,1688
+ 13d0: f9 2b 00 00 std r9,0(r11)
+ 13d4: f9 4b 00 08 std r10,8(r11)
+ 13d8: e9 3f 09 a0 ld r9,2464(r31)
+ 13dc: 38 09 01 80 addi r0,r9,384
+ 13e0: f8 1f 03 68 std r0,872(r31)
+ 13e4: 38 00 00 00 li r0,0
+ 13e8: f8 1f 03 70 std r0,880(r31)
+ 13ec: e9 7f 00 90 ld r11,144(r31)
+ 13f0: 39 3f 03 68 addi r9,r31,872
+ 13f4: e9 49 00 08 ld r10,8(r9)
+ 13f8: e9 29 00 00 ld r9,0(r9)
+ 13fc: 39 6b 06 a8 addi r11,r11,1704
+ 1400: f9 2b 00 00 std r9,0(r11)
+ 1404: f9 4b 00 08 std r10,8(r11)
+ 1408: e9 3f 09 a0 ld r9,2464(r31)
+ 140c: 38 09 01 90 addi r0,r9,400
+ 1410: f8 1f 03 58 std r0,856(r31)
+ 1414: 38 00 00 00 li r0,0
+ 1418: f8 1f 03 60 std r0,864(r31)
+ 141c: e9 7f 00 90 ld r11,144(r31)
+ 1420: 39 3f 03 58 addi r9,r31,856
+ 1424: e9 49 00 08 ld r10,8(r9)
+ 1428: e9 29 00 00 ld r9,0(r9)
+ 142c: 39 6b 06 b8 addi r11,r11,1720
+ 1430: f9 2b 00 00 std r9,0(r11)
+ 1434: f9 4b 00 08 std r10,8(r11)
+ 1438: e9 3f 09 a0 ld r9,2464(r31)
+ 143c: 38 09 01 a0 addi r0,r9,416
+ 1440: f8 1f 03 48 std r0,840(r31)
+ 1444: 38 00 00 00 li r0,0
+ 1448: f8 1f 03 50 std r0,848(r31)
+ 144c: e9 7f 00 90 ld r11,144(r31)
+ 1450: 39 3f 03 48 addi r9,r31,840
+ 1454: e9 49 00 08 ld r10,8(r9)
+ 1458: e9 29 00 00 ld r9,0(r9)
+ 145c: 39 6b 06 c8 addi r11,r11,1736
+ 1460: f9 2b 00 00 std r9,0(r11)
+ 1464: f9 4b 00 08 std r10,8(r11)
+ 1468: e9 3f 09 a0 ld r9,2464(r31)
+ 146c: 38 09 01 b0 addi r0,r9,432
+ 1470: f8 1f 03 38 std r0,824(r31)
+ 1474: 38 00 00 00 li r0,0
+ 1478: f8 1f 03 40 std r0,832(r31)
+ 147c: e9 7f 00 90 ld r11,144(r31)
+ 1480: 39 3f 03 38 addi r9,r31,824
+ 1484: e9 49 00 08 ld r10,8(r9)
+ 1488: e9 29 00 00 ld r9,0(r9)
+ 148c: 39 6b 06 d8 addi r11,r11,1752
+ 1490: f9 2b 00 00 std r9,0(r11)
+ 1494: f9 4b 00 08 std r10,8(r11)
+ 1498: e9 3f 09 a0 ld r9,2464(r31)
+ 149c: 38 09 01 c0 addi r0,r9,448
+ 14a0: f8 1f 03 28 std r0,808(r31)
+ 14a4: 38 00 00 00 li r0,0
+ 14a8: f8 1f 03 30 std r0,816(r31)
+ 14ac: e9 7f 00 90 ld r11,144(r31)
+ 14b0: 39 3f 03 28 addi r9,r31,808
+ 14b4: e9 49 00 08 ld r10,8(r9)
+ 14b8: e9 29 00 00 ld r9,0(r9)
+ 14bc: 39 6b 06 e8 addi r11,r11,1768
+ 14c0: f9 2b 00 00 std r9,0(r11)
+ 14c4: f9 4b 00 08 std r10,8(r11)
+ 14c8: e9 3f 09 a0 ld r9,2464(r31)
+ 14cc: 38 09 01 d0 addi r0,r9,464
+ 14d0: f8 1f 03 18 std r0,792(r31)
+ 14d4: 38 00 00 00 li r0,0
+ 14d8: f8 1f 03 20 std r0,800(r31)
+ 14dc: e9 7f 00 90 ld r11,144(r31)
+ 14e0: 39 3f 03 18 addi r9,r31,792
+ 14e4: e9 49 00 08 ld r10,8(r9)
+ 14e8: e9 29 00 00 ld r9,0(r9)
+ 14ec: 39 6b 06 f8 addi r11,r11,1784
+ 14f0: f9 2b 00 00 std r9,0(r11)
+ 14f4: f9 4b 00 08 std r10,8(r11)
+ 14f8: e9 3f 09 a0 ld r9,2464(r31)
+ 14fc: 38 09 01 e0 addi r0,r9,480
+ 1500: f8 1f 03 08 std r0,776(r31)
+ 1504: 38 00 00 00 li r0,0
+ 1508: f8 1f 03 10 std r0,784(r31)
+ 150c: e9 7f 00 90 ld r11,144(r31)
+ 1510: 39 3f 03 08 addi r9,r31,776
+ 1514: e9 49 00 08 ld r10,8(r9)
+ 1518: e9 29 00 00 ld r9,0(r9)
+ 151c: 39 6b 07 08 addi r11,r11,1800
+ 1520: f9 2b 00 00 std r9,0(r11)
+ 1524: f9 4b 00 08 std r10,8(r11)
+ 1528: e9 3f 09 a0 ld r9,2464(r31)
+ 152c: 38 09 01 f0 addi r0,r9,496
+ 1530: f8 1f 02 f8 std r0,760(r31)
+ 1534: 38 00 00 00 li r0,0
+ 1538: f8 1f 03 00 std r0,768(r31)
+ 153c: e9 7f 00 90 ld r11,144(r31)
+ 1540: 39 3f 02 f8 addi r9,r31,760
+ 1544: e9 49 00 08 ld r10,8(r9)
+ 1548: e9 29 00 00 ld r9,0(r9)
+ 154c: 39 6b 07 18 addi r11,r11,1816
+ 1550: f9 2b 00 00 std r9,0(r11)
+ 1554: f9 4b 00 08 std r10,8(r11)
+ 1558: e9 3f 09 a0 ld r9,2464(r31)
+ 155c: 38 09 02 10 addi r0,r9,528
+ 1560: f8 1f 02 e8 std r0,744(r31)
+ 1564: 38 00 00 00 li r0,0
+ 1568: f8 1f 02 f0 std r0,752(r31)
+ 156c: e9 7f 00 90 ld r11,144(r31)
+ 1570: 39 3f 02 e8 addi r9,r31,744
+ 1574: e9 49 00 08 ld r10,8(r9)
+ 1578: e9 29 00 00 ld r9,0(r9)
+ 157c: 39 6b 07 28 addi r11,r11,1832
+ 1580: f9 2b 00 00 std r9,0(r11)
+ 1584: f9 4b 00 08 std r10,8(r11)
+ 1588: e9 3f 09 a0 ld r9,2464(r31)
+ 158c: 38 09 02 00 addi r0,r9,512
+ 1590: f8 1f 02 d8 std r0,728(r31)
+ 1594: 38 00 00 00 li r0,0
+ 1598: f8 1f 02 e0 std r0,736(r31)
+ 159c: e9 7f 00 90 ld r11,144(r31)
+ 15a0: 39 3f 02 d8 addi r9,r31,728
+ 15a4: e9 49 00 08 ld r10,8(r9)
+ 15a8: e9 29 00 00 ld r9,0(r9)
+ 15ac: 39 6b 07 38 addi r11,r11,1848
+ 15b0: f9 2b 00 00 std r9,0(r11)
+ 15b4: f9 4b 00 08 std r10,8(r11)
+ 15b8: 48 00 08 38 b 1df0 <._Uppc64_step+0x1df0>
+ 15bc: e9 22 00 08 ld r9,8(r2)
+ 15c0: e9 49 00 08 ld r10,8(r9)
+ 15c4: e9 29 00 00 ld r9,0(r9)
+ 15c8: 39 7f 02 c8 addi r11,r31,712
+ 15cc: f9 2b 00 00 std r9,0(r11)
+ 15d0: f9 4b 00 08 std r10,8(r11)
+ 15d4: e9 7f 00 90 ld r11,144(r31)
+ 15d8: 39 3f 02 c8 addi r9,r31,712
+ 15dc: e9 49 00 08 ld r10,8(r9)
+ 15e0: e9 29 00 00 ld r9,0(r9)
+ 15e4: 39 6b 05 28 addi r11,r11,1320
+ 15e8: f9 2b 00 00 std r9,0(r11)
+ 15ec: f9 4b 00 08 std r10,8(r11)
+ 15f0: e9 22 00 10 ld r9,16(r2)
+ 15f4: e9 49 00 08 ld r10,8(r9)
+ 15f8: e9 29 00 00 ld r9,0(r9)
+ 15fc: 39 7f 02 b8 addi r11,r31,696
+ 1600: f9 2b 00 00 std r9,0(r11)
+ 1604: f9 4b 00 08 std r10,8(r11)
+ 1608: e9 7f 00 90 ld r11,144(r31)
+ 160c: 39 3f 02 b8 addi r9,r31,696
+ 1610: e9 49 00 08 ld r10,8(r9)
+ 1614: e9 29 00 00 ld r9,0(r9)
+ 1618: 39 6b 05 38 addi r11,r11,1336
+ 161c: f9 2b 00 00 std r9,0(r11)
+ 1620: f9 4b 00 08 std r10,8(r11)
+ 1624: e9 22 00 18 ld r9,24(r2)
+ 1628: e9 49 00 08 ld r10,8(r9)
+ 162c: e9 29 00 00 ld r9,0(r9)
+ 1630: 39 7f 02 a8 addi r11,r31,680
+ 1634: f9 2b 00 00 std r9,0(r11)
+ 1638: f9 4b 00 08 std r10,8(r11)
+ 163c: e9 7f 00 90 ld r11,144(r31)
+ 1640: 39 3f 02 a8 addi r9,r31,680
+ 1644: e9 49 00 08 ld r10,8(r9)
+ 1648: e9 29 00 00 ld r9,0(r9)
+ 164c: 39 6b 05 48 addi r11,r11,1352
+ 1650: f9 2b 00 00 std r9,0(r11)
+ 1654: f9 4b 00 08 std r10,8(r11)
+ 1658: e9 22 00 20 ld r9,32(r2)
+ 165c: e9 49 00 08 ld r10,8(r9)
+ 1660: e9 29 00 00 ld r9,0(r9)
+ 1664: 39 7f 02 98 addi r11,r31,664
+ 1668: f9 2b 00 00 std r9,0(r11)
+ 166c: f9 4b 00 08 std r10,8(r11)
+ 1670: e9 7f 00 90 ld r11,144(r31)
+ 1674: 39 3f 02 98 addi r9,r31,664
+ 1678: e9 49 00 08 ld r10,8(r9)
+ 167c: e9 29 00 00 ld r9,0(r9)
+ 1680: 39 6b 05 58 addi r11,r11,1368
+ 1684: f9 2b 00 00 std r9,0(r11)
+ 1688: f9 4b 00 08 std r10,8(r11)
+ 168c: e9 22 00 28 ld r9,40(r2)
+ 1690: e9 49 00 08 ld r10,8(r9)
+ 1694: e9 29 00 00 ld r9,0(r9)
+ 1698: 39 7f 02 88 addi r11,r31,648
+ 169c: f9 2b 00 00 std r9,0(r11)
+ 16a0: f9 4b 00 08 std r10,8(r11)
+ 16a4: e9 7f 00 90 ld r11,144(r31)
+ 16a8: 39 3f 02 88 addi r9,r31,648
+ 16ac: e9 49 00 08 ld r10,8(r9)
+ 16b0: e9 29 00 00 ld r9,0(r9)
+ 16b4: 39 6b 05 68 addi r11,r11,1384
+ 16b8: f9 2b 00 00 std r9,0(r11)
+ 16bc: f9 4b 00 08 std r10,8(r11)
+ 16c0: e9 22 00 30 ld r9,48(r2)
+ 16c4: e9 49 00 08 ld r10,8(r9)
+ 16c8: e9 29 00 00 ld r9,0(r9)
+ 16cc: 39 7f 02 78 addi r11,r31,632
+ 16d0: f9 2b 00 00 std r9,0(r11)
+ 16d4: f9 4b 00 08 std r10,8(r11)
+ 16d8: e9 7f 00 90 ld r11,144(r31)
+ 16dc: 39 3f 02 78 addi r9,r31,632
+ 16e0: e9 49 00 08 ld r10,8(r9)
+ 16e4: e9 29 00 00 ld r9,0(r9)
+ 16e8: 39 6b 05 78 addi r11,r11,1400
+ 16ec: f9 2b 00 00 std r9,0(r11)
+ 16f0: f9 4b 00 08 std r10,8(r11)
+ 16f4: e9 22 00 38 ld r9,56(r2)
+ 16f8: e9 49 00 08 ld r10,8(r9)
+ 16fc: e9 29 00 00 ld r9,0(r9)
+ 1700: 39 7f 02 68 addi r11,r31,616
+ 1704: f9 2b 00 00 std r9,0(r11)
+ 1708: f9 4b 00 08 std r10,8(r11)
+ 170c: e9 7f 00 90 ld r11,144(r31)
+ 1710: 39 3f 02 68 addi r9,r31,616
+ 1714: e9 49 00 08 ld r10,8(r9)
+ 1718: e9 29 00 00 ld r9,0(r9)
+ 171c: 39 6b 05 88 addi r11,r11,1416
+ 1720: f9 2b 00 00 std r9,0(r11)
+ 1724: f9 4b 00 08 std r10,8(r11)
+ 1728: e9 22 00 40 ld r9,64(r2)
+ 172c: e9 49 00 08 ld r10,8(r9)
+ 1730: e9 29 00 00 ld r9,0(r9)
+ 1734: 39 7f 02 58 addi r11,r31,600
+ 1738: f9 2b 00 00 std r9,0(r11)
+ 173c: f9 4b 00 08 std r10,8(r11)
+ 1740: e9 7f 00 90 ld r11,144(r31)
+ 1744: 39 3f 02 58 addi r9,r31,600
+ 1748: e9 49 00 08 ld r10,8(r9)
+ 174c: e9 29 00 00 ld r9,0(r9)
+ 1750: 39 6b 05 98 addi r11,r11,1432
+ 1754: f9 2b 00 00 std r9,0(r11)
+ 1758: f9 4b 00 08 std r10,8(r11)
+ 175c: e9 22 00 48 ld r9,72(r2)
+ 1760: e9 49 00 08 ld r10,8(r9)
+ 1764: e9 29 00 00 ld r9,0(r9)
+ 1768: 39 7f 02 48 addi r11,r31,584
+ 176c: f9 2b 00 00 std r9,0(r11)
+ 1770: f9 4b 00 08 std r10,8(r11)
+ 1774: e9 7f 00 90 ld r11,144(r31)
+ 1778: 39 3f 02 48 addi r9,r31,584
+ 177c: e9 49 00 08 ld r10,8(r9)
+ 1780: e9 29 00 00 ld r9,0(r9)
+ 1784: 39 6b 05 a8 addi r11,r11,1448
+ 1788: f9 2b 00 00 std r9,0(r11)
+ 178c: f9 4b 00 08 std r10,8(r11)
+ 1790: e9 22 00 50 ld r9,80(r2)
+ 1794: e9 49 00 08 ld r10,8(r9)
+ 1798: e9 29 00 00 ld r9,0(r9)
+ 179c: 39 7f 02 38 addi r11,r31,568
+ 17a0: f9 2b 00 00 std r9,0(r11)
+ 17a4: f9 4b 00 08 std r10,8(r11)
+ 17a8: e9 7f 00 90 ld r11,144(r31)
+ 17ac: 39 3f 02 38 addi r9,r31,568
+ 17b0: e9 49 00 08 ld r10,8(r9)
+ 17b4: e9 29 00 00 ld r9,0(r9)
+ 17b8: 39 6b 05 b8 addi r11,r11,1464
+ 17bc: f9 2b 00 00 std r9,0(r11)
+ 17c0: f9 4b 00 08 std r10,8(r11)
+ 17c4: e9 22 00 58 ld r9,88(r2)
+ 17c8: e9 49 00 08 ld r10,8(r9)
+ 17cc: e9 29 00 00 ld r9,0(r9)
+ 17d0: 39 7f 02 28 addi r11,r31,552
+ 17d4: f9 2b 00 00 std r9,0(r11)
+ 17d8: f9 4b 00 08 std r10,8(r11)
+ 17dc: e9 7f 00 90 ld r11,144(r31)
+ 17e0: 39 3f 02 28 addi r9,r31,552
+ 17e4: e9 49 00 08 ld r10,8(r9)
+ 17e8: e9 29 00 00 ld r9,0(r9)
+ 17ec: 39 6b 05 c8 addi r11,r11,1480
+ 17f0: f9 2b 00 00 std r9,0(r11)
+ 17f4: f9 4b 00 08 std r10,8(r11)
+ 17f8: e9 22 00 60 ld r9,96(r2)
+ 17fc: e9 49 00 08 ld r10,8(r9)
+ 1800: e9 29 00 00 ld r9,0(r9)
+ 1804: 39 7f 02 18 addi r11,r31,536
+ 1808: f9 2b 00 00 std r9,0(r11)
+ 180c: f9 4b 00 08 std r10,8(r11)
+ 1810: e9 7f 00 90 ld r11,144(r31)
+ 1814: 39 3f 02 18 addi r9,r31,536
+ 1818: e9 49 00 08 ld r10,8(r9)
+ 181c: e9 29 00 00 ld r9,0(r9)
+ 1820: 39 6b 05 d8 addi r11,r11,1496
+ 1824: f9 2b 00 00 std r9,0(r11)
+ 1828: f9 4b 00 08 std r10,8(r11)
+ 182c: e9 22 00 68 ld r9,104(r2)
+ 1830: e9 49 00 08 ld r10,8(r9)
+ 1834: e9 29 00 00 ld r9,0(r9)
+ 1838: 39 7f 02 08 addi r11,r31,520
+ 183c: f9 2b 00 00 std r9,0(r11)
+ 1840: f9 4b 00 08 std r10,8(r11)
+ 1844: e9 7f 00 90 ld r11,144(r31)
+ 1848: 39 3f 02 08 addi r9,r31,520
+ 184c: e9 49 00 08 ld r10,8(r9)
+ 1850: e9 29 00 00 ld r9,0(r9)
+ 1854: 39 6b 05 e8 addi r11,r11,1512
+ 1858: f9 2b 00 00 std r9,0(r11)
+ 185c: f9 4b 00 08 std r10,8(r11)
+ 1860: e9 22 00 70 ld r9,112(r2)
+ 1864: e9 49 00 08 ld r10,8(r9)
+ 1868: e9 29 00 00 ld r9,0(r9)
+ 186c: 39 7f 01 f8 addi r11,r31,504
+ 1870: f9 2b 00 00 std r9,0(r11)
+ 1874: f9 4b 00 08 std r10,8(r11)
+ 1878: e9 7f 00 90 ld r11,144(r31)
+ 187c: 39 3f 01 f8 addi r9,r31,504
+ 1880: e9 49 00 08 ld r10,8(r9)
+ 1884: e9 29 00 00 ld r9,0(r9)
+ 1888: 39 6b 05 f8 addi r11,r11,1528
+ 188c: f9 2b 00 00 std r9,0(r11)
+ 1890: f9 4b 00 08 std r10,8(r11)
+ 1894: e9 22 00 78 ld r9,120(r2)
+ 1898: e9 49 00 08 ld r10,8(r9)
+ 189c: e9 29 00 00 ld r9,0(r9)
+ 18a0: 39 7f 01 e8 addi r11,r31,488
+ 18a4: f9 2b 00 00 std r9,0(r11)
+ 18a8: f9 4b 00 08 std r10,8(r11)
+ 18ac: e9 7f 00 90 ld r11,144(r31)
+ 18b0: 39 3f 01 e8 addi r9,r31,488
+ 18b4: e9 49 00 08 ld r10,8(r9)
+ 18b8: e9 29 00 00 ld r9,0(r9)
+ 18bc: 39 6b 06 08 addi r11,r11,1544
+ 18c0: f9 2b 00 00 std r9,0(r11)
+ 18c4: f9 4b 00 08 std r10,8(r11)
+ 18c8: e9 22 00 80 ld r9,128(r2)
+ 18cc: e9 49 00 08 ld r10,8(r9)
+ 18d0: e9 29 00 00 ld r9,0(r9)
+ 18d4: 39 7f 01 d8 addi r11,r31,472
+ 18d8: f9 2b 00 00 std r9,0(r11)
+ 18dc: f9 4b 00 08 std r10,8(r11)
+ 18e0: e9 7f 00 90 ld r11,144(r31)
+ 18e4: 39 3f 01 d8 addi r9,r31,472
+ 18e8: e9 49 00 08 ld r10,8(r9)
+ 18ec: e9 29 00 00 ld r9,0(r9)
+ 18f0: 39 6b 06 18 addi r11,r11,1560
+ 18f4: f9 2b 00 00 std r9,0(r11)
+ 18f8: f9 4b 00 08 std r10,8(r11)
+ 18fc: e9 22 00 88 ld r9,136(r2)
+ 1900: e9 49 00 08 ld r10,8(r9)
+ 1904: e9 29 00 00 ld r9,0(r9)
+ 1908: 39 7f 01 c8 addi r11,r31,456
+ 190c: f9 2b 00 00 std r9,0(r11)
+ 1910: f9 4b 00 08 std r10,8(r11)
+ 1914: e9 7f 00 90 ld r11,144(r31)
+ 1918: 39 3f 01 c8 addi r9,r31,456
+ 191c: e9 49 00 08 ld r10,8(r9)
+ 1920: e9 29 00 00 ld r9,0(r9)
+ 1924: 39 6b 06 28 addi r11,r11,1576
+ 1928: f9 2b 00 00 std r9,0(r11)
+ 192c: f9 4b 00 08 std r10,8(r11)
+ 1930: e9 22 00 90 ld r9,144(r2)
+ 1934: e9 49 00 08 ld r10,8(r9)
+ 1938: e9 29 00 00 ld r9,0(r9)
+ 193c: 39 7f 01 b8 addi r11,r31,440
+ 1940: f9 2b 00 00 std r9,0(r11)
+ 1944: f9 4b 00 08 std r10,8(r11)
+ 1948: e9 7f 00 90 ld r11,144(r31)
+ 194c: 39 3f 01 b8 addi r9,r31,440
+ 1950: e9 49 00 08 ld r10,8(r9)
+ 1954: e9 29 00 00 ld r9,0(r9)
+ 1958: 39 6b 06 38 addi r11,r11,1592
+ 195c: f9 2b 00 00 std r9,0(r11)
+ 1960: f9 4b 00 08 std r10,8(r11)
+ 1964: e9 22 00 98 ld r9,152(r2)
+ 1968: e9 49 00 08 ld r10,8(r9)
+ 196c: e9 29 00 00 ld r9,0(r9)
+ 1970: 39 7f 01 a8 addi r11,r31,424
+ 1974: f9 2b 00 00 std r9,0(r11)
+ 1978: f9 4b 00 08 std r10,8(r11)
+ 197c: e9 7f 00 90 ld r11,144(r31)
+ 1980: 39 3f 01 a8 addi r9,r31,424
+ 1984: e9 49 00 08 ld r10,8(r9)
+ 1988: e9 29 00 00 ld r9,0(r9)
+ 198c: 39 6b 06 48 addi r11,r11,1608
+ 1990: f9 2b 00 00 std r9,0(r11)
+ 1994: f9 4b 00 08 std r10,8(r11)
+ 1998: e9 22 00 a0 ld r9,160(r2)
+ 199c: e9 49 00 08 ld r10,8(r9)
+ 19a0: e9 29 00 00 ld r9,0(r9)
+ 19a4: 39 7f 01 98 addi r11,r31,408
+ 19a8: f9 2b 00 00 std r9,0(r11)
+ 19ac: f9 4b 00 08 std r10,8(r11)
+ 19b0: e9 7f 00 90 ld r11,144(r31)
+ 19b4: 39 3f 01 98 addi r9,r31,408
+ 19b8: e9 49 00 08 ld r10,8(r9)
+ 19bc: e9 29 00 00 ld r9,0(r9)
+ 19c0: 39 6b 06 58 addi r11,r11,1624
+ 19c4: f9 2b 00 00 std r9,0(r11)
+ 19c8: f9 4b 00 08 std r10,8(r11)
+ 19cc: e9 22 00 a8 ld r9,168(r2)
+ 19d0: e9 49 00 08 ld r10,8(r9)
+ 19d4: e9 29 00 00 ld r9,0(r9)
+ 19d8: 39 7f 01 88 addi r11,r31,392
+ 19dc: f9 2b 00 00 std r9,0(r11)
+ 19e0: f9 4b 00 08 std r10,8(r11)
+ 19e4: e9 7f 00 90 ld r11,144(r31)
+ 19e8: 39 3f 01 88 addi r9,r31,392
+ 19ec: e9 49 00 08 ld r10,8(r9)
+ 19f0: e9 29 00 00 ld r9,0(r9)
+ 19f4: 39 6b 06 68 addi r11,r11,1640
+ 19f8: f9 2b 00 00 std r9,0(r11)
+ 19fc: f9 4b 00 08 std r10,8(r11)
+ 1a00: e9 22 00 b0 ld r9,176(r2)
+ 1a04: e9 49 00 08 ld r10,8(r9)
+ 1a08: e9 29 00 00 ld r9,0(r9)
+ 1a0c: 39 7f 01 78 addi r11,r31,376
+ 1a10: f9 2b 00 00 std r9,0(r11)
+ 1a14: f9 4b 00 08 std r10,8(r11)
+ 1a18: e9 7f 00 90 ld r11,144(r31)
+ 1a1c: 39 3f 01 78 addi r9,r31,376
+ 1a20: e9 49 00 08 ld r10,8(r9)
+ 1a24: e9 29 00 00 ld r9,0(r9)
+ 1a28: 39 6b 06 78 addi r11,r11,1656
+ 1a2c: f9 2b 00 00 std r9,0(r11)
+ 1a30: f9 4b 00 08 std r10,8(r11)
+ 1a34: e9 22 00 b8 ld r9,184(r2)
+ 1a38: e9 49 00 08 ld r10,8(r9)
+ 1a3c: e9 29 00 00 ld r9,0(r9)
+ 1a40: 39 7f 01 68 addi r11,r31,360
+ 1a44: f9 2b 00 00 std r9,0(r11)
+ 1a48: f9 4b 00 08 std r10,8(r11)
+ 1a4c: e9 7f 00 90 ld r11,144(r31)
+ 1a50: 39 3f 01 68 addi r9,r31,360
+ 1a54: e9 49 00 08 ld r10,8(r9)
+ 1a58: e9 29 00 00 ld r9,0(r9)
+ 1a5c: 39 6b 06 88 addi r11,r11,1672
+ 1a60: f9 2b 00 00 std r9,0(r11)
+ 1a64: f9 4b 00 08 std r10,8(r11)
+ 1a68: e9 22 00 c0 ld r9,192(r2)
+ 1a6c: e9 49 00 08 ld r10,8(r9)
+ 1a70: e9 29 00 00 ld r9,0(r9)
+ 1a74: 39 7f 01 58 addi r11,r31,344
+ 1a78: f9 2b 00 00 std r9,0(r11)
+ 1a7c: f9 4b 00 08 std r10,8(r11)
+ 1a80: e9 7f 00 90 ld r11,144(r31)
+ 1a84: 39 3f 01 58 addi r9,r31,344
+ 1a88: e9 49 00 08 ld r10,8(r9)
+ 1a8c: e9 29 00 00 ld r9,0(r9)
+ 1a90: 39 6b 06 98 addi r11,r11,1688
+ 1a94: f9 2b 00 00 std r9,0(r11)
+ 1a98: f9 4b 00 08 std r10,8(r11)
+ 1a9c: e9 22 00 c8 ld r9,200(r2)
+ 1aa0: e9 49 00 08 ld r10,8(r9)
+ 1aa4: e9 29 00 00 ld r9,0(r9)
+ 1aa8: 39 7f 01 48 addi r11,r31,328
+ 1aac: f9 2b 00 00 std r9,0(r11)
+ 1ab0: f9 4b 00 08 std r10,8(r11)
+ 1ab4: e9 7f 00 90 ld r11,144(r31)
+ 1ab8: 39 3f 01 48 addi r9,r31,328
+ 1abc: e9 49 00 08 ld r10,8(r9)
+ 1ac0: e9 29 00 00 ld r9,0(r9)
+ 1ac4: 39 6b 06 a8 addi r11,r11,1704
+ 1ac8: f9 2b 00 00 std r9,0(r11)
+ 1acc: f9 4b 00 08 std r10,8(r11)
+ 1ad0: e9 22 00 d0 ld r9,208(r2)
+ 1ad4: e9 49 00 08 ld r10,8(r9)
+ 1ad8: e9 29 00 00 ld r9,0(r9)
+ 1adc: 39 7f 01 38 addi r11,r31,312
+ 1ae0: f9 2b 00 00 std r9,0(r11)
+ 1ae4: f9 4b 00 08 std r10,8(r11)
+ 1ae8: e9 7f 00 90 ld r11,144(r31)
+ 1aec: 39 3f 01 38 addi r9,r31,312
+ 1af0: e9 49 00 08 ld r10,8(r9)
+ 1af4: e9 29 00 00 ld r9,0(r9)
+ 1af8: 39 6b 06 b8 addi r11,r11,1720
+ 1afc: f9 2b 00 00 std r9,0(r11)
+ 1b00: f9 4b 00 08 std r10,8(r11)
+ 1b04: e9 22 00 d8 ld r9,216(r2)
+ 1b08: e9 49 00 08 ld r10,8(r9)
+ 1b0c: e9 29 00 00 ld r9,0(r9)
+ 1b10: 39 7f 01 28 addi r11,r31,296
+ 1b14: f9 2b 00 00 std r9,0(r11)
+ 1b18: f9 4b 00 08 std r10,8(r11)
+ 1b1c: e9 7f 00 90 ld r11,144(r31)
+ 1b20: 39 3f 01 28 addi r9,r31,296
+ 1b24: e9 49 00 08 ld r10,8(r9)
+ 1b28: e9 29 00 00 ld r9,0(r9)
+ 1b2c: 39 6b 06 c8 addi r11,r11,1736
+ 1b30: f9 2b 00 00 std r9,0(r11)
+ 1b34: f9 4b 00 08 std r10,8(r11)
+ 1b38: e9 22 00 e0 ld r9,224(r2)
+ 1b3c: e9 49 00 08 ld r10,8(r9)
+ 1b40: e9 29 00 00 ld r9,0(r9)
+ 1b44: 39 7f 01 18 addi r11,r31,280
+ 1b48: f9 2b 00 00 std r9,0(r11)
+ 1b4c: f9 4b 00 08 std r10,8(r11)
+ 1b50: e9 7f 00 90 ld r11,144(r31)
+ 1b54: 39 3f 01 18 addi r9,r31,280
+ 1b58: e9 49 00 08 ld r10,8(r9)
+ 1b5c: e9 29 00 00 ld r9,0(r9)
+ 1b60: 39 6b 06 d8 addi r11,r11,1752
+ 1b64: f9 2b 00 00 std r9,0(r11)
+ 1b68: f9 4b 00 08 std r10,8(r11)
+ 1b6c: e9 22 00 e8 ld r9,232(r2)
+ 1b70: e9 49 00 08 ld r10,8(r9)
+ 1b74: e9 29 00 00 ld r9,0(r9)
+ 1b78: 39 7f 01 08 addi r11,r31,264
+ 1b7c: f9 2b 00 00 std r9,0(r11)
+ 1b80: f9 4b 00 08 std r10,8(r11)
+ 1b84: e9 7f 00 90 ld r11,144(r31)
+ 1b88: 39 3f 01 08 addi r9,r31,264
+ 1b8c: e9 49 00 08 ld r10,8(r9)
+ 1b90: e9 29 00 00 ld r9,0(r9)
+ 1b94: 39 6b 06 e8 addi r11,r11,1768
+ 1b98: f9 2b 00 00 std r9,0(r11)
+ 1b9c: f9 4b 00 08 std r10,8(r11)
+ 1ba0: e9 22 00 f0 ld r9,240(r2)
+ 1ba4: e9 49 00 08 ld r10,8(r9)
+ 1ba8: e9 29 00 00 ld r9,0(r9)
+ 1bac: 39 7f 00 f8 addi r11,r31,248
+ 1bb0: f9 2b 00 00 std r9,0(r11)
+ 1bb4: f9 4b 00 08 std r10,8(r11)
+ 1bb8: e9 7f 00 90 ld r11,144(r31)
+ 1bbc: 39 3f 00 f8 addi r9,r31,248
+ 1bc0: e9 49 00 08 ld r10,8(r9)
+ 1bc4: e9 29 00 00 ld r9,0(r9)
+ 1bc8: 39 6b 06 f8 addi r11,r11,1784
+ 1bcc: f9 2b 00 00 std r9,0(r11)
+ 1bd0: f9 4b 00 08 std r10,8(r11)
+ 1bd4: e9 22 00 f8 ld r9,248(r2)
+ 1bd8: e9 49 00 08 ld r10,8(r9)
+ 1bdc: e9 29 00 00 ld r9,0(r9)
+ 1be0: 39 7f 00 e8 addi r11,r31,232
+ 1be4: f9 2b 00 00 std r9,0(r11)
+ 1be8: f9 4b 00 08 std r10,8(r11)
+ 1bec: e9 7f 00 90 ld r11,144(r31)
+ 1bf0: 39 3f 00 e8 addi r9,r31,232
+ 1bf4: e9 49 00 08 ld r10,8(r9)
+ 1bf8: e9 29 00 00 ld r9,0(r9)
+ 1bfc: 39 6b 07 08 addi r11,r11,1800
+ 1c00: f9 2b 00 00 std r9,0(r11)
+ 1c04: f9 4b 00 08 std r10,8(r11)
+ 1c08: e9 22 01 00 ld r9,256(r2)
+ 1c0c: e9 49 00 08 ld r10,8(r9)
+ 1c10: e9 29 00 00 ld r9,0(r9)
+ 1c14: 39 7f 00 d8 addi r11,r31,216
+ 1c18: f9 2b 00 00 std r9,0(r11)
+ 1c1c: f9 4b 00 08 std r10,8(r11)
+ 1c20: e9 7f 00 90 ld r11,144(r31)
+ 1c24: 39 3f 00 d8 addi r9,r31,216
+ 1c28: e9 49 00 08 ld r10,8(r9)
+ 1c2c: e9 29 00 00 ld r9,0(r9)
+ 1c30: 39 6b 07 18 addi r11,r11,1816
+ 1c34: f9 2b 00 00 std r9,0(r11)
+ 1c38: f9 4b 00 08 std r10,8(r11)
+ 1c3c: e9 22 01 08 ld r9,264(r2)
+ 1c40: e9 49 00 08 ld r10,8(r9)
+ 1c44: e9 29 00 00 ld r9,0(r9)
+ 1c48: 39 7f 00 c8 addi r11,r31,200
+ 1c4c: f9 2b 00 00 std r9,0(r11)
+ 1c50: f9 4b 00 08 std r10,8(r11)
+ 1c54: e9 7f 00 90 ld r11,144(r31)
+ 1c58: 39 3f 00 c8 addi r9,r31,200
+ 1c5c: e9 49 00 08 ld r10,8(r9)
+ 1c60: e9 29 00 00 ld r9,0(r9)
+ 1c64: 39 6b 07 28 addi r11,r11,1832
+ 1c68: f9 2b 00 00 std r9,0(r11)
+ 1c6c: f9 4b 00 08 std r10,8(r11)
+ 1c70: e9 22 01 10 ld r9,272(r2)
+ 1c74: e9 49 00 08 ld r10,8(r9)
+ 1c78: e9 29 00 00 ld r9,0(r9)
+ 1c7c: 39 7f 00 b8 addi r11,r31,184
+ 1c80: f9 2b 00 00 std r9,0(r11)
+ 1c84: f9 4b 00 08 std r10,8(r11)
+ 1c88: e9 7f 00 90 ld r11,144(r31)
+ 1c8c: 39 3f 00 b8 addi r9,r31,184
+ 1c90: e9 49 00 08 ld r10,8(r9)
+ 1c94: e9 29 00 00 ld r9,0(r9)
+ 1c98: 39 6b 07 38 addi r11,r11,1848
+ 1c9c: f9 2b 00 00 std r9,0(r11)
+ 1ca0: f9 4b 00 08 std r10,8(r11)
+ 1ca4: 48 00 01 4c b 1df0 <._Uppc64_step+0x1df0>
+ 1ca8: 38 00 00 00 li r0,0
+ 1cac: f8 1f 00 88 std r0,136(r31)
+ 1cb0: 38 00 00 10 li r0,16
+ 1cb4: f8 1f 00 80 std r0,128(r31)
+ 1cb8: e9 3f 00 90 ld r9,144(r31)
+ 1cbc: e9 29 00 10 ld r9,16(r9)
+ 1cc0: e8 1f 00 88 ld r0,136(r31)
+ 1cc4: 7c 09 02 14 add r0,r9,r0
+ 1cc8: f8 1f 00 a8 std r0,168(r31)
+ 1ccc: 38 00 00 00 li r0,0
+ 1cd0: f8 1f 00 b0 std r0,176(r31)
+ 1cd4: 39 3f 00 a8 addi r9,r31,168
+ 1cd8: e9 49 00 08 ld r10,8(r9)
+ 1cdc: e9 29 00 00 ld r9,0(r9)
+ 1ce0: 39 7f 09 a8 addi r11,r31,2472
+ 1ce4: f9 2b 00 00 std r9,0(r11)
+ 1ce8: f9 4b 00 08 std r10,8(r11)
+ 1cec: e8 1f 00 90 ld r0,144(r31)
+ 1cf0: e9 3f 00 90 ld r9,144(r31)
+ 1cf4: 39 69 00 10 addi r11,r9,16
+ 1cf8: 7c 03 03 78 mr r3,r0
+ 1cfc: 39 3f 09 a8 addi r9,r31,2472
+ 1d00: e8 89 00 00 ld r4,0(r9)
+ 1d04: e8 a9 00 08 ld r5,8(r9)
+ 1d08: 7d 66 5b 78 mr r6,r11
+ 1d0c: 48 00 00 19 bl 1d24 <._Uppc64_step+0x1d24>
+ 1d10: 7c 60 1b 78 mr r0,r3
+ 1d14: 90 1f 00 78 stw r0,120(r31)
+ 1d18: 80 1f 00 78 lwz r0,120(r31)
+ 1d1c: 2f 80 00 00 cmpwi cr7,r0,0
+ 1d20: 40 9c 00 14 bge- cr7,1d34 <._Uppc64_step+0x1d34>
+ 1d24: 80 1f 00 78 lwz r0,120(r31)
+ 1d28: 7c 00 07 b4 extsw r0,r0
+ 1d2c: f8 1f 0a 00 std r0,2560(r31)
+ 1d30: 48 00 00 cc b 1dfc <._Uppc64_step+0x1dfc>
+ 1d34: e9 3f 00 90 ld r9,144(r31)
+ 1d38: e8 09 00 10 ld r0,16(r9)
+ 1d3c: 2f a0 00 00 cmpdi cr7,r0,0
+ 1d40: 40 9e 00 10 bne- cr7,1d50 <._Uppc64_step+0x1d50>
+ 1d44: 38 00 00 00 li r0,0
+ 1d48: f8 1f 0a 00 std r0,2560(r31)
+ 1d4c: 48 00 00 b0 b 1dfc <._Uppc64_step+0x1dfc>
+ 1d50: e9 3f 00 90 ld r9,144(r31)
+ 1d54: e9 29 00 10 ld r9,16(r9)
+ 1d58: e8 1f 00 80 ld r0,128(r31)
+ 1d5c: 7c 09 02 14 add r0,r9,r0
+ 1d60: f8 1f 00 98 std r0,152(r31)
+ 1d64: 38 00 00 00 li r0,0
+ 1d68: f8 1f 00 a0 std r0,160(r31)
+ 1d6c: 39 3f 00 98 addi r9,r31,152
+ 1d70: e9 49 00 08 ld r10,8(r9)
+ 1d74: e9 29 00 00 ld r9,0(r9)
+ 1d78: 39 7f 09 b8 addi r11,r31,2488
+ 1d7c: f9 2b 00 00 std r9,0(r11)
+ 1d80: f9 4b 00 08 std r10,8(r11)
+ 1d84: e8 1f 00 90 ld r0,144(r31)
+ 1d88: e9 3f 00 90 ld r9,144(r31)
+ 1d8c: 39 69 00 18 addi r11,r9,24
+ 1d90: 7c 03 03 78 mr r3,r0
+ 1d94: 39 3f 09 b8 addi r9,r31,2488
+ 1d98: e8 89 00 00 ld r4,0(r9)
+ 1d9c: e8 a9 00 08 ld r5,8(r9)
+ 1da0: 7d 66 5b 78 mr r6,r11
+ 1da4: 48 00 00 19 bl 1dbc <._Uppc64_step+0x1dbc>
+ 1da8: 7c 60 1b 78 mr r0,r3
+ 1dac: 90 1f 00 78 stw r0,120(r31)
+ 1db0: 80 1f 00 78 lwz r0,120(r31)
+ 1db4: 2f 80 00 00 cmpwi cr7,r0,0
+ 1db8: 40 9c 00 14 bge- cr7,1dcc <._Uppc64_step+0x1dcc>
+ 1dbc: 80 1f 00 78 lwz r0,120(r31)
+ 1dc0: 7c 00 07 b4 extsw r0,r0
+ 1dc4: f8 1f 0a 00 std r0,2560(r31)
+ 1dc8: 48 00 00 34 b 1dfc <._Uppc64_step+0x1dfc>
+ 1dcc: e8 62 01 18 ld r3,280(r2)
+ 1dd0: 48 00 00 01 bl 1dd0 <._Uppc64_step+0x1dd0>
+ 1dd4: 60 00 00 00 nop
+ 1dd8: 38 00 00 01 li r0,1
+ 1ddc: 90 1f 00 78 stw r0,120(r31)
+ 1de0: 48 00 00 10 b 1df0 <._Uppc64_step+0x1df0>
+ 1de4: e8 62 01 20 ld r3,288(r2)
+ 1de8: 48 00 00 01 bl 1de8 <._Uppc64_step+0x1de8>
+ 1dec: 60 00 00 00 nop
+ 1df0: 80 1f 00 78 lwz r0,120(r31)
+ 1df4: 7c 00 07 b4 extsw r0,r0
+ 1df8: f8 1f 0a 00 std r0,2560(r31)
+ 1dfc: e8 1f 0a 00 ld r0,2560(r31)
+ 1e00: 7c 03 03 78 mr r3,r0
+ 1e04: e8 21 00 00 ld r1,0(r1)
+ 1e08: e8 01 00 10 ld r0,16(r1)
+ 1e0c: 7c 08 03 a6 mtlr r0
+ 1e10: eb e1 ff f8 ld r31,-8(r1)
+ 1e14: 4e 80 00 20 blr
+ 1e18: 00 00 00 00 .long 0x0
+ 1e1c: 00 00 00 01 .long 0x1
+ 1e20: 80 01 00 01 lwz r0,1(r1)
+
+0000000000001e24 <.dwarf_get>:
+ 1e24: 7c 08 02 a6 mflr r0
+ 1e28: fb e1 ff f8 std r31,-8(r1)
+ 1e2c: f8 01 00 10 std r0,16(r1)
+ 1e30: f8 21 ff 61 stdu r1,-160(r1)
+ 1e34: 7c 3f 0b 78 mr r31,r1
+ 1e38: f8 7f 00 d0 std r3,208(r31)
+ 1e3c: 39 3f 00 d8 addi r9,r31,216
+ 1e40: f8 89 00 00 std r4,0(r9)
+ 1e44: f8 a9 00 08 std r5,8(r9)
+ 1e48: f8 df 00 e8 std r6,232(r31)
+ 1e4c: 39 3f 00 d8 addi r9,r31,216
+ 1e50: e9 49 00 08 ld r10,8(r9)
+ 1e54: e9 29 00 00 ld r9,0(r9)
+ 1e58: f9 3f 00 70 std r9,112(r31)
+ 1e5c: f9 5f 00 78 std r10,120(r31)
+ 1e60: e8 1f 00 70 ld r0,112(r31)
+ 1e64: 2f a0 00 00 cmpdi cr7,r0,0
+ 1e68: 40 9e 00 1c bne- cr7,1e84 <.dwarf_get+0x60>
+ 1e6c: e8 1f 00 78 ld r0,120(r31)
+ 1e70: 2f a0 00 00 cmpdi cr7,r0,0
+ 1e74: 40 9e 00 10 bne- cr7,1e84 <.dwarf_get+0x60>
+ 1e78: 38 00 00 01 li r0,1
+ 1e7c: f8 1f 00 88 std r0,136(r31)
+ 1e80: 48 00 00 0c b 1e8c <.dwarf_get+0x68>
+ 1e84: 38 00 00 00 li r0,0
+ 1e88: f8 1f 00 88 std r0,136(r31)
+ 1e8c: e8 1f 00 88 ld r0,136(r31)
+ 1e90: 2f a0 00 00 cmpdi cr7,r0,0
+ 1e94: 41 9e 00 10 beq- cr7,1ea4 <.dwarf_get+0x80>
+ 1e98: 38 00 ff fd li r0,-3
+ 1e9c: f8 1f 00 80 std r0,128(r31)
+ 1ea0: 48 00 00 cc b 1f6c <.dwarf_get+0x148>
+ 1ea4: e8 1f 00 e0 ld r0,224(r31)
+ 1ea8: 54 00 07 bc rlwinm r0,r0,0,30,30
+ 1eac: 2f a0 00 00 cmpdi cr7,r0,0
+ 1eb0: 41 9e 00 64 beq- cr7,1f14 <.dwarf_get+0xf0>
+ 1eb4: e9 3f 00 d0 ld r9,208(r31)
+ 1eb8: e9 29 00 08 ld r9,8(r9)
+ 1ebc: e9 69 00 20 ld r11,32(r9)
+ 1ec0: e9 3f 00 d0 ld r9,208(r31)
+ 1ec4: e9 49 00 08 ld r10,8(r9)
+ 1ec8: e8 1f 00 d8 ld r0,216(r31)
+ 1ecc: 7c 00 07 b4 extsw r0,r0
+ 1ed0: e9 3f 00 d0 ld r9,208(r31)
+ 1ed4: e9 29 00 00 ld r9,0(r9)
+ 1ed8: 7d 43 53 78 mr r3,r10
+ 1edc: 7c 04 03 78 mr r4,r0
+ 1ee0: e8 bf 00 e8 ld r5,232(r31)
+ 1ee4: 38 c0 00 00 li r6,0
+ 1ee8: 7d 27 4b 78 mr r7,r9
+ 1eec: e8 0b 00 00 ld r0,0(r11)
+ 1ef0: 7c 09 03 a6 mtctr r0
+ 1ef4: f8 41 00 28 std r2,40(r1)
+ 1ef8: e8 4b 00 08 ld r2,8(r11)
+ 1efc: e9 6b 00 10 ld r11,16(r11)
+ 1f00: 4e 80 04 21 bctrl
+ 1f04: e8 41 00 28 ld r2,40(r1)
+ 1f08: 7c 60 1b 78 mr r0,r3
+ 1f0c: f8 1f 00 80 std r0,128(r31)
+ 1f10: 48 00 00 5c b 1f6c <.dwarf_get+0x148>
+ 1f14: e9 3f 00 d0 ld r9,208(r31)
+ 1f18: e9 29 00 08 ld r9,8(r9)
+ 1f1c: e9 69 00 18 ld r11,24(r9)
+ 1f20: e9 3f 00 d0 ld r9,208(r31)
+ 1f24: e8 09 00 08 ld r0,8(r9)
+ 1f28: e9 5f 00 d8 ld r10,216(r31)
+ 1f2c: e9 3f 00 d0 ld r9,208(r31)
+ 1f30: e9 29 00 00 ld r9,0(r9)
+ 1f34: 7c 03 03 78 mr r3,r0
+ 1f38: 7d 44 53 78 mr r4,r10
+ 1f3c: e8 bf 00 e8 ld r5,232(r31)
+ 1f40: 38 c0 00 00 li r6,0
+ 1f44: 7d 27 4b 78 mr r7,r9
+ 1f48: e8 0b 00 00 ld r0,0(r11)
+ 1f4c: 7c 09 03 a6 mtctr r0
+ 1f50: f8 41 00 28 std r2,40(r1)
+ 1f54: e8 4b 00 08 ld r2,8(r11)
+ 1f58: e9 6b 00 10 ld r11,16(r11)
+ 1f5c: 4e 80 04 21 bctrl
+ 1f60: e8 41 00 28 ld r2,40(r1)
+ 1f64: 7c 60 1b 78 mr r0,r3
+ 1f68: f8 1f 00 80 std r0,128(r31)
+ 1f6c: e8 1f 00 80 ld r0,128(r31)
+ 1f70: 7c 03 03 78 mr r3,r0
+ 1f74: e8 21 00 00 ld r1,0(r1)
+ 1f78: e8 01 00 10 ld r0,16(r1)
+ 1f7c: 7c 08 03 a6 mtlr r0
+ 1f80: eb e1 ff f8 ld r31,-8(r1)
+ 1f84: 4e 80 00 20 blr
+ 1f88: 00 00 00 00 .long 0x0
+ 1f8c: 00 00 00 01 .long 0x1
+ 1f90: 80 01 00 01 lwz r0,1(r1)
Index: libunwind/src/ppc64/Gstep.c
===================================================================
--- /dev/null
+++ libunwind/src/ppc64/Gstep.c
@@ -0,0 +1,435 @@
+/* libunwind - a platform-independent unwind library
+ Copyright (C) 2002-2004 Hewlett-Packard Co
+
+Contributed by Corey Ashford
+
+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 "ucontext_i.h"
+#include
+
+/* This definition originates in /usr/include/asm-ppc64/ptrace.h, but is
+ defined there only when __KERNEL__ is defined. We reproduce it here for
+ our use at the user level in order to locate the ucontext record, which
+ appears to be at this offset relative to the stack pointer when in the
+ context of the signal handler return trampoline code -
+ __kernel_sigtramp_rt64. */
+#define __SIGNAL_FRAMESIZE 128
+
+/* This definition comes from the document "64-bit PowerPC ELF Application
+ Binary Interface Supplement 1.9", section 3.2.2.
+ http://www.linux-foundation.org/spec/ELF/ppc64/PPC-elf64abi-1.9.html#STACK */
+
+typedef struct
+{
+ long unsigned back_chain;
+ long unsigned cr_save;
+ long unsigned lr_save;
+ /* many more fields here, but they are unused by this code */
+} stack_frame_t;
+
+
+PROTECTED int
+unw_step (unw_cursor_t * cursor)
+{
+ struct cursor *c = (struct cursor *) cursor;
+ stack_frame_t dummy;
+ unw_word_t back_chain_offset, lr_save_offset, v_regs_ptr;
+ struct dwarf_loc back_chain_loc, lr_save_loc, sp_loc, ip_loc, v_regs_loc;
+ int ret;
+
+ Debug (1, "(cursor=%p, ip=0x%016lx)\n", c, (unsigned long) c->dwarf.ip);
+
+ if (c->dwarf.ip == 0)
+ {
+ /* Unless the cursor or stack is corrupt or uninitialized,
+ we've most likely hit the top of the stack */
+ return 0;
+ }
+
+ /* Try DWARF-based unwinding... */
+
+ ret = dwarf_step (&c->dwarf);
+
+ if (ret < 0 && ret != -UNW_ENOINFO)
+ {
+ Debug (2, "returning %d\n", ret);
+ return ret;
+ }
+
+ if (unlikely (ret < 0))
+ {
+ if (likely (!unw_is_signal_frame (cursor)))
+ {
+ /* DWARF unwinding failed. As of 09/26/2006, gcc in 64-bit mode
+ produces the mandatory level of traceback record in the code, but
+ I get the impression that this is transitory, that eventually gcc
+ will not produce any traceback records at all. So, for now, we
+ won't bother to try to find and use these records.
+
+ We can, however, attempt to unwind the frame by using the callback
+ chain. This is very crude, however, and won't be able to unwind
+ any registers besides the IP, SP, and LR . */
+
+ back_chain_offset = ((void *) &dummy.back_chain - (void *) &dummy);
+ lr_save_offset = ((void *) &dummy.lr_save - (void *) &dummy);
+
+ back_chain_loc = DWARF_LOC (c->dwarf.cfa + back_chain_offset, 0);
+
+ if ((ret =
+ dwarf_get (&c->dwarf, back_chain_loc, &c->dwarf.cfa)) < 0)
+ {
+ Debug
+ ("Unable to retrieve CFA from back chain in stack frame - %d\n",
+ ret);
+ return ret;
+ }
+ if (c->dwarf.cfa == 0)
+ /* Unless the cursor or stack is corrupt or uninitialized we've most
+ likely hit the top of the stack */
+ return 0;
+
+ lr_save_loc = DWARF_LOC (c->dwarf.cfa + lr_save_offset, 0);
+
+ if ((ret = dwarf_get (&c->dwarf, lr_save_loc, &c->dwarf.ip)) < 0)
+ {
+ Debug
+ ("Unable to retrieve IP from lr save in stack frame - %d\n",
+ ret);
+ return ret;
+ }
+ ret = 1;
+ }
+ else
+ {
+ /* Find the sigcontext record by taking the CFA and adjusting by
+ the dummy signal frame size.
+
+ Note that there isn't any way to determined if SA_SIGINFO was
+ set in the sa_flags parameter to sigaction when the signal
+ handler was established. If it was not set, the ucontext
+ record is not required to be on the stack, in which case the
+ following code will likely cause a seg fault or other crash
+ condition. */
+
+ unw_word_t ucontext = c->dwarf.cfa + __SIGNAL_FRAMESIZE;
+
+ Debug (1, "signal frame, skip over trampoline\n");
+
+ c->sigcontext_format = PPC64_SCF_LINUX_RT_SIGFRAME;
+ c->sigcontext_addr = ucontext;
+
+ sp_loc = DWARF_LOC (ucontext + UC_MCONTEXT_GREGS_R1, 0);
+ ip_loc = DWARF_LOC (ucontext + UC_MCONTEXT_GREGS_NIP, 0);
+
+ ret = dwarf_get (&c->dwarf, sp_loc, &c->dwarf.cfa);
+ if (ret < 0)
+ {
+ Debug (2, "returning %d\n", ret);
+ return ret;
+ }
+ ret = dwarf_get (&c->dwarf, ip_loc, &c->dwarf.ip);
+ if (ret < 0)
+ {
+ Debug (2, "returning %d\n", ret);
+ return ret;
+ }
+
+ /* Instead of just restoring the non-volatile registers, do all
+ of the registers for now. This will incur a performance hit,
+ but it's rare enough not to cause too much of a problem, and
+ might be useful in some cases. */
+ c->dwarf.loc[UNW_PPC64_R0] =
+ DWARF_LOC (ucontext + UC_MCONTEXT_GREGS_R0, 0);
+ c->dwarf.loc[UNW_PPC64_R1] =
+ DWARF_LOC (ucontext + UC_MCONTEXT_GREGS_R1, 0);
+ c->dwarf.loc[UNW_PPC64_R2] =
+ DWARF_LOC (ucontext + UC_MCONTEXT_GREGS_R2, 0);
+ c->dwarf.loc[UNW_PPC64_R3] =
+ DWARF_LOC (ucontext + UC_MCONTEXT_GREGS_R3, 0);
+ c->dwarf.loc[UNW_PPC64_R4] =
+ DWARF_LOC (ucontext + UC_MCONTEXT_GREGS_R4, 0);
+ c->dwarf.loc[UNW_PPC64_R5] =
+ DWARF_LOC (ucontext + UC_MCONTEXT_GREGS_R5, 0);
+ c->dwarf.loc[UNW_PPC64_R6] =
+ DWARF_LOC (ucontext + UC_MCONTEXT_GREGS_R6, 0);
+ c->dwarf.loc[UNW_PPC64_R7] =
+ DWARF_LOC (ucontext + UC_MCONTEXT_GREGS_R7, 0);
+ c->dwarf.loc[UNW_PPC64_R8] =
+ DWARF_LOC (ucontext + UC_MCONTEXT_GREGS_R8, 0);
+ c->dwarf.loc[UNW_PPC64_R9] =
+ DWARF_LOC (ucontext + UC_MCONTEXT_GREGS_R9, 0);
+ c->dwarf.loc[UNW_PPC64_R10] =
+ DWARF_LOC (ucontext + UC_MCONTEXT_GREGS_R10, 0);
+ c->dwarf.loc[UNW_PPC64_R11] =
+ DWARF_LOC (ucontext + UC_MCONTEXT_GREGS_R11, 0);
+ c->dwarf.loc[UNW_PPC64_R12] =
+ DWARF_LOC (ucontext + UC_MCONTEXT_GREGS_R12, 0);
+ c->dwarf.loc[UNW_PPC64_R13] =
+ DWARF_LOC (ucontext + UC_MCONTEXT_GREGS_R13, 0);
+ c->dwarf.loc[UNW_PPC64_R14] =
+ DWARF_LOC (ucontext + UC_MCONTEXT_GREGS_R14, 0);
+ c->dwarf.loc[UNW_PPC64_R15] =
+ DWARF_LOC (ucontext + UC_MCONTEXT_GREGS_R15, 0);
+ c->dwarf.loc[UNW_PPC64_R16] =
+ DWARF_LOC (ucontext + UC_MCONTEXT_GREGS_R16, 0);
+ c->dwarf.loc[UNW_PPC64_R17] =
+ DWARF_LOC (ucontext + UC_MCONTEXT_GREGS_R17, 0);
+ c->dwarf.loc[UNW_PPC64_R18] =
+ DWARF_LOC (ucontext + UC_MCONTEXT_GREGS_R18, 0);
+ c->dwarf.loc[UNW_PPC64_R19] =
+ DWARF_LOC (ucontext + UC_MCONTEXT_GREGS_R19, 0);
+ c->dwarf.loc[UNW_PPC64_R20] =
+ DWARF_LOC (ucontext + UC_MCONTEXT_GREGS_R20, 0);
+ c->dwarf.loc[UNW_PPC64_R21] =
+ DWARF_LOC (ucontext + UC_MCONTEXT_GREGS_R21, 0);
+ c->dwarf.loc[UNW_PPC64_R22] =
+ DWARF_LOC (ucontext + UC_MCONTEXT_GREGS_R22, 0);
+ c->dwarf.loc[UNW_PPC64_R23] =
+ DWARF_LOC (ucontext + UC_MCONTEXT_GREGS_R23, 0);
+ c->dwarf.loc[UNW_PPC64_R24] =
+ DWARF_LOC (ucontext + UC_MCONTEXT_GREGS_R24, 0);
+ c->dwarf.loc[UNW_PPC64_R25] =
+ DWARF_LOC (ucontext + UC_MCONTEXT_GREGS_R25, 0);
+ c->dwarf.loc[UNW_PPC64_R26] =
+ DWARF_LOC (ucontext + UC_MCONTEXT_GREGS_R26, 0);
+ c->dwarf.loc[UNW_PPC64_R27] =
+ DWARF_LOC (ucontext + UC_MCONTEXT_GREGS_R27, 0);
+ c->dwarf.loc[UNW_PPC64_R28] =
+ DWARF_LOC (ucontext + UC_MCONTEXT_GREGS_R28, 0);
+ c->dwarf.loc[UNW_PPC64_R29] =
+ DWARF_LOC (ucontext + UC_MCONTEXT_GREGS_R29, 0);
+ c->dwarf.loc[UNW_PPC64_R30] =
+ DWARF_LOC (ucontext + UC_MCONTEXT_GREGS_R30, 0);
+ c->dwarf.loc[UNW_PPC64_R31] =
+ DWARF_LOC (ucontext + UC_MCONTEXT_GREGS_R31, 0);
+
+ c->dwarf.loc[UNW_PPC64_LR] =
+ DWARF_LOC (ucontext + UC_MCONTEXT_GREGS_LINK, 0);
+ c->dwarf.loc[UNW_PPC64_CTR] =
+ DWARF_LOC (ucontext + UC_MCONTEXT_GREGS_CTR, 0);
+ /* This CR0 assignment is probably wrong. There are 8 dwarf columns
+ assigned to the CR registers, but only one CR register in the
+ mcontext structure */
+ c->dwarf.loc[UNW_PPC64_CR0] =
+ DWARF_LOC (ucontext + UC_MCONTEXT_GREGS_CCR, 0);
+ c->dwarf.loc[UNW_PPC64_XER] =
+ DWARF_LOC (ucontext + UC_MCONTEXT_GREGS_XER, 0);
+ c->dwarf.loc[UNW_PPC64_NIP] =
+ DWARF_LOC (ucontext + UC_MCONTEXT_GREGS_NIP, 0);
+
+ /* TODO: Is there a way of obtaining the value of the
+ pseudo frame pointer (which is sp + some fixed offset, I
+ assume), based on the contents of the ucontext record
+ structure? For now, set this loc to null. */
+ c->dwarf.loc[UNW_PPC64_FRAME_POINTER] = DWARF_NULL_LOC;
+
+ c->dwarf.loc[UNW_PPC64_F0] =
+ DWARF_LOC (ucontext + UC_MCONTEXT_FREGS_R0, 0);
+ c->dwarf.loc[UNW_PPC64_F1] =
+ DWARF_LOC (ucontext + UC_MCONTEXT_FREGS_R1, 0);
+ c->dwarf.loc[UNW_PPC64_F2] =
+ DWARF_LOC (ucontext + UC_MCONTEXT_FREGS_R2, 0);
+ c->dwarf.loc[UNW_PPC64_F3] =
+ DWARF_LOC (ucontext + UC_MCONTEXT_FREGS_R3, 0);
+ c->dwarf.loc[UNW_PPC64_F4] =
+ DWARF_LOC (ucontext + UC_MCONTEXT_FREGS_R4, 0);
+ c->dwarf.loc[UNW_PPC64_F5] =
+ DWARF_LOC (ucontext + UC_MCONTEXT_FREGS_R5, 0);
+ c->dwarf.loc[UNW_PPC64_F6] =
+ DWARF_LOC (ucontext + UC_MCONTEXT_FREGS_R6, 0);
+ c->dwarf.loc[UNW_PPC64_F7] =
+ DWARF_LOC (ucontext + UC_MCONTEXT_FREGS_R7, 0);
+ c->dwarf.loc[UNW_PPC64_F8] =
+ DWARF_LOC (ucontext + UC_MCONTEXT_FREGS_R8, 0);
+ c->dwarf.loc[UNW_PPC64_F9] =
+ DWARF_LOC (ucontext + UC_MCONTEXT_FREGS_R9, 0);
+ c->dwarf.loc[UNW_PPC64_F10] =
+ DWARF_LOC (ucontext + UC_MCONTEXT_FREGS_R10, 0);
+ c->dwarf.loc[UNW_PPC64_F11] =
+ DWARF_LOC (ucontext + UC_MCONTEXT_FREGS_R11, 0);
+ c->dwarf.loc[UNW_PPC64_F12] =
+ DWARF_LOC (ucontext + UC_MCONTEXT_FREGS_R12, 0);
+ c->dwarf.loc[UNW_PPC64_F13] =
+ DWARF_LOC (ucontext + UC_MCONTEXT_FREGS_R13, 0);
+ c->dwarf.loc[UNW_PPC64_F14] =
+ DWARF_LOC (ucontext + UC_MCONTEXT_FREGS_R14, 0);
+ c->dwarf.loc[UNW_PPC64_F15] =
+ DWARF_LOC (ucontext + UC_MCONTEXT_FREGS_R15, 0);
+ c->dwarf.loc[UNW_PPC64_F16] =
+ DWARF_LOC (ucontext + UC_MCONTEXT_FREGS_R16, 0);
+ c->dwarf.loc[UNW_PPC64_F17] =
+ DWARF_LOC (ucontext + UC_MCONTEXT_FREGS_R17, 0);
+ c->dwarf.loc[UNW_PPC64_F18] =
+ DWARF_LOC (ucontext + UC_MCONTEXT_FREGS_R18, 0);
+ c->dwarf.loc[UNW_PPC64_F19] =
+ DWARF_LOC (ucontext + UC_MCONTEXT_FREGS_R19, 0);
+ c->dwarf.loc[UNW_PPC64_F20] =
+ DWARF_LOC (ucontext + UC_MCONTEXT_FREGS_R20, 0);
+ c->dwarf.loc[UNW_PPC64_F21] =
+ DWARF_LOC (ucontext + UC_MCONTEXT_FREGS_R21, 0);
+ c->dwarf.loc[UNW_PPC64_F22] =
+ DWARF_LOC (ucontext + UC_MCONTEXT_FREGS_R22, 0);
+ c->dwarf.loc[UNW_PPC64_F23] =
+ DWARF_LOC (ucontext + UC_MCONTEXT_FREGS_R23, 0);
+ c->dwarf.loc[UNW_PPC64_F24] =
+ DWARF_LOC (ucontext + UC_MCONTEXT_FREGS_R24, 0);
+ c->dwarf.loc[UNW_PPC64_F25] =
+ DWARF_LOC (ucontext + UC_MCONTEXT_FREGS_R25, 0);
+ c->dwarf.loc[UNW_PPC64_F26] =
+ DWARF_LOC (ucontext + UC_MCONTEXT_FREGS_R26, 0);
+ c->dwarf.loc[UNW_PPC64_F27] =
+ DWARF_LOC (ucontext + UC_MCONTEXT_FREGS_R27, 0);
+ c->dwarf.loc[UNW_PPC64_F28] =
+ DWARF_LOC (ucontext + UC_MCONTEXT_FREGS_R28, 0);
+ c->dwarf.loc[UNW_PPC64_F29] =
+ DWARF_LOC (ucontext + UC_MCONTEXT_FREGS_R29, 0);
+ c->dwarf.loc[UNW_PPC64_F30] =
+ DWARF_LOC (ucontext + UC_MCONTEXT_FREGS_R30, 0);
+ c->dwarf.loc[UNW_PPC64_F31] =
+ DWARF_LOC (ucontext + UC_MCONTEXT_FREGS_R31, 0);
+ /* Note that there is no .eh_section register column for the
+ FPSCR register. I don't know why this is. */
+
+ v_regs_loc = DWARF_LOC (ucontext + UC_MCONTEXT_V_REGS, 0);
+ ret = dwarf_get (&c->dwarf, v_regs_loc, &v_regs_ptr);
+ if (ret < 0)
+ {
+ Debug (2, "returning %d\n", ret);
+ return ret;
+ }
+ if (v_regs_ptr != 0)
+ {
+ /* The v_regs_ptr is not null. Set all of the AltiVec locs */
+
+ c->dwarf.loc[UNW_PPC64_V0] =
+ DWARF_LOC (v_regs_ptr + UC_MCONTEXT_VREGS_R0, 0);
+ c->dwarf.loc[UNW_PPC64_V1] =
+ DWARF_LOC (v_regs_ptr + UC_MCONTEXT_VREGS_R1, 0);
+ c->dwarf.loc[UNW_PPC64_V2] =
+ DWARF_LOC (v_regs_ptr + UC_MCONTEXT_VREGS_R2, 0);
+ c->dwarf.loc[UNW_PPC64_V3] =
+ DWARF_LOC (v_regs_ptr + UC_MCONTEXT_VREGS_R3, 0);
+ c->dwarf.loc[UNW_PPC64_V4] =
+ DWARF_LOC (v_regs_ptr + UC_MCONTEXT_VREGS_R4, 0);
+ c->dwarf.loc[UNW_PPC64_V5] =
+ DWARF_LOC (v_regs_ptr + UC_MCONTEXT_VREGS_R5, 0);
+ c->dwarf.loc[UNW_PPC64_V6] =
+ DWARF_LOC (v_regs_ptr + UC_MCONTEXT_VREGS_R6, 0);
+ c->dwarf.loc[UNW_PPC64_V7] =
+ DWARF_LOC (v_regs_ptr + UC_MCONTEXT_VREGS_R7, 0);
+ c->dwarf.loc[UNW_PPC64_V8] =
+ DWARF_LOC (v_regs_ptr + UC_MCONTEXT_VREGS_R8, 0);
+ c->dwarf.loc[UNW_PPC64_V9] =
+ DWARF_LOC (v_regs_ptr + UC_MCONTEXT_VREGS_R9, 0);
+ c->dwarf.loc[UNW_PPC64_V10] =
+ DWARF_LOC (v_regs_ptr + UC_MCONTEXT_VREGS_R10, 0);
+ c->dwarf.loc[UNW_PPC64_V11] =
+ DWARF_LOC (v_regs_ptr + UC_MCONTEXT_VREGS_R11, 0);
+ c->dwarf.loc[UNW_PPC64_V12] =
+ DWARF_LOC (v_regs_ptr + UC_MCONTEXT_VREGS_R12, 0);
+ c->dwarf.loc[UNW_PPC64_V13] =
+ DWARF_LOC (v_regs_ptr + UC_MCONTEXT_VREGS_R13, 0);
+ c->dwarf.loc[UNW_PPC64_V14] =
+ DWARF_LOC (v_regs_ptr + UC_MCONTEXT_VREGS_R14, 0);
+ c->dwarf.loc[UNW_PPC64_V15] =
+ DWARF_LOC (v_regs_ptr + UC_MCONTEXT_VREGS_R15, 0);
+ c->dwarf.loc[UNW_PPC64_V16] =
+ DWARF_LOC (v_regs_ptr + UC_MCONTEXT_VREGS_R16, 0);
+ c->dwarf.loc[UNW_PPC64_V17] =
+ DWARF_LOC (v_regs_ptr + UC_MCONTEXT_VREGS_R17, 0);
+ c->dwarf.loc[UNW_PPC64_V18] =
+ DWARF_LOC (v_regs_ptr + UC_MCONTEXT_VREGS_R18, 0);
+ c->dwarf.loc[UNW_PPC64_V19] =
+ DWARF_LOC (v_regs_ptr + UC_MCONTEXT_VREGS_R19, 0);
+ c->dwarf.loc[UNW_PPC64_V20] =
+ DWARF_LOC (v_regs_ptr + UC_MCONTEXT_VREGS_R20, 0);
+ c->dwarf.loc[UNW_PPC64_V21] =
+ DWARF_LOC (v_regs_ptr + UC_MCONTEXT_VREGS_R21, 0);
+ c->dwarf.loc[UNW_PPC64_V22] =
+ DWARF_LOC (v_regs_ptr + UC_MCONTEXT_VREGS_R22, 0);
+ c->dwarf.loc[UNW_PPC64_V23] =
+ DWARF_LOC (v_regs_ptr + UC_MCONTEXT_VREGS_R23, 0);
+ c->dwarf.loc[UNW_PPC64_V24] =
+ DWARF_LOC (v_regs_ptr + UC_MCONTEXT_VREGS_R24, 0);
+ c->dwarf.loc[UNW_PPC64_V25] =
+ DWARF_LOC (v_regs_ptr + UC_MCONTEXT_VREGS_R25, 0);
+ c->dwarf.loc[UNW_PPC64_V26] =
+ DWARF_LOC (v_regs_ptr + UC_MCONTEXT_VREGS_R26, 0);
+ c->dwarf.loc[UNW_PPC64_V27] =
+ DWARF_LOC (v_regs_ptr + UC_MCONTEXT_VREGS_R27, 0);
+ c->dwarf.loc[UNW_PPC64_V28] =
+ DWARF_LOC (v_regs_ptr + UC_MCONTEXT_VREGS_R28, 0);
+ c->dwarf.loc[UNW_PPC64_V29] =
+ DWARF_LOC (v_regs_ptr + UC_MCONTEXT_VREGS_R29, 0);
+ c->dwarf.loc[UNW_PPC64_V30] =
+ DWARF_LOC (v_regs_ptr + UC_MCONTEXT_VREGS_R30, 0);
+ c->dwarf.loc[UNW_PPC64_V31] =
+ DWARF_LOC (v_regs_ptr + UC_MCONTEXT_VREGS_R31, 0);
+ c->dwarf.loc[UNW_PPC64_VRSAVE] =
+ DWARF_LOC (v_regs_ptr + UC_MCONTEXT_VREGS_VRSAVE, 0);
+ c->dwarf.loc[UNW_PPC64_VSCR] =
+ DWARF_LOC (v_regs_ptr + UC_MCONTEXT_VREGS_VSCR, 0);
+ }
+ else
+ {
+ c->dwarf.loc[UNW_PPC64_V0] = DWARF_NULL_LOC;
+ c->dwarf.loc[UNW_PPC64_V1] = DWARF_NULL_LOC;
+ c->dwarf.loc[UNW_PPC64_V2] = DWARF_NULL_LOC;
+ c->dwarf.loc[UNW_PPC64_V3] = DWARF_NULL_LOC;
+ c->dwarf.loc[UNW_PPC64_V4] = DWARF_NULL_LOC;
+ c->dwarf.loc[UNW_PPC64_V5] = DWARF_NULL_LOC;
+ c->dwarf.loc[UNW_PPC64_V6] = DWARF_NULL_LOC;
+ c->dwarf.loc[UNW_PPC64_V7] = DWARF_NULL_LOC;
+ c->dwarf.loc[UNW_PPC64_V8] = DWARF_NULL_LOC;
+ c->dwarf.loc[UNW_PPC64_V9] = DWARF_NULL_LOC;
+ c->dwarf.loc[UNW_PPC64_V10] = DWARF_NULL_LOC;
+ c->dwarf.loc[UNW_PPC64_V11] = DWARF_NULL_LOC;
+ c->dwarf.loc[UNW_PPC64_V12] = DWARF_NULL_LOC;
+ c->dwarf.loc[UNW_PPC64_V13] = DWARF_NULL_LOC;
+ c->dwarf.loc[UNW_PPC64_V14] = DWARF_NULL_LOC;
+ c->dwarf.loc[UNW_PPC64_V15] = DWARF_NULL_LOC;
+ c->dwarf.loc[UNW_PPC64_V16] = DWARF_NULL_LOC;
+ c->dwarf.loc[UNW_PPC64_V17] = DWARF_NULL_LOC;
+ c->dwarf.loc[UNW_PPC64_V18] = DWARF_NULL_LOC;
+ c->dwarf.loc[UNW_PPC64_V19] = DWARF_NULL_LOC;
+ c->dwarf.loc[UNW_PPC64_V20] = DWARF_NULL_LOC;
+ c->dwarf.loc[UNW_PPC64_V21] = DWARF_NULL_LOC;
+ c->dwarf.loc[UNW_PPC64_V22] = DWARF_NULL_LOC;
+ c->dwarf.loc[UNW_PPC64_V23] = DWARF_NULL_LOC;
+ c->dwarf.loc[UNW_PPC64_V24] = DWARF_NULL_LOC;
+ c->dwarf.loc[UNW_PPC64_V25] = DWARF_NULL_LOC;
+ c->dwarf.loc[UNW_PPC64_V26] = DWARF_NULL_LOC;
+ c->dwarf.loc[UNW_PPC64_V27] = DWARF_NULL_LOC;
+ c->dwarf.loc[UNW_PPC64_V28] = DWARF_NULL_LOC;
+ c->dwarf.loc[UNW_PPC64_V29] = DWARF_NULL_LOC;
+ c->dwarf.loc[UNW_PPC64_V30] = DWARF_NULL_LOC;
+ c->dwarf.loc[UNW_PPC64_V31] = DWARF_NULL_LOC;
+ c->dwarf.loc[UNW_PPC64_VRSAVE] = DWARF_NULL_LOC;
+ c->dwarf.loc[UNW_PPC64_VSCR] = DWARF_NULL_LOC;
+ }
+ ret = 1;
+ }
+ }
+ return ret;
+}
Index: libunwind/src/ppc64/Lcreate_addr_space.c
===================================================================
--- /dev/null
+++ libunwind/src/ppc64/Lcreate_addr_space.c
@@ -0,0 +1,5 @@
+#define UNW_LOCAL_ONLY
+#include
+#if defined(UNW_LOCAL_ONLY) && !defined(UNW_REMOTE_ONLY)
+#include "Gcreate_addr_space.c"
+#endif
Index: libunwind/src/ppc64/Lget_proc_info.c
===================================================================
--- /dev/null
+++ libunwind/src/ppc64/Lget_proc_info.c
@@ -0,0 +1,5 @@
+#define UNW_LOCAL_ONLY
+#include
+#if defined(UNW_LOCAL_ONLY) && !defined(UNW_REMOTE_ONLY)
+#include "Gget_proc_info.c"
+#endif
Index: libunwind/src/ppc64/Lget_save_loc.c
===================================================================
--- /dev/null
+++ libunwind/src/ppc64/Lget_save_loc.c
@@ -0,0 +1,5 @@
+#define UNW_LOCAL_ONLY
+#include
+#if defined(UNW_LOCAL_ONLY) && !defined(UNW_REMOTE_ONLY)
+#include "Gget_save_loc.c"
+#endif
Index: libunwind/src/ppc64/Lglobal.c
===================================================================
--- /dev/null
+++ libunwind/src/ppc64/Lglobal.c
@@ -0,0 +1,5 @@
+#define UNW_LOCAL_ONLY
+#include
+#if defined(UNW_LOCAL_ONLY) && !defined(UNW_REMOTE_ONLY)
+#include "Gglobal.c"
+#endif
Index: libunwind/src/ppc64/Linit.c
===================================================================
--- /dev/null
+++ libunwind/src/ppc64/Linit.c
@@ -0,0 +1,5 @@
+#define UNW_LOCAL_ONLY
+#include
+#if defined(UNW_LOCAL_ONLY) && !defined(UNW_REMOTE_ONLY)
+#include "Ginit.c"
+#endif
Index: libunwind/src/ppc64/Linit_local.c
===================================================================
--- /dev/null
+++ libunwind/src/ppc64/Linit_local.c
@@ -0,0 +1,5 @@
+#define UNW_LOCAL_ONLY
+#include
+#if defined(UNW_LOCAL_ONLY) && !defined(UNW_REMOTE_ONLY)
+#include "Ginit_local.c"
+#endif
Index: libunwind/src/ppc64/Linit_remote.c
===================================================================
--- /dev/null
+++ libunwind/src/ppc64/Linit_remote.c
@@ -0,0 +1,5 @@
+#define UNW_LOCAL_ONLY
+#include
+#if defined(UNW_LOCAL_ONLY) && !defined(UNW_REMOTE_ONLY)
+#include "Ginit_remote.c"
+#endif
Index: libunwind/src/ppc64/Lis_signal_frame.c
===================================================================
--- /dev/null
+++ libunwind/src/ppc64/Lis_signal_frame.c
@@ -0,0 +1,5 @@
+#define UNW_LOCAL_ONLY
+#include
+#if defined(UNW_LOCAL_ONLY) && !defined(UNW_REMOTE_ONLY)
+#include "Gis_signal_frame.c"
+#endif
Index: libunwind/src/ppc64/Lregs.c
===================================================================
--- /dev/null
+++ libunwind/src/ppc64/Lregs.c
@@ -0,0 +1,5 @@
+#define UNW_LOCAL_ONLY
+#include
+#if defined(UNW_LOCAL_ONLY) && !defined(UNW_REMOTE_ONLY)
+#include "Gregs.c"
+#endif
Index: libunwind/src/ppc64/Lresume.c
===================================================================
--- /dev/null
+++ libunwind/src/ppc64/Lresume.c
@@ -0,0 +1,5 @@
+#define UNW_LOCAL_ONLY
+#include
+#if defined(UNW_LOCAL_ONLY) && !defined(UNW_REMOTE_ONLY)
+#include "Gresume.c"
+#endif
Index: libunwind/src/ppc64/Lstep.c
===================================================================
--- /dev/null
+++ libunwind/src/ppc64/Lstep.c
@@ -0,0 +1,5 @@
+#define UNW_LOCAL_ONLY
+#include
+#if defined(UNW_LOCAL_ONLY) && !defined(UNW_REMOTE_ONLY)
+#include "Gstep.c"
+#endif
Index: libunwind/src/ppc64/Make-arch.in
===================================================================
--- /dev/null
+++ libunwind/src/ppc64/Make-arch.in
@@ -0,0 +1,11 @@
+# Word size.
+ELFW = 64
+# Does use dwarf2 unwind info.
+dwarf_target = true
+
+libunwind_setjmp_OBJS += \
+ $(arch)/longjmp.o \
+ $(arch)/siglongjmp.o
+
+libunwind_OBJS_common += \
+ $(arch)/is_fpreg.o
Index: libunwind/src/ppc64/init.h
===================================================================
--- /dev/null
+++ libunwind/src/ppc64/init.h
@@ -0,0 +1,81 @@
+/* libunwind - a platform-independent unwind library
+ Copyright (C) 2002 Hewlett-Packard Co
+
+
+Contributed by Corey Ashford
+
+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"
+
+static inline int
+common_init (struct cursor *c)
+{
+ int ret;
+ int i;
+
+ for (i = UNW_PPC64_R0; i <= UNW_PPC64_R31; i++) {
+ c->dwarf.loc[i] = DWARF_REG_LOC (&c->dwarf, i);
+ }
+ for (i = UNW_PPC64_F0; i <= UNW_PPC64_F31; i++) {
+ c->dwarf.loc[i] = DWARF_FPREG_LOC (&c->dwarf, i);
+ }
+ for (i = UNW_PPC64_V0; i <= UNW_PPC64_V31; i++) {
+ c->dwarf.loc[i] = DWARF_VREG_LOC (&c->dwarf, i);
+ }
+
+ for (i = UNW_PPC64_CR0; i <= UNW_PPC64_CR7; i++) {
+ c->dwarf.loc[i] = DWARF_REG_LOC (&c->dwarf, i);
+ }
+ c->dwarf.loc[UNW_PPC64_ARG_POINTER] = DWARF_REG_LOC (&c->dwarf, UNW_PPC64_ARG_POINTER);
+ c->dwarf.loc[UNW_PPC64_CTR] = DWARF_REG_LOC (&c->dwarf, UNW_PPC64_CTR);
+ c->dwarf.loc[UNW_PPC64_VSCR] = DWARF_REG_LOC (&c->dwarf, UNW_PPC64_VSCR);
+
+ c->dwarf.loc[UNW_PPC64_XER] = DWARF_REG_LOC (&c->dwarf, UNW_PPC64_XER);
+ c->dwarf.loc[UNW_PPC64_LR] = DWARF_REG_LOC (&c->dwarf, UNW_PPC64_LR);
+ c->dwarf.loc[UNW_PPC64_VRSAVE] = DWARF_REG_LOC (&c->dwarf, UNW_PPC64_VRSAVE);
+ c->dwarf.loc[UNW_PPC64_SPEFSCR] = DWARF_REG_LOC (&c->dwarf, UNW_PPC64_SPEFSCR);
+ c->dwarf.loc[UNW_PPC64_SPE_ACC] = DWARF_REG_LOC (&c->dwarf, UNW_PPC64_SPE_ACC);
+
+ c->dwarf.loc[UNW_PPC64_NIP] = DWARF_REG_LOC (&c->dwarf, UNW_PPC64_NIP);
+
+ ret = dwarf_get (&c->dwarf, c->dwarf.loc[UNW_PPC64_NIP], &c->dwarf.ip);
+ if (ret < 0)
+ return ret;
+
+ ret = dwarf_get (&c->dwarf, DWARF_REG_LOC (&c->dwarf, UNW_PPC64_R1),
+ &c->dwarf.cfa);
+ if (ret < 0)
+ return ret;
+
+ c->sigcontext_format = PPC64_SCF_NONE;
+ c->sigcontext_addr = 0;
+
+ c->dwarf.args_size = 0;
+ c->dwarf.ret_addr_column = 0;
+ c->dwarf.pi_valid = 0;
+ c->dwarf.pi_is_dynamic = 0;
+ c->dwarf.hint = 0;
+ c->dwarf.prev_rs = 0;
+
+ return 0;
+}
Index: libunwind/src/ppc64/is_fpreg.c
===================================================================
--- /dev/null
+++ libunwind/src/ppc64/is_fpreg.c
@@ -0,0 +1,32 @@
+/* libunwind - a platform-independent unwind library
+ Copyright (c) 2004-2005 Hewlett-Packard Development Company, L.P.
+ Contributed by David Mosberger-Tang
+
+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 "libunwind_i.h"
+
+PROTECTED int
+unw_is_fpreg (int regnum)
+{
+ return (regnum >= UNW_PPC64_F0 && regnum <= UNW_PPC64_F31);
+}
Index: libunwind/src/ppc64/longjmp.S
===================================================================
--- /dev/null
+++ libunwind/src/ppc64/longjmp.S
@@ -0,0 +1,34 @@
+/* libunwind - a platform-independent unwind library
+ Copyright (C) 2004-2005 Hewlett-Packard Co
+ Contributed by David Mosberger-Tang
+
+ Copied from src/x86_64/, modified slightly (or made empty stubs) for
+ building frysk successfully on ppc64, by Wu Zhou
+ Will be replaced when libunwind is ready on ppc64 platform.
+
+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. */
+
+ .globl _UI_longjmp_cont
+
+ .type _UI_longjmp_cont, @function
+_UI_longjmp_cont:
+ .size _UI_longjmp_cont, .-_UI_longjmp_cont
Index: libunwind/src/ppc64/regname.c
===================================================================
--- /dev/null
+++ libunwind/src/ppc64/regname.c
@@ -0,0 +1,161 @@
+/* libunwind - a platform-independent unwind library
+
+ Copied from src/x86_64/, modified slightly (or made empty stubs) for
+ building frysk successfully on ppc64, by Wu Zhou
+ Will be replaced when libunwind is ready on ppc64 platform.
+
+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"
+
+static const char *regname[] =
+ {
+ [UNW_PPC64_R0]="GPR0",
+ [UNW_PPC64_R1]="GPR1",
+ [UNW_PPC64_R2]="GPR2",
+ [UNW_PPC64_R3]="GPR3",
+ [UNW_PPC64_R4]="GPR4",
+ [UNW_PPC64_R5]="GPR5",
+ [UNW_PPC64_R6]="GPR6",
+ [UNW_PPC64_R7]="GPR7",
+ [UNW_PPC64_R8]="GPR8",
+ [UNW_PPC64_R9]="GPR9",
+ [UNW_PPC64_R10]="GPR10",
+ [UNW_PPC64_R11]="GPR11",
+ [UNW_PPC64_R12]="GPR12",
+ [UNW_PPC64_R13]="GPR13",
+ [UNW_PPC64_R14]="GPR14",
+ [UNW_PPC64_R15]="GPR15",
+ [UNW_PPC64_R16]="GPR16",
+ [UNW_PPC64_R17]="GPR17",
+ [UNW_PPC64_R18]="GPR18",
+ [UNW_PPC64_R19]="GPR19",
+ [UNW_PPC64_R20]="GPR20",
+ [UNW_PPC64_R21]="GPR21",
+ [UNW_PPC64_R22]="GPR22",
+ [UNW_PPC64_R23]="GPR23",
+ [UNW_PPC64_R24]="GPR24",
+ [UNW_PPC64_R25]="GPR25",
+ [UNW_PPC64_R26]="GPR26",
+ [UNW_PPC64_R27]="GPR27",
+ [UNW_PPC64_R28]="GPR28",
+ [UNW_PPC64_R29]="GPR29",
+ [UNW_PPC64_R30]="GPR30",
+ [UNW_PPC64_R31]="GPR31",
+
+ [UNW_PPC64_F0]="FPR0",
+ [UNW_PPC64_F1]="FPR1",
+ [UNW_PPC64_F2]="FPR2",
+ [UNW_PPC64_F3]="FPR3",
+ [UNW_PPC64_F4]="FPR4",
+ [UNW_PPC64_F5]="FPR5",
+ [UNW_PPC64_F6]="FPR6",
+ [UNW_PPC64_F7]="FPR7",
+ [UNW_PPC64_F8]="FPR8",
+ [UNW_PPC64_F9]="FPR9",
+ [UNW_PPC64_F10]="FPR10",
+ [UNW_PPC64_F11]="FPR11",
+ [UNW_PPC64_F12]="FPR12",
+ [UNW_PPC64_F13]="FPR13",
+ [UNW_PPC64_F14]="FPR14",
+ [UNW_PPC64_F15]="FPR15",
+ [UNW_PPC64_F16]="FPR16",
+ [UNW_PPC64_F17]="FPR17",
+ [UNW_PPC64_F18]="FPR18",
+ [UNW_PPC64_F19]="FPR19",
+ [UNW_PPC64_F20]="FPR20",
+ [UNW_PPC64_F21]="FPR21",
+ [UNW_PPC64_F22]="FPR22",
+ [UNW_PPC64_F23]="FPR23",
+ [UNW_PPC64_F24]="FPR24",
+ [UNW_PPC64_F25]="FPR25",
+ [UNW_PPC64_F26]="FPR26",
+ [UNW_PPC64_F27]="FPR27",
+ [UNW_PPC64_F28]="FPR28",
+ [UNW_PPC64_F29]="FPR29",
+ [UNW_PPC64_F30]="FPR30",
+ [UNW_PPC64_F31]="FPR31",
+
+ [UNW_PPC64_LR]="LR",
+ [UNW_PPC64_CTR]="CTR",
+ [UNW_PPC64_ARG_POINTER]="ARG_POINTER",
+
+ [UNW_PPC64_CR0]="CR0",
+ [UNW_PPC64_CR1]="CR1",
+ [UNW_PPC64_CR2]="CR2",
+ [UNW_PPC64_CR3]="CR3",
+ [UNW_PPC64_CR4]="CR4",
+ [UNW_PPC64_CR5]="CR5",
+ [UNW_PPC64_CR6]="CR6",
+ [UNW_PPC64_CR7]="CR7",
+
+ [UNW_PPC64_XER]="XER",
+
+ [UNW_PPC64_V0]="VR0",
+ [UNW_PPC64_V1]="VR1",
+ [UNW_PPC64_V2]="VR2",
+ [UNW_PPC64_V3]="VR3",
+ [UNW_PPC64_V4]="VR4",
+ [UNW_PPC64_V5]="VR5",
+ [UNW_PPC64_V6]="VR6",
+ [UNW_PPC64_V7]="VR7",
+ [UNW_PPC64_V8]="VR8",
+ [UNW_PPC64_V9]="VR9",
+ [UNW_PPC64_V10]="VR10",
+ [UNW_PPC64_V11]="VR11",
+ [UNW_PPC64_V12]="VR12",
+ [UNW_PPC64_V13]="VR13",
+ [UNW_PPC64_V14]="VR14",
+ [UNW_PPC64_V15]="VR15",
+ [UNW_PPC64_V16]="VR16",
+ [UNW_PPC64_V17]="VR17",
+ [UNW_PPC64_V18]="VR18",
+ [UNW_PPC64_V19]="VR19",
+ [UNW_PPC64_V20]="VR20",
+ [UNW_PPC64_V21]="VR21",
+ [UNW_PPC64_V22]="VR22",
+ [UNW_PPC64_V23]="VR23",
+ [UNW_PPC64_V24]="VR24",
+ [UNW_PPC64_V25]="VR25",
+ [UNW_PPC64_V26]="VR26",
+ [UNW_PPC64_V27]="VR27",
+ [UNW_PPC64_V28]="VR28",
+ [UNW_PPC64_V29]="VR29",
+ [UNW_PPC64_V30]="VR30",
+ [UNW_PPC64_V31]="VR31",
+
+ [UNW_PPC64_VSCR]="VSCR",
+
+ [UNW_PPC64_VRSAVE]="VRSAVE",
+ [UNW_PPC64_SPE_ACC]="SPE_ACC",
+ [UNW_PPC64_SPEFSCR]="SPEFSCR",
+
+ };
+
+PROTECTED const char *
+unw_regname (unw_regnum_t reg)
+{
+ if (reg < (unw_regnum_t) ARRAY_SIZE (regname))
+ return regname[reg];
+ else
+ return "???";
+}
Index: libunwind/src/ppc64/setcontext.S
===================================================================
--- /dev/null
+++ libunwind/src/ppc64/setcontext.S
@@ -0,0 +1,4 @@
+ .global _UI_setcontext
+
+_UI_setcontext:
+ retq
Index: libunwind/src/ppc64/siglongjmp.S
===================================================================
--- /dev/null
+++ libunwind/src/ppc64/siglongjmp.S
@@ -0,0 +1,33 @@
+/* libunwind - a platform-independent unwind library
+ Copyright (C) 2004 Hewlett-Packard Co
+ Contributed by David Mosberger-Tang
+
+ Copied from src/x86_64/, modified slightly (or made empty stubs) for
+ building frysk successfully on ppc64, by Wu Zhou
+ Will be replaced when libunwind is ready on ppc64 platform.
+
+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. */
+
+ .globl _UI_siglongjmp_cont
+
+/*_UI_siglongjmp_cont:
+ retq */
Index: libunwind/src/ppc64/ucontext_i.h
===================================================================
--- /dev/null
+++ libunwind/src/ppc64/ucontext_i.h
@@ -0,0 +1,174 @@
+/* Copyright (C) 2004 Hewlett-Packard Co.
+ Contributed by David Mosberger-Tang .
+
+ Copied from src/x86_64/, modified slightly for building
+ frysk successfully on ppc64, by Wu Zhou
+ Will be replaced when libunwind is ready on ppc64 platform.
+
+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. */
+
+#ifndef ucontext_i_h
+#define ucontext_i_h
+
+#include
+
+/* These values were derived by reading
+ /usr/src/linux-2.6.18-1.8/arch/um/include/sysdep-ppc/ptrace.h and
+ /usr/src/linux-2.6.18-1.8/arch/powerpc/kernel/ppc32.h
+*/
+
+#define NIP_IDX 32
+#define MSR_IDX 33
+#define ORIG_GPR3_IDX 34
+#define CTR_IDX 35
+#define LINK_IDX 36
+#define XER_IDX 37
+#define CCR_IDX 38
+#define SOFTE_IDX 39
+#define TRAP_IDX 40
+#define DAR_IDX 41
+#define DSISR_IDX 42
+#define RESULT_IDX 43
+
+#define VSCR_IDX 32
+#define VRSAVE_IDX 33
+
+/* These are dummy structures used only for obtaining the offsets of the
+ various structure members. */
+static ucontext_t dmy_ctxt;
+static vrregset_t dmy_vrregset;
+
+#define UC_MCONTEXT_GREGS_R0 ((void *)&dmy_ctxt.uc_mcontext.gp_regs[0] - (void *)&dmy_ctxt)
+#define UC_MCONTEXT_GREGS_R1 ((void *)&dmy_ctxt.uc_mcontext.gp_regs[1] - (void *)&dmy_ctxt)
+#define UC_MCONTEXT_GREGS_R2 ((void *)&dmy_ctxt.uc_mcontext.gp_regs[2] - (void *)&dmy_ctxt)
+#define UC_MCONTEXT_GREGS_R3 ((void *)&dmy_ctxt.uc_mcontext.gp_regs[3] - (void *)&dmy_ctxt)
+#define UC_MCONTEXT_GREGS_R4 ((void *)&dmy_ctxt.uc_mcontext.gp_regs[4] - (void *)&dmy_ctxt)
+#define UC_MCONTEXT_GREGS_R5 ((void *)&dmy_ctxt.uc_mcontext.gp_regs[5] - (void *)&dmy_ctxt)
+#define UC_MCONTEXT_GREGS_R6 ((void *)&dmy_ctxt.uc_mcontext.gp_regs[6] - (void *)&dmy_ctxt)
+#define UC_MCONTEXT_GREGS_R7 ((void *)&dmy_ctxt.uc_mcontext.gp_regs[7] - (void *)&dmy_ctxt)
+#define UC_MCONTEXT_GREGS_R8 ((void *)&dmy_ctxt.uc_mcontext.gp_regs[8] - (void *)&dmy_ctxt)
+#define UC_MCONTEXT_GREGS_R9 ((void *)&dmy_ctxt.uc_mcontext.gp_regs[9] - (void *)&dmy_ctxt)
+#define UC_MCONTEXT_GREGS_R10 ((void *)&dmy_ctxt.uc_mcontext.gp_regs[10] - (void *)&dmy_ctxt)
+#define UC_MCONTEXT_GREGS_R11 ((void *)&dmy_ctxt.uc_mcontext.gp_regs[11] - (void *)&dmy_ctxt)
+#define UC_MCONTEXT_GREGS_R12 ((void *)&dmy_ctxt.uc_mcontext.gp_regs[12] - (void *)&dmy_ctxt)
+#define UC_MCONTEXT_GREGS_R13 ((void *)&dmy_ctxt.uc_mcontext.gp_regs[13] - (void *)&dmy_ctxt)
+#define UC_MCONTEXT_GREGS_R14 ((void *)&dmy_ctxt.uc_mcontext.gp_regs[14] - (void *)&dmy_ctxt)
+#define UC_MCONTEXT_GREGS_R15 ((void *)&dmy_ctxt.uc_mcontext.gp_regs[15] - (void *)&dmy_ctxt)
+#define UC_MCONTEXT_GREGS_R16 ((void *)&dmy_ctxt.uc_mcontext.gp_regs[16] - (void *)&dmy_ctxt)
+#define UC_MCONTEXT_GREGS_R17 ((void *)&dmy_ctxt.uc_mcontext.gp_regs[17] - (void *)&dmy_ctxt)
+#define UC_MCONTEXT_GREGS_R18 ((void *)&dmy_ctxt.uc_mcontext.gp_regs[18] - (void *)&dmy_ctxt)
+#define UC_MCONTEXT_GREGS_R19 ((void *)&dmy_ctxt.uc_mcontext.gp_regs[19] - (void *)&dmy_ctxt)
+#define UC_MCONTEXT_GREGS_R20 ((void *)&dmy_ctxt.uc_mcontext.gp_regs[20] - (void *)&dmy_ctxt)
+#define UC_MCONTEXT_GREGS_R21 ((void *)&dmy_ctxt.uc_mcontext.gp_regs[21] - (void *)&dmy_ctxt)
+#define UC_MCONTEXT_GREGS_R22 ((void *)&dmy_ctxt.uc_mcontext.gp_regs[22] - (void *)&dmy_ctxt)
+#define UC_MCONTEXT_GREGS_R23 ((void *)&dmy_ctxt.uc_mcontext.gp_regs[23] - (void *)&dmy_ctxt)
+#define UC_MCONTEXT_GREGS_R24 ((void *)&dmy_ctxt.uc_mcontext.gp_regs[24] - (void *)&dmy_ctxt)
+#define UC_MCONTEXT_GREGS_R25 ((void *)&dmy_ctxt.uc_mcontext.gp_regs[25] - (void *)&dmy_ctxt)
+#define UC_MCONTEXT_GREGS_R26 ((void *)&dmy_ctxt.uc_mcontext.gp_regs[26] - (void *)&dmy_ctxt)
+#define UC_MCONTEXT_GREGS_R27 ((void *)&dmy_ctxt.uc_mcontext.gp_regs[27] - (void *)&dmy_ctxt)
+#define UC_MCONTEXT_GREGS_R28 ((void *)&dmy_ctxt.uc_mcontext.gp_regs[28] - (void *)&dmy_ctxt)
+#define UC_MCONTEXT_GREGS_R29 ((void *)&dmy_ctxt.uc_mcontext.gp_regs[29] - (void *)&dmy_ctxt)
+#define UC_MCONTEXT_GREGS_R30 ((void *)&dmy_ctxt.uc_mcontext.gp_regs[30] - (void *)&dmy_ctxt)
+#define UC_MCONTEXT_GREGS_R31 ((void *)&dmy_ctxt.uc_mcontext.gp_regs[31] - (void *)&dmy_ctxt)
+#define UC_MCONTEXT_GREGS_NIP ((void *)&dmy_ctxt.uc_mcontext.gp_regs[NIP_IDX] - (void *)&dmy_ctxt)
+#define UC_MCONTEXT_GREGS_MSR ((void *)&dmy_ctxt.uc_mcontext.gp_regs[MSR_IDX] - (void *)&dmy_ctxt)
+#define UC_MCONTEXT_GREGS_ORIG_GPR3 ((void *)&dmy_ctxt.uc_mcontext.gp_regs[ORIG_GPR3_IDX] - (void *)&dmy_ctxt)
+#define UC_MCONTEXT_GREGS_CTR ((void *)&dmy_ctxt.uc_mcontext.gp_regs[CTR_IDX] - (void *)&dmy_ctxt)
+#define UC_MCONTEXT_GREGS_LINK ((void *)&dmy_ctxt.uc_mcontext.gp_regs[LINK_IDX] - (void *)&dmy_ctxt)
+#define UC_MCONTEXT_GREGS_XER ((void *)&dmy_ctxt.uc_mcontext.gp_regs[XER_IDX] - (void *)&dmy_ctxt)
+#define UC_MCONTEXT_GREGS_CCR ((void *)&dmy_ctxt.uc_mcontext.gp_regs[CCR_IDX] - (void *)&dmy_ctxt)
+#define UC_MCONTEXT_GREGS_SOFTE ((void *)&dmy_ctxt.uc_mcontext.gp_regs[SOFTE_IDX] - (void *)&dmy_ctxt)
+#define UC_MCONTEXT_GREGS_TRAP ((void *)&dmy_ctxt.uc_mcontext.gp_regs[TRAP_IDX] - (void *)&dmy_ctxt)
+#define UC_MCONTEXT_GREGS_DAR ((void *)&dmy_ctxt.uc_mcontext.gp_regs[DAR_IDX] - (void *)&dmy_ctxt)
+#define UC_MCONTEXT_GREGS_DSISR ((void *)&dmy_ctxt.uc_mcontext.gp_regs[DSISR_IDX] - (void *)&dmy_ctxt)
+#define UC_MCONTEXT_GREGS_RESULT ((void *)&dmy_ctxt.uc_mcontext.gp_regs[RESULT_IDX] - (void *)&dmy_ctxt)
+
+#define UC_MCONTEXT_FREGS_R0 ((void *)&dmy_ctxt.uc_mcontext.fp_regs[0] - (void *)&dmy_ctxt)
+#define UC_MCONTEXT_FREGS_R1 ((void *)&dmy_ctxt.uc_mcontext.fp_regs[1] - (void *)&dmy_ctxt)
+#define UC_MCONTEXT_FREGS_R2 ((void *)&dmy_ctxt.uc_mcontext.fp_regs[2] - (void *)&dmy_ctxt)
+#define UC_MCONTEXT_FREGS_R3 ((void *)&dmy_ctxt.uc_mcontext.fp_regs[3] - (void *)&dmy_ctxt)
+#define UC_MCONTEXT_FREGS_R4 ((void *)&dmy_ctxt.uc_mcontext.fp_regs[4] - (void *)&dmy_ctxt)
+#define UC_MCONTEXT_FREGS_R5 ((void *)&dmy_ctxt.uc_mcontext.fp_regs[5] - (void *)&dmy_ctxt)
+#define UC_MCONTEXT_FREGS_R6 ((void *)&dmy_ctxt.uc_mcontext.fp_regs[6] - (void *)&dmy_ctxt)
+#define UC_MCONTEXT_FREGS_R7 ((void *)&dmy_ctxt.uc_mcontext.fp_regs[7] - (void *)&dmy_ctxt)
+#define UC_MCONTEXT_FREGS_R8 ((void *)&dmy_ctxt.uc_mcontext.fp_regs[8] - (void *)&dmy_ctxt)
+#define UC_MCONTEXT_FREGS_R9 ((void *)&dmy_ctxt.uc_mcontext.fp_regs[9] - (void *)&dmy_ctxt)
+#define UC_MCONTEXT_FREGS_R10 ((void *)&dmy_ctxt.uc_mcontext.fp_regs[10] - (void *)&dmy_ctxt)
+#define UC_MCONTEXT_FREGS_R11 ((void *)&dmy_ctxt.uc_mcontext.fp_regs[11] - (void *)&dmy_ctxt)
+#define UC_MCONTEXT_FREGS_R12 ((void *)&dmy_ctxt.uc_mcontext.fp_regs[12] - (void *)&dmy_ctxt)
+#define UC_MCONTEXT_FREGS_R13 ((void *)&dmy_ctxt.uc_mcontext.fp_regs[13] - (void *)&dmy_ctxt)
+#define UC_MCONTEXT_FREGS_R14 ((void *)&dmy_ctxt.uc_mcontext.fp_regs[14] - (void *)&dmy_ctxt)
+#define UC_MCONTEXT_FREGS_R15 ((void *)&dmy_ctxt.uc_mcontext.fp_regs[15] - (void *)&dmy_ctxt)
+#define UC_MCONTEXT_FREGS_R16 ((void *)&dmy_ctxt.uc_mcontext.fp_regs[16] - (void *)&dmy_ctxt)
+#define UC_MCONTEXT_FREGS_R17 ((void *)&dmy_ctxt.uc_mcontext.fp_regs[17] - (void *)&dmy_ctxt)
+#define UC_MCONTEXT_FREGS_R18 ((void *)&dmy_ctxt.uc_mcontext.fp_regs[18] - (void *)&dmy_ctxt)
+#define UC_MCONTEXT_FREGS_R19 ((void *)&dmy_ctxt.uc_mcontext.fp_regs[19] - (void *)&dmy_ctxt)
+#define UC_MCONTEXT_FREGS_R20 ((void *)&dmy_ctxt.uc_mcontext.fp_regs[20] - (void *)&dmy_ctxt)
+#define UC_MCONTEXT_FREGS_R21 ((void *)&dmy_ctxt.uc_mcontext.fp_regs[21] - (void *)&dmy_ctxt)
+#define UC_MCONTEXT_FREGS_R22 ((void *)&dmy_ctxt.uc_mcontext.fp_regs[22] - (void *)&dmy_ctxt)
+#define UC_MCONTEXT_FREGS_R23 ((void *)&dmy_ctxt.uc_mcontext.fp_regs[23] - (void *)&dmy_ctxt)
+#define UC_MCONTEXT_FREGS_R24 ((void *)&dmy_ctxt.uc_mcontext.fp_regs[24] - (void *)&dmy_ctxt)
+#define UC_MCONTEXT_FREGS_R25 ((void *)&dmy_ctxt.uc_mcontext.fp_regs[25] - (void *)&dmy_ctxt)
+#define UC_MCONTEXT_FREGS_R26 ((void *)&dmy_ctxt.uc_mcontext.fp_regs[26] - (void *)&dmy_ctxt)
+#define UC_MCONTEXT_FREGS_R27 ((void *)&dmy_ctxt.uc_mcontext.fp_regs[27] - (void *)&dmy_ctxt)
+#define UC_MCONTEXT_FREGS_R28 ((void *)&dmy_ctxt.uc_mcontext.fp_regs[28] - (void *)&dmy_ctxt)
+#define UC_MCONTEXT_FREGS_R29 ((void *)&dmy_ctxt.uc_mcontext.fp_regs[29] - (void *)&dmy_ctxt)
+#define UC_MCONTEXT_FREGS_R30 ((void *)&dmy_ctxt.uc_mcontext.fp_regs[30] - (void *)&dmy_ctxt)
+#define UC_MCONTEXT_FREGS_R31 ((void *)&dmy_ctxt.uc_mcontext.fp_regs[31] - (void *)&dmy_ctxt)
+#define UC_MCONTEXT_FREGS_FPSCR ((void *)&dmy_ctxt.uc_mcontext.fp_regs[32] - (void *)&dmy_ctxt)
+
+#define UC_MCONTEXT_V_REGS ((void *)&dmy_ctxt.uc_mcontext.v_regs - (void *)&dmy_ctxt)
+
+#define UC_MCONTEXT_VREGS_R0 ((void *)&dmy_vrregset.vrregs[0] - (void *)&dmy_vrregset)
+#define UC_MCONTEXT_VREGS_R1 ((void *)&dmy_vrregset.vrregs[1] - (void *)&dmy_vrregset)
+#define UC_MCONTEXT_VREGS_R2 ((void *)&dmy_vrregset.vrregs[2] - (void *)&dmy_vrregset)
+#define UC_MCONTEXT_VREGS_R3 ((void *)&dmy_vrregset.vrregs[3] - (void *)&dmy_vrregset)
+#define UC_MCONTEXT_VREGS_R4 ((void *)&dmy_vrregset.vrregs[4] - (void *)&dmy_vrregset)
+#define UC_MCONTEXT_VREGS_R5 ((void *)&dmy_vrregset.vrregs[5] - (void *)&dmy_vrregset)
+#define UC_MCONTEXT_VREGS_R6 ((void *)&dmy_vrregset.vrregs[6] - (void *)&dmy_vrregset)
+#define UC_MCONTEXT_VREGS_R7 ((void *)&dmy_vrregset.vrregs[7] - (void *)&dmy_vrregset)
+#define UC_MCONTEXT_VREGS_R8 ((void *)&dmy_vrregset.vrregs[8] - (void *)&dmy_vrregset)
+#define UC_MCONTEXT_VREGS_R9 ((void *)&dmy_vrregset.vrregs[9] - (void *)&dmy_vrregset)
+#define UC_MCONTEXT_VREGS_R10 ((void *)&dmy_vrregset.vrregs[10] - (void *)&dmy_vrregset)
+#define UC_MCONTEXT_VREGS_R11 ((void *)&dmy_vrregset.vrregs[11] - (void *)&dmy_vrregset)
+#define UC_MCONTEXT_VREGS_R12 ((void *)&dmy_vrregset.vrregs[12] - (void *)&dmy_vrregset)
+#define UC_MCONTEXT_VREGS_R13 ((void *)&dmy_vrregset.vrregs[13] - (void *)&dmy_vrregset)
+#define UC_MCONTEXT_VREGS_R14 ((void *)&dmy_vrregset.vrregs[14] - (void *)&dmy_vrregset)
+#define UC_MCONTEXT_VREGS_R15 ((void *)&dmy_vrregset.vrregs[15] - (void *)&dmy_vrregset)
+#define UC_MCONTEXT_VREGS_R16 ((void *)&dmy_vrregset.vrregs[16] - (void *)&dmy_vrregset)
+#define UC_MCONTEXT_VREGS_R17 ((void *)&dmy_vrregset.vrregs[17] - (void *)&dmy_vrregset)
+#define UC_MCONTEXT_VREGS_R18 ((void *)&dmy_vrregset.vrregs[18] - (void *)&dmy_vrregset)
+#define UC_MCONTEXT_VREGS_R19 ((void *)&dmy_vrregset.vrregs[19] - (void *)&dmy_vrregset)
+#define UC_MCONTEXT_VREGS_R20 ((void *)&dmy_vrregset.vrregs[20] - (void *)&dmy_vrregset)
+#define UC_MCONTEXT_VREGS_R21 ((void *)&dmy_vrregset.vrregs[21] - (void *)&dmy_vrregset)
+#define UC_MCONTEXT_VREGS_R22 ((void *)&dmy_vrregset.vrregs[22] - (void *)&dmy_vrregset)
+#define UC_MCONTEXT_VREGS_R23 ((void *)&dmy_vrregset.vrregs[23] - (void *)&dmy_vrregset)
+#define UC_MCONTEXT_VREGS_R24 ((void *)&dmy_vrregset.vrregs[24] - (void *)&dmy_vrregset)
+#define UC_MCONTEXT_VREGS_R25 ((void *)&dmy_vrregset.vrregs[25] - (void *)&dmy_vrregset)
+#define UC_MCONTEXT_VREGS_R26 ((void *)&dmy_vrregset.vrregs[26] - (void *)&dmy_vrregset)
+#define UC_MCONTEXT_VREGS_R27 ((void *)&dmy_vrregset.vrregs[27] - (void *)&dmy_vrregset)
+#define UC_MCONTEXT_VREGS_R28 ((void *)&dmy_vrregset.vrregs[28] - (void *)&dmy_vrregset)
+#define UC_MCONTEXT_VREGS_R29 ((void *)&dmy_vrregset.vrregs[29] - (void *)&dmy_vrregset)
+#define UC_MCONTEXT_VREGS_R30 ((void *)&dmy_vrregset.vrregs[30] - (void *)&dmy_vrregset)
+#define UC_MCONTEXT_VREGS_R31 ((void *)&dmy_vrregset.vrregs[31] - (void *)&dmy_vrregset)
+#define UC_MCONTEXT_VREGS_VSCR ((void *)&dmy_vrregset.vscr - (void *)&dmy_vrregset)
+#define UC_MCONTEXT_VREGS_VRSAVE ((void *)&dmy_vrregset.vrsave - (void *)&dmy_vrregset)
+
+#endif
Index: libunwind/src/ppc64/unwind_i.h
===================================================================
--- /dev/null
+++ libunwind/src/ppc64/unwind_i.h
@@ -0,0 +1,55 @@
+/* libunwind - a platform-independent unwind library
+ Copyright (C) 2002, 2005 Hewlett-Packard Co
+ Contributed by David Mosberger-Tang
+
+ Copied from src/x86_64/, modified slightly for building
+ frysk successfully on ppc64, by Wu Zhou
+ Will be replaced when libunwind is ready on ppc64 platform.
+
+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. */
+
+#ifndef unwind_i_h
+#define unwind_i_h
+
+#include
+#include
+
+#include
+
+#include
+#include
+
+#define ppc64_lock UNW_OBJ(lock)
+#define ppc64_local_resume UNW_OBJ(local_resume)
+#define ppc64_local_addr_space_init UNW_OBJ(local_addr_space_init)
+#if 0
+#define ppc64_scratch_loc UNW_OBJ(scratch_loc)
+#endif
+
+extern void ppc64_local_addr_space_init (void);
+extern int ppc64_local_resume (unw_addr_space_t as, unw_cursor_t *cursor,
+ void *arg);
+#if 0
+extern dwarf_loc_t ppc64_scratch_loc (struct cursor *c, unw_regnum_t reg);
+#endif
+
+#endif /* unwind_i_h */
Index: libunwind/configure.in
===================================================================
--- libunwind.orig/configure.in
+++ libunwind/configure.in
@@ -61,6 +61,7 @@ get_arch() {
case "$1" in
i?86) echo x86;;
hppa*) echo hppa;;
+ powerpc64) echo "ppc64";;
*) echo $1;;
esac
}
@@ -73,6 +74,7 @@ AM_CONDITIONAL(ARCH_IA64, test x$target_
AM_CONDITIONAL(ARCH_HPPA, test x$target_arch = xhppa)
AM_CONDITIONAL(ARCH_X86, test x$target_arch = xx86)
AM_CONDITIONAL(ARCH_X86_64, test x$target_arch = xx86_64)
+AM_CONDITIONAL(ARCH_PPC64, test x$target_arch = xppc64)
AM_CONDITIONAL(OS_LINUX, expr x$target_os : xlinux >/dev/null)
AM_CONDITIONAL(OS_HPUX, expr x$target_os : xhpux >/dev/null)
Index: libunwind/include/libunwind-common.h.in
===================================================================
--- libunwind.orig/include/libunwind-common.h.in
+++ libunwind/include/libunwind-common.h.in
@@ -1,6 +1,7 @@
/* libunwind - a platform-independent unwind library
Copyright (C) 2001-2004 Hewlett-Packard Co
Contributed by David Mosberger-Tang
+ Copyright Red Hat 2007
This file is part of libunwind.
@@ -114,6 +115,13 @@ typedef unw_tdep_context_t unw_context_t
typedef unw_tdep_fpreg_t unw_fpreg_t;
+/* Return 1 if register number R is a vector register, zero
+ otherwise.
+ This routine is signal-safe. */
+#define unw_is_vreg(r) unw_tdep_is_vreg(r)
+
+typedef unw_tdep_vreg_t unw_vreg_t;
+
typedef struct unw_addr_space *unw_addr_space_t;
/* Each target may define it's own set of flags, but bits 0-15 are
@@ -166,10 +174,14 @@ typedef struct unw_accessors
int (*access_reg) (unw_addr_space_t, unw_regnum_t, unw_word_t *, int,
void *);
- /* Access register number REG at address ADDR. */
+ /* Access floating point register number REG at address ADDR. */
int (*access_fpreg) (unw_addr_space_t, unw_regnum_t,
unw_fpreg_t *, int, void *);
+ /* Access vector register number REG at address ADDR. */
+ int (*access_vreg) (unw_addr_space_t, unw_regnum_t,
+ unw_vreg_t *, int, void *);
+
int (*resume) (unw_addr_space_t, unw_cursor_t *, void *);
/* Optional call back to obtain the name of a (static) procedure.
@@ -178,6 +190,7 @@ typedef struct unw_accessors
NULL. */
int (*get_proc_name) (unw_addr_space_t, unw_word_t, char *, size_t,
unw_word_t *, void *);
+ int validate;
}
unw_accessors_t;
@@ -218,6 +231,8 @@ unw_save_loc_t;
#define unw_set_reg UNW_OBJ(set_reg)
#define unw_get_fpreg UNW_OBJ(get_fpreg)
#define unw_set_fpreg UNW_OBJ(set_fpreg)
+#define unw_get_vreg UNW_OBJ(get_vreg)
+#define unw_set_vreg UNW_OBJ(set_vreg)
#define unw_get_save_loc UNW_OBJ(get_save_loc)
#define unw_is_signal_frame UNW_OBJ(is_signal_frame)
#define unw_get_proc_name UNW_OBJ(get_proc_name)
@@ -225,6 +240,7 @@ unw_save_loc_t;
#define unw_regname UNW_ARCH_OBJ(regname)
#define unw_flush_cache UNW_ARCH_OBJ(flush_cache)
#define unw_strerror UNW_ARCH_OBJ(strerror)
+#define unw_get_unwind_table UNW_ARCH_OBJ(get_unwind_table)
extern unw_addr_space_t unw_create_addr_space (unw_accessors_t *, int);
extern void unw_destroy_addr_space (unw_addr_space_t);
@@ -244,9 +260,16 @@ extern int unw_get_reg (unw_cursor_t *,
extern int unw_set_reg (unw_cursor_t *, int, unw_word_t);
extern int unw_get_fpreg (unw_cursor_t *, int, unw_fpreg_t *);
extern int unw_set_fpreg (unw_cursor_t *, int, unw_fpreg_t);
+extern int unw_get_vreg (unw_cursor_t *, int, unw_vreg_t *);
+extern int unw_set_vreg (unw_cursor_t *, int, unw_vreg_t);
extern int unw_get_save_loc (unw_cursor_t *, int, unw_save_loc_t *);
extern int unw_is_signal_frame (unw_cursor_t *);
extern int unw_get_proc_name (unw_cursor_t *, char *, size_t, unw_word_t *);
extern const char *unw_strerror (int);
+extern int unw_get_unwind_table(unw_addr_space_t as, unw_word_t ip,
+ unw_proc_info_t *pi, int need_unwind_info,
+ void *image, size_t size,
+ unsigned long segbase, unsigned long mapoff,
+ void *arg);
extern unw_addr_space_t unw_local_addr_space;
Index: libunwind/src/mi/Gget_vreg.c
===================================================================
--- /dev/null
+++ libunwind/src/mi/Gget_vreg.c
@@ -0,0 +1,34 @@
+/* libunwind - a platform-independent unwind library
+ Copyright (C) 2004-2005 Hewlett-Packard Co
+ Contributed by David Mosberger-Tang
+
+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 "libunwind_i.h"
+
+PROTECTED int
+unw_get_vreg (unw_cursor_t *cursor, int regnum, unw_vreg_t *valp)
+{
+ struct cursor *c = (struct cursor *) cursor;
+
+ return tdep_access_vreg (c, regnum, valp, 0);
+}
Index: libunwind/src/mi/Gset_vreg.c
===================================================================
--- /dev/null
+++ libunwind/src/mi/Gset_vreg.c
@@ -0,0 +1,34 @@
+/* libunwind - a platform-independent unwind library
+ Copyright (C) 2004-2005 Hewlett-Packard Co
+ Contributed by David Mosberger-Tang
+
+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 "libunwind_i.h"
+
+PROTECTED int
+unw_set_vreg (unw_cursor_t *cursor, int regnum, unw_vreg_t val)
+{
+ struct cursor *c = (struct cursor *) cursor;
+
+ return tdep_access_vreg (c, regnum, &val, 1);
+}
Index: libunwind/src/ptrace/_UPT_reg_offset.c
===================================================================
--- libunwind.orig/src/ptrace/_UPT_reg_offset.c
+++ libunwind/src/ptrace/_UPT_reg_offset.c
@@ -286,6 +286,8 @@ int _UPT_reg_offset[UNW_REG_LAST + 1] =
// [UNW_X86_64_EFLAGS] = 0x90,
// [UNW_X86_64_RSP] = 0x98,
// [UNW_X86_64_SS] = 0xa0
+
+#elif defined(UNW_TARGET_PPC64)
#else
# error Fix me.
#endif
Index: libunwind/tests/Makefile.am
===================================================================
--- libunwind.orig/tests/Makefile.am
+++ libunwind/tests/Makefile.am
@@ -25,7 +25,11 @@ if ARCH_IA64
Gia64-test-rbs Lia64-test-rbs \
Gia64-test-readonly Lia64-test-readonly \
ia64-test-setjmp ia64-test-sig
-endif
+else
+if ARCH_PPC64
+ noinst_PROGRAMS_arch = ppc64-test-altivec ppc64-test-wchar
+endif #ARCH_PPC64
+endif #ARCH_IA64
check_SCRIPTS_cdep = run-ptrace-mapper run-ptrace-misc
check_PROGRAMS_cdep = Gtest-bt Ltest-bt Gtest-exc Ltest-exc \
Gtest-init Ltest-init \
@@ -69,6 +73,8 @@ Gia64_test_rbs_SOURCES = Gia64-test-rbs.
Lia64_test_nat_SOURCES = Lia64-test-nat.c ia64-test-nat-asm.S
Gia64_test_nat_SOURCES = Gia64-test-nat.c ia64-test-nat-asm.S
ia64_test_dyn1_SOURCES = ia64-test-dyn1.c ia64-dyn-asm.S flush-cache.S
+ppc64_test_altivec_SOURCES = ppc64-test-altivec.c ppc64-test-altivec-utils.c
+ppc64_test_wchar_SOURCES = ppc64-test-wchar.c
Gtest_init_SOURCES = Gtest-init.cxx
Ltest_init_SOURCES = Ltest-init.cxx
Gtest_dyn1_SOURCES = Gtest-dyn1.c flush-cache.S
Index: libunwind/tests/ppc64-test-altivec-utils.c
===================================================================
--- /dev/null
+++ libunwind/tests/ppc64-test-altivec-utils.c
@@ -0,0 +1,32 @@
+#include
+#include
+
+union si_overlay
+{
+ vector signed int v;
+ int ints[4];
+};
+
+vector signed int
+vec_init ()
+{
+ vector signed int v;
+ static int count = 1;
+
+ ((union si_overlay *) &v)->ints[0] = count++;
+ ((union si_overlay *) &v)->ints[1] = count++;
+ ((union si_overlay *) &v)->ints[2] = count++;
+ ((union si_overlay *) &v)->ints[3] = count++;
+ return v;
+}
+
+void
+vec_print (vector signed int v)
+{
+ printf ("%08x %08x %08x %08x",
+ ((union si_overlay *) &v)->ints[0],
+ ((union si_overlay *) &v)->ints[1],
+ ((union si_overlay *) &v)->ints[2],
+ ((union si_overlay *) &v)->ints[3]);
+}
+
Index: libunwind/tests/ppc64-test-altivec.c
===================================================================
--- /dev/null
+++ libunwind/tests/ppc64-test-altivec.c
@@ -0,0 +1,174 @@
+
+
+#include
+#include
+#include
+#include
+#include
+#include
+
+#include
+
+#define panic(args...) { fprintf (stderr, args); abort(); }
+
+extern vector signed int vec_init ();
+extern void vec_print (vector signed int v);
+
+vector signed int vec_stack (int count);
+
+int
+main ()
+{
+ printf ("&vec_stack = %016lx\n", (unsigned long) vec_stack);
+ vec_stack (3);
+ return 0;
+}
+
+
+vector signed int
+vec_stack (int count)
+{
+ register vector signed int v1;
+ register vector signed int v2;
+ register vector signed int v3;
+ register vector signed int v4;
+ register vector signed int v5;
+ register vector signed int v6;
+ register vector signed int v7;
+ register vector signed int v8;
+ register vector signed int v9;
+
+ unw_vreg_t vr;
+
+ unw_cursor_t cursor;
+ unw_word_t ip, sp;
+ unw_context_t uc;
+ int ret;
+ int verbose = 1;
+
+ /* if (count == 0) return vec_init(); */
+
+ if (count == 0)
+ {
+ unw_getcontext (&uc);
+ if (unw_init_local (&cursor, &uc) < 0)
+ {
+ panic ("unw_init_local failed!\n");
+ }
+ else
+ {
+ do
+ {
+ if ((ret = unw_get_reg (&cursor, UNW_REG_IP, &ip)) < 0)
+ {
+ panic ("FAILURE: unw_get_reg returned %d for UNW_REG_IP\n",
+ ret);
+ }
+ if ((ret = unw_get_reg (&cursor, UNW_REG_SP, &sp)) < 0)
+ {
+ panic ("FAILURE: unw_get_reg returned %d for UNW_REG_SP\n",
+ ret);
+ }
+ if ((ret = unw_get_vreg (&cursor, UNW_PPC64_V30, &vr)) < 0)
+ {
+ panic
+ ("FAILURE: unw_get_vreg returned %d for UNW_PPC64_V30\n",
+ ret);
+ }
+
+
+ if (verbose)
+ {
+ const char *regname = unw_regname (UNW_PPC64_V30);
+ char proc_name_buffer[256];
+ unw_word_t offset;
+ printf ("ip = %016lx, sp=%016lx\n", (long) ip, (long) sp);
+ printf ("vr30 = %08x %08x %08x %08x\n",
+ (unsigned int) (vr.halves[0] >> 32),
+ (unsigned int) (vr.halves[0] & 0xffffffff),
+ (unsigned int) (vr.halves[1] >> 32),
+ (unsigned int) (vr.halves[1] & 0xffffffff));
+ ret =
+ unw_get_proc_name (&cursor, proc_name_buffer,
+ sizeof (proc_name_buffer), &offset);
+ if (ret == 0)
+ {
+ printf ("proc name = %s, offset = %lx\n",
+ proc_name_buffer, offset);
+ }
+ else
+ {
+ panic ("unw_get_proc_name returned %d\n", ret);
+ }
+ printf ("unw_regname(UNW_PPC_V30) = %s\n\n", regname);
+ }
+
+ ret = unw_step (&cursor);
+ if (ret < 0)
+ {
+ unw_get_reg (&cursor, UNW_REG_IP, &ip);
+ panic ("FAILURE: unw_step() returned %d for ip=%lx\n", ret,
+ (long) ip);
+ }
+ }
+ while (ret > 0);
+ }
+ }
+
+ v1 = vec_init ();
+ v2 = vec_init ();
+ v3 = vec_init ();
+ v4 = vec_init ();
+ v5 = vec_init ();
+ v6 = vec_init ();
+
+ /* make use of all of the registers in some calculation */
+ v7 =
+ vec_nor (v1, vec_add (v2, vec_sub (v3, vec_and (v4, vec_or (v5, v6)))));
+
+ /*
+ * "force" the registers to be non-volatile by making a call and also
+ * using the registers after the call.
+ */
+ v8 = vec_stack (count - 1);
+
+ /*
+ * Use the result from the previous call, plus all of the non-volatile
+ * registers in another calculation.
+ */
+ v9 =
+ vec_nor (v1,
+ vec_add (v2,
+ vec_sub (v3,
+ vec_and (v4, vec_or (v5, vec_xor (v6, v8))))));
+
+ printf ("v1 - ");
+ vec_print (v1);
+ printf ("\n");
+ printf ("v2 - ");
+ vec_print (v2);
+ printf ("\n");
+ printf ("v3 - ");
+ vec_print (v3);
+ printf ("\n");
+ printf ("v4 - ");
+ vec_print (v4);
+ printf ("\n");
+ printf ("v5 - ");
+ vec_print (v5);
+ printf ("\n");
+ printf ("v6 - ");
+ vec_print (v6);
+ printf ("\n");
+ printf ("v7 - ");
+ vec_print (v7);
+ printf ("\n");
+ printf ("v8 - ");
+ vec_print (v8);
+ printf ("\n");
+ printf ("v9 - ");
+ vec_print (v9);
+ printf ("\n");
+
+ return v9;
+}
Index: libunwind/tests/ppc64-test-wchar.c
===================================================================
--- /dev/null
+++ libunwind/tests/ppc64-test-wchar.c
@@ -0,0 +1,20 @@
+#include
+#include
+main ()
+{
+ wchar_t *wstring =
+ L"Now is the time for all good men to come to the aid of their country";
+ int i;
+ int ret;
+
+ printf("wcslen(wstring) = %d\n", wcslen(wstring));
+ for (i = 0; i < wcslen (wstring); i++)
+ {
+ ret = printf ("%lc", wstring[i]);
+ if (ret != 1) {
+ printf("printf returned: %d\n", ret);
+ perror("Linux says");
+ }
+ }
+ printf("\n");
+}
Index: libunwind/include/libunwind-x86.h
===================================================================
--- libunwind.orig/include/libunwind-x86.h
+++ libunwind/include/libunwind-x86.h
@@ -50,6 +50,12 @@ typedef int32_t unw_sword_t;
typedef long double unw_tdep_fpreg_t;
+/*
+ * Vector register (in PowerPC64 used for AltiVec registers)
+ */
+typedef struct {
+} unw_tdep_vreg_t;
+
typedef enum
{
/* Note: general registers are expected to start with index 0.