X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=gdb%2Fnto-tdep.c;h=1e3047203642c70d8712f3129dcf061779d22c6f;hb=f72429c5cc268535be510b223a732c31816a79f9;hp=005527cbbb3b0ce88a7c21e786ff21f0290a8785;hpb=c59fcb4cd4df69ce229b21cff60d79d7ff10ea59;p=deliverable%2Fbinutils-gdb.git diff --git a/gdb/nto-tdep.c b/gdb/nto-tdep.c index 005527cbbb..1e30472036 100644 --- a/gdb/nto-tdep.c +++ b/gdb/nto-tdep.c @@ -1,6 +1,7 @@ /* nto-tdep.c - general QNX Neutrino target functionality. - Copyright (C) 2003, 2004, 2007, 2008, 2009 Free Software Foundation, Inc. + Copyright (C) 2003, 2004, 2007, 2008, 2009, 2010, 2011 + Free Software Foundation, Inc. Contributed by QNX Software Systems Ltd. @@ -58,9 +59,9 @@ nto_target (void) #ifdef __CYGWIN__ static char buf[PATH_MAX]; if (p) - cygwin_conv_to_posix_path (p, buf); + cygwin_conv_path (CCP_WIN_A_TO_POSIX, p, buf, PATH_MAX); else - cygwin_conv_to_posix_path (default_nto_target, buf); + cygwin_conv_path (CCP_WIN_A_TO_POSIX, default_nto_target, buf, PATH_MAX); return buf; #else return p ? p : default_nto_target; @@ -88,10 +89,12 @@ nto_map_arch_to_cputype (const char *arch) int nto_find_and_open_solib (char *solib, unsigned o_flags, char **temp_pathname) { - char *buf, *arch_path, *nto_root, *endian, *base; + char *buf, *arch_path, *nto_root, *endian; + const char *base; const char *arch; int ret; -#define PATH_FMT "%s/lib:%s/usr/lib:%s/usr/photon/lib:%s/usr/photon/dll:%s/lib/dll" +#define PATH_FMT \ + "%s/lib:%s/usr/lib:%s/usr/photon/lib:%s/usr/photon/dll:%s/lib/dll" nto_root = nto_target (); if (strcmp (gdbarch_bfd_arch_info (target_gdbarch)->arch_name, "i386") == 0) @@ -125,13 +128,7 @@ nto_find_and_open_solib (char *solib, unsigned o_flags, char **temp_pathname) sprintf (buf, PATH_FMT, arch_path, arch_path, arch_path, arch_path, arch_path); - /* Don't assume basename() isn't destructive. */ - base = strrchr (solib, '/'); - if (!base) - base = solib; - else - base++; /* Skip over '/'. */ - + base = lbasename (solib); ret = openp (buf, 1, base, o_flags, temp_pathname); if (ret < 0 && base != solib) { @@ -236,7 +233,7 @@ nto_parse_redirection (char *pargv[], const char **pin, const char **pout, return argv; } -/* The struct lm_info, LM_ADDR, and nto_truncate_ptr are copied from +/* The struct lm_info, lm_addr, and nto_truncate_ptr are copied from solib-svr4.c to support nto_relocate_section_addresses which is different from the svr4 version. */ @@ -262,7 +259,7 @@ struct lm_info static CORE_ADDR -LM_ADDR (struct so_list *so) +lm_addr (struct so_list *so) { if (so->lm_info->l_addr == (CORE_ADDR)-1) { @@ -313,8 +310,8 @@ nto_relocate_section_addresses (struct so_list *so, struct target_section *sec) Elf_Internal_Phdr *phdr = find_load_phdr (sec->bfd); unsigned vaddr = phdr ? phdr->p_vaddr : 0; - sec->addr = nto_truncate_ptr (sec->addr + LM_ADDR (so) - vaddr); - sec->endaddr = nto_truncate_ptr (sec->endaddr + LM_ADDR (so) - vaddr); + sec->addr = nto_truncate_ptr (sec->addr + lm_addr (so) - vaddr); + sec->endaddr = nto_truncate_ptr (sec->endaddr + lm_addr (so) - vaddr); } /* This is cheating a bit because our linker code is in libc.so. If we @@ -341,6 +338,40 @@ nto_elf_osabi_sniffer (bfd *abfd) return GDB_OSABI_UNKNOWN; } +static const char *nto_thread_state_str[] = +{ + "DEAD", /* 0 0x00 */ + "RUNNING", /* 1 0x01 */ + "READY", /* 2 0x02 */ + "STOPPED", /* 3 0x03 */ + "SEND", /* 4 0x04 */ + "RECEIVE", /* 5 0x05 */ + "REPLY", /* 6 0x06 */ + "STACK", /* 7 0x07 */ + "WAITTHREAD", /* 8 0x08 */ + "WAITPAGE", /* 9 0x09 */ + "SIGSUSPEND", /* 10 0x0a */ + "SIGWAITINFO", /* 11 0x0b */ + "NANOSLEEP", /* 12 0x0c */ + "MUTEX", /* 13 0x0d */ + "CONDVAR", /* 14 0x0e */ + "JOIN", /* 15 0x0f */ + "INTR", /* 16 0x10 */ + "SEM", /* 17 0x11 */ + "WAITCTX", /* 18 0x12 */ + "NET_SEND", /* 19 0x13 */ + "NET_REPLY" /* 20 0x14 */ +}; + +char * +nto_extra_thread_info (struct thread_info *ti) +{ + if (ti && ti->private + && ti->private->state < ARRAY_SIZE (nto_thread_state_str)) + return (char *)nto_thread_state_str [ti->private->state]; + return ""; +} + void nto_initialize_signals (void) { @@ -378,6 +409,7 @@ When non-zero, nto specific debug info is\n\ displayed. Different information is displayed\n\ for different positive values."), NULL, - NULL, /* FIXME: i18n: QNX NTO internal debugging is %s. */ + NULL, /* FIXME: i18n: QNX NTO internal + debugging is %s. */ &setdebuglist, &showdebuglist); }