35#include "gdbsupport/pathstuff.h"
37#define QNX_NOTE_NAME "QNX"
38#define QNX_INFO_SECT_NAME "QNX_info"
41#include <sys/cygwin.h>
46#elif defined(__sun__) || defined(linux)
60 char *p = getenv (
"QNX_TARGET");
63 static char buf[PATH_MAX];
65 cygwin_conv_path (CCP_WIN_A_TO_POSIX, p, buf, PATH_MAX);
79 if (!strcmp (arch,
"i386") || !strcmp (arch,
"x86"))
81 if (!strcmp (arch,
"rs6000") || !strcmp (arch,
"powerpc"))
83 if (!strcmp (arch,
"mips"))
85 if (!strcmp (arch,
"arm"))
87 if (!strcmp (arch,
"sh"))
94 gdb::unique_xmalloc_ptr<char> *temp_pathname)
96 char *buf, *arch_path, *nto_root;
100 int arch_len, len, ret;
102 "%s/lib:%s/usr/lib:%s/usr/photon/lib:%s/usr/photon/dll:%s/lib/dll"
122 == BFD_ENDIAN_BIG ?
"be" :
"le";
128 arch_len = (strlen (nto_root) + strlen (arch) + strlen (endian) + 2
130 arch_path = (
char *) alloca (arch_len);
131 xsnprintf (arch_path, arch_len,
"%s/%s%s", nto_root, arch, endian);
133 len = strlen (
PATH_FMT) + strlen (arch_path) * 5 + 1;
134 buf = (
char *) alloca (len);
135 xsnprintf (buf, len,
PATH_FMT, arch_path, arch_path, arch_path, arch_path,
138 base = lbasename (solib);
141 if (ret < 0 && base != solib)
143 xsnprintf (arch_path, arch_len,
"/%s", solib);
144 ret = open (arch_path, o_flags, 0);
148 *temp_pathname = gdb_realpath (arch_path);
150 temp_pathname->reset (NULL);
159 char buf[PATH_MAX * 2], arch_path[PATH_MAX];
182 == BFD_ENDIAN_BIG ?
"be" :
"le";
185 xsnprintf (arch_path,
sizeof (arch_path),
"%s/%s%s", nto_root, arch, endian);
187 xsnprintf (buf,
sizeof (buf),
"set solib-absolute-prefix %s", arch_path);
196 const char *in, *out, *
err, *p;
199 for (n = 0; pargv[n]; n++);
206 argv = XCNEWVEC (
char *, n + 1);
208 for (i = 0, n = 0; n < argc; n++)
227 else if (*p++ ==
'2' && *p++ ==
'>')
229 if (*p ==
'&' && *(p + 1) ==
'1')
237 argv[i++] = pargv[n];
264static Elf_Internal_Phdr *
267 Elf_Internal_Phdr *phdr;
270 if (!elf_tdata (abfd))
273 phdr = elf_tdata (abfd)->phdr;
274 for (i = 0; i < elf_elfheader (abfd)->e_phnum; i++, phdr++)
276 if (phdr->p_type == PT_LOAD && (phdr->p_flags & PF_X))
289 unsigned vaddr = phdr ? phdr->p_vaddr : 0;
314 const char *sectname;
315 unsigned int sectsize;
318 unsigned int namelen;
320 const unsigned sizeof_Elf_Nhdr = 12;
322 sectname = bfd_section_name (sect);
323 sectsize = bfd_section_size (sect);
330 else if (sectname != NULL && strstr (sectname,
"note") != NULL
331 && sectsize > sizeof_Elf_Nhdr)
333 note = XNEWVEC (
char, sectsize);
334 bfd_get_section_contents (abfd, sect, note, 0, sectsize);
335 namelen = (
unsigned int) bfd_h_get_32 (abfd, note);
336 name = note + sizeof_Elf_Nhdr;
337 if (sectsize >= namelen + sizeof_Elf_Nhdr
351 bfd_map_over_sections (abfd,
386 if (ti != NULL && ti->
priv != NULL)
406#if defined(SIGSELECT)
412#if defined(SIGPHOTON)
422 LONGEST len,
size_t sizeof_auxv_t)
426 CORE_ADDR data_ofs = 0;
428 LONGEST len_read = 0;
430 enum bfd_endian byte_order;
433 if (sizeof_auxv_t == 16)
463 data_ofs += (anint + 2) * ptr_size;
476 data_ofs += ptr_size;
478 initial_stack += data_ofs;
480 memset (readbuf, 0, len);
482 while (len_read <= len-sizeof_auxv_t)
488 const ULONGEST a_type
491 if (a_type == AT_NULL)
493 buff += sizeof_auxv_t;
494 len_read += sizeof_auxv_t;
511 gdb_assert (
inf != NULL);
514 if (inf_data == NULL)
struct gdbarch * target_gdbarch(void)
private_thread_info_up priv
static ULONGEST extract_unsigned_integer(gdb::array_view< const gdb_byte > buf, enum bfd_endian byte_order)
enum bfd_endian gdbarch_byte_order(struct gdbarch *gdbarch)
const struct bfd_arch_info * gdbarch_bfd_arch_info(struct gdbarch *gdbarch)
int gdbarch_ptr_bit(struct gdbarch *gdbarch)
void execute_command(const char *, int)
mach_port_t mach_port_t name mach_port_t mach_port_t name kern_return_t err
struct inferior * current_inferior(void)
int signal_print_update(int signo, int state)
int signal_pass_update(int signo, int state)
int signal_stop_update(int signo, int state)
static CORE_ADDR nto_truncate_ptr(CORE_ADDR addr)
static Elf_Internal_Phdr * find_load_phdr(bfd *abfd)
static const char *const nto_thread_state_str[]
void nto_dummy_supply_regset(struct regcache *regcache, char *regs)
static void nto_sniff_abi_note_section(bfd *abfd, asection *sect, void *obj)
LONGEST nto_read_auxv_from_initial_stack(CORE_ADDR initial_stack, gdb_byte *readbuf, LONGEST len, size_t sizeof_auxv_t)
static CORE_ADDR lm_addr(struct so_list *so)
void nto_init_solib_absolute_prefix(void)
static const registry< inferior >::key< struct nto_inferior_data > nto_inferior_data_reg
#define QNX_INFO_SECT_NAME
static char default_nto_target[]
char ** nto_parse_redirection(char *pargv[], const char **pin, const char **pout, const char **perr)
struct nto_inferior_data * nto_inferior_data(struct inferior *const inferior)
int nto_in_dynsym_resolve_code(CORE_ADDR pc)
enum gdb_osabi nto_elf_osabi_sniffer(bfd *abfd)
struct nto_target_ops current_nto_target
int nto_find_and_open_solib(const char *solib, unsigned o_flags, gdb::unique_xmalloc_ptr< char > *temp_pathname)
int nto_map_arch_to_cputype(const char *arch)
void nto_relocate_section_addresses(struct so_list *so, struct target_section *sec)
void nto_initialize_signals(void)
const char * nto_extra_thread_info(struct target_ops *self, struct thread_info *ti)
static char * nto_target(void)
static nto_thread_info * get_nto_thread_info(thread_info *thread)
static int in_plt_section(CORE_ADDR pc)
int openp(const char *path, openp_flags opts, const char *string, int mode, gdb::unique_xmalloc_ptr< char > *filename_opened)
struct bfd_section * the_bfd_section
int target_read_memory(CORE_ADDR memaddr, gdb_byte *myaddr, ssize_t len)