1280952Sandrew/*- 2280952Sandrew * Copyright (c) 2014-2015 The FreeBSD Foundation 3280952Sandrew * All rights reserved. 4280952Sandrew * 5280952Sandrew * This software was developed by Andrew Turner under 6280952Sandrew * sponsorship from the FreeBSD Foundation. 7280952Sandrew * 8280952Sandrew * Redistribution and use in source and binary forms, with or without 9280952Sandrew * modification, are permitted provided that the following conditions 10280952Sandrew * are met: 11280952Sandrew * 1. Redistributions of source code must retain the above copyright 12280952Sandrew * notice, this list of conditions and the following disclaimer. 13280952Sandrew * 2. Redistributions in binary form must reproduce the above copyright 14280952Sandrew * notice, this list of conditions and the following disclaimer in the 15280952Sandrew * documentation and/or other materials provided with the distribution. 16280952Sandrew * 17280952Sandrew * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 18280952Sandrew * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 19280952Sandrew * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 20280952Sandrew * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 21280952Sandrew * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 22280952Sandrew * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 23280952Sandrew * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 24280952Sandrew * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 25280952Sandrew * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 26280952Sandrew * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 27280952Sandrew * SUCH DAMAGE. 28280952Sandrew */ 29280952Sandrew 30280952Sandrew#include <sys/cdefs.h> 31280952Sandrew__FBSDID("$FreeBSD$"); 32280952Sandrew 33280952Sandrew#include <sys/types.h> 34280952Sandrew#include <string.h> 35280952Sandrew#include <thread_db.h> 36280952Sandrew 37280952Sandrew#include "libpthread_db.h" 38280952Sandrew 39280952Sandrewvoid abort(void); 40280952Sandrew 41280952Sandrewvoid 42280952Sandrewpt_reg_to_ucontext(const struct reg *r, ucontext_t *uc) 43280952Sandrew{ 44280952Sandrew mcontext_t *mc = &uc->uc_mcontext; 45280952Sandrew 46280952Sandrew memcpy(mc->mc_gpregs.gp_x, r->x, sizeof(mc->mc_gpregs.gp_x)); 47280952Sandrew mc->mc_gpregs.gp_sp = r->sp; 48280952Sandrew mc->mc_gpregs.gp_lr = r->lr; 49280952Sandrew mc->mc_gpregs.gp_elr = r->elr; 50280952Sandrew mc->mc_gpregs.gp_spsr = r->spsr; 51280952Sandrew} 52280952Sandrew 53280952Sandrewvoid 54280952Sandrewpt_ucontext_to_reg(const ucontext_t *uc, struct reg *r) 55280952Sandrew{ 56280952Sandrew const mcontext_t *mc = &uc->uc_mcontext; 57280952Sandrew 58280952Sandrew memcpy(r->x, mc->mc_gpregs.gp_x, sizeof(mc->mc_gpregs.gp_x)); 59280952Sandrew r->sp = mc->mc_gpregs.gp_sp; 60280952Sandrew r->lr = mc->mc_gpregs.gp_lr; 61280952Sandrew r->elr = mc->mc_gpregs.gp_elr; 62280952Sandrew r->spsr = mc->mc_gpregs.gp_spsr; 63280952Sandrew} 64280952Sandrew 65280952Sandrewvoid 66280952Sandrewpt_fpreg_to_ucontext(const struct fpreg *r, ucontext_t *uc) 67280952Sandrew{ 68280952Sandrew mcontext_t *mc = &uc->uc_mcontext; 69280952Sandrew 70280952Sandrew memcpy(&mc->mc_fpregs, r, sizeof(*r)); 71280952Sandrew mc->mc_flags |= _MC_FP_VALID; 72280952Sandrew} 73280952Sandrew 74280952Sandrewvoid 75280952Sandrewpt_ucontext_to_fpreg(const ucontext_t *uc, struct fpreg *r) 76280952Sandrew{ 77280952Sandrew const mcontext_t *mc = &uc->uc_mcontext; 78280952Sandrew 79280952Sandrew if (mc->mc_flags & _MC_FP_VALID) 80280952Sandrew memcpy(r, &mc->mc_fpregs, sizeof(*r)); 81280952Sandrew else 82280952Sandrew memset(r, 0, sizeof(*r)); 83280952Sandrew 84280952Sandrew} 85280952Sandrew 86280952Sandrewvoid 87280952Sandrewpt_md_init(void) 88280952Sandrew{ 89280952Sandrew} 90280952Sandrew 91280952Sandrewint 92280952Sandrewpt_reg_sstep(struct reg *reg __unused, int step __unused) 93280952Sandrew{ 94280952Sandrew 95280952Sandrew return (0); 96280952Sandrew} 97