48 #define SIG_FRAME_PC_OFFSET 96
49 #define SIG_FRAME_LR_OFFSET 108
50 #define SIG_FRAME_FP_OFFSET 284
113 const void *gregs,
size_t len)
127 void *gregs,
size_t len)
135 static const struct regset rs6000_aix32_regset =
142 static const struct regset rs6000_aix64_regset =
158 cb (
".reg", 592, &rs6000_aix32_regset, NULL, cb_data);
160 cb (
".reg", 576, &rs6000_aix64_regset, NULL, cb_data);
197 struct value *arg = 0;
239 for (argno = 0, argbytes = 0; argno < nargs && ii < 8; ++ii)
271 while (argbytes < len)
274 memset (word, 0, reg_size);
277 (len - argbytes) > reg_size
278 ? reg_size : len - argbytes);
282 ++ii, argbytes += reg_size;
285 goto ran_out_of_registers_for_arguments;
294 == BFD_ENDIAN_BIG ? reg_size - len : 0;
297 memset (word, 0, reg_size);
304 ran_out_of_registers_for_arguments:
322 if ((argno < nargs) || argbytes)
328 space += ((len - argbytes + 3) & -4);
334 for (; jj < nargs; ++jj)
336 struct value *val = args[jj];
341 space = (space + 15) & -16;
362 ii += ((len - argbytes + 3) & -4) / 4;
366 for (; argno < nargs; ++argno)
388 ii += ((len + 3) & -4) / 4;
522 memcpy (readbuf, regval, 8);
591 if (pc_section && (pc_section->the_bfd_section->flags & SEC_CODE))
613 absolute = (
int) ((instr >> 1) & 1);
618 immediate = ((instr & ~3) << 6) >> 6;
622 dest = pc + immediate;
626 immediate = ((instr & ~3) << 16) >> 16;
630 dest = pc + immediate;
634 ext_op = (instr >> 1) & 0x3ff;
650 else if (ext_op == 528)
694 breaks[1] =
branch_dest (frame, opcode, insn, loc, breaks[0]);
697 if (breaks[1] == breaks[0])
700 for (ii = 0; ii < 2; ++ii)
703 if (breaks[ii] == -1)
731 gdb_assert (bfd_get_flavour (abfd) == bfd_target_xcoff_flavour);
773 #define __LDINFO_PTRACE32__
774 #define __LDINFO_PTRACE64__
777 #define pinfo(type,member) \
779 struct type ldi = {0}; \
781 printf (" {%d, %d},\t\n", \
782 offsetof (struct type, member), \
783 sizeof (ldi.member), \
791 printf (
"static const struct ld_info_desc ld_info32_desc =\n{\n");
792 pinfo (__ld_info32, ldinfo_next);
793 pinfo (__ld_info32, ldinfo_fd);
794 pinfo (__ld_info32, ldinfo_textorg);
795 pinfo (__ld_info32, ldinfo_textsize);
796 pinfo (__ld_info32, ldinfo_dataorg);
797 pinfo (__ld_info32, ldinfo_datasize);
798 pinfo (__ld_info32, ldinfo_filename);
803 printf (
"static const struct ld_info_desc ld_info64_desc =\n{\n");
804 pinfo (__ld_info64, ldinfo_next);
805 pinfo (__ld_info64, ldinfo_fd);
806 pinfo (__ld_info64, ldinfo_textorg);
807 pinfo (__ld_info64, ldinfo_textsize);
808 pinfo (__ld_info64, ldinfo_dataorg);
809 pinfo (__ld_info64, ldinfo_datasize);
810 pinfo (__ld_info64, ldinfo_filename);
906 struct obstack *obstack)
964 struct obstack obstack;
968 obstack_init (&obstack);
981 ldi_buf = ldi_buf + ldi.
next;
986 buf = obstack_finish (&obstack);
987 len_avail = strlen (buf);
988 if (offset >= len_avail)
992 if (len > len_avail - offset)
994 memcpy (readbuf, buf + offset, len);
997 obstack_free (&obstack, NULL);
1009 struct bfd_section *ldinfo_sec;
1015 ldinfo_sec = bfd_get_section_by_name (
core_bfd,
".ldinfo");
1016 if (ldinfo_sec == NULL)
1017 error (
_(
"cannot find .ldinfo section from core file: %s"),
1018 bfd_errmsg (bfd_get_error ()));
1019 ldinfo_size = bfd_get_section_size (ldinfo_sec);
1021 ldinfo_buf =
xmalloc (ldinfo_size);
1024 if (! bfd_get_section_contents (
core_bfd, ldinfo_sec,
1025 ldinfo_buf, 0, ldinfo_size))
1026 error (
_(
"unable to read .ldinfo section from core file: %s"),
1027 bfd_errmsg (bfd_get_error ()));
1092 bfd_target_xcoff_flavour,
1095 bfd_target_xcoff_flavour,
static CORE_ADDR branch_dest(struct frame_info *frame, int opcode, int instr, CORE_ADDR pc, CORE_ADDR safety)
ULONGEST extract_unsigned_integer(const gdb_byte *, int, enum bfd_endian)
CORE_ADDR extract_typed_address(const gdb_byte *buf, struct type *type)
static struct ppc_reg_offsets rs6000_aix32_reg_offsets
void set_gdbarch_displaced_step_fixup(struct gdbarch *gdbarch, gdbarch_displaced_step_fixup_ftype displaced_step_fixup)
CORE_ADDR get_frame_pc(struct frame_info *frame)
void set_solib_ops(struct gdbarch *gdbarch, const struct target_so_ops *new_ops)
struct bfd_section * the_bfd_section
void ppc_supply_fpregset(const struct regset *regset, struct regcache *regcache, int regnum, const void *fpregs, size_t len)
void set_gdbarch_displaced_step_location(struct gdbarch *gdbarch, gdbarch_displaced_step_location_ftype displaced_step_location)
void convert_typed_floating(const void *from, const struct type *from_type, void *to, const struct type *to_type)
const struct builtin_type * builtin_type(struct gdbarch *gdbarch)
void set_gdbarch_frame_red_zone_size(struct gdbarch *gdbarch, int frame_red_zone_size)
struct field_info ldinfo_dataorg
void gdbarch_register_osabi_sniffer(enum bfd_architecture arch, enum bfd_flavour flavour, enum gdb_osabi(*sniffer_fn)(bfd *))
static void rs6000_aix_supply_regset(const struct regset *regset, struct regcache *regcache, int regnum, const void *gregs, size_t len)
struct field_info ldinfo_filename
struct address_space * get_frame_address_space(struct frame_info *frame)
static const struct ld_info_desc ld_info32_desc
struct gdbarch_tdep * gdbarch_tdep(struct gdbarch *gdbarch)
char * xml_escape_text(const char *text)
void store_unsigned_integer(gdb_byte *, int, enum bfd_endian, ULONGEST)
void regcache_raw_write_signed(struct regcache *regcache, int regnum, LONGEST val)
void set_gdbarch_core_xfer_shared_libraries_aix(struct gdbarch *gdbarch, gdbarch_core_xfer_shared_libraries_aix_ftype core_xfer_shared_libraries_aix)
int ppc_deal_with_atomic_sequence(struct frame_info *frame)
initialize_file_ftype _initialize_rs6000_aix_tdep
static void rs6000_aix_iterate_over_regset_sections(struct gdbarch *gdbarch, iterate_over_regset_sections_cb *cb, void *cb_data, const struct regcache *regcache)
static enum return_value_convention rs6000_return_value(struct gdbarch *gdbarch, struct value *function, struct type *valtype, struct regcache *regcache, gdb_byte *readbuf, const gdb_byte *writebuf)
static void rs6000_aix_collect_regset(const struct regset *regset, const struct regcache *regcache, int regnum, void *gregs, size_t len)
struct type * check_typedef(struct type *type)
LONGEST read_memory_integer(CORE_ADDR memaddr, int len, enum bfd_endian byte_order)
void ppc_collect_gregset(const struct regset *regset, const struct regcache *regcache, int regnum, void *gregs, size_t len)
const gdb_byte * value_contents(struct value *value)
struct target_so_ops solib_aix_so_ops
static ULONGEST rs6000_aix_core_xfer_shared_libraries_aix(struct gdbarch *gdbarch, gdb_byte *readbuf, ULONGEST offset, ULONGEST len)
#define CATCH(EXCEPTION, MASK)
void initialize_file_ftype(void)
int gdbarch_sp_regnum(struct gdbarch *gdbarch)
enum register_status regcache_cooked_read_unsigned(struct regcache *regcache, int regnum, ULONGEST *val)
static struct ld_info rs6000_aix_extract_ld_info(struct gdbarch *gdbarch, const gdb_byte *ldi_buf)
struct type * register_type(struct gdbarch *gdbarch, int regnum)
void insert_single_step_breakpoint(struct gdbarch *gdbarch, struct address_space *aspace, CORE_ADDR next_pc)
enum bfd_endian gdbarch_byte_order(struct gdbarch *gdbarch)
struct cleanup * make_cleanup(make_cleanup_ftype *function, void *arg)
char * pulongest(ULONGEST u)
void set_gdbarch_auto_wide_charset(struct gdbarch *gdbarch, gdbarch_auto_wide_charset_ftype auto_wide_charset)
void ppc_collect_fpregset(const struct regset *regset, const struct regcache *regcache, int regnum, void *fpregs, size_t len)
struct field_info ldinfo_textsize
static int rs6000_software_single_step(struct frame_info *frame)
void set_gdbarch_convert_from_func_ptr_addr(struct gdbarch *gdbarch, gdbarch_convert_from_func_ptr_addr_ftype convert_from_func_ptr_addr)
void( iterate_over_regset_sections_cb)(const char *sect_name, int size, const struct regset *regset, const char *human_name, void *cb_data)
static void rs6000_aix_init_osabi(struct gdbarch_info info, struct gdbarch *gdbarch)
struct obj_section * find_pc_section(CORE_ADDR pc)
ULONGEST get_frame_register_unsigned(struct frame_info *frame, int regnum)
static CORE_ADDR rs6000_push_dummy_call(struct gdbarch *gdbarch, struct value *function, struct regcache *regcache, CORE_ADDR bp_addr, int nargs, struct value **args, CORE_ADDR sp, int struct_return, CORE_ADDR struct_addr)
#define SIG_FRAME_PC_OFFSET
LONGEST unpack_long(struct type *type, const gdb_byte *valaddr)
CORE_ADDR solib_aix_get_toc_value(CORE_ADDR pc)
void set_gdbarch_software_single_step(struct gdbarch *gdbarch, gdbarch_software_single_step_ftype software_single_step)
struct field_info ldinfo_fd
#define AIX_TEXT_SEGMENT_BASE
const char const char int
void set_gdbarch_displaced_step_copy_insn(struct gdbarch *gdbarch, gdbarch_displaced_step_copy_insn_ftype displaced_step_copy_insn)
#define TYPE_CODE(thistype)
CORE_ADDR get_frame_base(struct frame_info *fi)
void regcache_cooked_write_unsigned(struct regcache *regcache, int regnum, ULONGEST val)
int xcoff_get_n_import_files(bfd *abfd)
static enum gdb_osabi rs6000_aix_osabi_sniffer(bfd *abfd)
CORE_ADDR find_function_addr(struct value *function, struct type **retval_type)
struct type * builtin_data_ptr
void regcache_raw_write_unsigned(struct regcache *regcache, int regnum, ULONGEST val)
enum register_status regcache_cooked_read(struct regcache *regcache, int regnum, gdb_byte *buf)
#define obstack_grow_str(OBSTACK, STRING)
struct field_info ldinfo_datasize
ULONGEST rs6000_aix_ld_info_to_xml(struct gdbarch *gdbarch, const gdb_byte *ldi_buf, gdb_byte *readbuf, ULONGEST offset, ULONGEST len, int close_ldinfo_fd)
unsigned long long ULONGEST
void target_store_registers(struct regcache *regcache, int regno)
int register_size(struct gdbarch *gdbarch, int regnum)
void set_gdbarch_long_double_bit(struct gdbarch *gdbarch, int long_double_bit)
#define obstack_grow_str0(OBSTACK, STRING)
struct type * value_type(const struct value *value)
static const char * rs6000_aix_auto_wide_charset(void)
const char * core_addr_to_string(const CORE_ADDR addr)
void set_gdbarch_return_value(struct gdbarch *gdbarch, gdbarch_return_value_ftype return_value)
struct field_info ldinfo_next
void set_gdbarch_displaced_step_free_closure(struct gdbarch *gdbarch, gdbarch_displaced_step_free_closure_ftype displaced_step_free_closure)
#define TYPE_LENGTH(thistype)
void set_gdbarch_push_dummy_call(struct gdbarch *gdbarch, gdbarch_push_dummy_call_ftype push_dummy_call)
ULONGEST read_memory_unsigned_integer(CORE_ADDR memaddr, int len, enum bfd_endian byte_order)
void set_gdbarch_iterate_over_regset_sections(struct gdbarch *gdbarch, gdbarch_iterate_over_regset_sections_ftype iterate_over_regset_sections)
static struct ppc_reg_offsets rs6000_aix64_reg_offsets
LONGEST extract_signed_integer(const gdb_byte *, int, enum bfd_endian)
void write_memory(CORE_ADDR memaddr, const bfd_byte *myaddr, ssize_t len)
static void rs6000_aix_shared_library_to_xml(struct ld_info *ldi, struct obstack *obstack)
int ppc_floating_point_unit_p(struct gdbarch *gdbarch)
void gdbarch_register_osabi(enum bfd_architecture arch, unsigned long machine, enum gdb_osabi osabi, void(*init_osabi)(struct gdbarch_info, struct gdbarch *))
void error(const char *fmt,...)
void ppc_supply_gregset(const struct regset *regset, struct regcache *regcache, int regnum, const void *gregs, size_t len)
struct field_info ldinfo_textorg
struct gdbarch * get_frame_arch(struct frame_info *this_frame)
static CORE_ADDR rs6000_convert_from_func_ptr_addr(struct gdbarch *gdbarch, CORE_ADDR addr, struct target_ops *targ)
void do_cleanups(struct cleanup *old_chain)
void regcache_cooked_write(struct regcache *regcache, int regnum, const gdb_byte *buf)
const ULONGEST const LONGEST len