static void * build_fortran_types (struct gdbarch *gdbarch) { struct builtin_f_type *builtin_f_type = GDBARCH_OBSTACK_ZALLOC (gdbarch, struct builtin_f_type); builtin_f_type->builtin_void = arch_type (gdbarch, TYPE_CODE_VOID, 1, "VOID"); builtin_f_type->builtin_character = arch_integer_type (gdbarch, TARGET_CHAR_BIT, 0, "character"); builtin_f_type->builtin_logical_s1 = arch_boolean_type (gdbarch, TARGET_CHAR_BIT, 1, "logical*1"); builtin_f_type->builtin_integer_s2 = arch_integer_type (gdbarch, gdbarch_short_bit (gdbarch), 0, "integer*2"); builtin_f_type->builtin_logical_s2 = arch_boolean_type (gdbarch, gdbarch_short_bit (gdbarch), 1, "logical*2"); builtin_f_type->builtin_logical_s8 = arch_boolean_type (gdbarch, gdbarch_long_long_bit (gdbarch), 1, "logical*8"); builtin_f_type->builtin_integer = arch_integer_type (gdbarch, gdbarch_int_bit (gdbarch), 0, "integer"); builtin_f_type->builtin_logical = arch_boolean_type (gdbarch, gdbarch_int_bit (gdbarch), 1, "logical*4"); builtin_f_type->builtin_real = arch_float_type (gdbarch, gdbarch_float_bit (gdbarch), "real", NULL); builtin_f_type->builtin_real_s8 = arch_float_type (gdbarch, gdbarch_double_bit (gdbarch), "real*8", NULL); builtin_f_type->builtin_real_s16 = arch_float_type (gdbarch, gdbarch_long_double_bit (gdbarch), "real*16", NULL); builtin_f_type->builtin_complex_s8 = arch_complex_type (gdbarch, "complex*8", builtin_f_type->builtin_real); builtin_f_type->builtin_complex_s16 = arch_complex_type (gdbarch, "complex*16", builtin_f_type->builtin_real_s8); builtin_f_type->builtin_complex_s32 = arch_complex_type (gdbarch, "complex*32", builtin_f_type->builtin_real_s16); return builtin_f_type; }
static void * build_go_types (struct gdbarch *gdbarch) { struct builtin_go_type *builtin_go_type = GDBARCH_OBSTACK_ZALLOC (gdbarch, struct builtin_go_type); builtin_go_type->builtin_void = arch_type (gdbarch, TYPE_CODE_VOID, 1, "void"); builtin_go_type->builtin_char = arch_character_type (gdbarch, 8, 1, "char"); builtin_go_type->builtin_bool = arch_boolean_type (gdbarch, 8, 0, "bool"); builtin_go_type->builtin_int = arch_integer_type (gdbarch, gdbarch_int_bit (gdbarch), 0, "int"); builtin_go_type->builtin_uint = arch_integer_type (gdbarch, gdbarch_int_bit (gdbarch), 1, "uint"); builtin_go_type->builtin_uintptr = arch_integer_type (gdbarch, gdbarch_ptr_bit (gdbarch), 1, "uintptr"); builtin_go_type->builtin_int8 = arch_integer_type (gdbarch, 8, 0, "int8"); builtin_go_type->builtin_int16 = arch_integer_type (gdbarch, 16, 0, "int16"); builtin_go_type->builtin_int32 = arch_integer_type (gdbarch, 32, 0, "int32"); builtin_go_type->builtin_int64 = arch_integer_type (gdbarch, 64, 0, "int64"); builtin_go_type->builtin_uint8 = arch_integer_type (gdbarch, 8, 1, "uint8"); builtin_go_type->builtin_uint16 = arch_integer_type (gdbarch, 16, 1, "uint16"); builtin_go_type->builtin_uint32 = arch_integer_type (gdbarch, 32, 1, "uint32"); builtin_go_type->builtin_uint64 = arch_integer_type (gdbarch, 64, 1, "uint64"); builtin_go_type->builtin_float32 = arch_float_type (gdbarch, 32, "float32", floatformats_ieee_single); builtin_go_type->builtin_float64 = arch_float_type (gdbarch, 64, "float64", floatformats_ieee_double); builtin_go_type->builtin_complex64 = arch_complex_type (gdbarch, "complex64", builtin_go_type->builtin_float32); builtin_go_type->builtin_complex128 = arch_complex_type (gdbarch, "complex128", builtin_go_type->builtin_float64); return builtin_go_type; }
static void * build_m2_types (struct gdbarch *gdbarch) { struct builtin_m2_type *builtin_m2_type = GDBARCH_OBSTACK_ZALLOC (gdbarch, struct builtin_m2_type); /* Modula-2 "pervasive" types. NOTE: these can be redefined!!! */ builtin_m2_type->builtin_int = arch_integer_type (gdbarch, gdbarch_int_bit (gdbarch), 0, "INTEGER"); builtin_m2_type->builtin_card = arch_integer_type (gdbarch, gdbarch_int_bit (gdbarch), 1, "CARDINAL"); builtin_m2_type->builtin_real = arch_float_type (gdbarch, gdbarch_float_bit (gdbarch), "REAL", NULL); builtin_m2_type->builtin_char = arch_character_type (gdbarch, TARGET_CHAR_BIT, 1, "CHAR"); builtin_m2_type->builtin_bool = arch_boolean_type (gdbarch, gdbarch_int_bit (gdbarch), 1, "BOOLEAN"); return builtin_m2_type; }
static void i386_linux_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch) { struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch); const struct target_desc *tdesc = info.target_desc; struct tdesc_arch_data *tdesc_data = (void *) info.tdep_info; const struct tdesc_feature *feature; int valid_p; gdb_assert (tdesc_data); linux_init_abi (info, gdbarch); /* GNU/Linux uses ELF. */ i386_elf_init_abi (info, gdbarch); /* Reserve a number for orig_eax. */ set_gdbarch_num_regs (gdbarch, I386_LINUX_NUM_REGS); if (! tdesc_has_registers (tdesc)) tdesc = tdesc_i386_linux; tdep->tdesc = tdesc; feature = tdesc_find_feature (tdesc, "org.gnu.gdb.i386.linux"); if (feature == NULL) return; valid_p = tdesc_numbered_register (feature, tdesc_data, I386_LINUX_ORIG_EAX_REGNUM, "orig_eax"); if (!valid_p) return; /* Add the %orig_eax register used for syscall restarting. */ set_gdbarch_write_pc (gdbarch, i386_linux_write_pc); tdep->register_reggroup_p = i386_linux_register_reggroup_p; tdep->gregset_reg_offset = i386_linux_gregset_reg_offset; tdep->gregset_num_regs = ARRAY_SIZE (i386_linux_gregset_reg_offset); tdep->sizeof_gregset = 17 * 4; tdep->jb_pc_offset = 20; /* From <bits/setjmp.h>. */ tdep->sigtramp_p = i386_linux_sigtramp_p; tdep->sigcontext_addr = i386_linux_sigcontext_addr; tdep->sc_reg_offset = i386_linux_sc_reg_offset; tdep->sc_num_regs = ARRAY_SIZE (i386_linux_sc_reg_offset); tdep->xsave_xcr0_offset = I386_LINUX_XSAVE_XCR0_OFFSET; set_gdbarch_process_record (gdbarch, i386_process_record); set_gdbarch_process_record_signal (gdbarch, i386_linux_record_signal); /* Initialize the i386_linux_record_tdep. */ /* These values are the size of the type that will be used in a system call. They are obtained from Linux Kernel source. */ i386_linux_record_tdep.size_pointer = gdbarch_ptr_bit (gdbarch) / TARGET_CHAR_BIT; i386_linux_record_tdep.size__old_kernel_stat = 32; i386_linux_record_tdep.size_tms = 16; i386_linux_record_tdep.size_loff_t = 8; i386_linux_record_tdep.size_flock = 16; i386_linux_record_tdep.size_oldold_utsname = 45; i386_linux_record_tdep.size_ustat = 20; i386_linux_record_tdep.size_old_sigaction = 140; i386_linux_record_tdep.size_old_sigset_t = 128; i386_linux_record_tdep.size_rlimit = 8; i386_linux_record_tdep.size_rusage = 72; i386_linux_record_tdep.size_timeval = 8; i386_linux_record_tdep.size_timezone = 8; i386_linux_record_tdep.size_old_gid_t = 2; i386_linux_record_tdep.size_old_uid_t = 2; i386_linux_record_tdep.size_fd_set = 128; i386_linux_record_tdep.size_dirent = 268; i386_linux_record_tdep.size_dirent64 = 276; i386_linux_record_tdep.size_statfs = 64; i386_linux_record_tdep.size_statfs64 = 84; i386_linux_record_tdep.size_sockaddr = 16; i386_linux_record_tdep.size_int = gdbarch_int_bit (gdbarch) / TARGET_CHAR_BIT; i386_linux_record_tdep.size_long = gdbarch_long_bit (gdbarch) / TARGET_CHAR_BIT; i386_linux_record_tdep.size_ulong = gdbarch_long_bit (gdbarch) / TARGET_CHAR_BIT; i386_linux_record_tdep.size_msghdr = 28; i386_linux_record_tdep.size_itimerval = 16; i386_linux_record_tdep.size_stat = 88; i386_linux_record_tdep.size_old_utsname = 325; i386_linux_record_tdep.size_sysinfo = 64; i386_linux_record_tdep.size_msqid_ds = 88; i386_linux_record_tdep.size_shmid_ds = 84; i386_linux_record_tdep.size_new_utsname = 390; i386_linux_record_tdep.size_timex = 128; i386_linux_record_tdep.size_mem_dqinfo = 24; i386_linux_record_tdep.size_if_dqblk = 68; i386_linux_record_tdep.size_fs_quota_stat = 68; i386_linux_record_tdep.size_timespec = 8; i386_linux_record_tdep.size_pollfd = 8; i386_linux_record_tdep.size_NFS_FHSIZE = 32; i386_linux_record_tdep.size_knfsd_fh = 132; i386_linux_record_tdep.size_TASK_COMM_LEN = 16; i386_linux_record_tdep.size_sigaction = 140; i386_linux_record_tdep.size_sigset_t = 8; i386_linux_record_tdep.size_siginfo_t = 128; i386_linux_record_tdep.size_cap_user_data_t = 12; i386_linux_record_tdep.size_stack_t = 12; i386_linux_record_tdep.size_off_t = i386_linux_record_tdep.size_long; i386_linux_record_tdep.size_stat64 = 96; i386_linux_record_tdep.size_gid_t = 2; i386_linux_record_tdep.size_uid_t = 2; i386_linux_record_tdep.size_PAGE_SIZE = 4096; i386_linux_record_tdep.size_flock64 = 24; i386_linux_record_tdep.size_user_desc = 16; i386_linux_record_tdep.size_io_event = 32; i386_linux_record_tdep.size_iocb = 64; i386_linux_record_tdep.size_epoll_event = 12; i386_linux_record_tdep.size_itimerspec = i386_linux_record_tdep.size_timespec * 2; i386_linux_record_tdep.size_mq_attr = 32; i386_linux_record_tdep.size_siginfo = 128; i386_linux_record_tdep.size_termios = 36; i386_linux_record_tdep.size_termios2 = 44; i386_linux_record_tdep.size_pid_t = 4; i386_linux_record_tdep.size_winsize = 8; i386_linux_record_tdep.size_serial_struct = 60; i386_linux_record_tdep.size_serial_icounter_struct = 80; i386_linux_record_tdep.size_hayes_esp_config = 12; i386_linux_record_tdep.size_size_t = 4; i386_linux_record_tdep.size_iovec = 8; /* These values are the second argument of system call "sys_ioctl". They are obtained from Linux Kernel source. */ i386_linux_record_tdep.ioctl_TCGETS = 0x5401; i386_linux_record_tdep.ioctl_TCSETS = 0x5402; i386_linux_record_tdep.ioctl_TCSETSW = 0x5403; i386_linux_record_tdep.ioctl_TCSETSF = 0x5404; i386_linux_record_tdep.ioctl_TCGETA = 0x5405; i386_linux_record_tdep.ioctl_TCSETA = 0x5406; i386_linux_record_tdep.ioctl_TCSETAW = 0x5407; i386_linux_record_tdep.ioctl_TCSETAF = 0x5408; i386_linux_record_tdep.ioctl_TCSBRK = 0x5409; i386_linux_record_tdep.ioctl_TCXONC = 0x540A; i386_linux_record_tdep.ioctl_TCFLSH = 0x540B; i386_linux_record_tdep.ioctl_TIOCEXCL = 0x540C; i386_linux_record_tdep.ioctl_TIOCNXCL = 0x540D; i386_linux_record_tdep.ioctl_TIOCSCTTY = 0x540E; i386_linux_record_tdep.ioctl_TIOCGPGRP = 0x540F; i386_linux_record_tdep.ioctl_TIOCSPGRP = 0x5410; i386_linux_record_tdep.ioctl_TIOCOUTQ = 0x5411; i386_linux_record_tdep.ioctl_TIOCSTI = 0x5412; i386_linux_record_tdep.ioctl_TIOCGWINSZ = 0x5413; i386_linux_record_tdep.ioctl_TIOCSWINSZ = 0x5414; i386_linux_record_tdep.ioctl_TIOCMGET = 0x5415; i386_linux_record_tdep.ioctl_TIOCMBIS = 0x5416; i386_linux_record_tdep.ioctl_TIOCMBIC = 0x5417; i386_linux_record_tdep.ioctl_TIOCMSET = 0x5418; i386_linux_record_tdep.ioctl_TIOCGSOFTCAR = 0x5419; i386_linux_record_tdep.ioctl_TIOCSSOFTCAR = 0x541A; i386_linux_record_tdep.ioctl_FIONREAD = 0x541B; i386_linux_record_tdep.ioctl_TIOCINQ = i386_linux_record_tdep.ioctl_FIONREAD; i386_linux_record_tdep.ioctl_TIOCLINUX = 0x541C; i386_linux_record_tdep.ioctl_TIOCCONS = 0x541D; i386_linux_record_tdep.ioctl_TIOCGSERIAL = 0x541E; i386_linux_record_tdep.ioctl_TIOCSSERIAL = 0x541F; i386_linux_record_tdep.ioctl_TIOCPKT = 0x5420; i386_linux_record_tdep.ioctl_FIONBIO = 0x5421; i386_linux_record_tdep.ioctl_TIOCNOTTY = 0x5422; i386_linux_record_tdep.ioctl_TIOCSETD = 0x5423; i386_linux_record_tdep.ioctl_TIOCGETD = 0x5424; i386_linux_record_tdep.ioctl_TCSBRKP = 0x5425; i386_linux_record_tdep.ioctl_TIOCTTYGSTRUCT = 0x5426; i386_linux_record_tdep.ioctl_TIOCSBRK = 0x5427; i386_linux_record_tdep.ioctl_TIOCCBRK = 0x5428; i386_linux_record_tdep.ioctl_TIOCGSID = 0x5429; i386_linux_record_tdep.ioctl_TCGETS2 = 0x802c542a; i386_linux_record_tdep.ioctl_TCSETS2 = 0x402c542b; i386_linux_record_tdep.ioctl_TCSETSW2 = 0x402c542c; i386_linux_record_tdep.ioctl_TCSETSF2 = 0x402c542d; i386_linux_record_tdep.ioctl_TIOCGPTN = 0x80045430; i386_linux_record_tdep.ioctl_TIOCSPTLCK = 0x40045431; i386_linux_record_tdep.ioctl_FIONCLEX = 0x5450; i386_linux_record_tdep.ioctl_FIOCLEX = 0x5451; i386_linux_record_tdep.ioctl_FIOASYNC = 0x5452; i386_linux_record_tdep.ioctl_TIOCSERCONFIG = 0x5453; i386_linux_record_tdep.ioctl_TIOCSERGWILD = 0x5454; i386_linux_record_tdep.ioctl_TIOCSERSWILD = 0x5455; i386_linux_record_tdep.ioctl_TIOCGLCKTRMIOS = 0x5456; i386_linux_record_tdep.ioctl_TIOCSLCKTRMIOS = 0x5457; i386_linux_record_tdep.ioctl_TIOCSERGSTRUCT = 0x5458; i386_linux_record_tdep.ioctl_TIOCSERGETLSR = 0x5459; i386_linux_record_tdep.ioctl_TIOCSERGETMULTI = 0x545A; i386_linux_record_tdep.ioctl_TIOCSERSETMULTI = 0x545B; i386_linux_record_tdep.ioctl_TIOCMIWAIT = 0x545C; i386_linux_record_tdep.ioctl_TIOCGICOUNT = 0x545D; i386_linux_record_tdep.ioctl_TIOCGHAYESESP = 0x545E; i386_linux_record_tdep.ioctl_TIOCSHAYESESP = 0x545F; i386_linux_record_tdep.ioctl_FIOQSIZE = 0x5460; /* These values are the second argument of system call "sys_fcntl" and "sys_fcntl64". They are obtained from Linux Kernel source. */ i386_linux_record_tdep.fcntl_F_GETLK = 5; i386_linux_record_tdep.fcntl_F_GETLK64 = 12; i386_linux_record_tdep.fcntl_F_SETLK64 = 13; i386_linux_record_tdep.fcntl_F_SETLKW64 = 14; i386_linux_record_tdep.arg1 = I386_EBX_REGNUM; i386_linux_record_tdep.arg2 = I386_ECX_REGNUM; i386_linux_record_tdep.arg3 = I386_EDX_REGNUM; i386_linux_record_tdep.arg4 = I386_ESI_REGNUM; i386_linux_record_tdep.arg5 = I386_EDI_REGNUM; i386_linux_record_tdep.arg6 = I386_EBP_REGNUM; tdep->i386_intx80_record = i386_linux_intx80_sysenter_syscall_record; tdep->i386_sysenter_record = i386_linux_intx80_sysenter_syscall_record; tdep->i386_syscall_record = i386_linux_intx80_sysenter_syscall_record; /* N_FUN symbols in shared libaries have 0 for their values and need to be relocated. */ set_gdbarch_sofun_address_maybe_missing (gdbarch, 1); /* GNU/Linux uses SVR4-style shared libraries. */ set_gdbarch_skip_trampoline_code (gdbarch, find_solib_trampoline_target); set_solib_svr4_fetch_link_map_offsets (gdbarch, svr4_ilp32_fetch_link_map_offsets); /* GNU/Linux uses the dynamic linker included in the GNU C Library. */ set_gdbarch_skip_solib_resolver (gdbarch, glibc_skip_solib_resolver); dwarf2_frame_set_signal_frame_p (gdbarch, i386_linux_dwarf_signal_frame_p); /* Enable TLS support. */ set_gdbarch_fetch_tls_load_module_address (gdbarch, svr4_fetch_objfile_link_map); /* Install supported register note sections. */ if (tdesc_find_feature (tdesc, "org.gnu.gdb.i386.avx")) set_gdbarch_core_regset_sections (gdbarch, i386_linux_avx_regset_sections); else if (tdesc_find_feature (tdesc, "org.gnu.gdb.i386.sse")) set_gdbarch_core_regset_sections (gdbarch, i386_linux_sse_regset_sections); else set_gdbarch_core_regset_sections (gdbarch, i386_linux_regset_sections); set_gdbarch_core_read_description (gdbarch, i386_linux_core_read_description); /* Displaced stepping. */ set_gdbarch_displaced_step_copy_insn (gdbarch, i386_linux_displaced_step_copy_insn); set_gdbarch_displaced_step_fixup (gdbarch, i386_displaced_step_fixup); set_gdbarch_displaced_step_free_closure (gdbarch, simple_displaced_step_free_closure); set_gdbarch_displaced_step_location (gdbarch, displaced_step_at_entry_point); /* Functions for 'catch syscall'. */ set_xml_syscall_file_name (XML_SYSCALL_FILENAME_I386); set_gdbarch_get_syscall_number (gdbarch, i386_linux_get_syscall_number); set_gdbarch_get_siginfo_type (gdbarch, linux_get_siginfo_type); }
static void aarch64_linux_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch) { static const char *const stap_integer_prefixes[] = { "#", "", NULL }; static const char *const stap_register_prefixes[] = { "", NULL }; static const char *const stap_register_indirection_prefixes[] = { "[", NULL }; static const char *const stap_register_indirection_suffixes[] = { "]", NULL }; struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch); tdep->lowest_pc = 0x8000; linux_init_abi (info, gdbarch); set_solib_svr4_fetch_link_map_offsets (gdbarch, svr4_lp64_fetch_link_map_offsets); /* Enable TLS support. */ set_gdbarch_fetch_tls_load_module_address (gdbarch, svr4_fetch_objfile_link_map); /* Shared library handling. */ set_gdbarch_skip_trampoline_code (gdbarch, find_solib_trampoline_target); set_gdbarch_skip_solib_resolver (gdbarch, glibc_skip_solib_resolver); tramp_frame_prepend_unwinder (gdbarch, &aarch64_linux_rt_sigframe); /* Enable longjmp. */ tdep->jb_pc = 11; set_gdbarch_iterate_over_regset_sections (gdbarch, aarch64_linux_iterate_over_regset_sections); /* SystemTap related. */ set_gdbarch_stap_integer_prefixes (gdbarch, stap_integer_prefixes); set_gdbarch_stap_register_prefixes (gdbarch, stap_register_prefixes); set_gdbarch_stap_register_indirection_prefixes (gdbarch, stap_register_indirection_prefixes); set_gdbarch_stap_register_indirection_suffixes (gdbarch, stap_register_indirection_suffixes); set_gdbarch_stap_is_single_operand (gdbarch, aarch64_stap_is_single_operand); set_gdbarch_stap_parse_special_token (gdbarch, aarch64_stap_parse_special_token); /* Reversible debugging, process record. */ set_gdbarch_process_record (gdbarch, aarch64_process_record); /* Syscall record. */ tdep->aarch64_syscall_record = aarch64_linux_syscall_record; /* Initialize the aarch64_linux_record_tdep. */ /* These values are the size of the type that will be used in a system call. They are obtained from Linux Kernel source. */ aarch64_linux_record_tdep.size_pointer = gdbarch_ptr_bit (gdbarch) / TARGET_CHAR_BIT; aarch64_linux_record_tdep.size__old_kernel_stat = 32; aarch64_linux_record_tdep.size_tms = 32; aarch64_linux_record_tdep.size_loff_t = 8; aarch64_linux_record_tdep.size_flock = 32; aarch64_linux_record_tdep.size_oldold_utsname = 45; aarch64_linux_record_tdep.size_ustat = 32; aarch64_linux_record_tdep.size_old_sigaction = 152; aarch64_linux_record_tdep.size_old_sigset_t = 128; aarch64_linux_record_tdep.size_rlimit = 16; aarch64_linux_record_tdep.size_rusage = 144; aarch64_linux_record_tdep.size_timeval = 16; aarch64_linux_record_tdep.size_timezone = 8; aarch64_linux_record_tdep.size_old_gid_t = 2; aarch64_linux_record_tdep.size_old_uid_t = 2; aarch64_linux_record_tdep.size_fd_set = 128; aarch64_linux_record_tdep.size_dirent = 280; aarch64_linux_record_tdep.size_dirent64 = 280; aarch64_linux_record_tdep.size_statfs = 120; aarch64_linux_record_tdep.size_statfs64 = 120; aarch64_linux_record_tdep.size_sockaddr = 16; aarch64_linux_record_tdep.size_int = gdbarch_int_bit (gdbarch) / TARGET_CHAR_BIT; aarch64_linux_record_tdep.size_long = gdbarch_long_bit (gdbarch) / TARGET_CHAR_BIT; aarch64_linux_record_tdep.size_ulong = gdbarch_long_bit (gdbarch) / TARGET_CHAR_BIT; aarch64_linux_record_tdep.size_msghdr = 56; aarch64_linux_record_tdep.size_itimerval = 32; aarch64_linux_record_tdep.size_stat = 144; aarch64_linux_record_tdep.size_old_utsname = 325; aarch64_linux_record_tdep.size_sysinfo = 112; aarch64_linux_record_tdep.size_msqid_ds = 120; aarch64_linux_record_tdep.size_shmid_ds = 112; aarch64_linux_record_tdep.size_new_utsname = 390; aarch64_linux_record_tdep.size_timex = 208; aarch64_linux_record_tdep.size_mem_dqinfo = 24; aarch64_linux_record_tdep.size_if_dqblk = 72; aarch64_linux_record_tdep.size_fs_quota_stat = 80; aarch64_linux_record_tdep.size_timespec = 16; aarch64_linux_record_tdep.size_pollfd = 8; aarch64_linux_record_tdep.size_NFS_FHSIZE = 32; aarch64_linux_record_tdep.size_knfsd_fh = 132; aarch64_linux_record_tdep.size_TASK_COMM_LEN = 16; aarch64_linux_record_tdep.size_sigaction = 152; aarch64_linux_record_tdep.size_sigset_t = 128; aarch64_linux_record_tdep.size_siginfo_t = 128; aarch64_linux_record_tdep.size_cap_user_data_t = 8; aarch64_linux_record_tdep.size_stack_t = 24; aarch64_linux_record_tdep.size_off_t = 8; aarch64_linux_record_tdep.size_stat64 = 144; aarch64_linux_record_tdep.size_gid_t = 4; aarch64_linux_record_tdep.size_uid_t = 4; aarch64_linux_record_tdep.size_PAGE_SIZE = 4096; aarch64_linux_record_tdep.size_flock64 = 32; aarch64_linux_record_tdep.size_user_desc = 16; aarch64_linux_record_tdep.size_io_event = 32; aarch64_linux_record_tdep.size_iocb = 64; aarch64_linux_record_tdep.size_epoll_event = 12; aarch64_linux_record_tdep.size_itimerspec = 32; aarch64_linux_record_tdep.size_mq_attr = 64; aarch64_linux_record_tdep.size_siginfo = 128; aarch64_linux_record_tdep.size_termios = 60; aarch64_linux_record_tdep.size_termios2 = 44; aarch64_linux_record_tdep.size_pid_t = 4; aarch64_linux_record_tdep.size_winsize = 8; aarch64_linux_record_tdep.size_serial_struct = 72; aarch64_linux_record_tdep.size_serial_icounter_struct = 80; aarch64_linux_record_tdep.size_hayes_esp_config = 12; aarch64_linux_record_tdep.size_size_t = 8; aarch64_linux_record_tdep.size_iovec = 16; /* These values are the second argument of system call "sys_ioctl". They are obtained from Linux Kernel source. */ aarch64_linux_record_tdep.ioctl_TCGETS = 0x5401; aarch64_linux_record_tdep.ioctl_TCSETS = 0x5402; aarch64_linux_record_tdep.ioctl_TCSETSW = 0x5403; aarch64_linux_record_tdep.ioctl_TCSETSF = 0x5404; aarch64_linux_record_tdep.ioctl_TCGETA = 0x5405; aarch64_linux_record_tdep.ioctl_TCSETA = 0x5406; aarch64_linux_record_tdep.ioctl_TCSETAW = 0x5407; aarch64_linux_record_tdep.ioctl_TCSETAF = 0x5408; aarch64_linux_record_tdep.ioctl_TCSBRK = 0x5409; aarch64_linux_record_tdep.ioctl_TCXONC = 0x540a; aarch64_linux_record_tdep.ioctl_TCFLSH = 0x540b; aarch64_linux_record_tdep.ioctl_TIOCEXCL = 0x540c; aarch64_linux_record_tdep.ioctl_TIOCNXCL = 0x540d; aarch64_linux_record_tdep.ioctl_TIOCSCTTY = 0x540e; aarch64_linux_record_tdep.ioctl_TIOCGPGRP = 0x540f; aarch64_linux_record_tdep.ioctl_TIOCSPGRP = 0x5410; aarch64_linux_record_tdep.ioctl_TIOCOUTQ = 0x5411; aarch64_linux_record_tdep.ioctl_TIOCSTI = 0x5412; aarch64_linux_record_tdep.ioctl_TIOCGWINSZ = 0x5413; aarch64_linux_record_tdep.ioctl_TIOCSWINSZ = 0x5414; aarch64_linux_record_tdep.ioctl_TIOCMGET = 0x5415; aarch64_linux_record_tdep.ioctl_TIOCMBIS = 0x5416; aarch64_linux_record_tdep.ioctl_TIOCMBIC = 0x5417; aarch64_linux_record_tdep.ioctl_TIOCMSET = 0x5418; aarch64_linux_record_tdep.ioctl_TIOCGSOFTCAR = 0x5419; aarch64_linux_record_tdep.ioctl_TIOCSSOFTCAR = 0x541a; aarch64_linux_record_tdep.ioctl_FIONREAD = 0x541b; aarch64_linux_record_tdep.ioctl_TIOCINQ = 0x541b; aarch64_linux_record_tdep.ioctl_TIOCLINUX = 0x541c; aarch64_linux_record_tdep.ioctl_TIOCCONS = 0x541d; aarch64_linux_record_tdep.ioctl_TIOCGSERIAL = 0x541e; aarch64_linux_record_tdep.ioctl_TIOCSSERIAL = 0x541f; aarch64_linux_record_tdep.ioctl_TIOCPKT = 0x5420; aarch64_linux_record_tdep.ioctl_FIONBIO = 0x5421; aarch64_linux_record_tdep.ioctl_TIOCNOTTY = 0x5422; aarch64_linux_record_tdep.ioctl_TIOCSETD = 0x5423; aarch64_linux_record_tdep.ioctl_TIOCGETD = 0x5424; aarch64_linux_record_tdep.ioctl_TCSBRKP = 0x5425; aarch64_linux_record_tdep.ioctl_TIOCTTYGSTRUCT = 0x5426; aarch64_linux_record_tdep.ioctl_TIOCSBRK = 0x5427; aarch64_linux_record_tdep.ioctl_TIOCCBRK = 0x5428; aarch64_linux_record_tdep.ioctl_TIOCGSID = 0x5429; aarch64_linux_record_tdep.ioctl_TCGETS2 = 0x802c542a; aarch64_linux_record_tdep.ioctl_TCSETS2 = 0x402c542b; aarch64_linux_record_tdep.ioctl_TCSETSW2 = 0x402c542c; aarch64_linux_record_tdep.ioctl_TCSETSF2 = 0x402c542d; aarch64_linux_record_tdep.ioctl_TIOCGPTN = 0x80045430; aarch64_linux_record_tdep.ioctl_TIOCSPTLCK = 0x40045431; aarch64_linux_record_tdep.ioctl_FIONCLEX = 0x5450; aarch64_linux_record_tdep.ioctl_FIOCLEX = 0x5451; aarch64_linux_record_tdep.ioctl_FIOASYNC = 0x5452; aarch64_linux_record_tdep.ioctl_TIOCSERCONFIG = 0x5453; aarch64_linux_record_tdep.ioctl_TIOCSERGWILD = 0x5454; aarch64_linux_record_tdep.ioctl_TIOCSERSWILD = 0x5455; aarch64_linux_record_tdep.ioctl_TIOCGLCKTRMIOS = 0x5456; aarch64_linux_record_tdep.ioctl_TIOCSLCKTRMIOS = 0x5457; aarch64_linux_record_tdep.ioctl_TIOCSERGSTRUCT = 0x5458; aarch64_linux_record_tdep.ioctl_TIOCSERGETLSR = 0x5459; aarch64_linux_record_tdep.ioctl_TIOCSERGETMULTI = 0x545a; aarch64_linux_record_tdep.ioctl_TIOCSERSETMULTI = 0x545b; aarch64_linux_record_tdep.ioctl_TIOCMIWAIT = 0x545c; aarch64_linux_record_tdep.ioctl_TIOCGICOUNT = 0x545d; aarch64_linux_record_tdep.ioctl_TIOCGHAYESESP = 0x545e; aarch64_linux_record_tdep.ioctl_TIOCSHAYESESP = 0x545f; aarch64_linux_record_tdep.ioctl_FIOQSIZE = 0x5460; /* These values are the second argument of system call "sys_fcntl" and "sys_fcntl64". They are obtained from Linux Kernel source. */ aarch64_linux_record_tdep.fcntl_F_GETLK = 5; aarch64_linux_record_tdep.fcntl_F_GETLK64 = 12; aarch64_linux_record_tdep.fcntl_F_SETLK64 = 13; aarch64_linux_record_tdep.fcntl_F_SETLKW64 = 14; /* The AArch64 syscall calling convention: reg x0-x6 for arguments, reg x8 for syscall number and return value in reg x0. */ aarch64_linux_record_tdep.arg1 = AARCH64_X0_REGNUM + 0; aarch64_linux_record_tdep.arg2 = AARCH64_X0_REGNUM + 1; aarch64_linux_record_tdep.arg3 = AARCH64_X0_REGNUM + 2; aarch64_linux_record_tdep.arg4 = AARCH64_X0_REGNUM + 3; aarch64_linux_record_tdep.arg5 = AARCH64_X0_REGNUM + 4; aarch64_linux_record_tdep.arg6 = AARCH64_X0_REGNUM + 5; aarch64_linux_record_tdep.arg7 = AARCH64_X0_REGNUM + 6; /* `catch syscall' */ set_xml_syscall_file_name (gdbarch, "syscalls/aarch64-linux.xml"); set_gdbarch_get_syscall_number (gdbarch, aarch64_linux_get_syscall_number); /* Displaced stepping. */ set_gdbarch_max_insn_length (gdbarch, 4 * DISPLACED_MODIFIED_INSNS); set_gdbarch_displaced_step_copy_insn (gdbarch, aarch64_displaced_step_copy_insn); set_gdbarch_displaced_step_fixup (gdbarch, aarch64_displaced_step_fixup); set_gdbarch_displaced_step_free_closure (gdbarch, simple_displaced_step_free_closure); set_gdbarch_displaced_step_location (gdbarch, linux_displaced_step_location); set_gdbarch_displaced_step_hw_singlestep (gdbarch, aarch64_displaced_step_hw_singlestep); }
static void * build_fortran_types (struct gdbarch *gdbarch) { struct builtin_f_type *builtin_f_type = GDBARCH_OBSTACK_ZALLOC (gdbarch, struct builtin_f_type); builtin_f_type->builtin_void = init_type (TYPE_CODE_VOID, 1, 0, "VOID", (struct objfile *) NULL); builtin_f_type->builtin_character = init_type (TYPE_CODE_INT, TARGET_CHAR_BIT / TARGET_CHAR_BIT, 0, "character", (struct objfile *) NULL); builtin_f_type->builtin_logical_s1 = init_type (TYPE_CODE_BOOL, TARGET_CHAR_BIT / TARGET_CHAR_BIT, TYPE_FLAG_UNSIGNED, "logical*1", (struct objfile *) NULL); builtin_f_type->builtin_integer_s2 = init_type (TYPE_CODE_INT, gdbarch_short_bit (gdbarch) / TARGET_CHAR_BIT, 0, "integer*2", (struct objfile *) NULL); builtin_f_type->builtin_logical_s2 = init_type (TYPE_CODE_BOOL, gdbarch_short_bit (gdbarch) / TARGET_CHAR_BIT, TYPE_FLAG_UNSIGNED, "logical*2", (struct objfile *) NULL); builtin_f_type->builtin_integer = init_type (TYPE_CODE_INT, gdbarch_int_bit (gdbarch) / TARGET_CHAR_BIT, 0, "integer", (struct objfile *) NULL); builtin_f_type->builtin_logical = init_type (TYPE_CODE_BOOL, gdbarch_int_bit (gdbarch) / TARGET_CHAR_BIT, TYPE_FLAG_UNSIGNED, "logical*4", (struct objfile *) NULL); builtin_f_type->builtin_real = init_type (TYPE_CODE_FLT, gdbarch_float_bit (gdbarch) / TARGET_CHAR_BIT, 0, "real", (struct objfile *) NULL); builtin_f_type->builtin_real_s8 = init_type (TYPE_CODE_FLT, gdbarch_double_bit (gdbarch) / TARGET_CHAR_BIT, 0, "real*8", (struct objfile *) NULL); builtin_f_type->builtin_real_s16 = init_type (TYPE_CODE_FLT, gdbarch_long_double_bit (gdbarch) / TARGET_CHAR_BIT, 0, "real*16", (struct objfile *) NULL); builtin_f_type->builtin_complex_s8 = init_type (TYPE_CODE_COMPLEX, 2 * gdbarch_float_bit (gdbarch) / TARGET_CHAR_BIT, 0, "complex*8", (struct objfile *) NULL); TYPE_TARGET_TYPE (builtin_f_type->builtin_complex_s8) = builtin_f_type->builtin_real; builtin_f_type->builtin_complex_s16 = init_type (TYPE_CODE_COMPLEX, 2 * gdbarch_double_bit (gdbarch) / TARGET_CHAR_BIT, 0, "complex*16", (struct objfile *) NULL); TYPE_TARGET_TYPE (builtin_f_type->builtin_complex_s16) = builtin_f_type->builtin_real_s8; /* We have a new size == 4 double floats for the complex*32 data type */ builtin_f_type->builtin_complex_s32 = init_type (TYPE_CODE_COMPLEX, 2 * gdbarch_long_double_bit (gdbarch) / TARGET_CHAR_BIT, 0, "complex*32", (struct objfile *) NULL); TYPE_TARGET_TYPE (builtin_f_type->builtin_complex_s32) = builtin_f_type->builtin_real_s16; return builtin_f_type; }
struct type * linux_get_siginfo_type (struct gdbarch *gdbarch) { struct type *int_type, *uint_type, *long_type, *void_ptr_type; struct type *uid_type, *pid_type; struct type *sigval_type, *clock_type; struct type *siginfo_type, *sifields_type; struct type *type; /* TODO: muck around in gdbtypes.[ch] until this all works: */ int_type = arch_integer_type(gdbarch, gdbarch_int_bit(gdbarch), 0, "int"); uint_type = arch_integer_type(gdbarch, gdbarch_int_bit(gdbarch), 1, "unsigned int"); long_type = arch_integer_type(gdbarch, gdbarch_long_bit(gdbarch), 0, "long"); void_ptr_type = lookup_pointer_type(get_builtin_type(gdbarch)->builtin_void); /* sigval_t */ sigval_type = arch_composite_type(gdbarch, NULL, TYPE_CODE_UNION); TYPE_NAME(sigval_type) = xstrdup("sigval_t"); append_composite_type_field(sigval_type, "sival_int", int_type); append_composite_type_field(sigval_type, "sival_ptr", void_ptr_type); /* __pid_t */ pid_type = arch_type(gdbarch, TYPE_CODE_TYPEDEF, TYPE_LENGTH(int_type), xstrdup("__pid_t")); TYPE_TARGET_TYPE(pid_type) = int_type; TYPE_TARGET_STUB(pid_type) = (struct type *)1; /* __uid_t */ uid_type = arch_type(gdbarch, TYPE_CODE_TYPEDEF, TYPE_LENGTH(uint_type), xstrdup("__uid_t")); TYPE_TARGET_TYPE(uid_type) = uint_type; TYPE_TARGET_STUB(uid_type) = (struct type *)1; /* __clock_t */ clock_type = arch_type(gdbarch, TYPE_CODE_TYPEDEF, TYPE_LENGTH(long_type), xstrdup("__clock_t")); TYPE_TARGET_TYPE(clock_type) = long_type; TYPE_TARGET_STUB(clock_type) = (struct type *)1; /* _sifields */ sifields_type = arch_composite_type(gdbarch, NULL, TYPE_CODE_UNION); { const int si_max_size = 128; int si_pad_size; int size_of_int = (gdbarch_int_bit(gdbarch) / HOST_CHAR_BIT); /* _pad */ if (gdbarch_ptr_bit(gdbarch) == 64) si_pad_size = ((si_max_size / size_of_int) - 4); else si_pad_size = ((si_max_size / size_of_int) - 3); append_composite_type_field(sifields_type, "_pad", init_vector_type(int_type, si_pad_size)); } /* _kill */ type = arch_composite_type (gdbarch, NULL, TYPE_CODE_STRUCT); append_composite_type_field (type, "si_pid", pid_type); append_composite_type_field (type, "si_uid", uid_type); append_composite_type_field (sifields_type, "_kill", type); /* _timer */ type = arch_composite_type (gdbarch, NULL, TYPE_CODE_STRUCT); append_composite_type_field (type, "si_tid", int_type); append_composite_type_field (type, "si_overrun", int_type); append_composite_type_field (type, "si_sigval", sigval_type); append_composite_type_field (sifields_type, "_timer", type); /* _rt */ type = arch_composite_type (gdbarch, NULL, TYPE_CODE_STRUCT); append_composite_type_field (type, "si_pid", pid_type); append_composite_type_field (type, "si_uid", uid_type); append_composite_type_field (type, "si_sigval", sigval_type); append_composite_type_field (sifields_type, "_rt", type); /* _sigchld */ type = arch_composite_type (gdbarch, NULL, TYPE_CODE_STRUCT); append_composite_type_field (type, "si_pid", pid_type); append_composite_type_field (type, "si_uid", uid_type); append_composite_type_field (type, "si_status", int_type); append_composite_type_field (type, "si_utime", clock_type); append_composite_type_field (type, "si_stime", clock_type); append_composite_type_field (sifields_type, "_sigchld", type); /* _sigfault */ type = arch_composite_type (gdbarch, NULL, TYPE_CODE_STRUCT); append_composite_type_field (type, "si_addr", void_ptr_type); append_composite_type_field (sifields_type, "_sigfault", type); /* _sigpoll */ type = arch_composite_type (gdbarch, NULL, TYPE_CODE_STRUCT); append_composite_type_field (type, "si_band", long_type); append_composite_type_field (type, "si_fd", int_type); append_composite_type_field (sifields_type, "_sigpoll", type); /* struct siginfo */ siginfo_type = arch_composite_type (gdbarch, NULL, TYPE_CODE_STRUCT); TYPE_NAME (siginfo_type) = xstrdup ("siginfo"); append_composite_type_field (siginfo_type, "si_signo", int_type); append_composite_type_field (siginfo_type, "si_errno", int_type); append_composite_type_field (siginfo_type, "si_code", int_type); append_composite_type_field_aligned (siginfo_type, "_sifields", sifields_type, TYPE_LENGTH (long_type)); return siginfo_type; }