~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~ [ freetext search ] ~ [ file search ] ~

Wine Cross Reference
wine/server/context_sparc.c

Version: ~ [ wine-1.0-rc1 ] ~ [ wine-0.9.61 ] ~ [ wine-0.9.60 ] ~ [ wine-0.9.59 ] ~ [ wine-0.9.58 ] ~ [ wine-0.9.57 ] ~ [ wine-0.9.56 ] ~ [ wine-0.9.55 ] ~ [ wine-0.9.54 ] ~ [ wine-0.9.53 ] ~ [ wine-0.9.52 ] ~ [ wine-0.9.51 ] ~ [ wine-0.9.50 ] ~ [ wine-0.9.49 ] ~ [ wine-0.9.48 ] ~ [ wine-0.9.47 ] ~ [ wine-0.9.46 ] ~ [ wine-0.9.45 ] ~ [ wine-0.9.44 ] ~ [ wine-0.9.43 ] ~ [ wine-0.9.42 ] ~ [ wine-0.9.41 ] ~ [ wine-0.9.40 ] ~ [ wine-0.9.39 ] ~ [ wine-0.9.38 ] ~ [ wine-0.9.37 ] ~ [ wine-0.9.36 ] ~ [ wine-0.9.35 ] ~ [ wine-0.9.34 ] ~ [ wine-0.9.33 ] ~ [ wine-0.9.32 ] ~ [ wine-0.9.31 ] ~ [ wine-0.9.30 ] ~ [ wine-0.9.29 ] ~ [ wine-0.9.28 ] ~ [ wine-0.9.27 ] ~ [ wine-0.9.26 ] ~ [ wine-0.9.25 ] ~ [ wine-0.9.24 ] ~ [ wine-0.9.23 ] ~ [ wine-0.9.22 ] ~ [ wine-0.9.21 ] ~ [ wine-0.9.20 ] ~ [ wine-0.9.19 ] ~ [ wine-0.9.18 ] ~ [ wine-0.9.17 ] ~ [ wine-0.9.16 ] ~ [ wine-0.9.15 ] ~ [ wine-0.9.14 ] ~ [ wine-0.9.13 ] ~ [ wine-0.9.12 ] ~ [ wine-0.9.11 ] ~ [ wine-0.9.10 ] ~ [ wine-0.9.9 ] ~ [ wine-0.9.8 ] ~ [ wine-0.9.7 ] ~ [ wine-0.9.6 ] ~ [ wine-0.9.5 ] ~ [ wine-0.9.4 ] ~ [ wine-0.9.3 ] ~ [ wine-0.9.2 ] ~ [ wine-0.9.1 ] ~ [ wine-0.9 ] ~ [ wine20050930 ] ~ [ wine20050830 ] ~ [ wine20050725 ] ~ [ wine20050628 ] ~ [ wine20050524 ] ~ [ wine20050419 ] ~ [ wine20050310 ] ~ [ wine20050211 ] ~ [ wine20050111 ] ~ [ wine20041201 ] ~ [ wine20041019 ] ~ [ wine20040914 ] ~ [ wine20040813 ] ~ [ wine20040716 ] ~ [ wine20040615 ] ~ [ wine20040505 ] ~ [ wine20040408 ] ~ [ wine20040309 ] ~ [ wine20040213 ] ~ [ wine20040121 ] ~ [ wine20031212 ] ~ [ wine20031118 ] ~ [ wine20031016 ] ~ [ wine20030911 ] ~ [ wine20030813 ] ~ [ wine20030709 ] ~ [ wine20030618 ] ~ [ wine20030508 ] ~ [ wine20030408 ] ~ [ wine20030318 ] ~ [ wine20030219 ] ~ [ wine20030115 ] ~ [ wine20021219 ] ~ [ wine20021125 ] ~ [ wine20021031 ] ~ [ wine20021007 ] ~ [ wine20020904 ] ~ [ wine20020804 ] ~ [ wine20020710 ] ~ [ wine20020605 ] ~ [ wine20020509 ] ~ [ wine20020411 ] ~ [ wine20020310 ] ~ [ wine20020228 ] ~ [ wine20011226 ] ~ [ wine20011108 ] ~ [ wine20011004 ] ~ [ wine20010824 ] ~ [ wine20010731 ] ~ [ wine20010629 ] ~ [ wine20010510 ] ~ [ wine20010418 ] ~ [ wine20010326 ] ~ [ wine20010305 ] ~ [ wine20010216 ] ~ [ wine20010112 ] ~ [ wine20001222 ] ~ [ wine20001202 ] ~ [ wine20001026 ] ~ [ wine20001002 ] ~ [ wine20000909 ] ~ [ wine20000821 ] ~ [ wine20000801 ] ~ [ wine20000716 ] ~ [ wine20000326 ] ~ [ wine20000227 ] ~ [ wine20000130 ] ~ [ wine20000109 ] ~

  1 /*
  2  * Sparc register context support
  3  *
  4  * Copyright (C) 2000 Ulrich Weigand
  5  *
  6  * This library is free software; you can redistribute it and/or
  7  * modify it under the terms of the GNU Lesser General Public
  8  * License as published by the Free Software Foundation; either
  9  * version 2.1 of the License, or (at your option) any later version.
 10  *
 11  * This library is distributed in the hope that it will be useful,
 12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
 13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 14  * Lesser General Public License for more details.
 15  *
 16  * You should have received a copy of the GNU Lesser General Public
 17  * License along with this library; if not, write to the Free Software
 18  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
 19  */
 20 
 21 #include "config.h"
 22 
 23 #ifdef __sparc__
 24 
 25 #include <assert.h>
 26 #include <errno.h>
 27 #include <sys/types.h>
 28 #ifdef HAVE_SYS_REG_H
 29 # include <sys/reg.h>
 30 #endif
 31 #include <stdarg.h>
 32 #include <unistd.h>
 33 #ifdef HAVE_SYS_PTRACE_H
 34 # include <sys/ptrace.h>
 35 #endif
 36 
 37 #include "windef.h"
 38 
 39 #include "file.h"
 40 #include "thread.h"
 41 #include "request.h"
 42 
 43 #if 0  /* no longer used */
 44 
 45 #if defined(__sun) || defined(__sun__)
 46 
 47 /* retrieve a thread context */
 48 static void get_thread_context_ptrace( struct thread *thread, unsigned int flags, CONTEXT *context )
 49 {
 50     int pid = get_ptrace_pid(thread);
 51     if (flags & CONTEXT_FULL)
 52     {
 53         struct regs regs;
 54         if (ptrace( PTRACE_GETREGS, pid, 0, (int) &regs ) == -1) goto error;
 55         if (flags & CONTEXT_INTEGER)
 56         {
 57             context->g0 = 0;
 58             context->g1 = regs.r_g1;
 59             context->g2 = regs.r_g2;
 60             context->g3 = regs.r_g3;
 61             context->g4 = regs.r_g4;
 62             context->g5 = regs.r_g5;
 63             context->g6 = regs.r_g6;
 64             context->g7 = regs.r_g7;
 65 
 66             context->o0 = regs.r_o0;
 67             context->o1 = regs.r_o1;
 68             context->o2 = regs.r_o2;
 69             context->o3 = regs.r_o3;
 70             context->o4 = regs.r_o4;
 71             context->o5 = regs.r_o5;
 72             context->o6 = regs.r_o6;
 73             context->o7 = regs.r_o7;
 74 
 75             /* FIXME: local and in registers */
 76         }
 77         if (flags & CONTEXT_CONTROL)
 78         {
 79             context->psr = regs.r_psr;
 80             context->pc  = regs.r_pc;
 81             context->npc = regs.r_npc;
 82             context->y   = regs.r_y;
 83             context->wim = 0;  /* FIXME */
 84             context->tbr = 0;  /* FIXME */
 85         }
 86         context |= flags & (CONTEXT_CONTROL|CONTEXT_INTEGER);
 87     }
 88     if (flags & CONTEXT_FLOATING_POINT)
 89     {
 90         /* FIXME */
 91     }
 92     return;
 93  error:
 94     file_set_error();
 95 }
 96 
 97 
 98 /* set a thread context */
 99 static void set_thread_context_ptrace( struct thread *thread, unsigned int flags, const CONTEXT *context )
100 {
101     /* FIXME */
102 }
103 
104 #else  /* __sun__ */
105 #error You must implement get/set_thread_context_ptrace for your platform
106 #endif  /* __sun__ */
107 
108 #endif /* 0 */
109 
110 /* copy a context structure according to the flags */
111 void copy_context( CONTEXT *to, const CONTEXT *from, unsigned int flags )
112 {
113     flags &= ~CONTEXT_SPARC;  /* get rid of CPU id */
114     if (flags & CONTEXT_CONTROL)
115     {
116         to->psr    = from->psr;
117         to->pc     = from->pc;
118         to->npc    = from->npc;
119         to->y      = from->y;
120         to->wim    = from->wim;
121         to->tbr    = from->tbr;
122     }
123     if (flags & CONTEXT_INTEGER)
124     {
125         to->g0 = from->g0;
126         to->g1 = from->g1;
127         to->g2 = from->g2;
128         to->g3 = from->g3;
129         to->g4 = from->g4;
130         to->g5 = from->g5;
131         to->g6 = from->g6;
132         to->g7 = from->g7;
133         to->o0 = from->o0;
134         to->o1 = from->o1;
135         to->o2 = from->o2;
136         to->o3 = from->o3;
137         to->o4 = from->o4;
138         to->o5 = from->o5;
139         to->o6 = from->o6;
140         to->o7 = from->o7;
141         to->l0 = from->l0;
142         to->l1 = from->l1;
143         to->l2 = from->l2;
144         to->l3 = from->l3;
145         to->l4 = from->l4;
146         to->l5 = from->l5;
147         to->l6 = from->l6;
148         to->l7 = from->l7;
149         to->i0 = from->i0;
150         to->i1 = from->i1;
151         to->i2 = from->i2;
152         to->i3 = from->i3;
153         to->i4 = from->i4;
154         to->i5 = from->i5;
155         to->i6 = from->i6;
156         to->i7 = from->i7;
157     }
158     if (flags & CONTEXT_FLOATING_POINT)
159     {
160         /* FIXME */
161     }
162     context |= flags & (CONTEXT_CONTROL|CONTEXT_INTEGER);
163 }
164 
165 /* retrieve the current instruction pointer of a context */
166 void *get_context_ip( const CONTEXT *context )
167 {
168     return (void *)context->pc;
169 }
170 
171 /* return the context flag that contains the CPU id */
172 unsigned int get_context_cpu_flag(void)
173 {
174     return CONTEXT_SPARC;
175 }
176 
177 /* return only the context flags that correspond to system regs */
178 /* (system regs are the ones we can't access on the client side) */
179 unsigned int get_context_system_regs( unsigned int flags )
180 {
181     return 0;  /* FIXME: implement client-side handling */
182 }
183 
184 #endif  /* __sparc__ */
185 

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~ [ freetext search ] ~ [ file search ] ~

This page was automatically generated by the LXR engine.
Visit the LXR main site for more information.