Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(67)

Side by Side Diff: gdb/aix-thread.c

Issue 11969036: Merge GDB 7.5.1 (Closed) Base URL: http://git.chromium.org/native_client/nacl-gdb.git@master
Patch Set: Created 7 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « gdb/agent.c ('k') | gdb/alpha-linux-tdep.c » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* Low level interface for debugging AIX 4.3+ pthreads. 1 /* Low level interface for debugging AIX 4.3+ pthreads.
2 2
3 Copyright (C) 1999-2000, 2002, 2007-2012 Free Software Foundation, 3 Copyright (C) 1999-2000, 2002, 2007-2012 Free Software Foundation,
4 Inc. 4 Inc.
5 Written by Nick Duffek <nsd@redhat.com>. 5 Written by Nick Duffek <nsd@redhat.com>.
6 6
7 This file is part of GDB. 7 This file is part of GDB.
8 8
9 This program is free software; you can redistribute it and/or modify 9 This program is free software; you can redistribute it and/or modify
10 it under the terms of the GNU General Public License as published by 10 it under the terms of the GNU General Public License as published by
(...skipping 952 matching lines...) Expand 10 before | Expand all | Expand 10 after
963 963
964 pd_disable (); 964 pd_disable ();
965 beneath->to_detach (beneath, args, from_tty); 965 beneath->to_detach (beneath, args, from_tty);
966 } 966 }
967 967
968 /* Tell the inferior process to continue running thread PID if != -1 968 /* Tell the inferior process to continue running thread PID if != -1
969 and all threads otherwise. */ 969 and all threads otherwise. */
970 970
971 static void 971 static void
972 aix_thread_resume (struct target_ops *ops, 972 aix_thread_resume (struct target_ops *ops,
973 ptid_t ptid, int step, enum target_signal sig) 973 ptid_t ptid, int step, enum gdb_signal sig)
974 { 974 {
975 struct thread_info *thread; 975 struct thread_info *thread;
976 pthdb_tid_t tid[2]; 976 pthdb_tid_t tid[2];
977 977
978 if (!PD_TID (ptid)) 978 if (!PD_TID (ptid))
979 { 979 {
980 struct cleanup *cleanup = save_inferior_ptid (); 980 struct cleanup *cleanup = save_inferior_ptid ();
981 struct target_ops *beneath = find_target_beneath (ops); 981 struct target_ops *beneath = find_target_beneath (ops);
982 982
983 inferior_ptid = pid_to_ptid (PIDGET (inferior_ptid)); 983 inferior_ptid = pid_to_ptid (PIDGET (inferior_ptid));
984 beneath->to_resume (beneath, ptid, step, sig); 984 beneath->to_resume (beneath, ptid, step, sig);
985 do_cleanups (cleanup); 985 do_cleanups (cleanup);
986 } 986 }
987 else 987 else
988 { 988 {
989 thread = find_thread_ptid (ptid); 989 thread = find_thread_ptid (ptid);
990 if (!thread) 990 if (!thread)
991 error (_("aix-thread resume: unknown pthread %ld"), 991 error (_("aix-thread resume: unknown pthread %ld"),
992 TIDGET (ptid)); 992 TIDGET (ptid));
993 993
994 tid[0] = thread->private->tid; 994 tid[0] = thread->private->tid;
995 if (tid[0] == PTHDB_INVALID_TID) 995 if (tid[0] == PTHDB_INVALID_TID)
996 error (_("aix-thread resume: no tid for pthread %ld"), 996 error (_("aix-thread resume: no tid for pthread %ld"),
997 TIDGET (ptid)); 997 TIDGET (ptid));
998 tid[1] = 0; 998 tid[1] = 0;
999 999
1000 if (arch64) 1000 if (arch64)
1001 ptrace64aix (PTT_CONTINUE, tid[0], 1, 1001 ptrace64aix (PTT_CONTINUE, tid[0], 1,
1002 » » target_signal_to_host (sig), (void *) tid); 1002 » » gdb_signal_to_host (sig), (void *) tid);
1003 else 1003 else
1004 ptrace32 (PTT_CONTINUE, tid[0], (int *) 1, 1004 ptrace32 (PTT_CONTINUE, tid[0], (int *) 1,
1005 » » target_signal_to_host (sig), (void *) tid); 1005 » » gdb_signal_to_host (sig), (void *) tid);
1006 } 1006 }
1007 } 1007 }
1008 1008
1009 /* Wait for thread/process ID if != -1 or for any thread otherwise. 1009 /* Wait for thread/process ID if != -1 or for any thread otherwise.
1010 If an error occurs, return -1, else return the pid of the stopped 1010 If an error occurs, return -1, else return the pid of the stopped
1011 thread. */ 1011 thread. */
1012 1012
1013 static ptid_t 1013 static ptid_t
1014 aix_thread_wait (struct target_ops *ops, 1014 aix_thread_wait (struct target_ops *ops,
1015 ptid_t ptid, struct target_waitstatus *status, int options) 1015 ptid_t ptid, struct target_waitstatus *status, int options)
1016 { 1016 {
1017 struct cleanup *cleanup = save_inferior_ptid (); 1017 struct cleanup *cleanup = save_inferior_ptid ();
1018 struct target_ops *beneath = find_target_beneath (ops); 1018 struct target_ops *beneath = find_target_beneath (ops);
1019 1019
1020 pid_to_prc (&ptid); 1020 pid_to_prc (&ptid);
1021 1021
1022 inferior_ptid = pid_to_ptid (PIDGET (inferior_ptid)); 1022 inferior_ptid = pid_to_ptid (PIDGET (inferior_ptid));
1023 ptid = beneath->to_wait (beneath, ptid, status, options); 1023 ptid = beneath->to_wait (beneath, ptid, status, options);
1024 do_cleanups (cleanup); 1024 do_cleanups (cleanup);
1025 1025
1026 if (PIDGET (ptid) == -1) 1026 if (PIDGET (ptid) == -1)
1027 return pid_to_ptid (-1); 1027 return pid_to_ptid (-1);
1028 1028
1029 /* Check whether libpthdebug might be ready to be initialized. */ 1029 /* Check whether libpthdebug might be ready to be initialized. */
1030 if (!pd_active && status->kind == TARGET_WAITKIND_STOPPED 1030 if (!pd_active && status->kind == TARGET_WAITKIND_STOPPED
1031 && status->value.sig == TARGET_SIGNAL_TRAP) 1031 && status->value.sig == GDB_SIGNAL_TRAP)
1032 { 1032 {
1033 struct regcache *regcache = get_thread_regcache (ptid); 1033 struct regcache *regcache = get_thread_regcache (ptid);
1034 struct gdbarch *gdbarch = get_regcache_arch (regcache); 1034 struct gdbarch *gdbarch = get_regcache_arch (regcache);
1035 1035
1036 if (regcache_read_pc (regcache) 1036 if (regcache_read_pc (regcache)
1037 - gdbarch_decr_pc_after_break (gdbarch) == pd_brk_addr) 1037 - gdbarch_decr_pc_after_break (gdbarch) == pd_brk_addr)
1038 return pd_activate (0); 1038 return pd_activate (0);
1039 } 1039 }
1040 1040
1041 return pd_update (0); 1041 return pd_update (0);
(...skipping 26 matching lines...) Expand all
1068 supply_fprs (struct regcache *regcache, double *vals) 1068 supply_fprs (struct regcache *regcache, double *vals)
1069 { 1069 {
1070 struct gdbarch *gdbarch = get_regcache_arch (regcache); 1070 struct gdbarch *gdbarch = get_regcache_arch (regcache);
1071 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch); 1071 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
1072 int regno; 1072 int regno;
1073 1073
1074 /* This function should never be called on architectures without 1074 /* This function should never be called on architectures without
1075 floating-point registers. */ 1075 floating-point registers. */
1076 gdb_assert (ppc_floating_point_unit_p (gdbarch)); 1076 gdb_assert (ppc_floating_point_unit_p (gdbarch));
1077 1077
1078 for (regno = 0; regno < ppc_num_fprs; regno++) 1078 for (regno = tdep->ppc_fp0_regnum;
1079 regcache_raw_supply (regcache, regno + tdep->ppc_fp0_regnum, 1079 regno < tdep->ppc_fp0_regnum + ppc_num_fprs;
1080 » » » (char *) (vals + regno)); 1080 regno++)
1081 regcache_raw_supply (regcache, regno,
1082 » » » (char *) (vals + regno - tdep->ppc_fp0_regnum));
1081 } 1083 }
1082 1084
1083 /* Predicate to test whether given register number is a "special" register. */ 1085 /* Predicate to test whether given register number is a "special" register. */
1084 static int 1086 static int
1085 special_register_p (struct gdbarch *gdbarch, int regno) 1087 special_register_p (struct gdbarch *gdbarch, int regno)
1086 { 1088 {
1087 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch); 1089 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
1088 1090
1089 return regno == gdbarch_pc_regnum (gdbarch) 1091 return regno == gdbarch_pc_regnum (gdbarch)
1090 || regno == tdep->ppc_ps_regnum 1092 || regno == tdep->ppc_ps_regnum
(...skipping 258 matching lines...) Expand 10 before | Expand all | Expand 10 after
1349 int regno; 1351 int regno;
1350 1352
1351 /* This function should never be called on architectures without 1353 /* This function should never be called on architectures without
1352 floating-point registers. */ 1354 floating-point registers. */
1353 gdb_assert (ppc_floating_point_unit_p (gdbarch)); 1355 gdb_assert (ppc_floating_point_unit_p (gdbarch));
1354 1356
1355 for (regno = tdep->ppc_fp0_regnum; 1357 for (regno = tdep->ppc_fp0_regnum;
1356 regno < tdep->ppc_fp0_regnum + ppc_num_fprs; 1358 regno < tdep->ppc_fp0_regnum + ppc_num_fprs;
1357 regno++) 1359 regno++)
1358 if (REG_VALID == regcache_register_status (regcache, regno)) 1360 if (REG_VALID == regcache_register_status (regcache, regno))
1359 regcache_raw_collect (regcache, regno, vals + regno); 1361 regcache_raw_collect (regcache, regno,
1362 » » » vals + regno - tdep->ppc_fp0_regnum);
1360 } 1363 }
1361 1364
1362 /* Store the special registers into the specified 64-bit and 32-bit 1365 /* Store the special registers into the specified 64-bit and 32-bit
1363 locations. */ 1366 locations. */
1364 1367
1365 static void 1368 static void
1366 fill_sprs64 (const struct regcache *regcache, 1369 fill_sprs64 (const struct regcache *regcache,
1367 uint64_t *iar, uint64_t *msr, uint32_t *cr, 1370 uint64_t *iar, uint64_t *msr, uint32_t *cr,
1368 uint64_t *lr, uint64_t *ctr, uint32_t *xer, 1371 uint64_t *lr, uint64_t *ctr, uint32_t *xer,
1369 uint32_t *fpscr) 1372 uint32_t *fpscr)
(...skipping 452 matching lines...) Expand 10 before | Expand all | Expand 10 after
1822 aix_thread_ops.to_pid_to_str = aix_thread_pid_to_str; 1825 aix_thread_ops.to_pid_to_str = aix_thread_pid_to_str;
1823 aix_thread_ops.to_extra_thread_info = aix_thread_extra_thread_info; 1826 aix_thread_ops.to_extra_thread_info = aix_thread_extra_thread_info;
1824 aix_thread_ops.to_get_ada_task_ptid = aix_thread_get_ada_task_ptid; 1827 aix_thread_ops.to_get_ada_task_ptid = aix_thread_get_ada_task_ptid;
1825 aix_thread_ops.to_stratum = thread_stratum; 1828 aix_thread_ops.to_stratum = thread_stratum;
1826 aix_thread_ops.to_magic = OPS_MAGIC; 1829 aix_thread_ops.to_magic = OPS_MAGIC;
1827 } 1830 }
1828 1831
1829 /* Module startup initialization function, automagically called by 1832 /* Module startup initialization function, automagically called by
1830 init.c. */ 1833 init.c. */
1831 1834
1835 void _initialize_aix_thread (void);
1836
1832 void 1837 void
1833 _initialize_aix_thread (void) 1838 _initialize_aix_thread (void)
1834 { 1839 {
1835 init_aix_thread_ops (); 1840 init_aix_thread_ops ();
1836 add_target (&aix_thread_ops); 1841 add_target (&aix_thread_ops);
1837 1842
1838 /* Notice when object files get loaded and unloaded. */ 1843 /* Notice when object files get loaded and unloaded. */
1839 observer_attach_new_objfile (new_objfile); 1844 observer_attach_new_objfile (new_objfile);
1840 1845
1841 add_setshow_boolean_cmd ("aix-thread", class_maintenance, &debug_aix_thread, 1846 add_setshow_boolean_cmd ("aix-thread", class_maintenance, &debug_aix_thread,
1842 _("Set debugging of AIX thread module."), 1847 _("Set debugging of AIX thread module."),
1843 _("Show debugging of AIX thread module."), 1848 _("Show debugging of AIX thread module."),
1844 _("Enables debugging output (used to debug GDB)."), 1849 _("Enables debugging output (used to debug GDB)."),
1845 NULL, NULL, 1850 NULL, NULL,
1846 /* FIXME: i18n: Debugging of AIX thread 1851 /* FIXME: i18n: Debugging of AIX thread
1847 module is \"%d\". */ 1852 module is \"%d\". */
1848 &setdebuglist, &showdebuglist); 1853 &setdebuglist, &showdebuglist);
1849 } 1854 }
OLDNEW
« no previous file with comments | « gdb/agent.c ('k') | gdb/alpha-linux-tdep.c » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698