xref: /netbsd-src/external/gpl3/gdb.old/dist/gdb/tilegx-tdep.c (revision 796c32c94f6e154afc9de0f63da35c91bb739b45)
1 /* Target-dependent code for the Tilera TILE-Gx processor.
2 
3    Copyright (C) 2012-2016 Free Software Foundation, Inc.
4 
5    This file is part of GDB.
6 
7    This program is free software; you can redistribute it and/or modify
8    it under the terms of the GNU General Public License as published by
9    the Free Software Foundation; either version 3 of the License, or
10    (at your option) any later version.
11 
12    This program is distributed in the hope that it will be useful,
13    but WITHOUT ANY WARRANTY; without even the implied warranty of
14    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15    GNU General Public License for more details.
16 
17    You should have received a copy of the GNU General Public License
18    along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
19 
20 #include "defs.h"
21 #include "frame.h"
22 #include "frame-base.h"
23 #include "frame-unwind.h"
24 #include "dwarf2-frame.h"
25 #include "trad-frame.h"
26 #include "symtab.h"
27 #include "gdbtypes.h"
28 #include "gdbcmd.h"
29 #include "gdbcore.h"
30 #include "value.h"
31 #include "dis-asm.h"
32 #include "inferior.h"
33 #include "arch-utils.h"
34 #include "floatformat.h"
35 #include "regcache.h"
36 #include "regset.h"
37 #include "doublest.h"
38 #include "osabi.h"
39 #include "linux-tdep.h"
40 #include "objfiles.h"
41 #include "solib-svr4.h"
42 #include "tilegx-tdep.h"
43 #include "opcode/tilegx.h"
44 
45 struct tilegx_frame_cache
46 {
47   /* Base address.  */
48   CORE_ADDR base;
49   /* Function start.  */
50   CORE_ADDR start_pc;
51 
52   /* Table of saved registers.  */
53   struct trad_frame_saved_reg *saved_regs;
54 };
55 
56 /* Register state values used by analyze_prologue.  */
57 enum reverse_state
58   {
59     REVERSE_STATE_REGISTER,
60     REVERSE_STATE_VALUE,
61     REVERSE_STATE_UNKNOWN
62   };
63 
64 /* Register state used by analyze_prologue().  */
65 struct tilegx_reverse_regs
66 {
67   LONGEST value;
68   enum reverse_state state;
69 };
70 
71 static const struct tilegx_reverse_regs
72 template_reverse_regs[TILEGX_NUM_PHYS_REGS] =
73   {
74     { TILEGX_R0_REGNUM,  REVERSE_STATE_REGISTER },
75     { TILEGX_R1_REGNUM,  REVERSE_STATE_REGISTER },
76     { TILEGX_R2_REGNUM,  REVERSE_STATE_REGISTER },
77     { TILEGX_R3_REGNUM,  REVERSE_STATE_REGISTER },
78     { TILEGX_R4_REGNUM,  REVERSE_STATE_REGISTER },
79     { TILEGX_R5_REGNUM,  REVERSE_STATE_REGISTER },
80     { TILEGX_R6_REGNUM,  REVERSE_STATE_REGISTER },
81     { TILEGX_R7_REGNUM,  REVERSE_STATE_REGISTER },
82     { TILEGX_R8_REGNUM,  REVERSE_STATE_REGISTER },
83     { TILEGX_R9_REGNUM,  REVERSE_STATE_REGISTER },
84     { TILEGX_R10_REGNUM, REVERSE_STATE_REGISTER },
85     { TILEGX_R11_REGNUM, REVERSE_STATE_REGISTER },
86     { TILEGX_R12_REGNUM, REVERSE_STATE_REGISTER },
87     { TILEGX_R13_REGNUM, REVERSE_STATE_REGISTER },
88     { TILEGX_R14_REGNUM, REVERSE_STATE_REGISTER },
89     { TILEGX_R15_REGNUM, REVERSE_STATE_REGISTER },
90     { TILEGX_R16_REGNUM, REVERSE_STATE_REGISTER },
91     { TILEGX_R17_REGNUM, REVERSE_STATE_REGISTER },
92     { TILEGX_R18_REGNUM, REVERSE_STATE_REGISTER },
93     { TILEGX_R19_REGNUM, REVERSE_STATE_REGISTER },
94     { TILEGX_R20_REGNUM, REVERSE_STATE_REGISTER },
95     { TILEGX_R21_REGNUM, REVERSE_STATE_REGISTER },
96     { TILEGX_R22_REGNUM, REVERSE_STATE_REGISTER },
97     { TILEGX_R23_REGNUM, REVERSE_STATE_REGISTER },
98     { TILEGX_R24_REGNUM, REVERSE_STATE_REGISTER },
99     { TILEGX_R25_REGNUM, REVERSE_STATE_REGISTER },
100     { TILEGX_R26_REGNUM, REVERSE_STATE_REGISTER },
101     { TILEGX_R27_REGNUM, REVERSE_STATE_REGISTER },
102     { TILEGX_R28_REGNUM, REVERSE_STATE_REGISTER },
103     { TILEGX_R29_REGNUM, REVERSE_STATE_REGISTER },
104     { TILEGX_R30_REGNUM, REVERSE_STATE_REGISTER },
105     { TILEGX_R31_REGNUM, REVERSE_STATE_REGISTER },
106     { TILEGX_R32_REGNUM, REVERSE_STATE_REGISTER },
107     { TILEGX_R33_REGNUM, REVERSE_STATE_REGISTER },
108     { TILEGX_R34_REGNUM, REVERSE_STATE_REGISTER },
109     { TILEGX_R35_REGNUM, REVERSE_STATE_REGISTER },
110     { TILEGX_R36_REGNUM, REVERSE_STATE_REGISTER },
111     { TILEGX_R37_REGNUM, REVERSE_STATE_REGISTER },
112     { TILEGX_R38_REGNUM, REVERSE_STATE_REGISTER },
113     { TILEGX_R39_REGNUM, REVERSE_STATE_REGISTER },
114     { TILEGX_R40_REGNUM, REVERSE_STATE_REGISTER },
115     { TILEGX_R41_REGNUM, REVERSE_STATE_REGISTER },
116     { TILEGX_R42_REGNUM, REVERSE_STATE_REGISTER },
117     { TILEGX_R43_REGNUM, REVERSE_STATE_REGISTER },
118     { TILEGX_R44_REGNUM, REVERSE_STATE_REGISTER },
119     { TILEGX_R45_REGNUM, REVERSE_STATE_REGISTER },
120     { TILEGX_R46_REGNUM, REVERSE_STATE_REGISTER },
121     { TILEGX_R47_REGNUM, REVERSE_STATE_REGISTER },
122     { TILEGX_R48_REGNUM, REVERSE_STATE_REGISTER },
123     { TILEGX_R49_REGNUM, REVERSE_STATE_REGISTER },
124     { TILEGX_R50_REGNUM, REVERSE_STATE_REGISTER },
125     { TILEGX_R51_REGNUM, REVERSE_STATE_REGISTER },
126     { TILEGX_R52_REGNUM, REVERSE_STATE_REGISTER },
127     { TILEGX_TP_REGNUM,  REVERSE_STATE_REGISTER },
128     { TILEGX_SP_REGNUM,  REVERSE_STATE_REGISTER },
129     { TILEGX_LR_REGNUM,  REVERSE_STATE_REGISTER },
130     { 0, REVERSE_STATE_UNKNOWN },
131     { 0, REVERSE_STATE_UNKNOWN },
132     { 0, REVERSE_STATE_UNKNOWN },
133     { 0, REVERSE_STATE_UNKNOWN },
134     { 0, REVERSE_STATE_UNKNOWN },
135     { 0, REVERSE_STATE_UNKNOWN },
136     { 0, REVERSE_STATE_UNKNOWN },
137     { TILEGX_ZERO_REGNUM, REVERSE_STATE_VALUE }
138   };
139 
140 /* Implement the "register_name" gdbarch method.  */
141 
142 static const char *
143 tilegx_register_name (struct gdbarch *gdbarch, int regnum)
144 {
145   static const char *const register_names[TILEGX_NUM_REGS] =
146     {
147       "r0",   "r1",   "r2",   "r3",   "r4",   "r5",   "r6",   "r7",
148       "r8",   "r9",   "r10",  "r11",  "r12",  "r13",  "r14",  "r15",
149       "r16",  "r17",  "r18",  "r19",  "r20",  "r21",  "r22",  "r23",
150       "r24",  "r25",  "r26",  "r27",  "r28",  "r29",  "r30",  "r31",
151       "r32",  "r33",  "r34",  "r35",  "r36",  "r37",  "r38",  "r39",
152       "r40",  "r41",  "r42",  "r43",  "r44",  "r45",  "r46",  "r47",
153       "r48",  "r49",  "r50",  "r51",  "r52",  "tp",   "sp",   "lr",
154       "sn",   "idn0", "idn1", "udn0", "udn1", "udn2", "udn3", "zero",
155       "pc",   "faultnum",
156     };
157 
158   if (regnum < 0 || regnum >= TILEGX_NUM_REGS)
159     internal_error (__FILE__, __LINE__,
160 		    "tilegx_register_name: invalid register number %d",
161 		    regnum);
162 
163   return register_names[regnum];
164 }
165 
166 /* This is the implementation of gdbarch method register_type.  */
167 
168 static struct type *
169 tilegx_register_type (struct gdbarch *gdbarch, int regnum)
170 {
171   if (regnum == TILEGX_PC_REGNUM)
172     return builtin_type (gdbarch)->builtin_func_ptr;
173   else
174     return builtin_type (gdbarch)->builtin_uint64;
175 }
176 
177 /* This is the implementation of gdbarch method dwarf2_reg_to_regnum.  */
178 
179 static int
180 tilegx_dwarf2_reg_to_regnum (struct gdbarch *gdbarch, int num)
181 {
182   return num;
183 }
184 
185 /* Makes the decision of whether a given type is a scalar type.
186    Scalar types are returned in the registers r2-r11 as they fit.  */
187 
188 static int
189 tilegx_type_is_scalar (struct type *t)
190 {
191   return (TYPE_CODE(t) != TYPE_CODE_STRUCT
192 	  && TYPE_CODE(t) != TYPE_CODE_UNION
193 	  && TYPE_CODE(t) != TYPE_CODE_ARRAY);
194 }
195 
196 /* Returns non-zero if the given struct type will be returned using
197    a special convention, rather than the normal function return method.
198    Used in the context of the "return" command, and target function
199    calls from the debugger.  */
200 
201 static int
202 tilegx_use_struct_convention (struct type *type)
203 {
204   /* Only scalars which fit in R0 - R9 can be returned in registers.
205      Otherwise, they are returned via a pointer passed in R0.  */
206   return (!tilegx_type_is_scalar (type)
207 	  && (TYPE_LENGTH (type) > (1 + TILEGX_R9_REGNUM - TILEGX_R0_REGNUM)
208 	      * tilegx_reg_size));
209 }
210 
211 /* Find a function's return value in the appropriate registers (in
212    REGCACHE), and copy it into VALBUF.  */
213 
214 static void
215 tilegx_extract_return_value (struct type *type, struct regcache *regcache,
216 			     gdb_byte *valbuf)
217 {
218   int len = TYPE_LENGTH (type);
219   int i, regnum = TILEGX_R0_REGNUM;
220 
221   for (i = 0; i < len; i += tilegx_reg_size)
222     regcache_raw_read (regcache, regnum++, valbuf + i);
223 }
224 
225 /* Copy the function return value from VALBUF into the proper
226    location for a function return.
227    Called only in the context of the "return" command.  */
228 
229 static void
230 tilegx_store_return_value (struct type *type, struct regcache *regcache,
231 			   const void *valbuf)
232 {
233   if (TYPE_LENGTH (type) < tilegx_reg_size)
234     {
235       /* Add leading zeros to the (little-endian) value.  */
236       gdb_byte buf[tilegx_reg_size] = { 0 };
237 
238       memcpy (buf, valbuf, TYPE_LENGTH (type));
239       regcache_raw_write (regcache, TILEGX_R0_REGNUM, buf);
240     }
241   else
242     {
243       int len = TYPE_LENGTH (type);
244       int i, regnum = TILEGX_R0_REGNUM;
245 
246       for (i = 0; i < len; i += tilegx_reg_size)
247 	regcache_raw_write (regcache, regnum++, (gdb_byte *) valbuf + i);
248     }
249 }
250 
251 /* This is the implementation of gdbarch method return_value.  */
252 
253 static enum return_value_convention
254 tilegx_return_value (struct gdbarch *gdbarch, struct value *function,
255 		     struct type *type, struct regcache *regcache,
256 		     gdb_byte *readbuf, const gdb_byte *writebuf)
257 {
258   if (tilegx_use_struct_convention (type))
259     return RETURN_VALUE_STRUCT_CONVENTION;
260   if (writebuf)
261     tilegx_store_return_value (type, regcache, writebuf);
262   else if (readbuf)
263     tilegx_extract_return_value (type, regcache, readbuf);
264   return RETURN_VALUE_REGISTER_CONVENTION;
265 }
266 
267 /* This is the implementation of gdbarch method frame_align.  */
268 
269 static CORE_ADDR
270 tilegx_frame_align (struct gdbarch *gdbarch, CORE_ADDR addr)
271 {
272   return addr & -8;
273 }
274 
275 
276 /* Implement the "push_dummy_call" gdbarch method.  */
277 
278 static CORE_ADDR
279 tilegx_push_dummy_call (struct gdbarch *gdbarch,
280 			struct value *function,
281 			struct regcache *regcache,
282 			CORE_ADDR bp_addr, int nargs,
283 			struct value **args,
284 			CORE_ADDR sp, int struct_return,
285 			CORE_ADDR struct_addr)
286 {
287   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
288   CORE_ADDR stack_dest = sp;
289   int argreg = TILEGX_R0_REGNUM;
290   int i, j;
291   int typelen, slacklen;
292   static const gdb_byte four_zero_words[16] = { 0 };
293 
294   /* If struct_return is 1, then the struct return address will
295      consume one argument-passing register.  */
296   if (struct_return)
297     regcache_cooked_write_unsigned (regcache, argreg++, struct_addr);
298 
299   /* Arguments are passed in R0 - R9, and as soon as an argument
300      will not fit completely in the remaining registers, then it,
301      and all remaining arguments, are put on the stack.  */
302   for (i = 0; i < nargs && argreg <= TILEGX_R9_REGNUM; i++)
303     {
304       const gdb_byte *val;
305       typelen = TYPE_LENGTH (value_enclosing_type (args[i]));
306 
307       if (typelen > (TILEGX_R9_REGNUM - argreg + 1) * tilegx_reg_size)
308 	break;
309 
310       /* Put argument into registers wordwise.	*/
311       val = value_contents (args[i]);
312       for (j = 0; j < typelen; j += tilegx_reg_size)
313 	{
314 	  /* ISSUE: Why special handling for "typelen = 4x + 1"?
315 	     I don't ever see "typelen" values except 4 and 8.	*/
316 	  int n = (typelen - j == 1) ? 1 : tilegx_reg_size;
317 	  ULONGEST w = extract_unsigned_integer (val + j, n, byte_order);
318 
319 	  regcache_cooked_write_unsigned (regcache, argreg++, w);
320 	}
321     }
322 
323   /* Align SP.  */
324   stack_dest = tilegx_frame_align (gdbarch, stack_dest);
325 
326   /* Loop backwards through remaining arguments and push them on
327      the stack, word aligned.  */
328   for (j = nargs - 1; j >= i; j--)
329     {
330       gdb_byte *val;
331       struct cleanup *back_to;
332       const gdb_byte *contents = value_contents (args[j]);
333 
334       typelen = TYPE_LENGTH (value_enclosing_type (args[j]));
335       slacklen = align_up (typelen, 8) - typelen;
336       val = (gdb_byte *) xmalloc (typelen + slacklen);
337       back_to = make_cleanup (xfree, val);
338       memcpy (val, contents, typelen);
339       memset (val + typelen, 0, slacklen);
340 
341       /* Now write data to the stack.  The stack grows downwards.  */
342       stack_dest -= typelen + slacklen;
343       write_memory (stack_dest, val, typelen + slacklen);
344       do_cleanups (back_to);
345     }
346 
347   /* Add 16 bytes for linkage space to the stack.  */
348   stack_dest = stack_dest - 16;
349   write_memory (stack_dest, four_zero_words, 16);
350 
351   /* Update stack pointer.  */
352   regcache_cooked_write_unsigned (regcache, TILEGX_SP_REGNUM, stack_dest);
353 
354   /* Set the return address register to point to the entry point of
355      the program, where a breakpoint lies in wait.  */
356   regcache_cooked_write_unsigned (regcache, TILEGX_LR_REGNUM, bp_addr);
357 
358   return stack_dest;
359 }
360 
361 
362 /* Decode the instructions within the given address range.
363    Decide when we must have reached the end of the function prologue.
364    If a frame_info pointer is provided, fill in its saved_regs etc.
365    Returns the address of the first instruction after the prologue.
366    NOTE: This is often called with start_addr being the start of some
367    function, and end_addr being the current PC.  */
368 
369 static CORE_ADDR
370 tilegx_analyze_prologue (struct gdbarch* gdbarch,
371 			 CORE_ADDR start_addr, CORE_ADDR end_addr,
372 			 struct tilegx_frame_cache *cache,
373 			 struct frame_info *next_frame)
374 {
375   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
376   CORE_ADDR next_addr;
377   CORE_ADDR prolog_end = end_addr;
378   gdb_byte instbuf[32 * TILEGX_BUNDLE_SIZE_IN_BYTES];
379   CORE_ADDR instbuf_start;
380   unsigned int instbuf_size;
381   int status;
382   bfd_uint64_t bundle;
383   struct tilegx_decoded_instruction
384     decoded[TILEGX_MAX_INSTRUCTIONS_PER_BUNDLE];
385   int num_insns;
386   struct tilegx_reverse_regs reverse_frame[TILEGX_NUM_PHYS_REGS];
387   struct tilegx_reverse_regs
388     new_reverse_frame[TILEGX_MAX_INSTRUCTIONS_PER_BUNDLE];
389   int dest_regs[TILEGX_MAX_INSTRUCTIONS_PER_BUNDLE];
390   int reverse_frame_valid, prolog_done, branch_seen, lr_saved_on_stack_p;
391   LONGEST prev_sp_value;
392   int i, j;
393 
394   if (start_addr >= end_addr
395       || (start_addr % TILEGX_BUNDLE_ALIGNMENT_IN_BYTES) != 0)
396     return end_addr;
397 
398   /* Initialize the reverse frame.  This maps the CURRENT frame's
399      registers to the outer frame's registers (the frame on the
400      stack goes the other way).  */
401   memcpy (&reverse_frame, &template_reverse_regs, sizeof (reverse_frame));
402 
403   prolog_done = 0;
404   branch_seen = 0;
405   prev_sp_value = 0;
406   lr_saved_on_stack_p = 0;
407 
408   /* To cut down on round-trip overhead, we fetch multiple bundles
409      at once.  These variables describe the range of memory we have
410      prefetched.  */
411   instbuf_start = 0;
412   instbuf_size = 0;
413 
414   for (next_addr = start_addr;
415        next_addr < end_addr;
416        next_addr += TILEGX_BUNDLE_SIZE_IN_BYTES)
417     {
418       /* Retrieve the next instruction.  */
419       if (next_addr - instbuf_start >= instbuf_size)
420 	{
421 	  /* Figure out how many bytes to fetch.  Don't span a page
422 	     boundary since that might cause an unnecessary memory
423 	     error.  */
424 	  unsigned int size_on_same_page = 4096 - (next_addr & 4095);
425 
426 	  instbuf_size = sizeof instbuf;
427 
428 	  if (instbuf_size > size_on_same_page)
429 	    instbuf_size = size_on_same_page;
430 
431 	  instbuf_size = min (instbuf_size, (end_addr - next_addr));
432 	  instbuf_start = next_addr;
433 
434 	  status = safe_frame_unwind_memory (next_frame, instbuf_start,
435 					     instbuf, instbuf_size);
436 	  if (status == 0)
437 	    memory_error (TARGET_XFER_E_IO, next_addr);
438 	}
439 
440       reverse_frame_valid = 0;
441 
442       bundle = extract_unsigned_integer (&instbuf[next_addr - instbuf_start],
443 					 8, byte_order);
444 
445       num_insns = parse_insn_tilegx (bundle, next_addr, decoded);
446 
447       for (i = 0; i < num_insns; i++)
448 	{
449 	  struct tilegx_decoded_instruction *this_insn = &decoded[i];
450 	  int64_t *operands = (int64_t *) this_insn->operand_values;
451 	  const struct tilegx_opcode *opcode = this_insn->opcode;
452 
453 	  switch (opcode->mnemonic)
454 	    {
455 	    case TILEGX_OPC_ST:
456 	      if (cache
457 		  && reverse_frame[operands[0]].state == REVERSE_STATE_VALUE
458 		  && reverse_frame[operands[1]].state
459 		  == REVERSE_STATE_REGISTER)
460 		{
461 		  LONGEST saved_address = reverse_frame[operands[0]].value;
462 		  unsigned saved_register
463 		    = (unsigned) reverse_frame[operands[1]].value;
464 
465 		  /* realreg >= 0 and addr != -1 indicates that the
466 		     value of saved_register is in memory location
467 		     saved_address.  The value of realreg is not
468 		     meaningful in this case but it must be >= 0.
469 		     See trad-frame.h.  */
470 		  cache->saved_regs[saved_register].realreg = saved_register;
471 		  cache->saved_regs[saved_register].addr = saved_address;
472 		}
473 	      else if (cache
474 		       && (operands[0] == TILEGX_SP_REGNUM)
475 		       && (operands[1] == TILEGX_LR_REGNUM))
476 		lr_saved_on_stack_p = 1;
477 	      break;
478 	    case TILEGX_OPC_ADDI:
479 	    case TILEGX_OPC_ADDLI:
480 	      if (cache
481 		  && operands[0] == TILEGX_SP_REGNUM
482 		  && operands[1] == TILEGX_SP_REGNUM
483 		  && reverse_frame[operands[1]].state == REVERSE_STATE_REGISTER)
484 		{
485 		  /* Special case.  We're fixing up the stack frame.  */
486 		  uint64_t hopefully_sp
487 		    = (unsigned) reverse_frame[operands[1]].value;
488 		  short op2_as_short = (short) operands[2];
489 		  signed char op2_as_char = (signed char) operands[2];
490 
491 		  /* Fix up the sign-extension.  */
492 		  if (opcode->mnemonic == TILEGX_OPC_ADDI)
493 		    op2_as_short = op2_as_char;
494 		  prev_sp_value = (cache->saved_regs[hopefully_sp].addr
495 				   - op2_as_short);
496 
497 		  new_reverse_frame[i].state = REVERSE_STATE_VALUE;
498 		  new_reverse_frame[i].value
499 		    = cache->saved_regs[hopefully_sp].addr;
500 		  trad_frame_set_value (cache->saved_regs,
501 					hopefully_sp, prev_sp_value);
502 		}
503 	      else
504 		{
505 		  short op2_as_short = (short) operands[2];
506 		  signed char op2_as_char = (signed char) operands[2];
507 
508 		  /* Fix up the sign-extension.  */
509 		  if (opcode->mnemonic == TILEGX_OPC_ADDI)
510 		    op2_as_short = op2_as_char;
511 
512 		  new_reverse_frame[i] = reverse_frame[operands[1]];
513 		  if (new_reverse_frame[i].state == REVERSE_STATE_VALUE)
514 		    new_reverse_frame[i].value += op2_as_short;
515 		  else
516 		    new_reverse_frame[i].state = REVERSE_STATE_UNKNOWN;
517 		}
518 	      reverse_frame_valid |= 1 << i;
519 	      dest_regs[i] = operands[0];
520 	      break;
521 	    case TILEGX_OPC_ADD:
522 	      if (reverse_frame[operands[1]].state == REVERSE_STATE_VALUE
523 		  && reverse_frame[operands[2]].state == REVERSE_STATE_VALUE)
524 		{
525 		  /* We have values -- we can do this.  */
526 		  new_reverse_frame[i] = reverse_frame[operands[2]];
527 		  new_reverse_frame[i].value
528 		    += reverse_frame[operands[i]].value;
529 		}
530 	      else
531 		{
532 		  /* We don't know anything about the values.  Punt.  */
533 		  new_reverse_frame[i].state = REVERSE_STATE_UNKNOWN;
534 		}
535 	      reverse_frame_valid |= 1 << i;
536 	      dest_regs[i] = operands[0];
537 	      break;
538 	    case TILEGX_OPC_MOVE:
539 	      new_reverse_frame[i] = reverse_frame[operands[1]];
540 	      reverse_frame_valid |= 1 << i;
541 	      dest_regs[i] = operands[0];
542 	      break;
543 	    case TILEGX_OPC_MOVEI:
544 	    case TILEGX_OPC_MOVELI:
545 	      new_reverse_frame[i].state = REVERSE_STATE_VALUE;
546 	      new_reverse_frame[i].value = operands[1];
547 	      reverse_frame_valid |= 1 << i;
548 	      dest_regs[i] = operands[0];
549 	      break;
550 	    case TILEGX_OPC_ORI:
551 	      if (reverse_frame[operands[1]].state == REVERSE_STATE_VALUE)
552 		{
553 		  /* We have a value in A -- we can do this.  */
554 		  new_reverse_frame[i] = reverse_frame[operands[1]];
555 		  new_reverse_frame[i].value
556 		    = reverse_frame[operands[1]].value | operands[2];
557 		}
558 	      else if (operands[2] == 0)
559 		{
560 		  /* This is a move.  */
561 		  new_reverse_frame[i] = reverse_frame[operands[1]];
562 		}
563 	      else
564 		{
565 		  /* We don't know anything about the values.  Punt.  */
566 		  new_reverse_frame[i].state = REVERSE_STATE_UNKNOWN;
567 		}
568 	      reverse_frame_valid |= 1 << i;
569 	      dest_regs[i] = operands[0];
570 	      break;
571 	    case TILEGX_OPC_OR:
572 	      if (reverse_frame[operands[1]].state == REVERSE_STATE_VALUE
573 		  && reverse_frame[operands[1]].value == 0)
574 		{
575 		  /* This is a move.  */
576 		  new_reverse_frame[i] = reverse_frame[operands[2]];
577 		}
578 	      else if (reverse_frame[operands[2]].state == REVERSE_STATE_VALUE
579 		       && reverse_frame[operands[2]].value == 0)
580 		{
581 		  /* This is a move.  */
582 		  new_reverse_frame[i] = reverse_frame[operands[1]];
583 		}
584 	      else
585 		{
586 		  /* We don't know anything about the values.  Punt.  */
587 		  new_reverse_frame[i].state = REVERSE_STATE_UNKNOWN;
588 		}
589 	      reverse_frame_valid |= 1 << i;
590 	      dest_regs[i] = operands[0];
591 	      break;
592 	    case TILEGX_OPC_SUB:
593 	      if (reverse_frame[operands[1]].state == REVERSE_STATE_VALUE
594 		  && reverse_frame[operands[2]].state == REVERSE_STATE_VALUE)
595 		{
596 		  /* We have values -- we can do this.  */
597 		  new_reverse_frame[i] = reverse_frame[operands[1]];
598 		  new_reverse_frame[i].value
599 		    -= reverse_frame[operands[2]].value;
600 		}
601 	      else
602 		{
603 		  /* We don't know anything about the values.  Punt.  */
604 		  new_reverse_frame[i].state = REVERSE_STATE_UNKNOWN;
605 		}
606 	      reverse_frame_valid |= 1 << i;
607 	      dest_regs[i] = operands[0];
608 	      break;
609 
610 	    case TILEGX_OPC_FNOP:
611 	    case TILEGX_OPC_INFO:
612 	    case TILEGX_OPC_INFOL:
613 	      /* Nothing to see here, move on.
614 		 Note that real NOP is treated as a 'real' instruction
615 		 because someone must have intended that it be there.
616 		 It therefore terminates the prolog.  */
617 	      break;
618 
619 	    case TILEGX_OPC_J:
620 	    case TILEGX_OPC_JAL:
621 
622 	    case TILEGX_OPC_BEQZ:
623 	    case TILEGX_OPC_BEQZT:
624 	    case TILEGX_OPC_BGEZ:
625 	    case TILEGX_OPC_BGEZT:
626 	    case TILEGX_OPC_BGTZ:
627 	    case TILEGX_OPC_BGTZT:
628 	    case TILEGX_OPC_BLBC:
629 	    case TILEGX_OPC_BLBCT:
630 	    case TILEGX_OPC_BLBS:
631 	    case TILEGX_OPC_BLBST:
632 	    case TILEGX_OPC_BLEZ:
633 	    case TILEGX_OPC_BLEZT:
634 	    case TILEGX_OPC_BLTZ:
635 	    case TILEGX_OPC_BLTZT:
636 	    case TILEGX_OPC_BNEZ:
637 	    case TILEGX_OPC_BNEZT:
638 
639 	    case TILEGX_OPC_IRET:
640 	    case TILEGX_OPC_JALR:
641 	    case TILEGX_OPC_JALRP:
642 	    case TILEGX_OPC_JR:
643 	    case TILEGX_OPC_JRP:
644 	    case TILEGX_OPC_SWINT0:
645 	    case TILEGX_OPC_SWINT1:
646 	    case TILEGX_OPC_SWINT2:
647 	    case TILEGX_OPC_SWINT3:
648 	      /* We're really done -- this is a branch.  */
649 	      branch_seen = 1;
650 	      prolog_done = 1;
651 	      break;
652 	    default:
653 	      /* We don't know or care what this instruction is.
654 		 All we know is that it isn't part of a prolog, and if
655 		 there's a destination register, we're trashing it.  */
656 	      prolog_done = 1;
657 	      for (j = 0; j < opcode->num_operands; j++)
658 		{
659 		  if (this_insn->operands[j]->is_dest_reg)
660 		    {
661 		      dest_regs[i] = operands[j];
662 		      new_reverse_frame[i].state = REVERSE_STATE_UNKNOWN;
663 		      reverse_frame_valid |= 1 << i;
664 		      break;
665 		    }
666 		}
667 	      break;
668 	    }
669 	}
670 
671       /* Now update the reverse frames.  */
672       for (i = 0; i < num_insns; i++)
673 	{
674 	  /* ISSUE: Does this properly handle "network" registers?  */
675 	  if ((reverse_frame_valid & (1 << i))
676 	      && dest_regs[i] != TILEGX_ZERO_REGNUM)
677 	    reverse_frame[dest_regs[i]] = new_reverse_frame[i];
678 	}
679 
680       if (prev_sp_value != 0)
681 	{
682 	  /* GCC uses R52 as a frame pointer.  Have we seen "move r52, sp"?  */
683 	  if (reverse_frame[TILEGX_R52_REGNUM].state == REVERSE_STATE_REGISTER
684 	      && reverse_frame[TILEGX_R52_REGNUM].value == TILEGX_SP_REGNUM)
685 	  {
686 	    reverse_frame[TILEGX_R52_REGNUM].state = REVERSE_STATE_VALUE;
687 	    reverse_frame[TILEGX_R52_REGNUM].value = prev_sp_value;
688 	  }
689 
690 	  prev_sp_value = 0;
691 	}
692 
693       if (prolog_done && prolog_end == end_addr)
694 	{
695 	  /* We found non-prolog code.	As such, _this_ instruction
696 	     is the one after the prolog.  We keep processing, because
697 	     there may be more prolog code in there, but this is what
698 	     we'll return.  */
699 	  /* ISSUE: There may not have actually been a prologue, and
700 	     we may have simply skipped some random instructions.  */
701 	  prolog_end = next_addr;
702 	}
703       if (branch_seen)
704 	{
705 	  /* We saw a branch.  The prolog absolutely must be over.  */
706 	  break;
707 	}
708     }
709 
710   if (prolog_end == end_addr && cache)
711     {
712       /* We may have terminated the prolog early, and we're certainly
713 	 at THIS point right now.  It's possible that the values of
714 	 registers we need are currently actually in other registers
715 	 (and haven't been written to memory yet).  Go find them.  */
716       for (i = 0; i < TILEGX_NUM_PHYS_REGS; i++)
717 	{
718 	  if (reverse_frame[i].state == REVERSE_STATE_REGISTER
719 	      && reverse_frame[i].value != i)
720 	    {
721 	      unsigned saved_register = (unsigned) reverse_frame[i].value;
722 
723 	      cache->saved_regs[saved_register].realreg = i;
724 	      cache->saved_regs[saved_register].addr = (LONGEST) -1;
725 	    }
726 	}
727     }
728 
729   if (lr_saved_on_stack_p)
730     {
731       cache->saved_regs[TILEGX_LR_REGNUM].realreg = TILEGX_LR_REGNUM;
732       cache->saved_regs[TILEGX_LR_REGNUM].addr =
733 	cache->saved_regs[TILEGX_SP_REGNUM].addr;
734     }
735 
736   return prolog_end;
737 }
738 
739 /* This is the implementation of gdbarch method skip_prologue.  */
740 
741 static CORE_ADDR
742 tilegx_skip_prologue (struct gdbarch *gdbarch, CORE_ADDR start_pc)
743 {
744   CORE_ADDR func_start, end_pc;
745   struct obj_section *s;
746 
747   /* This is the preferred method, find the end of the prologue by
748      using the debugging information.  */
749   if (find_pc_partial_function (start_pc, NULL, &func_start, NULL))
750     {
751       CORE_ADDR post_prologue_pc
752         = skip_prologue_using_sal (gdbarch, func_start);
753 
754       if (post_prologue_pc != 0)
755         return max (start_pc, post_prologue_pc);
756     }
757 
758   /* Don't straddle a section boundary.  */
759   s = find_pc_section (start_pc);
760   end_pc = start_pc + 8 * TILEGX_BUNDLE_SIZE_IN_BYTES;
761   if (s != NULL)
762     end_pc = min (end_pc, obj_section_endaddr (s));
763 
764   /* Otherwise, try to skip prologue the hard way.  */
765   return tilegx_analyze_prologue (gdbarch,
766 				  start_pc,
767 				  end_pc,
768 				  NULL, NULL);
769 }
770 
771 /* This is the implementation of gdbarch method stack_frame_destroyed_p.  */
772 
773 static int
774 tilegx_stack_frame_destroyed_p (struct gdbarch *gdbarch, CORE_ADDR pc)
775 {
776   CORE_ADDR func_addr = 0, func_end = 0;
777 
778   if (find_pc_partial_function (pc, NULL, &func_addr, &func_end))
779     {
780       CORE_ADDR addr = func_end - TILEGX_BUNDLE_SIZE_IN_BYTES;
781 
782       /* FIXME: Find the actual epilogue.  */
783       /* HACK: Just assume the final bundle is the "ret" instruction".  */
784       if (pc > addr)
785 	return 1;
786     }
787   return 0;
788 }
789 
790 /* This is the implementation of gdbarch method get_longjmp_target.  */
791 
792 static int
793 tilegx_get_longjmp_target (struct frame_info *frame, CORE_ADDR *pc)
794 {
795   struct gdbarch *gdbarch = get_frame_arch (frame);
796   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
797   CORE_ADDR jb_addr;
798   gdb_byte buf[8];
799 
800   jb_addr = get_frame_register_unsigned (frame, TILEGX_R0_REGNUM);
801 
802   /* TileGX jmp_buf contains 32 elements of type __uint_reg_t which
803      has a size of 8 bytes.  The return address is stored in the 25th
804      slot.  */
805   if (target_read_memory (jb_addr + 25 * 8, buf, 8))
806     return 0;
807 
808   *pc = extract_unsigned_integer (buf, 8, byte_order);
809 
810   return 1;
811 }
812 
813 /* by assigning the 'faultnum' reg in kernel pt_regs with this value,
814    kernel do_signal will not check r0. see tilegx kernel/signal.c
815    for details.  */
816 #define INT_SWINT_1_SIGRETURN (~0)
817 
818 /* Implement the "write_pc" gdbarch method.  */
819 
820 static void
821 tilegx_write_pc (struct regcache *regcache, CORE_ADDR pc)
822 {
823   regcache_cooked_write_unsigned (regcache, TILEGX_PC_REGNUM, pc);
824 
825   /* We must be careful with modifying the program counter.  If we
826      just interrupted a system call, the kernel might try to restart
827      it when we resume the inferior.  On restarting the system call,
828      the kernel will try backing up the program counter even though it
829      no longer points at the system call.  This typically results in a
830      SIGSEGV or SIGILL.  We can prevent this by writing INT_SWINT_1_SIGRETURN
831      in the "faultnum" pseudo-register.
832 
833      Note that "faultnum" is saved when setting up a dummy call frame.
834      This means that it is properly restored when that frame is
835      popped, and that the interrupted system call will be restarted
836      when we resume the inferior on return from a function call from
837      within GDB.  In all other cases the system call will not be
838      restarted.  */
839   regcache_cooked_write_unsigned (regcache, TILEGX_FAULTNUM_REGNUM,
840                                   INT_SWINT_1_SIGRETURN);
841 }
842 
843 /* This is the implementation of gdbarch method breakpoint_from_pc.  */
844 
845 static const unsigned char *
846 tilegx_breakpoint_from_pc (struct gdbarch *gdbarch,
847 			   CORE_ADDR *pcptr, int *lenptr)
848 {
849   /* 64-bit pattern for a { bpt ; nop } bundle.  */
850   static const unsigned char breakpoint[] =
851     { 0x00, 0x50, 0x48, 0x51, 0xae, 0x44, 0x6a, 0x28 };
852 
853   *lenptr = sizeof (breakpoint);
854   return breakpoint;
855 }
856 
857 /* Normal frames.  */
858 
859 static struct tilegx_frame_cache *
860 tilegx_frame_cache (struct frame_info *this_frame, void **this_cache)
861 {
862   struct gdbarch *gdbarch = get_frame_arch (this_frame);
863   struct tilegx_frame_cache *cache;
864   CORE_ADDR current_pc;
865 
866   if (*this_cache)
867     return (struct tilegx_frame_cache *) *this_cache;
868 
869   cache = FRAME_OBSTACK_ZALLOC (struct tilegx_frame_cache);
870   *this_cache = cache;
871   cache->saved_regs = trad_frame_alloc_saved_regs (this_frame);
872   cache->base = 0;
873   cache->start_pc = get_frame_func (this_frame);
874   current_pc = get_frame_pc (this_frame);
875 
876   cache->base = get_frame_register_unsigned (this_frame, TILEGX_SP_REGNUM);
877   trad_frame_set_value (cache->saved_regs, TILEGX_SP_REGNUM, cache->base);
878 
879   if (cache->start_pc)
880     tilegx_analyze_prologue (gdbarch, cache->start_pc, current_pc,
881 			     cache, this_frame);
882 
883   cache->saved_regs[TILEGX_PC_REGNUM] = cache->saved_regs[TILEGX_LR_REGNUM];
884 
885   return cache;
886 }
887 
888 /* Retrieve the value of REGNUM in FRAME.  */
889 
890 static struct value*
891 tilegx_frame_prev_register (struct frame_info *this_frame,
892 			    void **this_cache,
893 			    int regnum)
894 {
895   struct tilegx_frame_cache *info =
896     tilegx_frame_cache (this_frame, this_cache);
897 
898   return trad_frame_get_prev_register (this_frame, info->saved_regs,
899 				       regnum);
900 }
901 
902 /* Build frame id.  */
903 
904 static void
905 tilegx_frame_this_id (struct frame_info *this_frame, void **this_cache,
906 		      struct frame_id *this_id)
907 {
908   struct tilegx_frame_cache *info =
909     tilegx_frame_cache (this_frame, this_cache);
910 
911   /* This marks the outermost frame.  */
912   if (info->base == 0)
913     return;
914 
915   (*this_id) = frame_id_build (info->base, info->start_pc);
916 }
917 
918 static CORE_ADDR
919 tilegx_frame_base_address (struct frame_info *this_frame, void **this_cache)
920 {
921   struct tilegx_frame_cache *cache =
922     tilegx_frame_cache (this_frame, this_cache);
923 
924   return cache->base;
925 }
926 
927 static const struct frame_unwind tilegx_frame_unwind = {
928   NORMAL_FRAME,
929   default_frame_unwind_stop_reason,
930   tilegx_frame_this_id,
931   tilegx_frame_prev_register,
932   NULL,                        /* const struct frame_data *unwind_data  */
933   default_frame_sniffer,       /* frame_sniffer_ftype *sniffer  */
934   NULL                         /* frame_prev_pc_ftype *prev_pc  */
935 };
936 
937 static const struct frame_base tilegx_frame_base = {
938   &tilegx_frame_unwind,
939   tilegx_frame_base_address,
940   tilegx_frame_base_address,
941   tilegx_frame_base_address
942 };
943 
944 static CORE_ADDR
945 tilegx_unwind_sp (struct gdbarch *gdbarch, struct frame_info *next_frame)
946 {
947   return frame_unwind_register_unsigned (next_frame, TILEGX_SP_REGNUM);
948 }
949 
950 static CORE_ADDR
951 tilegx_unwind_pc (struct gdbarch *gdbarch, struct frame_info *next_frame)
952 {
953   return frame_unwind_register_unsigned (next_frame, TILEGX_PC_REGNUM);
954 }
955 
956 static struct frame_id
957 tilegx_unwind_dummy_id (struct gdbarch *gdbarch,
958 			struct frame_info *this_frame)
959 {
960   CORE_ADDR sp;
961 
962   sp = get_frame_register_unsigned (this_frame, TILEGX_SP_REGNUM);
963   return frame_id_build (sp, get_frame_pc (this_frame));
964 }
965 
966 
967 /* We cannot read/write the "special" registers.  */
968 
969 static int
970 tilegx_cannot_reference_register (struct gdbarch *gdbarch, int regno)
971 {
972   if (regno >= 0 && regno < TILEGX_NUM_EASY_REGS)
973     return 0;
974   else if (regno == TILEGX_PC_REGNUM
975            || regno == TILEGX_FAULTNUM_REGNUM)
976     return 0;
977   else
978     return 1;
979 }
980 
981 static struct gdbarch *
982 tilegx_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
983 {
984   struct gdbarch *gdbarch;
985   int arch_size = 64;
986 
987   /* Handle arch_size == 32 or 64.  Default to 64.  */
988   if (info.abfd)
989     arch_size = bfd_get_arch_size (info.abfd);
990 
991   /* Try to find a pre-existing architecture.  */
992   for (arches = gdbarch_list_lookup_by_info (arches, &info);
993        arches != NULL;
994        arches = gdbarch_list_lookup_by_info (arches->next, &info))
995     {
996       /* We only have two flavors -- just make sure arch_size matches.  */
997       if (gdbarch_ptr_bit (arches->gdbarch) == arch_size)
998 	return (arches->gdbarch);
999     }
1000 
1001   gdbarch = gdbarch_alloc (&info, NULL);
1002 
1003   /* Basic register fields and methods, datatype sizes and stuff.  */
1004 
1005   /* There are 64 physical registers which can be referenced by
1006      instructions (although only 56 of them can actually be
1007      debugged) and 1 magic register (the PC).  The other three
1008      magic registers (ex1, syscall, orig_r0) which are known to
1009      "ptrace" are ignored by "gdb".  Note that we simply pretend
1010      that there are 65 registers, and no "pseudo registers".  */
1011   set_gdbarch_num_regs (gdbarch, TILEGX_NUM_REGS);
1012   set_gdbarch_num_pseudo_regs (gdbarch, 0);
1013 
1014   set_gdbarch_sp_regnum (gdbarch, TILEGX_SP_REGNUM);
1015   set_gdbarch_pc_regnum (gdbarch, TILEGX_PC_REGNUM);
1016 
1017   set_gdbarch_register_name (gdbarch, tilegx_register_name);
1018   set_gdbarch_register_type (gdbarch, tilegx_register_type);
1019 
1020   set_gdbarch_short_bit (gdbarch, 2 * TARGET_CHAR_BIT);
1021   set_gdbarch_int_bit (gdbarch, 4 * TARGET_CHAR_BIT);
1022   set_gdbarch_long_bit (gdbarch, arch_size);
1023   set_gdbarch_long_long_bit (gdbarch, 8 * TARGET_CHAR_BIT);
1024 
1025   set_gdbarch_float_bit (gdbarch, 4 * TARGET_CHAR_BIT);
1026   set_gdbarch_double_bit (gdbarch, 8 * TARGET_CHAR_BIT);
1027   set_gdbarch_long_double_bit (gdbarch, 8 * TARGET_CHAR_BIT);
1028 
1029   set_gdbarch_ptr_bit (gdbarch, arch_size);
1030   set_gdbarch_addr_bit (gdbarch, arch_size);
1031 
1032   set_gdbarch_cannot_fetch_register (gdbarch,
1033 				     tilegx_cannot_reference_register);
1034   set_gdbarch_cannot_store_register (gdbarch,
1035 				     tilegx_cannot_reference_register);
1036 
1037   /* Stack grows down.  */
1038   set_gdbarch_inner_than (gdbarch, core_addr_lessthan);
1039 
1040   /* Frame Info.  */
1041   set_gdbarch_unwind_sp (gdbarch, tilegx_unwind_sp);
1042   set_gdbarch_unwind_pc (gdbarch, tilegx_unwind_pc);
1043   set_gdbarch_dummy_id (gdbarch, tilegx_unwind_dummy_id);
1044   set_gdbarch_frame_align (gdbarch, tilegx_frame_align);
1045   frame_base_set_default (gdbarch, &tilegx_frame_base);
1046 
1047   set_gdbarch_skip_prologue (gdbarch, tilegx_skip_prologue);
1048 
1049   set_gdbarch_stack_frame_destroyed_p (gdbarch, tilegx_stack_frame_destroyed_p);
1050 
1051   /* Map debug registers into internal register numbers.  */
1052   set_gdbarch_dwarf2_reg_to_regnum (gdbarch, tilegx_dwarf2_reg_to_regnum);
1053 
1054   /* These values and methods are used when gdb calls a target function.  */
1055   set_gdbarch_push_dummy_call (gdbarch, tilegx_push_dummy_call);
1056   set_gdbarch_get_longjmp_target (gdbarch, tilegx_get_longjmp_target);
1057   set_gdbarch_write_pc (gdbarch, tilegx_write_pc);
1058   set_gdbarch_breakpoint_from_pc (gdbarch, tilegx_breakpoint_from_pc);
1059   set_gdbarch_return_value (gdbarch, tilegx_return_value);
1060 
1061   set_gdbarch_print_insn (gdbarch, print_insn_tilegx);
1062 
1063   gdbarch_init_osabi (info, gdbarch);
1064 
1065   dwarf2_append_unwinders (gdbarch);
1066   frame_unwind_append_unwinder (gdbarch, &tilegx_frame_unwind);
1067 
1068   return gdbarch;
1069 }
1070 
1071 /* Provide a prototype to silence -Wmissing-prototypes.  */
1072 extern initialize_file_ftype _initialize_tilegx_tdep;
1073 
1074 void
1075 _initialize_tilegx_tdep (void)
1076 {
1077   register_gdbarch_init (bfd_arch_tilegx, tilegx_gdbarch_init);
1078 }
1079