1a766efd844260866e0d216f6eeef87f4593f60b2ibm.com!masbock/* libunwind - a platform-independent unwind library 2a766efd844260866e0d216f6eeef87f4593f60b2ibm.com!masbock Copyright (C) 2002-2004 Hewlett-Packard Co 3a766efd844260866e0d216f6eeef87f4593f60b2ibm.com!masbock Contributed by David Mosberger-Tang <davidm@hpl.hp.com> 4a766efd844260866e0d216f6eeef87f4593f60b2ibm.com!masbock 5a766efd844260866e0d216f6eeef87f4593f60b2ibm.com!masbock Modified for x86_64 by Max Asbock <masbock@us.ibm.com> 6a766efd844260866e0d216f6eeef87f4593f60b2ibm.com!masbock 7a766efd844260866e0d216f6eeef87f4593f60b2ibm.com!masbockThis file is part of libunwind. 8a766efd844260866e0d216f6eeef87f4593f60b2ibm.com!masbock 9a766efd844260866e0d216f6eeef87f4593f60b2ibm.com!masbockPermission is hereby granted, free of charge, to any person obtaining 10a766efd844260866e0d216f6eeef87f4593f60b2ibm.com!masbocka copy of this software and associated documentation files (the 11a766efd844260866e0d216f6eeef87f4593f60b2ibm.com!masbock"Software"), to deal in the Software without restriction, including 12a766efd844260866e0d216f6eeef87f4593f60b2ibm.com!masbockwithout limitation the rights to use, copy, modify, merge, publish, 13a766efd844260866e0d216f6eeef87f4593f60b2ibm.com!masbockdistribute, sublicense, and/or sell copies of the Software, and to 14a766efd844260866e0d216f6eeef87f4593f60b2ibm.com!masbockpermit persons to whom the Software is furnished to do so, subject to 15a766efd844260866e0d216f6eeef87f4593f60b2ibm.com!masbockthe following conditions: 16a766efd844260866e0d216f6eeef87f4593f60b2ibm.com!masbock 17a766efd844260866e0d216f6eeef87f4593f60b2ibm.com!masbockThe above copyright notice and this permission notice shall be 18a766efd844260866e0d216f6eeef87f4593f60b2ibm.com!masbockincluded in all copies or substantial portions of the Software. 19a766efd844260866e0d216f6eeef87f4593f60b2ibm.com!masbock 20a766efd844260866e0d216f6eeef87f4593f60b2ibm.com!masbockTHE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 21a766efd844260866e0d216f6eeef87f4593f60b2ibm.com!masbockEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 22a766efd844260866e0d216f6eeef87f4593f60b2ibm.com!masbockMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 23a766efd844260866e0d216f6eeef87f4593f60b2ibm.com!masbockNONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE 24a766efd844260866e0d216f6eeef87f4593f60b2ibm.com!masbockLIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION 25a766efd844260866e0d216f6eeef87f4593f60b2ibm.com!masbockOF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION 26a766efd844260866e0d216f6eeef87f4593f60b2ibm.com!masbockWITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ 27a766efd844260866e0d216f6eeef87f4593f60b2ibm.com!masbock 28a766efd844260866e0d216f6eeef87f4593f60b2ibm.com!masbock#ifndef LIBUNWIND_H 29a766efd844260866e0d216f6eeef87f4593f60b2ibm.com!masbock#define LIBUNWIND_H 30a766efd844260866e0d216f6eeef87f4593f60b2ibm.com!masbock 31a766efd844260866e0d216f6eeef87f4593f60b2ibm.com!masbock#if defined(__cplusplus) || defined(c_plusplus) 32a766efd844260866e0d216f6eeef87f4593f60b2ibm.com!masbockextern "C" { 33a766efd844260866e0d216f6eeef87f4593f60b2ibm.com!masbock#endif 34a766efd844260866e0d216f6eeef87f4593f60b2ibm.com!masbock 3564b5391b7b77c52ea33b9a46196ce2c3845ec2a7Konstantin Belousov#include <sys/types.h> 36a766efd844260866e0d216f6eeef87f4593f60b2ibm.com!masbock#include <inttypes.h> 37a766efd844260866e0d216f6eeef87f4593f60b2ibm.com!masbock#include <ucontext.h> 38a766efd844260866e0d216f6eeef87f4593f60b2ibm.com!masbock 39a766efd844260866e0d216f6eeef87f4593f60b2ibm.com!masbock#define UNW_TARGET x86_64 40a766efd844260866e0d216f6eeef87f4593f60b2ibm.com!masbock#define UNW_TARGET_X86_64 1 41a766efd844260866e0d216f6eeef87f4593f60b2ibm.com!masbock 42a766efd844260866e0d216f6eeef87f4593f60b2ibm.com!masbock#define _U_TDEP_QP_TRUE 0 /* see libunwind-dynamic.h */ 43a766efd844260866e0d216f6eeef87f4593f60b2ibm.com!masbock 44a766efd844260866e0d216f6eeef87f4593f60b2ibm.com!masbock/* This needs to be big enough to accommodate "struct cursor", while 45a766efd844260866e0d216f6eeef87f4593f60b2ibm.com!masbock leaving some slack for future expansion. Changing this value will 46a766efd844260866e0d216f6eeef87f4593f60b2ibm.com!masbock require recompiling all users of this library. Stack allocation is 47a766efd844260866e0d216f6eeef87f4593f60b2ibm.com!masbock relatively cheap and unwind-state copying is relatively rare, so we 48a766efd844260866e0d216f6eeef87f4593f60b2ibm.com!masbock want to err on making it rather too big than too small. */ 49a766efd844260866e0d216f6eeef87f4593f60b2ibm.com!masbock#define UNW_TDEP_CURSOR_LEN 127 50a766efd844260866e0d216f6eeef87f4593f60b2ibm.com!masbock 51a766efd844260866e0d216f6eeef87f4593f60b2ibm.com!masbocktypedef uint64_t unw_word_t; 5211ea1275bd188ea48f5d834ca504f8d84d751983Arun Sharmatypedef int64_t unw_sword_t; 53a766efd844260866e0d216f6eeef87f4593f60b2ibm.com!masbock 54a766efd844260866e0d216f6eeef87f4593f60b2ibm.com!masbocktypedef long double unw_tdep_fpreg_t; 55a766efd844260866e0d216f6eeef87f4593f60b2ibm.com!masbock 56a766efd844260866e0d216f6eeef87f4593f60b2ibm.com!masbocktypedef enum 57a766efd844260866e0d216f6eeef87f4593f60b2ibm.com!masbock { 58a766efd844260866e0d216f6eeef87f4593f60b2ibm.com!masbock UNW_X86_64_RAX, 59a766efd844260866e0d216f6eeef87f4593f60b2ibm.com!masbock UNW_X86_64_RDX, 60a766efd844260866e0d216f6eeef87f4593f60b2ibm.com!masbock UNW_X86_64_RCX, 61a766efd844260866e0d216f6eeef87f4593f60b2ibm.com!masbock UNW_X86_64_RBX, 62a766efd844260866e0d216f6eeef87f4593f60b2ibm.com!masbock UNW_X86_64_RSI, 63a766efd844260866e0d216f6eeef87f4593f60b2ibm.com!masbock UNW_X86_64_RDI, 64a766efd844260866e0d216f6eeef87f4593f60b2ibm.com!masbock UNW_X86_64_RBP, 65a766efd844260866e0d216f6eeef87f4593f60b2ibm.com!masbock UNW_X86_64_RSP, 66a766efd844260866e0d216f6eeef87f4593f60b2ibm.com!masbock UNW_X86_64_R8, 67a766efd844260866e0d216f6eeef87f4593f60b2ibm.com!masbock UNW_X86_64_R9, 68a766efd844260866e0d216f6eeef87f4593f60b2ibm.com!masbock UNW_X86_64_R10, 69a766efd844260866e0d216f6eeef87f4593f60b2ibm.com!masbock UNW_X86_64_R11, 70a766efd844260866e0d216f6eeef87f4593f60b2ibm.com!masbock UNW_X86_64_R12, 71a766efd844260866e0d216f6eeef87f4593f60b2ibm.com!masbock UNW_X86_64_R13, 72a766efd844260866e0d216f6eeef87f4593f60b2ibm.com!masbock UNW_X86_64_R14, 73a766efd844260866e0d216f6eeef87f4593f60b2ibm.com!masbock UNW_X86_64_R15, 74a766efd844260866e0d216f6eeef87f4593f60b2ibm.com!masbock UNW_X86_64_RIP, 75e09f9701ffcd05b097565d15daa87ac1b2d84299Arun Sharma#ifdef CONFIG_MSABI_SUPPORT 76e09f9701ffcd05b097565d15daa87ac1b2d84299Arun Sharma UNW_X86_64_XMM0, 77e09f9701ffcd05b097565d15daa87ac1b2d84299Arun Sharma UNW_X86_64_XMM1, 78e09f9701ffcd05b097565d15daa87ac1b2d84299Arun Sharma UNW_X86_64_XMM2, 79e09f9701ffcd05b097565d15daa87ac1b2d84299Arun Sharma UNW_X86_64_XMM3, 80e09f9701ffcd05b097565d15daa87ac1b2d84299Arun Sharma UNW_X86_64_XMM4, 81e09f9701ffcd05b097565d15daa87ac1b2d84299Arun Sharma UNW_X86_64_XMM5, 82e09f9701ffcd05b097565d15daa87ac1b2d84299Arun Sharma UNW_X86_64_XMM6, 83e09f9701ffcd05b097565d15daa87ac1b2d84299Arun Sharma UNW_X86_64_XMM7, 84e09f9701ffcd05b097565d15daa87ac1b2d84299Arun Sharma UNW_X86_64_XMM8, 85e09f9701ffcd05b097565d15daa87ac1b2d84299Arun Sharma UNW_X86_64_XMM9, 86e09f9701ffcd05b097565d15daa87ac1b2d84299Arun Sharma UNW_X86_64_XMM10, 87e09f9701ffcd05b097565d15daa87ac1b2d84299Arun Sharma UNW_X86_64_XMM11, 88e09f9701ffcd05b097565d15daa87ac1b2d84299Arun Sharma UNW_X86_64_XMM12, 89e09f9701ffcd05b097565d15daa87ac1b2d84299Arun Sharma UNW_X86_64_XMM13, 90e09f9701ffcd05b097565d15daa87ac1b2d84299Arun Sharma UNW_X86_64_XMM14, 91e09f9701ffcd05b097565d15daa87ac1b2d84299Arun Sharma UNW_X86_64_XMM15, 92e09f9701ffcd05b097565d15daa87ac1b2d84299Arun Sharma UNW_TDEP_LAST_REG = UNW_X86_64_XMM15, 93e09f9701ffcd05b097565d15daa87ac1b2d84299Arun Sharma#else 94e09f9701ffcd05b097565d15daa87ac1b2d84299Arun Sharma UNW_TDEP_LAST_REG = UNW_X86_64_RIP, 95e09f9701ffcd05b097565d15daa87ac1b2d84299Arun Sharma#endif 96a766efd844260866e0d216f6eeef87f4593f60b2ibm.com!masbock 97a766efd844260866e0d216f6eeef87f4593f60b2ibm.com!masbock /* XXX Add other regs here */ 98a766efd844260866e0d216f6eeef87f4593f60b2ibm.com!masbock 99a766efd844260866e0d216f6eeef87f4593f60b2ibm.com!masbock /* frame info (read-only) */ 100a766efd844260866e0d216f6eeef87f4593f60b2ibm.com!masbock UNW_X86_64_CFA, 101a766efd844260866e0d216f6eeef87f4593f60b2ibm.com!masbock 102a766efd844260866e0d216f6eeef87f4593f60b2ibm.com!masbock UNW_TDEP_IP = UNW_X86_64_RIP, 103a766efd844260866e0d216f6eeef87f4593f60b2ibm.com!masbock UNW_TDEP_SP = UNW_X86_64_RSP, 104a766efd844260866e0d216f6eeef87f4593f60b2ibm.com!masbock UNW_TDEP_BP = UNW_X86_64_RBP, 105a766efd844260866e0d216f6eeef87f4593f60b2ibm.com!masbock UNW_TDEP_EH = UNW_X86_64_RAX 106a766efd844260866e0d216f6eeef87f4593f60b2ibm.com!masbock } 107a766efd844260866e0d216f6eeef87f4593f60b2ibm.com!masbockx86_64_regnum_t; 108a766efd844260866e0d216f6eeef87f4593f60b2ibm.com!masbock 109a766efd844260866e0d216f6eeef87f4593f60b2ibm.com!masbock#define UNW_TDEP_NUM_EH_REGS 2 /* XXX Not sure what this means */ 110a766efd844260866e0d216f6eeef87f4593f60b2ibm.com!masbock 111a766efd844260866e0d216f6eeef87f4593f60b2ibm.com!masbocktypedef struct unw_tdep_save_loc 112a766efd844260866e0d216f6eeef87f4593f60b2ibm.com!masbock { 113a766efd844260866e0d216f6eeef87f4593f60b2ibm.com!masbock /* Additional target-dependent info on a save location. */ 114a766efd844260866e0d216f6eeef87f4593f60b2ibm.com!masbock } 115a766efd844260866e0d216f6eeef87f4593f60b2ibm.com!masbockunw_tdep_save_loc_t; 116a766efd844260866e0d216f6eeef87f4593f60b2ibm.com!masbock 117a766efd844260866e0d216f6eeef87f4593f60b2ibm.com!masbock/* On x86_64, we can directly use ucontext_t as the unwind context. */ 118a766efd844260866e0d216f6eeef87f4593f60b2ibm.com!masbocktypedef ucontext_t unw_tdep_context_t; 119a766efd844260866e0d216f6eeef87f4593f60b2ibm.com!masbock 120a766efd844260866e0d216f6eeef87f4593f60b2ibm.com!masbocktypedef struct 121a766efd844260866e0d216f6eeef87f4593f60b2ibm.com!masbock { 12227f7d7d720ba0fdea7135f825f991459dba684fcmostang.com!davidm /* no x86-64-specific auxiliary proc-info */ 123a766efd844260866e0d216f6eeef87f4593f60b2ibm.com!masbock } 124a766efd844260866e0d216f6eeef87f4593f60b2ibm.com!masbockunw_tdep_proc_info_t; 125a766efd844260866e0d216f6eeef87f4593f60b2ibm.com!masbock 126ef29eade44fc2aa7e49811a8bd76e941b369b914Arun Sharma#include "libunwind-dynamic.h" 127a766efd844260866e0d216f6eeef87f4593f60b2ibm.com!masbock#include "libunwind-common.h" 128a766efd844260866e0d216f6eeef87f4593f60b2ibm.com!masbock 129ef29eade44fc2aa7e49811a8bd76e941b369b914Arun Sharma#define unw_tdep_getcontext UNW_ARCH_OBJ(getcontext) 130a766efd844260866e0d216f6eeef87f4593f60b2ibm.com!masbock#define unw_tdep_is_fpreg UNW_ARCH_OBJ(is_fpreg) 1319e98f15e9aee12e67cd5956d06ccb559f6a06213Lassi Tuura 1329e98f15e9aee12e67cd5956d06ccb559f6a06213Lassi Tuuraextern int unw_tdep_getcontext (unw_tdep_context_t *); 133a766efd844260866e0d216f6eeef87f4593f60b2ibm.com!masbockextern int unw_tdep_is_fpreg (int); 134a766efd844260866e0d216f6eeef87f4593f60b2ibm.com!masbock 135a766efd844260866e0d216f6eeef87f4593f60b2ibm.com!masbock#if defined(__cplusplus) || defined(c_plusplus) 136a766efd844260866e0d216f6eeef87f4593f60b2ibm.com!masbock} 137a766efd844260866e0d216f6eeef87f4593f60b2ibm.com!masbock#endif 138a766efd844260866e0d216f6eeef87f4593f60b2ibm.com!masbock 139a766efd844260866e0d216f6eeef87f4593f60b2ibm.com!masbock#endif /* LIBUNWIND_H */ 140