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

Side by Side Diff: gdb/nto-procfs.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/nbsd-tdep.c ('k') | gdb/nto-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 /* Machine independent support for QNX Neutrino /proc (process file system) 1 /* Machine independent support for QNX Neutrino /proc (process file system)
2 for GDB. Written by Colin Burgess at QNX Software Systems Limited. 2 for GDB. Written by Colin Burgess at QNX Software Systems Limited.
3 3
4 Copyright (C) 2003, 2006-2012 Free Software Foundation, Inc. 4 Copyright (C) 2003, 2006-2012 Free Software Foundation, Inc.
5 5
6 Contributed by QNX Software Systems Ltd. 6 Contributed by QNX Software Systems Ltd.
7 7
8 This file is part of GDB. 8 This file is part of GDB.
9 9
10 This program is free software; you can redistribute it and/or modify 10 This program is free software; you can redistribute it and/or modify
(...skipping 294 matching lines...) Expand 10 before | Expand all | Expand 10 after
305 305
306 update_thread_private_data_name (new_thread, tn->name_buf); 306 update_thread_private_data_name (new_thread, tn->name_buf);
307 307
308 pti = (struct private_thread_info *) new_thread->private; 308 pti = (struct private_thread_info *) new_thread->private;
309 pti->tid = tid; 309 pti->tid = tid;
310 pti->state = state; 310 pti->state = state;
311 pti->flags = flags; 311 pti->flags = flags;
312 #endif /* _NTO_VERSION */ 312 #endif /* _NTO_VERSION */
313 } 313 }
314 314
315 void 315 static void
316 procfs_find_new_threads (struct target_ops *ops) 316 procfs_find_new_threads (struct target_ops *ops)
317 { 317 {
318 procfs_status status; 318 procfs_status status;
319 pid_t pid; 319 pid_t pid;
320 ptid_t ptid; 320 ptid_t ptid;
321 pthread_t tid; 321 pthread_t tid;
322 struct thread_info *new_thread; 322 struct thread_info *new_thread;
323 323
324 if (ctl_fd == -1) 324 if (ctl_fd == -1)
325 return; 325 return;
(...skipping 399 matching lines...) Expand 10 before | Expand all | Expand 10 after
725 sigset_t set; 725 sigset_t set;
726 siginfo_t info; 726 siginfo_t info;
727 procfs_status status; 727 procfs_status status;
728 static int exit_signo = 0; /* To track signals that cause termination. */ 728 static int exit_signo = 0; /* To track signals that cause termination. */
729 729
730 ourstatus->kind = TARGET_WAITKIND_SPURIOUS; 730 ourstatus->kind = TARGET_WAITKIND_SPURIOUS;
731 731
732 if (ptid_equal (inferior_ptid, null_ptid)) 732 if (ptid_equal (inferior_ptid, null_ptid))
733 { 733 {
734 ourstatus->kind = TARGET_WAITKIND_STOPPED; 734 ourstatus->kind = TARGET_WAITKIND_STOPPED;
735 ourstatus->value.sig = TARGET_SIGNAL_0; 735 ourstatus->value.sig = GDB_SIGNAL_0;
736 exit_signo = 0; 736 exit_signo = 0;
737 return null_ptid; 737 return null_ptid;
738 } 738 }
739 739
740 sigemptyset (&set); 740 sigemptyset (&set);
741 sigaddset (&set, SIGUSR1); 741 sigaddset (&set, SIGUSR1);
742 742
743 devctl (ctl_fd, DCMD_PROC_STATUS, &status, sizeof (status), 0); 743 devctl (ctl_fd, DCMD_PROC_STATUS, &status, sizeof (status), 0);
744 while (!(status.flags & _DEBUG_FLAG_ISTOP)) 744 while (!(status.flags & _DEBUG_FLAG_ISTOP))
745 { 745 {
746 ofunc = (void (*)()) signal (SIGINT, nto_interrupt); 746 ofunc = (void (*)()) signal (SIGINT, nto_interrupt);
747 sigwaitinfo (&set, &info); 747 sigwaitinfo (&set, &info);
748 signal (SIGINT, ofunc); 748 signal (SIGINT, ofunc);
749 devctl (ctl_fd, DCMD_PROC_STATUS, &status, sizeof (status), 0); 749 devctl (ctl_fd, DCMD_PROC_STATUS, &status, sizeof (status), 0);
750 } 750 }
751 751
752 if (status.flags & _DEBUG_FLAG_SSTEP) 752 if (status.flags & _DEBUG_FLAG_SSTEP)
753 { 753 {
754 ourstatus->kind = TARGET_WAITKIND_STOPPED; 754 ourstatus->kind = TARGET_WAITKIND_STOPPED;
755 ourstatus->value.sig = TARGET_SIGNAL_TRAP; 755 ourstatus->value.sig = GDB_SIGNAL_TRAP;
756 } 756 }
757 /* Was it a breakpoint? */ 757 /* Was it a breakpoint? */
758 else if (status.flags & _DEBUG_FLAG_TRACE) 758 else if (status.flags & _DEBUG_FLAG_TRACE)
759 { 759 {
760 ourstatus->kind = TARGET_WAITKIND_STOPPED; 760 ourstatus->kind = TARGET_WAITKIND_STOPPED;
761 ourstatus->value.sig = TARGET_SIGNAL_TRAP; 761 ourstatus->value.sig = GDB_SIGNAL_TRAP;
762 } 762 }
763 else if (status.flags & _DEBUG_FLAG_ISTOP) 763 else if (status.flags & _DEBUG_FLAG_ISTOP)
764 { 764 {
765 switch (status.why) 765 switch (status.why)
766 { 766 {
767 case _DEBUG_WHY_SIGNALLED: 767 case _DEBUG_WHY_SIGNALLED:
768 ourstatus->kind = TARGET_WAITKIND_STOPPED; 768 ourstatus->kind = TARGET_WAITKIND_STOPPED;
769 ourstatus->value.sig = 769 ourstatus->value.sig =
770 » target_signal_from_host (status.info.si_signo); 770 » gdb_signal_from_host (status.info.si_signo);
771 exit_signo = 0; 771 exit_signo = 0;
772 break; 772 break;
773 case _DEBUG_WHY_FAULTED: 773 case _DEBUG_WHY_FAULTED:
774 ourstatus->kind = TARGET_WAITKIND_STOPPED; 774 ourstatus->kind = TARGET_WAITKIND_STOPPED;
775 if (status.info.si_signo == SIGTRAP) 775 if (status.info.si_signo == SIGTRAP)
776 { 776 {
777 ourstatus->value.sig = 0; 777 ourstatus->value.sig = 0;
778 exit_signo = 0; 778 exit_signo = 0;
779 } 779 }
780 else 780 else
781 { 781 {
782 ourstatus->value.sig = 782 ourstatus->value.sig =
783 » » target_signal_from_host (status.info.si_signo); 783 » » gdb_signal_from_host (status.info.si_signo);
784 exit_signo = ourstatus->value.sig; 784 exit_signo = ourstatus->value.sig;
785 } 785 }
786 break; 786 break;
787 787
788 case _DEBUG_WHY_TERMINATED: 788 case _DEBUG_WHY_TERMINATED:
789 { 789 {
790 int waitval = 0; 790 int waitval = 0;
791 791
792 waitpid (PIDGET (inferior_ptid), &waitval, WNOHANG); 792 waitpid (PIDGET (inferior_ptid), &waitval, WNOHANG);
793 if (exit_signo) 793 if (exit_signo)
794 { 794 {
795 /* Abnormal death. */ 795 /* Abnormal death. */
796 ourstatus->kind = TARGET_WAITKIND_SIGNALLED; 796 ourstatus->kind = TARGET_WAITKIND_SIGNALLED;
797 ourstatus->value.sig = exit_signo; 797 ourstatus->value.sig = exit_signo;
798 } 798 }
799 else 799 else
800 { 800 {
801 /* Normal death. */ 801 /* Normal death. */
802 ourstatus->kind = TARGET_WAITKIND_EXITED; 802 ourstatus->kind = TARGET_WAITKIND_EXITED;
803 ourstatus->value.integer = WEXITSTATUS (waitval); 803 ourstatus->value.integer = WEXITSTATUS (waitval);
804 } 804 }
805 exit_signo = 0; 805 exit_signo = 0;
806 break; 806 break;
807 } 807 }
808 808
809 case _DEBUG_WHY_REQUESTED: 809 case _DEBUG_WHY_REQUESTED:
810 /* We are assuming a requested stop is due to a SIGINT. */ 810 /* We are assuming a requested stop is due to a SIGINT. */
811 ourstatus->kind = TARGET_WAITKIND_STOPPED; 811 ourstatus->kind = TARGET_WAITKIND_STOPPED;
812 » ourstatus->value.sig = TARGET_SIGNAL_INT; 812 » ourstatus->value.sig = GDB_SIGNAL_INT;
813 exit_signo = 0; 813 exit_signo = 0;
814 break; 814 break;
815 } 815 }
816 } 816 }
817 817
818 return ptid_build (status.pid, 0, status.tid); 818 return ptid_build (status.pid, 0, status.tid);
819 } 819 }
820 820
821 /* Read the current values of the inferior's registers, both the 821 /* Read the current values of the inferior's registers, both the
822 general register set and floating point registers (if supported) 822 general register set and floating point registers (if supported)
(...skipping 122 matching lines...) Expand 10 before | Expand all | Expand 10 after
945 static int 945 static int
946 procfs_remove_hw_breakpoint (struct gdbarch *gdbarch, 946 procfs_remove_hw_breakpoint (struct gdbarch *gdbarch,
947 struct bp_target_info *bp_tgt) 947 struct bp_target_info *bp_tgt)
948 { 948 {
949 return procfs_breakpoint (bp_tgt->placed_address, 949 return procfs_breakpoint (bp_tgt->placed_address,
950 _DEBUG_BREAK_EXEC | _DEBUG_BREAK_HW, -1); 950 _DEBUG_BREAK_EXEC | _DEBUG_BREAK_HW, -1);
951 } 951 }
952 952
953 static void 953 static void
954 procfs_resume (struct target_ops *ops, 954 procfs_resume (struct target_ops *ops,
955 » ptid_t ptid, int step, enum target_signal signo) 955 » ptid_t ptid, int step, enum gdb_signal signo)
956 { 956 {
957 int signal_to_pass; 957 int signal_to_pass;
958 procfs_status status; 958 procfs_status status;
959 sigset_t *run_fault = (sigset_t *) (void *) &run.fault; 959 sigset_t *run_fault = (sigset_t *) (void *) &run.fault;
960 960
961 if (ptid_equal (inferior_ptid, null_ptid)) 961 if (ptid_equal (inferior_ptid, null_ptid))
962 return; 962 return;
963 963
964 procfs_set_thread (ptid_equal (ptid, minus_one_ptid) ? inferior_ptid : 964 procfs_set_thread (ptid_equal (ptid, minus_one_ptid) ? inferior_ptid :
965 ptid); 965 ptid);
966 966
967 run.flags = _DEBUG_RUN_FAULT | _DEBUG_RUN_TRACE; 967 run.flags = _DEBUG_RUN_FAULT | _DEBUG_RUN_TRACE;
968 if (step) 968 if (step)
969 run.flags |= _DEBUG_RUN_STEP; 969 run.flags |= _DEBUG_RUN_STEP;
970 970
971 sigemptyset (run_fault); 971 sigemptyset (run_fault);
972 sigaddset (run_fault, FLTBPT); 972 sigaddset (run_fault, FLTBPT);
973 sigaddset (run_fault, FLTTRACE); 973 sigaddset (run_fault, FLTTRACE);
974 sigaddset (run_fault, FLTILL); 974 sigaddset (run_fault, FLTILL);
975 sigaddset (run_fault, FLTPRIV); 975 sigaddset (run_fault, FLTPRIV);
976 sigaddset (run_fault, FLTBOUNDS); 976 sigaddset (run_fault, FLTBOUNDS);
977 sigaddset (run_fault, FLTIOVF); 977 sigaddset (run_fault, FLTIOVF);
978 sigaddset (run_fault, FLTIZDIV); 978 sigaddset (run_fault, FLTIZDIV);
979 sigaddset (run_fault, FLTFPE); 979 sigaddset (run_fault, FLTFPE);
980 /* Peter V will be changing this at some point. */ 980 /* Peter V will be changing this at some point. */
981 sigaddset (run_fault, FLTPAGE); 981 sigaddset (run_fault, FLTPAGE);
982 982
983 run.flags |= _DEBUG_RUN_ARM; 983 run.flags |= _DEBUG_RUN_ARM;
984 984
985 signal_to_pass = target_signal_to_host (signo); 985 signal_to_pass = gdb_signal_to_host (signo);
986 986
987 if (signal_to_pass) 987 if (signal_to_pass)
988 { 988 {
989 devctl (ctl_fd, DCMD_PROC_STATUS, &status, sizeof (status), 0); 989 devctl (ctl_fd, DCMD_PROC_STATUS, &status, sizeof (status), 0);
990 signal_to_pass = target_signal_to_host (signo); 990 signal_to_pass = gdb_signal_to_host (signo);
991 if (status.why & (_DEBUG_WHY_SIGNALLED | _DEBUG_WHY_FAULTED)) 991 if (status.why & (_DEBUG_WHY_SIGNALLED | _DEBUG_WHY_FAULTED))
992 { 992 {
993 if (signal_to_pass != status.info.si_signo) 993 if (signal_to_pass != status.info.si_signo)
994 { 994 {
995 SignalKill (nto_node (), PIDGET (inferior_ptid), 0, 995 SignalKill (nto_node (), PIDGET (inferior_ptid), 0,
996 signal_to_pass, 0, 0); 996 signal_to_pass, 0, 0);
997 run.flags |= _DEBUG_RUN_CLRFLT | _DEBUG_RUN_CLRSIG; 997 run.flags |= _DEBUG_RUN_CLRFLT | _DEBUG_RUN_CLRSIG;
998 } 998 }
999 else /* Let it kill the program without telling us. */ 999 else /* Let it kill the program without telling us. */
1000 sigdelset (&run.trace, signal_to_pass); 1000 sigdelset (&run.trace, signal_to_pass);
(...skipping 332 matching lines...) Expand 10 before | Expand all | Expand 10 after
1333 1333
1334 static void 1334 static void
1335 procfs_pass_signals (int numsigs, unsigned char *pass_signals) 1335 procfs_pass_signals (int numsigs, unsigned char *pass_signals)
1336 { 1336 {
1337 int signo; 1337 int signo;
1338 1338
1339 sigfillset (&run.trace); 1339 sigfillset (&run.trace);
1340 1340
1341 for (signo = 1; signo < NSIG; signo++) 1341 for (signo = 1; signo < NSIG; signo++)
1342 { 1342 {
1343 int target_signo = target_signal_from_host (signo); 1343 int target_signo = gdb_signal_from_host (signo);
1344 if (target_signo < numsigs && pass_signals[target_signo]) 1344 if (target_signo < numsigs && pass_signals[target_signo])
1345 sigdelset (&run.trace, signo); 1345 sigdelset (&run.trace, signo);
1346 } 1346 }
1347 } 1347 }
1348 1348
1349 static struct tidinfo * 1349 static struct tidinfo *
1350 procfs_thread_info (pid_t pid, short tid) 1350 procfs_thread_info (pid_t pid, short tid)
1351 { 1351 {
1352 /* NYI */ 1352 /* NYI */
1353 return NULL; 1353 return NULL;
1354 } 1354 }
1355 1355
1356 char * 1356 static char *
1357 procfs_pid_to_str (struct target_ops *ops, ptid_t ptid) 1357 procfs_pid_to_str (struct target_ops *ops, ptid_t ptid)
1358 { 1358 {
1359 static char buf[1024]; 1359 static char buf[1024];
1360 int pid, tid, n; 1360 int pid, tid, n;
1361 struct tidinfo *tip; 1361 struct tidinfo *tip;
1362 1362
1363 pid = ptid_get_pid (ptid); 1363 pid = ptid_get_pid (ptid);
1364 tid = ptid_get_tid (ptid); 1364 tid = ptid_get_tid (ptid);
1365 1365
1366 n = snprintf (buf, 1023, "process %d", pid); 1366 n = snprintf (buf, 1023, "process %d", pid);
(...skipping 137 matching lines...) Expand 10 before | Expand all | Expand 10 after
1504 struct expression *cond) 1504 struct expression *cond)
1505 { 1505 {
1506 return procfs_hw_watchpoint (addr, len, type); 1506 return procfs_hw_watchpoint (addr, len, type);
1507 } 1507 }
1508 1508
1509 static int 1509 static int
1510 procfs_stopped_by_watchpoint (void) 1510 procfs_stopped_by_watchpoint (void)
1511 { 1511 {
1512 return 0; 1512 return 0;
1513 } 1513 }
OLDNEW
« no previous file with comments | « gdb/nbsd-tdep.c ('k') | gdb/nto-tdep.c » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698