Remove arm_override_mode
[deliverable/binutils-gdb.git] / gdb / ft32-tdep.c
CommitLineData
49d45b20
JB
1/* Target-dependent code for FT32.
2
618f726f 3 Copyright (C) 2009-2016 Free Software Foundation, Inc.
49d45b20
JB
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-unwind.h"
23#include "frame-base.h"
24#include "symtab.h"
25#include "gdbtypes.h"
26#include "gdbcmd.h"
27#include "gdbcore.h"
28#include "value.h"
29#include "inferior.h"
30#include "symfile.h"
31#include "objfiles.h"
32#include "osabi.h"
33#include "language.h"
34#include "arch-utils.h"
35#include "regcache.h"
36#include "trad-frame.h"
37#include "dis-asm.h"
38#include "record.h"
39
86feccb9 40#include "opcode/ft32.h"
41
49d45b20
JB
42#include "ft32-tdep.h"
43#include "gdb/sim-ft32.h"
325fac50 44#include <algorithm>
49d45b20
JB
45
46#define RAM_BIAS 0x800000 /* Bias added to RAM addresses. */
47
48/* Local functions. */
49
50extern void _initialize_ft32_tdep (void);
51
52/* Use an invalid address -1 as 'not available' marker. */
53enum { REG_UNAVAIL = (CORE_ADDR) (-1) };
54
55struct ft32_frame_cache
56{
57 /* Base address of the frame */
58 CORE_ADDR base;
59 /* Function this frame belongs to */
60 CORE_ADDR pc;
61 /* Total size of this frame */
62 LONGEST framesize;
63 /* Saved registers in this frame */
64 CORE_ADDR saved_regs[FT32_NUM_REGS];
65 /* Saved SP in this frame */
66 CORE_ADDR saved_sp;
67 /* Has the new frame been LINKed. */
68 bfd_boolean established;
69};
70
71/* Implement the "frame_align" gdbarch method. */
72
73static CORE_ADDR
74ft32_frame_align (struct gdbarch *gdbarch, CORE_ADDR sp)
75{
76 /* Align to the size of an instruction (so that they can safely be
77 pushed onto the stack. */
78 return sp & ~1;
79}
80
49d45b20 81
598cc9dc 82static const gdb_byte breakpoint[] = { 0x02, 0x00, 0x34, 0x00 };
49d45b20 83
598cc9dc 84GDBARCH_BREAKPOINT_MANIPULATION (ft32, breakpoint)
49d45b20
JB
85
86/* FT32 register names. */
87
88static const char *const ft32_register_names[] =
89{
90 "fp", "sp",
91 "r0", "r1", "r2", "r3", "r4", "r5", "r6", "r7",
92 "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15",
93 "r16", "r17", "r18", "r19", "r20", "r21", "r22", "r23",
94 "r24", "r25", "r26", "r27", "r28", "cc",
95 "pc"
96};
97
98/* Implement the "register_name" gdbarch method. */
99
100static const char *
101ft32_register_name (struct gdbarch *gdbarch, int reg_nr)
102{
103 if (reg_nr < 0)
104 return NULL;
105 if (reg_nr >= FT32_NUM_REGS)
106 return NULL;
107 return ft32_register_names[reg_nr];
108}
109
110/* Implement the "register_type" gdbarch method. */
111
112static struct type *
113ft32_register_type (struct gdbarch *gdbarch, int reg_nr)
114{
115 if (reg_nr == FT32_PC_REGNUM)
623fb775 116 return gdbarch_tdep (gdbarch)->pc_type;
49d45b20
JB
117 else if (reg_nr == FT32_SP_REGNUM || reg_nr == FT32_FP_REGNUM)
118 return builtin_type (gdbarch)->builtin_data_ptr;
119 else
120 return builtin_type (gdbarch)->builtin_int32;
121}
122
123/* Write into appropriate registers a function return value
124 of type TYPE, given in virtual format. */
125
126static void
127ft32_store_return_value (struct type *type, struct regcache *regcache,
128 const gdb_byte *valbuf)
129{
130 struct gdbarch *gdbarch = get_regcache_arch (regcache);
131 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
132 CORE_ADDR regval;
133 int len = TYPE_LENGTH (type);
134
135 /* Things always get returned in RET1_REGNUM, RET2_REGNUM. */
136 regval = extract_unsigned_integer (valbuf, len > 4 ? 4 : len, byte_order);
137 regcache_cooked_write_unsigned (regcache, FT32_R0_REGNUM, regval);
138 if (len > 4)
139 {
140 regval = extract_unsigned_integer (valbuf + 4,
141 len - 4, byte_order);
142 regcache_cooked_write_unsigned (regcache, FT32_R1_REGNUM, regval);
143 }
144}
145
146/* Decode the instructions within the given address range. Decide
147 when we must have reached the end of the function prologue. If a
148 frame_info pointer is provided, fill in its saved_regs etc.
149
150 Returns the address of the first instruction after the prologue. */
151
49d45b20
JB
152static CORE_ADDR
153ft32_analyze_prologue (CORE_ADDR start_addr, CORE_ADDR end_addr,
154 struct ft32_frame_cache *cache,
155 struct gdbarch *gdbarch)
156{
157 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
158 CORE_ADDR next_addr;
870f88f7 159 ULONGEST inst;
ae4e2501 160 int regnum, pushreg;
161 struct bound_minimal_symbol msymbol;
162 const int first_saved_reg = 13; /* The first saved register. */
163 /* PROLOGS are addresses of the subroutine prologs, PROLOGS[n]
164 is the address of __prolog_$rN.
165 __prolog_$rN pushes registers from 13 through n inclusive.
166 So for example CALL __prolog_$r15 is equivalent to:
167 PUSH $r13
168 PUSH $r14
169 PUSH $r15
170 Note that PROLOGS[0] through PROLOGS[12] are unused. */
171 CORE_ADDR prologs[32];
49d45b20
JB
172
173 cache->saved_regs[FT32_PC_REGNUM] = 0;
174 cache->framesize = 0;
175
ae4e2501 176 for (regnum = first_saved_reg; regnum < 32; regnum++)
177 {
178 char prolog_symbol[32];
179
180 snprintf (prolog_symbol, sizeof (prolog_symbol), "__prolog_$r%02d",
181 regnum);
182 msymbol = lookup_minimal_symbol (prolog_symbol, NULL, NULL);
183 if (msymbol.minsym)
184 prologs[regnum] = BMSYMBOL_VALUE_ADDRESS (msymbol);
185 else
186 prologs[regnum] = 0;
187 }
188
49d45b20 189 if (start_addr >= end_addr)
ae4e2501 190 return end_addr;
49d45b20
JB
191
192 cache->established = 0;
ae4e2501 193 for (next_addr = start_addr; next_addr < end_addr;)
49d45b20
JB
194 {
195 inst = read_memory_unsigned_integer (next_addr, 4, byte_order);
196
86feccb9 197 if (FT32_IS_PUSH (inst))
49d45b20 198 {
ae4e2501 199 pushreg = FT32_PUSH_REG (inst);
49d45b20 200 cache->framesize += 4;
ae4e2501 201 cache->saved_regs[FT32_R0_REGNUM + pushreg] = cache->framesize;
49d45b20
JB
202 next_addr += 4;
203 }
ae4e2501 204 else if (FT32_IS_CALL (inst))
205 {
206 for (regnum = first_saved_reg; regnum < 32; regnum++)
207 {
208 if ((4 * (inst & 0x3ffff)) == prologs[regnum])
209 {
210 for (pushreg = first_saved_reg; pushreg <= regnum;
211 pushreg++)
212 {
213 cache->framesize += 4;
214 cache->saved_regs[FT32_R0_REGNUM + pushreg] =
215 cache->framesize;
216 }
217 next_addr += 4;
218 }
219 }
220 break;
221 }
49d45b20
JB
222 else
223 break;
224 }
225 for (regnum = FT32_R0_REGNUM; regnum < FT32_PC_REGNUM; regnum++)
226 {
227 if (cache->saved_regs[regnum] != REG_UNAVAIL)
ae4e2501 228 cache->saved_regs[regnum] =
229 cache->framesize - cache->saved_regs[regnum];
49d45b20
JB
230 }
231 cache->saved_regs[FT32_PC_REGNUM] = cache->framesize;
232
233 /* It is a LINK? */
234 if (next_addr < end_addr)
235 {
236 inst = read_memory_unsigned_integer (next_addr, 4, byte_order);
86feccb9 237 if (FT32_IS_LINK (inst))
49d45b20
JB
238 {
239 cache->established = 1;
240 for (regnum = FT32_R0_REGNUM; regnum < FT32_PC_REGNUM; regnum++)
241 {
242 if (cache->saved_regs[regnum] != REG_UNAVAIL)
243 cache->saved_regs[regnum] += 4;
244 }
245 cache->saved_regs[FT32_PC_REGNUM] = cache->framesize + 4;
246 cache->saved_regs[FT32_FP_REGNUM] = 0;
86feccb9 247 cache->framesize += FT32_LINK_SIZE (inst);
49d45b20
JB
248 next_addr += 4;
249 }
250 }
251
252 return next_addr;
253}
254
255/* Find the end of function prologue. */
256
257static CORE_ADDR
258ft32_skip_prologue (struct gdbarch *gdbarch, CORE_ADDR pc)
259{
260 CORE_ADDR func_addr = 0, func_end = 0;
261 const char *func_name;
262
263 /* See if we can determine the end of the prologue via the symbol table.
264 If so, then return either PC, or the PC after the prologue, whichever
265 is greater. */
266 if (find_pc_partial_function (pc, &func_name, &func_addr, &func_end))
267 {
268 CORE_ADDR post_prologue_pc
269 = skip_prologue_using_sal (gdbarch, func_addr);
270 if (post_prologue_pc != 0)
325fac50 271 return std::max (pc, post_prologue_pc);
49d45b20
JB
272 else
273 {
274 /* Can't determine prologue from the symbol table, need to examine
275 instructions. */
276 struct symtab_and_line sal;
277 struct symbol *sym;
278 struct ft32_frame_cache cache;
279 CORE_ADDR plg_end;
280
281 memset (&cache, 0, sizeof cache);
282
283 plg_end = ft32_analyze_prologue (func_addr,
284 func_end, &cache, gdbarch);
285 /* Found a function. */
835a09d9 286 sym = lookup_symbol (func_name, NULL, VAR_DOMAIN, NULL).symbol;
49d45b20
JB
287 /* Don't use line number debug info for assembly source files. */
288 if ((sym != NULL) && SYMBOL_LANGUAGE (sym) != language_asm)
289 {
290 sal = find_pc_line (func_addr, 0);
291 if (sal.end && sal.end < func_end)
292 {
293 /* Found a line number, use it as end of prologue. */
294 return sal.end;
295 }
296 }
297 /* No useable line symbol. Use result of prologue parsing method. */
298 return plg_end;
299 }
300 }
301
302 /* No function symbol -- just return the PC. */
303 return pc;
304}
305
623fb775 306/* Implementation of `pointer_to_address' gdbarch method.
307
308 On FT32 address space zero is RAM, address space 1 is flash.
309 RAM appears at address RAM_BIAS, flash at address 0. */
310
311static CORE_ADDR
312ft32_pointer_to_address (struct gdbarch *gdbarch,
313 struct type *type, const gdb_byte *buf)
314{
315 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
316 CORE_ADDR addr
317 = extract_unsigned_integer (buf, TYPE_LENGTH (type), byte_order);
318
319 if (TYPE_ADDRESS_CLASS_1 (type))
320 return addr;
321 else
322 return addr | RAM_BIAS;
323}
324
325/* Implementation of `address_class_type_flags' gdbarch method.
326
327 This method maps DW_AT_address_class attributes to a
328 type_instance_flag_value. */
329
330static int
331ft32_address_class_type_flags (int byte_size, int dwarf2_addr_class)
332{
333 /* The value 1 of the DW_AT_address_class attribute corresponds to the
334 __flash__ qualifier, meaning pointer to data in FT32 program memory.
335 */
336 if (dwarf2_addr_class == 1)
337 return TYPE_INSTANCE_FLAG_ADDRESS_CLASS_1;
338 return 0;
339}
340
341/* Implementation of `address_class_type_flags_to_name' gdbarch method.
342
343 Convert a type_instance_flag_value to an address space qualifier. */
344
345static const char*
346ft32_address_class_type_flags_to_name (struct gdbarch *gdbarch, int type_flags)
347{
348 if (type_flags & TYPE_INSTANCE_FLAG_ADDRESS_CLASS_1)
349 return "flash";
350 else
351 return NULL;
352}
353
354/* Implementation of `address_class_name_to_type_flags' gdbarch method.
355
356 Convert an address space qualifier to a type_instance_flag_value. */
357
358static int
359ft32_address_class_name_to_type_flags (struct gdbarch *gdbarch,
360 const char* name,
361 int *type_flags_ptr)
362{
363 if (strcmp (name, "flash") == 0)
364 {
365 *type_flags_ptr = TYPE_INSTANCE_FLAG_ADDRESS_CLASS_1;
366 return 1;
367 }
368 else
369 return 0;
370}
371
372
49d45b20
JB
373/* Implement the "read_pc" gdbarch method. */
374
375static CORE_ADDR
376ft32_read_pc (struct regcache *regcache)
377{
378 ULONGEST pc;
379
380 regcache_cooked_read_unsigned (regcache, FT32_PC_REGNUM, &pc);
381 return pc;
382}
383
384/* Implement the "write_pc" gdbarch method. */
385
386static void
387ft32_write_pc (struct regcache *regcache, CORE_ADDR val)
388{
389 regcache_cooked_write_unsigned (regcache, FT32_PC_REGNUM, val);
390}
391
392/* Implement the "unwind_sp" gdbarch method. */
393
394static CORE_ADDR
395ft32_unwind_sp (struct gdbarch *gdbarch, struct frame_info *next_frame)
396{
397 return frame_unwind_register_unsigned (next_frame, FT32_SP_REGNUM);
398}
399
400/* Given a return value in `regbuf' with a type `valtype',
401 extract and copy its value into `valbuf'. */
402
403static void
404ft32_extract_return_value (struct type *type, struct regcache *regcache,
405 gdb_byte *dst)
406{
407 struct gdbarch *gdbarch = get_regcache_arch (regcache);
408 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
409 bfd_byte *valbuf = dst;
410 int len = TYPE_LENGTH (type);
411 ULONGEST tmp;
412
413 /* By using store_unsigned_integer we avoid having to do
414 anything special for small big-endian values. */
415 regcache_cooked_read_unsigned (regcache, FT32_R0_REGNUM, &tmp);
416 store_unsigned_integer (valbuf, (len > 4 ? len - 4 : len), byte_order, tmp);
417
418 /* Ignore return values more than 8 bytes in size because the ft32
419 returns anything more than 8 bytes in the stack. */
420 if (len > 4)
421 {
422 regcache_cooked_read_unsigned (regcache, FT32_R1_REGNUM, &tmp);
423 store_unsigned_integer (valbuf + len - 4, 4, byte_order, tmp);
424 }
425}
426
427/* Implement the "return_value" gdbarch method. */
428
429static enum return_value_convention
430ft32_return_value (struct gdbarch *gdbarch, struct value *function,
431 struct type *valtype, struct regcache *regcache,
432 gdb_byte *readbuf, const gdb_byte *writebuf)
433{
434 if (TYPE_LENGTH (valtype) > 8)
435 return RETURN_VALUE_STRUCT_CONVENTION;
436 else
437 {
438 if (readbuf != NULL)
439 ft32_extract_return_value (valtype, regcache, readbuf);
440 if (writebuf != NULL)
441 ft32_store_return_value (valtype, regcache, writebuf);
442 return RETURN_VALUE_REGISTER_CONVENTION;
443 }
444}
445
446/* Allocate and initialize a ft32_frame_cache object. */
447
448static struct ft32_frame_cache *
449ft32_alloc_frame_cache (void)
450{
451 struct ft32_frame_cache *cache;
452 int i;
453
454 cache = FRAME_OBSTACK_ZALLOC (struct ft32_frame_cache);
455
456 for (i = 0; i < FT32_NUM_REGS; ++i)
457 cache->saved_regs[i] = REG_UNAVAIL;
458
459 return cache;
460}
461
462/* Populate a ft32_frame_cache object for this_frame. */
463
464static struct ft32_frame_cache *
465ft32_frame_cache (struct frame_info *this_frame, void **this_cache)
466{
467 struct ft32_frame_cache *cache;
468 CORE_ADDR current_pc;
469 int i;
470
471 if (*this_cache)
9a3c8263 472 return (struct ft32_frame_cache *) *this_cache;
49d45b20
JB
473
474 cache = ft32_alloc_frame_cache ();
475 *this_cache = cache;
476
477 cache->base = get_frame_register_unsigned (this_frame, FT32_FP_REGNUM);
478 if (cache->base == 0)
479 return cache;
480
481 cache->pc = get_frame_func (this_frame);
482 current_pc = get_frame_pc (this_frame);
483 if (cache->pc)
484 {
485 struct gdbarch *gdbarch = get_frame_arch (this_frame);
486
487 ft32_analyze_prologue (cache->pc, current_pc, cache, gdbarch);
488 if (!cache->established)
489 cache->base = get_frame_register_unsigned (this_frame, FT32_SP_REGNUM);
490 }
491
492 cache->saved_sp = cache->base - 4;
493
494 for (i = 0; i < FT32_NUM_REGS; ++i)
495 if (cache->saved_regs[i] != REG_UNAVAIL)
496 cache->saved_regs[i] = cache->base + cache->saved_regs[i];
497
498 return cache;
499}
500
501/* Implement the "unwind_pc" gdbarch method. */
502
503static CORE_ADDR
504ft32_unwind_pc (struct gdbarch *gdbarch, struct frame_info *next_frame)
505{
506 return frame_unwind_register_unsigned (next_frame, FT32_PC_REGNUM);
507}
508
509/* Given a GDB frame, determine the address of the calling function's
510 frame. This will be used to create a new GDB frame struct. */
511
512static void
513ft32_frame_this_id (struct frame_info *this_frame,
514 void **this_prologue_cache, struct frame_id *this_id)
515{
516 struct ft32_frame_cache *cache = ft32_frame_cache (this_frame,
517 this_prologue_cache);
518
519 /* This marks the outermost frame. */
520 if (cache->base == 0)
521 return;
522
523 *this_id = frame_id_build (cache->saved_sp, cache->pc);
524}
525
526/* Get the value of register regnum in the previous stack frame. */
527
528static struct value *
529ft32_frame_prev_register (struct frame_info *this_frame,
530 void **this_prologue_cache, int regnum)
531{
532 struct ft32_frame_cache *cache = ft32_frame_cache (this_frame,
533 this_prologue_cache);
534
535 gdb_assert (regnum >= 0);
536
537 if (regnum == FT32_SP_REGNUM && cache->saved_sp)
538 return frame_unwind_got_constant (this_frame, regnum, cache->saved_sp);
539
540 if (regnum < FT32_NUM_REGS && cache->saved_regs[regnum] != REG_UNAVAIL)
541 return frame_unwind_got_memory (this_frame, regnum,
542 RAM_BIAS | cache->saved_regs[regnum]);
543
544 return frame_unwind_got_register (this_frame, regnum, regnum);
545}
546
547static const struct frame_unwind ft32_frame_unwind =
548{
549 NORMAL_FRAME,
550 default_frame_unwind_stop_reason,
551 ft32_frame_this_id,
552 ft32_frame_prev_register,
553 NULL,
554 default_frame_sniffer
555};
556
557/* Return the base address of this_frame. */
558
559static CORE_ADDR
560ft32_frame_base_address (struct frame_info *this_frame, void **this_cache)
561{
562 struct ft32_frame_cache *cache = ft32_frame_cache (this_frame,
563 this_cache);
564
565 return cache->base;
566}
567
568static const struct frame_base ft32_frame_base =
569{
570 &ft32_frame_unwind,
571 ft32_frame_base_address,
572 ft32_frame_base_address,
573 ft32_frame_base_address
574};
575
576static struct frame_id
577ft32_dummy_id (struct gdbarch *gdbarch, struct frame_info *this_frame)
578{
579 CORE_ADDR sp = get_frame_register_unsigned (this_frame, FT32_SP_REGNUM);
580
581 return frame_id_build (sp, get_frame_pc (this_frame));
582}
583
584/* Allocate and initialize the ft32 gdbarch object. */
585
586static struct gdbarch *
587ft32_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
588{
589 struct gdbarch *gdbarch;
590 struct gdbarch_tdep *tdep;
623fb775 591 struct type *void_type;
592 struct type *func_void_type;
49d45b20
JB
593
594 /* If there is already a candidate, use it. */
595 arches = gdbarch_list_lookup_by_info (arches, &info);
596 if (arches != NULL)
597 return arches->gdbarch;
598
599 /* Allocate space for the new architecture. */
600 tdep = XNEW (struct gdbarch_tdep);
601 gdbarch = gdbarch_alloc (&info, tdep);
602
623fb775 603 /* Create a type for PC. We can't use builtin types here, as they may not
604 be defined. */
605 void_type = arch_type (gdbarch, TYPE_CODE_VOID, 1, "void");
606 func_void_type = make_function_type (void_type, NULL);
88dfca6c
UW
607 tdep->pc_type = arch_pointer_type (gdbarch, 4 * TARGET_CHAR_BIT, NULL,
608 func_void_type);
623fb775 609 TYPE_INSTANCE_FLAGS (tdep->pc_type) |= TYPE_INSTANCE_FLAG_ADDRESS_CLASS_1;
610
49d45b20
JB
611 set_gdbarch_read_pc (gdbarch, ft32_read_pc);
612 set_gdbarch_write_pc (gdbarch, ft32_write_pc);
613 set_gdbarch_unwind_sp (gdbarch, ft32_unwind_sp);
614
615 set_gdbarch_num_regs (gdbarch, FT32_NUM_REGS);
616 set_gdbarch_sp_regnum (gdbarch, FT32_SP_REGNUM);
617 set_gdbarch_pc_regnum (gdbarch, FT32_PC_REGNUM);
618 set_gdbarch_register_name (gdbarch, ft32_register_name);
619 set_gdbarch_register_type (gdbarch, ft32_register_type);
620
621 set_gdbarch_return_value (gdbarch, ft32_return_value);
622
623fb775 623 set_gdbarch_pointer_to_address (gdbarch, ft32_pointer_to_address);
624
49d45b20
JB
625 set_gdbarch_skip_prologue (gdbarch, ft32_skip_prologue);
626 set_gdbarch_inner_than (gdbarch, core_addr_lessthan);
598cc9dc 627 SET_GDBARCH_BREAKPOINT_MANIPULATION (ft32);
49d45b20
JB
628 set_gdbarch_frame_align (gdbarch, ft32_frame_align);
629
630 frame_base_set_default (gdbarch, &ft32_frame_base);
631
632 /* Methods for saving / extracting a dummy frame's ID. The ID's
633 stack address must match the SP value returned by
634 PUSH_DUMMY_CALL, and saved by generic_save_dummy_frame_tos. */
635 set_gdbarch_dummy_id (gdbarch, ft32_dummy_id);
636
637 set_gdbarch_unwind_pc (gdbarch, ft32_unwind_pc);
638
639 set_gdbarch_print_insn (gdbarch, print_insn_ft32);
640
641 /* Hook in ABI-specific overrides, if they have been registered. */
642 gdbarch_init_osabi (info, gdbarch);
643
644 /* Hook in the default unwinders. */
645 frame_unwind_append_unwinder (gdbarch, &ft32_frame_unwind);
646
647 /* Support simple overlay manager. */
648 set_gdbarch_overlay_update (gdbarch, simple_overlay_update);
649
623fb775 650 set_gdbarch_address_class_type_flags (gdbarch, ft32_address_class_type_flags);
651 set_gdbarch_address_class_name_to_type_flags
652 (gdbarch, ft32_address_class_name_to_type_flags);
653 set_gdbarch_address_class_type_flags_to_name
654 (gdbarch, ft32_address_class_type_flags_to_name);
655
49d45b20
JB
656 return gdbarch;
657}
658
659/* Register this machine's init routine. */
660
661void
662_initialize_ft32_tdep (void)
663{
664 register_gdbarch_init (bfd_arch_ft32, ft32_gdbarch_init);
665}
This page took 0.165758 seconds and 4 git commands to generate.