s390: Split up s390-linux-tdep.c into two files
Currently all target dependent code for s390 is in one file, s390-linux-tdep.c. This includes code general for the architecture as well as code specific for uses in GNU/Linux (user space). Up until now this was OK as GNU/Linux was the only supported OS. In preparation to support the new Linux kernel 'OS' split up the existing s390 code into a general s390-tdep and a GNU/Linux-specific s390-linux-tdep. Note: The record-replay feature will be moved in a separate patch. This is simply due to the fact that the combined patch would be too large for the mailing list. This requires setting the process_record hook during OSABI init to keep the code bisectable. The patch moving record-replay cleans up this hack. gdb/ChangeLog: * s390-linux-nat.c (s390-tdep.h): New include. * Makefile.in (ALL_TARGET_OBS): Add s390-tdep.o. (HFILES_NO_SRCDIR): Add s390-tdep.h. (ALLDEPFILES): Add s390-tdep.c. * configure.tgt (s390*-*-linux*): Add s390-tdep.o. * s390-linux-tdep.h (HWCAP_S390_*, S390_*_REGNUM): Move to... * s390-tdep.h: ...this. New file. * s390-linux-tdep.c (s390-tdep.h): New include. (_initialize_s390_tdep): Rename to... (_initialize_s390_linux_tdep): ...this and adjust. (s390_abi_kind, s390_vector_abi_kind, gdbarch_tdep) (enum named opcodes, S390_NUM_GPRS, S390_NUM_FPRS): Move to s390-tdep.h. (s390_break_insn, s390_breakpoint, s390_readinstruction, is_ri) (is_ril, is_rr, is_rre, is_rs, is_rsy, is_rx, is_rxy) (s390_is_partial_instruction, s390_software_single_step) (is_non_branch_ril, s390_displaced_step_copy_insn) (s390_displaced_step_fixup, s390_displaced_step_hw_singlestep) (s390_prologue_data, s390_addr, s390_store, s390_load) (s390_check_for_saved, s390_analyze_prologue, s390_skip_prologue) (s390_register_call_saved, s390_guess_tracepoint_registers) (s390_register_name, s390_dwarf_regmap, s390_dwarf_reg_to_regnum) (regnum_is_gpr_full, regnum_is_vxr_full, s390_value_from_register) (s390_pseudo_register_name, s390_pseudo_register_type) (s390_pseudo_register_read, s390_pseudo_register_write) (s390_pseudo_register_reggroup_p, s390_ax_pseudo_register_collect) (s390_ax_pseudo_register_push_stack, s390_gen_return_address) (s390_addr_bits_remove, s390_address_class_type_flags) (s390_address_class_type_flags_to_name) (s390_address_class_name_to_type_flags, s390_effective_inner_type) (s390_function_arg_float, s390_function_arg_vector) (is_power_of_two, s390_function_arg_integer, s390_arg_state) (s390_handle_arg, s390_push_dummy_call, s390_dummy_id) (s390_frame_align, s390_register_return_value, s390_return_value) (s390_stack_frame_destroyed_p, s390_unwind_pc, s390_unwind_sp) (s390_unwind_pseudo_register, s390_adjust_frame_regnum) (s390_dwarf2_prev_register, s390_dwarf2_frame_init_reg) (s390_trad_frame_prev_register, s390_unwind_cache) (s390_prologue_frame_unwind_cache) (s390_backchain_frame_unwind_cache, s390_frame_unwind_cache) (s390_frame_this_id, s390_frame_prev_register, s390_frame_unwind) (s390_stub_unwind_cache, s390_stub_frame_unwind_cache) (s390_stub_frame_this_id, s390_stub_frame_prev_register) (s390_stub_frame_sniffer, s390_stub_frame_unwind) (s390_frame_base_address, s390_local_base_address) (s390_frame_base, s390_gcc_target_options) (s390_gnu_triplet_regexp, s390_stap_is_single_operand) (s390_validate_reg_range, s390_tdesc_valid) (s390_gdbarch_tdep_alloc, s390_gdbarch_init): Move to... * s390-tdep.c: ...this. New file.
This commit is contained in:
parent
9c0b896ee1
commit
d6e5894564
8 changed files with 3548 additions and 3322 deletions
|
@ -1,3 +1,56 @@
|
|||
2018-01-23 Philipp Rudo <prudo@linux.vnet.ibm.com>
|
||||
|
||||
* s390-linux-nat.c (s390-tdep.h): New include.
|
||||
* Makefile.in (ALL_TARGET_OBS): Add s390-tdep.o.
|
||||
(HFILES_NO_SRCDIR): Add s390-tdep.h.
|
||||
(ALLDEPFILES): Add s390-tdep.c.
|
||||
* configure.tgt (s390*-*-linux*): Add s390-tdep.o.
|
||||
* s390-linux-tdep.h (HWCAP_S390_*, S390_*_REGNUM): Move to...
|
||||
* s390-tdep.h: ...this. New file.
|
||||
* s390-linux-tdep.c (s390-tdep.h): New include.
|
||||
(_initialize_s390_tdep): Rename to...
|
||||
(_initialize_s390_linux_tdep): ...this and adjust.
|
||||
(s390_abi_kind, s390_vector_abi_kind, gdbarch_tdep)
|
||||
(enum named opcodes, S390_NUM_GPRS, S390_NUM_FPRS): Move to
|
||||
s390-tdep.h.
|
||||
(s390_break_insn, s390_breakpoint, s390_readinstruction, is_ri)
|
||||
(is_ril, is_rr, is_rre, is_rs, is_rsy, is_rx, is_rxy)
|
||||
(s390_is_partial_instruction, s390_software_single_step)
|
||||
(is_non_branch_ril, s390_displaced_step_copy_insn)
|
||||
(s390_displaced_step_fixup, s390_displaced_step_hw_singlestep)
|
||||
(s390_prologue_data, s390_addr, s390_store, s390_load)
|
||||
(s390_check_for_saved, s390_analyze_prologue, s390_skip_prologue)
|
||||
(s390_register_call_saved, s390_guess_tracepoint_registers)
|
||||
(s390_register_name, s390_dwarf_regmap, s390_dwarf_reg_to_regnum)
|
||||
(regnum_is_gpr_full, regnum_is_vxr_full, s390_value_from_register)
|
||||
(s390_pseudo_register_name, s390_pseudo_register_type)
|
||||
(s390_pseudo_register_read, s390_pseudo_register_write)
|
||||
(s390_pseudo_register_reggroup_p, s390_ax_pseudo_register_collect)
|
||||
(s390_ax_pseudo_register_push_stack, s390_gen_return_address)
|
||||
(s390_addr_bits_remove, s390_address_class_type_flags)
|
||||
(s390_address_class_type_flags_to_name)
|
||||
(s390_address_class_name_to_type_flags, s390_effective_inner_type)
|
||||
(s390_function_arg_float, s390_function_arg_vector)
|
||||
(is_power_of_two, s390_function_arg_integer, s390_arg_state)
|
||||
(s390_handle_arg, s390_push_dummy_call, s390_dummy_id)
|
||||
(s390_frame_align, s390_register_return_value, s390_return_value)
|
||||
(s390_stack_frame_destroyed_p, s390_unwind_pc, s390_unwind_sp)
|
||||
(s390_unwind_pseudo_register, s390_adjust_frame_regnum)
|
||||
(s390_dwarf2_prev_register, s390_dwarf2_frame_init_reg)
|
||||
(s390_trad_frame_prev_register, s390_unwind_cache)
|
||||
(s390_prologue_frame_unwind_cache)
|
||||
(s390_backchain_frame_unwind_cache, s390_frame_unwind_cache)
|
||||
(s390_frame_this_id, s390_frame_prev_register, s390_frame_unwind)
|
||||
(s390_stub_unwind_cache, s390_stub_frame_unwind_cache)
|
||||
(s390_stub_frame_this_id, s390_stub_frame_prev_register)
|
||||
(s390_stub_frame_sniffer, s390_stub_frame_unwind)
|
||||
(s390_frame_base_address, s390_local_base_address)
|
||||
(s390_frame_base, s390_gcc_target_options)
|
||||
(s390_gnu_triplet_regexp, s390_stap_is_single_operand)
|
||||
(s390_validate_reg_range, s390_tdesc_valid)
|
||||
(s390_gdbarch_tdep_alloc, s390_gdbarch_init): Move to...
|
||||
* s390-tdep.c: ...this. New file.
|
||||
|
||||
2018-01-23 Philipp Rudo <prudo@linux.vnet.ibm.com>
|
||||
|
||||
* s390-linux-tdep.c (gdbarch_tdep.s390_syscall_record): New hook.
|
||||
|
|
|
@ -753,6 +753,7 @@ ALL_TARGET_OBS = \
|
|||
rs6000-tdep.o \
|
||||
rx-tdep.o \
|
||||
s390-linux-tdep.o \
|
||||
s390-tdep.o \
|
||||
score-tdep.o \
|
||||
sh-linux-tdep.o \
|
||||
sh-nbsd-tdep.o \
|
||||
|
@ -1328,6 +1329,7 @@ HFILES_NO_SRCDIR = \
|
|||
rs6000-aix-tdep.h \
|
||||
rs6000-tdep.h \
|
||||
s390-linux-tdep.h \
|
||||
s390-tdep.h \
|
||||
score-tdep.h \
|
||||
selftest-arch.h \
|
||||
sentinel-frame.h \
|
||||
|
@ -2336,6 +2338,7 @@ ALLDEPFILES = \
|
|||
rx-tdep.c \
|
||||
s390-linux-nat.c \
|
||||
s390-linux-tdep.c \
|
||||
s390-tdep.c \
|
||||
score-tdep.c \
|
||||
ser-go32.c \
|
||||
ser-mingw.c \
|
||||
|
|
|
@ -515,8 +515,8 @@ powerpc*-*-*)
|
|||
|
||||
s390*-*-linux*)
|
||||
# Target: S390 running Linux
|
||||
gdb_target_obs="s390-linux-tdep.o solib-svr4.o linux-tdep.o \
|
||||
linux-record.o symfile-mem.o"
|
||||
gdb_target_obs="s390-linux-tdep.o s390-tdep.o solib-svr4.o \
|
||||
linux-tdep.o linux-record.o symfile-mem.o"
|
||||
build_gdbserver=yes
|
||||
;;
|
||||
|
||||
|
|
|
@ -30,6 +30,7 @@
|
|||
#include "nat/linux-ptrace.h"
|
||||
#include "gdbcmd.h"
|
||||
|
||||
#include "s390-tdep.h"
|
||||
#include "s390-linux-tdep.h"
|
||||
#include "elf/common.h"
|
||||
|
||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -1,4 +1,5 @@
|
|||
/* Target-dependent code for GDB, the GNU debugger.
|
||||
/* Target-dependent code for GNU/Linux on s390.
|
||||
|
||||
Copyright (C) 2003-2018 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of GDB.
|
||||
|
@ -16,173 +17,8 @@
|
|||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>. */
|
||||
|
||||
#ifndef S390_TDEP_H
|
||||
#define S390_TDEP_H
|
||||
|
||||
/* Hardware capabilities. */
|
||||
|
||||
#ifndef HWCAP_S390_HIGH_GPRS
|
||||
#define HWCAP_S390_HIGH_GPRS 512
|
||||
#endif
|
||||
|
||||
#ifndef HWCAP_S390_TE
|
||||
#define HWCAP_S390_TE 1024
|
||||
#endif
|
||||
|
||||
#ifndef HWCAP_S390_VX
|
||||
#define HWCAP_S390_VX 2048
|
||||
#endif
|
||||
|
||||
#ifndef HWCAP_S390_GS
|
||||
#define HWCAP_S390_GS 16384
|
||||
#endif
|
||||
|
||||
/* Register information. */
|
||||
|
||||
/* Program Status Word. */
|
||||
#define S390_PSWM_REGNUM 0
|
||||
#define S390_PSWA_REGNUM 1
|
||||
/* General Purpose Registers. */
|
||||
#define S390_R0_REGNUM 2
|
||||
#define S390_R1_REGNUM 3
|
||||
#define S390_R2_REGNUM 4
|
||||
#define S390_R3_REGNUM 5
|
||||
#define S390_R4_REGNUM 6
|
||||
#define S390_R5_REGNUM 7
|
||||
#define S390_R6_REGNUM 8
|
||||
#define S390_R7_REGNUM 9
|
||||
#define S390_R8_REGNUM 10
|
||||
#define S390_R9_REGNUM 11
|
||||
#define S390_R10_REGNUM 12
|
||||
#define S390_R11_REGNUM 13
|
||||
#define S390_R12_REGNUM 14
|
||||
#define S390_R13_REGNUM 15
|
||||
#define S390_R14_REGNUM 16
|
||||
#define S390_R15_REGNUM 17
|
||||
/* Access Registers. */
|
||||
#define S390_A0_REGNUM 18
|
||||
#define S390_A1_REGNUM 19
|
||||
#define S390_A2_REGNUM 20
|
||||
#define S390_A3_REGNUM 21
|
||||
#define S390_A4_REGNUM 22
|
||||
#define S390_A5_REGNUM 23
|
||||
#define S390_A6_REGNUM 24
|
||||
#define S390_A7_REGNUM 25
|
||||
#define S390_A8_REGNUM 26
|
||||
#define S390_A9_REGNUM 27
|
||||
#define S390_A10_REGNUM 28
|
||||
#define S390_A11_REGNUM 29
|
||||
#define S390_A12_REGNUM 30
|
||||
#define S390_A13_REGNUM 31
|
||||
#define S390_A14_REGNUM 32
|
||||
#define S390_A15_REGNUM 33
|
||||
/* Floating Point Control Word. */
|
||||
#define S390_FPC_REGNUM 34
|
||||
/* Floating Point Registers. */
|
||||
#define S390_F0_REGNUM 35
|
||||
#define S390_F1_REGNUM 36
|
||||
#define S390_F2_REGNUM 37
|
||||
#define S390_F3_REGNUM 38
|
||||
#define S390_F4_REGNUM 39
|
||||
#define S390_F5_REGNUM 40
|
||||
#define S390_F6_REGNUM 41
|
||||
#define S390_F7_REGNUM 42
|
||||
#define S390_F8_REGNUM 43
|
||||
#define S390_F9_REGNUM 44
|
||||
#define S390_F10_REGNUM 45
|
||||
#define S390_F11_REGNUM 46
|
||||
#define S390_F12_REGNUM 47
|
||||
#define S390_F13_REGNUM 48
|
||||
#define S390_F14_REGNUM 49
|
||||
#define S390_F15_REGNUM 50
|
||||
/* General Purpose Register Upper Halves. */
|
||||
#define S390_R0_UPPER_REGNUM 51
|
||||
#define S390_R1_UPPER_REGNUM 52
|
||||
#define S390_R2_UPPER_REGNUM 53
|
||||
#define S390_R3_UPPER_REGNUM 54
|
||||
#define S390_R4_UPPER_REGNUM 55
|
||||
#define S390_R5_UPPER_REGNUM 56
|
||||
#define S390_R6_UPPER_REGNUM 57
|
||||
#define S390_R7_UPPER_REGNUM 58
|
||||
#define S390_R8_UPPER_REGNUM 59
|
||||
#define S390_R9_UPPER_REGNUM 60
|
||||
#define S390_R10_UPPER_REGNUM 61
|
||||
#define S390_R11_UPPER_REGNUM 62
|
||||
#define S390_R12_UPPER_REGNUM 63
|
||||
#define S390_R13_UPPER_REGNUM 64
|
||||
#define S390_R14_UPPER_REGNUM 65
|
||||
#define S390_R15_UPPER_REGNUM 66
|
||||
/* GNU/Linux-specific optional registers. */
|
||||
#define S390_ORIG_R2_REGNUM 67
|
||||
#define S390_LAST_BREAK_REGNUM 68
|
||||
#define S390_SYSTEM_CALL_REGNUM 69
|
||||
/* Transaction diagnostic block. */
|
||||
#define S390_TDB_DWORD0_REGNUM 70
|
||||
#define S390_TDB_ABORT_CODE_REGNUM 71
|
||||
#define S390_TDB_CONFLICT_TOKEN_REGNUM 72
|
||||
#define S390_TDB_ATIA_REGNUM 73
|
||||
#define S390_TDB_R0_REGNUM 74
|
||||
#define S390_TDB_R1_REGNUM 75
|
||||
#define S390_TDB_R2_REGNUM 76
|
||||
#define S390_TDB_R3_REGNUM 77
|
||||
#define S390_TDB_R4_REGNUM 78
|
||||
#define S390_TDB_R5_REGNUM 79
|
||||
#define S390_TDB_R6_REGNUM 80
|
||||
#define S390_TDB_R7_REGNUM 81
|
||||
#define S390_TDB_R8_REGNUM 82
|
||||
#define S390_TDB_R9_REGNUM 83
|
||||
#define S390_TDB_R10_REGNUM 84
|
||||
#define S390_TDB_R11_REGNUM 85
|
||||
#define S390_TDB_R12_REGNUM 86
|
||||
#define S390_TDB_R13_REGNUM 87
|
||||
#define S390_TDB_R14_REGNUM 88
|
||||
#define S390_TDB_R15_REGNUM 89
|
||||
/* Vector registers. */
|
||||
#define S390_V0_LOWER_REGNUM 90
|
||||
#define S390_V1_LOWER_REGNUM 91
|
||||
#define S390_V2_LOWER_REGNUM 92
|
||||
#define S390_V3_LOWER_REGNUM 93
|
||||
#define S390_V4_LOWER_REGNUM 94
|
||||
#define S390_V5_LOWER_REGNUM 95
|
||||
#define S390_V6_LOWER_REGNUM 96
|
||||
#define S390_V7_LOWER_REGNUM 97
|
||||
#define S390_V8_LOWER_REGNUM 98
|
||||
#define S390_V9_LOWER_REGNUM 99
|
||||
#define S390_V10_LOWER_REGNUM 100
|
||||
#define S390_V11_LOWER_REGNUM 101
|
||||
#define S390_V12_LOWER_REGNUM 102
|
||||
#define S390_V13_LOWER_REGNUM 103
|
||||
#define S390_V14_LOWER_REGNUM 104
|
||||
#define S390_V15_LOWER_REGNUM 105
|
||||
#define S390_V16_REGNUM 106
|
||||
#define S390_V17_REGNUM 107
|
||||
#define S390_V18_REGNUM 108
|
||||
#define S390_V19_REGNUM 109
|
||||
#define S390_V20_REGNUM 110
|
||||
#define S390_V21_REGNUM 111
|
||||
#define S390_V22_REGNUM 112
|
||||
#define S390_V23_REGNUM 113
|
||||
#define S390_V24_REGNUM 114
|
||||
#define S390_V25_REGNUM 115
|
||||
#define S390_V26_REGNUM 116
|
||||
#define S390_V27_REGNUM 117
|
||||
#define S390_V28_REGNUM 118
|
||||
#define S390_V29_REGNUM 119
|
||||
#define S390_V30_REGNUM 120
|
||||
#define S390_V31_REGNUM 121
|
||||
#define S390_GSD_REGNUM 122
|
||||
#define S390_GSSM_REGNUM 123
|
||||
#define S390_GSEPLA_REGNUM 124
|
||||
#define S390_BC_GSD_REGNUM 125
|
||||
#define S390_BC_GSSM_REGNUM 126
|
||||
#define S390_BC_GSEPLA_REGNUM 127
|
||||
/* Total. */
|
||||
#define S390_NUM_REGS 128
|
||||
|
||||
/* Special register usage. */
|
||||
#define S390_SP_REGNUM S390_R15_REGNUM
|
||||
#define S390_RETADDR_REGNUM S390_R14_REGNUM
|
||||
#define S390_FRAME_REGNUM S390_R11_REGNUM
|
||||
#ifndef S390_LINUX_TDEP_H
|
||||
#define S390_LINUX_TDEP_H
|
||||
|
||||
#define S390_IS_GREGSET_REGNUM(i) \
|
||||
(((i) >= S390_PSWM_REGNUM && (i) <= S390_A15_REGNUM) \
|
||||
|
@ -195,7 +31,7 @@
|
|||
#define S390_IS_TDBREGSET_REGNUM(i) \
|
||||
((i) >= S390_TDB_DWORD0_REGNUM && (i) <= S390_TDB_R15_REGNUM)
|
||||
|
||||
/* Core file register sets, defined in s390-tdep.c. */
|
||||
/* Core file register sets, defined in s390-linux-tdep.c. */
|
||||
#define s390_sizeof_gregset 0x90
|
||||
#define s390x_sizeof_gregset 0xd8
|
||||
extern const struct regset s390_gregset;
|
||||
|
@ -230,4 +66,4 @@ extern struct target_desc *tdesc_s390x_vx_linux64;
|
|||
extern struct target_desc *tdesc_s390x_tevx_linux64;
|
||||
extern struct target_desc *tdesc_s390x_gs_linux64;
|
||||
|
||||
#endif
|
||||
#endif /* S390_LINUX_TDEP_H */
|
||||
|
|
3159
gdb/s390-tdep.c
Normal file
3159
gdb/s390-tdep.c
Normal file
File diff suppressed because it is too large
Load diff
318
gdb/s390-tdep.h
Normal file
318
gdb/s390-tdep.h
Normal file
|
@ -0,0 +1,318 @@
|
|||
/* Target-dependent code for s390.
|
||||
|
||||
Copyright (C) 2003-2018 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of GDB.
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>. */
|
||||
|
||||
#ifndef S390_TDEP_H
|
||||
#define S390_TDEP_H
|
||||
|
||||
#include "prologue-value.h"
|
||||
|
||||
enum s390_abi_kind
|
||||
{
|
||||
ABI_NONE,
|
||||
ABI_LINUX_S390,
|
||||
ABI_LINUX_ZSERIES
|
||||
};
|
||||
|
||||
enum s390_vector_abi_kind
|
||||
{
|
||||
S390_VECTOR_ABI_NONE,
|
||||
S390_VECTOR_ABI_128
|
||||
};
|
||||
|
||||
/* The tdep structure. */
|
||||
|
||||
struct gdbarch_tdep
|
||||
{
|
||||
/* Target description. */
|
||||
const struct target_desc *tdesc;
|
||||
|
||||
/* ABI version. */
|
||||
enum s390_abi_kind abi;
|
||||
|
||||
/* Vector ABI. */
|
||||
enum s390_vector_abi_kind vector_abi;
|
||||
|
||||
/* Pseudo register numbers. */
|
||||
int gpr_full_regnum;
|
||||
int pc_regnum;
|
||||
int cc_regnum;
|
||||
int v0_full_regnum;
|
||||
|
||||
bool have_upper;
|
||||
bool have_linux_v1;
|
||||
bool have_linux_v2;
|
||||
bool have_tdb;
|
||||
bool have_vx;
|
||||
bool have_gs;
|
||||
|
||||
/* Hook to record OS specific systemcall. */
|
||||
int (*s390_syscall_record) (struct regcache *regcache, LONGEST svc_number);
|
||||
};
|
||||
|
||||
/* Decoding S/390 instructions. */
|
||||
|
||||
/* Named opcode values for the S/390 instructions we recognize. Some
|
||||
instructions have their opcode split across two fields; those are the
|
||||
op1_* and op2_* enums. */
|
||||
|
||||
enum
|
||||
{
|
||||
op1_lhi = 0xa7, op2_lhi = 0x08,
|
||||
op1_lghi = 0xa7, op2_lghi = 0x09,
|
||||
op1_lgfi = 0xc0, op2_lgfi = 0x01,
|
||||
op_lr = 0x18,
|
||||
op_lgr = 0xb904,
|
||||
op_l = 0x58,
|
||||
op1_ly = 0xe3, op2_ly = 0x58,
|
||||
op1_lg = 0xe3, op2_lg = 0x04,
|
||||
op_lm = 0x98,
|
||||
op1_lmy = 0xeb, op2_lmy = 0x98,
|
||||
op1_lmg = 0xeb, op2_lmg = 0x04,
|
||||
op_st = 0x50,
|
||||
op1_sty = 0xe3, op2_sty = 0x50,
|
||||
op1_stg = 0xe3, op2_stg = 0x24,
|
||||
op_std = 0x60,
|
||||
op_stm = 0x90,
|
||||
op1_stmy = 0xeb, op2_stmy = 0x90,
|
||||
op1_stmg = 0xeb, op2_stmg = 0x24,
|
||||
op1_aghi = 0xa7, op2_aghi = 0x0b,
|
||||
op1_ahi = 0xa7, op2_ahi = 0x0a,
|
||||
op1_agfi = 0xc2, op2_agfi = 0x08,
|
||||
op1_afi = 0xc2, op2_afi = 0x09,
|
||||
op1_algfi= 0xc2, op2_algfi= 0x0a,
|
||||
op1_alfi = 0xc2, op2_alfi = 0x0b,
|
||||
op_ar = 0x1a,
|
||||
op_agr = 0xb908,
|
||||
op_a = 0x5a,
|
||||
op1_ay = 0xe3, op2_ay = 0x5a,
|
||||
op1_ag = 0xe3, op2_ag = 0x08,
|
||||
op1_slgfi= 0xc2, op2_slgfi= 0x04,
|
||||
op1_slfi = 0xc2, op2_slfi = 0x05,
|
||||
op_sr = 0x1b,
|
||||
op_sgr = 0xb909,
|
||||
op_s = 0x5b,
|
||||
op1_sy = 0xe3, op2_sy = 0x5b,
|
||||
op1_sg = 0xe3, op2_sg = 0x09,
|
||||
op_nr = 0x14,
|
||||
op_ngr = 0xb980,
|
||||
op_la = 0x41,
|
||||
op1_lay = 0xe3, op2_lay = 0x71,
|
||||
op1_larl = 0xc0, op2_larl = 0x00,
|
||||
op_basr = 0x0d,
|
||||
op_bas = 0x4d,
|
||||
op_bcr = 0x07,
|
||||
op_bc = 0x0d,
|
||||
op_bctr = 0x06,
|
||||
op_bctgr = 0xb946,
|
||||
op_bct = 0x46,
|
||||
op1_bctg = 0xe3, op2_bctg = 0x46,
|
||||
op_bxh = 0x86,
|
||||
op1_bxhg = 0xeb, op2_bxhg = 0x44,
|
||||
op_bxle = 0x87,
|
||||
op1_bxleg= 0xeb, op2_bxleg= 0x45,
|
||||
op1_bras = 0xa7, op2_bras = 0x05,
|
||||
op1_brasl= 0xc0, op2_brasl= 0x05,
|
||||
op1_brc = 0xa7, op2_brc = 0x04,
|
||||
op1_brcl = 0xc0, op2_brcl = 0x04,
|
||||
op1_brct = 0xa7, op2_brct = 0x06,
|
||||
op1_brctg= 0xa7, op2_brctg= 0x07,
|
||||
op_brxh = 0x84,
|
||||
op1_brxhg= 0xec, op2_brxhg= 0x44,
|
||||
op_brxle = 0x85,
|
||||
op1_brxlg= 0xec, op2_brxlg= 0x45,
|
||||
op_svc = 0x0a,
|
||||
};
|
||||
|
||||
/* Hardware capabilities. */
|
||||
|
||||
#ifndef HWCAP_S390_HIGH_GPRS
|
||||
#define HWCAP_S390_HIGH_GPRS 512
|
||||
#endif
|
||||
|
||||
#ifndef HWCAP_S390_TE
|
||||
#define HWCAP_S390_TE 1024
|
||||
#endif
|
||||
|
||||
#ifndef HWCAP_S390_VX
|
||||
#define HWCAP_S390_VX 2048
|
||||
#endif
|
||||
|
||||
#ifndef HWCAP_S390_GS
|
||||
#define HWCAP_S390_GS 16384
|
||||
#endif
|
||||
|
||||
/* Register information. */
|
||||
|
||||
/* Program Status Word. */
|
||||
#define S390_PSWM_REGNUM 0
|
||||
#define S390_PSWA_REGNUM 1
|
||||
/* General Purpose Registers. */
|
||||
#define S390_R0_REGNUM 2
|
||||
#define S390_R1_REGNUM 3
|
||||
#define S390_R2_REGNUM 4
|
||||
#define S390_R3_REGNUM 5
|
||||
#define S390_R4_REGNUM 6
|
||||
#define S390_R5_REGNUM 7
|
||||
#define S390_R6_REGNUM 8
|
||||
#define S390_R7_REGNUM 9
|
||||
#define S390_R8_REGNUM 10
|
||||
#define S390_R9_REGNUM 11
|
||||
#define S390_R10_REGNUM 12
|
||||
#define S390_R11_REGNUM 13
|
||||
#define S390_R12_REGNUM 14
|
||||
#define S390_R13_REGNUM 15
|
||||
#define S390_R14_REGNUM 16
|
||||
#define S390_R15_REGNUM 17
|
||||
/* Access Registers. */
|
||||
#define S390_A0_REGNUM 18
|
||||
#define S390_A1_REGNUM 19
|
||||
#define S390_A2_REGNUM 20
|
||||
#define S390_A3_REGNUM 21
|
||||
#define S390_A4_REGNUM 22
|
||||
#define S390_A5_REGNUM 23
|
||||
#define S390_A6_REGNUM 24
|
||||
#define S390_A7_REGNUM 25
|
||||
#define S390_A8_REGNUM 26
|
||||
#define S390_A9_REGNUM 27
|
||||
#define S390_A10_REGNUM 28
|
||||
#define S390_A11_REGNUM 29
|
||||
#define S390_A12_REGNUM 30
|
||||
#define S390_A13_REGNUM 31
|
||||
#define S390_A14_REGNUM 32
|
||||
#define S390_A15_REGNUM 33
|
||||
/* Floating Point Control Word. */
|
||||
#define S390_FPC_REGNUM 34
|
||||
/* Floating Point Registers. */
|
||||
#define S390_F0_REGNUM 35
|
||||
#define S390_F1_REGNUM 36
|
||||
#define S390_F2_REGNUM 37
|
||||
#define S390_F3_REGNUM 38
|
||||
#define S390_F4_REGNUM 39
|
||||
#define S390_F5_REGNUM 40
|
||||
#define S390_F6_REGNUM 41
|
||||
#define S390_F7_REGNUM 42
|
||||
#define S390_F8_REGNUM 43
|
||||
#define S390_F9_REGNUM 44
|
||||
#define S390_F10_REGNUM 45
|
||||
#define S390_F11_REGNUM 46
|
||||
#define S390_F12_REGNUM 47
|
||||
#define S390_F13_REGNUM 48
|
||||
#define S390_F14_REGNUM 49
|
||||
#define S390_F15_REGNUM 50
|
||||
/* General Purpose Register Upper Halves. */
|
||||
#define S390_R0_UPPER_REGNUM 51
|
||||
#define S390_R1_UPPER_REGNUM 52
|
||||
#define S390_R2_UPPER_REGNUM 53
|
||||
#define S390_R3_UPPER_REGNUM 54
|
||||
#define S390_R4_UPPER_REGNUM 55
|
||||
#define S390_R5_UPPER_REGNUM 56
|
||||
#define S390_R6_UPPER_REGNUM 57
|
||||
#define S390_R7_UPPER_REGNUM 58
|
||||
#define S390_R8_UPPER_REGNUM 59
|
||||
#define S390_R9_UPPER_REGNUM 60
|
||||
#define S390_R10_UPPER_REGNUM 61
|
||||
#define S390_R11_UPPER_REGNUM 62
|
||||
#define S390_R12_UPPER_REGNUM 63
|
||||
#define S390_R13_UPPER_REGNUM 64
|
||||
#define S390_R14_UPPER_REGNUM 65
|
||||
#define S390_R15_UPPER_REGNUM 66
|
||||
/* GNU/Linux-specific optional registers. */
|
||||
#define S390_ORIG_R2_REGNUM 67
|
||||
#define S390_LAST_BREAK_REGNUM 68
|
||||
#define S390_SYSTEM_CALL_REGNUM 69
|
||||
/* Transaction diagnostic block. */
|
||||
#define S390_TDB_DWORD0_REGNUM 70
|
||||
#define S390_TDB_ABORT_CODE_REGNUM 71
|
||||
#define S390_TDB_CONFLICT_TOKEN_REGNUM 72
|
||||
#define S390_TDB_ATIA_REGNUM 73
|
||||
#define S390_TDB_R0_REGNUM 74
|
||||
#define S390_TDB_R1_REGNUM 75
|
||||
#define S390_TDB_R2_REGNUM 76
|
||||
#define S390_TDB_R3_REGNUM 77
|
||||
#define S390_TDB_R4_REGNUM 78
|
||||
#define S390_TDB_R5_REGNUM 79
|
||||
#define S390_TDB_R6_REGNUM 80
|
||||
#define S390_TDB_R7_REGNUM 81
|
||||
#define S390_TDB_R8_REGNUM 82
|
||||
#define S390_TDB_R9_REGNUM 83
|
||||
#define S390_TDB_R10_REGNUM 84
|
||||
#define S390_TDB_R11_REGNUM 85
|
||||
#define S390_TDB_R12_REGNUM 86
|
||||
#define S390_TDB_R13_REGNUM 87
|
||||
#define S390_TDB_R14_REGNUM 88
|
||||
#define S390_TDB_R15_REGNUM 89
|
||||
/* Vector registers. */
|
||||
#define S390_V0_LOWER_REGNUM 90
|
||||
#define S390_V1_LOWER_REGNUM 91
|
||||
#define S390_V2_LOWER_REGNUM 92
|
||||
#define S390_V3_LOWER_REGNUM 93
|
||||
#define S390_V4_LOWER_REGNUM 94
|
||||
#define S390_V5_LOWER_REGNUM 95
|
||||
#define S390_V6_LOWER_REGNUM 96
|
||||
#define S390_V7_LOWER_REGNUM 97
|
||||
#define S390_V8_LOWER_REGNUM 98
|
||||
#define S390_V9_LOWER_REGNUM 99
|
||||
#define S390_V10_LOWER_REGNUM 100
|
||||
#define S390_V11_LOWER_REGNUM 101
|
||||
#define S390_V12_LOWER_REGNUM 102
|
||||
#define S390_V13_LOWER_REGNUM 103
|
||||
#define S390_V14_LOWER_REGNUM 104
|
||||
#define S390_V15_LOWER_REGNUM 105
|
||||
#define S390_V16_REGNUM 106
|
||||
#define S390_V17_REGNUM 107
|
||||
#define S390_V18_REGNUM 108
|
||||
#define S390_V19_REGNUM 109
|
||||
#define S390_V20_REGNUM 110
|
||||
#define S390_V21_REGNUM 111
|
||||
#define S390_V22_REGNUM 112
|
||||
#define S390_V23_REGNUM 113
|
||||
#define S390_V24_REGNUM 114
|
||||
#define S390_V25_REGNUM 115
|
||||
#define S390_V26_REGNUM 116
|
||||
#define S390_V27_REGNUM 117
|
||||
#define S390_V28_REGNUM 118
|
||||
#define S390_V29_REGNUM 119
|
||||
#define S390_V30_REGNUM 120
|
||||
#define S390_V31_REGNUM 121
|
||||
#define S390_GSD_REGNUM 122
|
||||
#define S390_GSSM_REGNUM 123
|
||||
#define S390_GSEPLA_REGNUM 124
|
||||
#define S390_BC_GSD_REGNUM 125
|
||||
#define S390_BC_GSSM_REGNUM 126
|
||||
#define S390_BC_GSEPLA_REGNUM 127
|
||||
/* Total. */
|
||||
#define S390_NUM_REGS 128
|
||||
|
||||
#define S390_NUM_GPRS 16
|
||||
#define S390_NUM_FPRS 16
|
||||
|
||||
#define S390_MAX_INSTR_SIZE 6
|
||||
|
||||
/* Special register usage. */
|
||||
#define S390_SP_REGNUM S390_R15_REGNUM
|
||||
#define S390_RETADDR_REGNUM S390_R14_REGNUM
|
||||
#define S390_FRAME_REGNUM S390_R11_REGNUM
|
||||
|
||||
/* Frame unwinding. */
|
||||
|
||||
extern struct value *s390_trad_frame_prev_register
|
||||
(struct frame_info *this_frame, struct trad_frame_saved_reg saved_regs[],
|
||||
int regnum);
|
||||
|
||||
#endif /* S390_TDEP_H */
|
Loading…
Add table
Add a link
Reference in a new issue