author | George Vasick <george.vasick@oracle.com> |
Sat, 14 May 2011 00:21:25 +0000 | |
changeset 243 | 34b34302cac9 |
child 1511 | 4d3b0b480760 |
permissions | -rw-r--r-- |
243
34b34302cac9
7039303 Move gdb 6.8 from SFW to Userland.
George Vasick <george.vasick@oracle.com>
parents:
diff
changeset
|
1 |
--- gdb-6.8.orig/gdb/fork-child.c Tue Jan 29 13:11:24 2008 |
34b34302cac9
7039303 Move gdb 6.8 from SFW to Userland.
George Vasick <george.vasick@oracle.com>
parents:
diff
changeset
|
2 |
+++ gdb-6.8-64/gdb/fork-child.c Fri Sep 3 15:08:51 2010 |
34b34302cac9
7039303 Move gdb 6.8 from SFW to Userland.
George Vasick <george.vasick@oracle.com>
parents:
diff
changeset
|
3 |
@@ -40,6 +40,16 @@ |
34b34302cac9
7039303 Move gdb 6.8 from SFW to Userland.
George Vasick <george.vasick@oracle.com>
parents:
diff
changeset
|
4 |
|
34b34302cac9
7039303 Move gdb 6.8 from SFW to Userland.
George Vasick <george.vasick@oracle.com>
parents:
diff
changeset
|
5 |
extern char **environ; |
34b34302cac9
7039303 Move gdb 6.8 from SFW to Userland.
George Vasick <george.vasick@oracle.com>
parents:
diff
changeset
|
6 |
|
34b34302cac9
7039303 Move gdb 6.8 from SFW to Userland.
George Vasick <george.vasick@oracle.com>
parents:
diff
changeset
|
7 |
+/* On Solaris, the SHELL may be a hard link to /usr/lib/isaexec. |
34b34302cac9
7039303 Move gdb 6.8 from SFW to Userland.
George Vasick <george.vasick@oracle.com>
parents:
diff
changeset
|
8 |
+ If so, there will be one more exec trap to skip while starting |
34b34302cac9
7039303 Move gdb 6.8 from SFW to Userland.
George Vasick <george.vasick@oracle.com>
parents:
diff
changeset
|
9 |
+ the inferior. */ |
34b34302cac9
7039303 Move gdb 6.8 from SFW to Userland.
George Vasick <george.vasick@oracle.com>
parents:
diff
changeset
|
10 |
+ |
34b34302cac9
7039303 Move gdb 6.8 from SFW to Userland.
George Vasick <george.vasick@oracle.com>
parents:
diff
changeset
|
11 |
+#include <fcntl.h> |
34b34302cac9
7039303 Move gdb 6.8 from SFW to Userland.
George Vasick <george.vasick@oracle.com>
parents:
diff
changeset
|
12 |
+#include <sys/types.h> |
34b34302cac9
7039303 Move gdb 6.8 from SFW to Userland.
George Vasick <george.vasick@oracle.com>
parents:
diff
changeset
|
13 |
+#include <sys/stat.h> |
34b34302cac9
7039303 Move gdb 6.8 from SFW to Userland.
George Vasick <george.vasick@oracle.com>
parents:
diff
changeset
|
14 |
+ |
34b34302cac9
7039303 Move gdb 6.8 from SFW to Userland.
George Vasick <george.vasick@oracle.com>
parents:
diff
changeset
|
15 |
+static int isaexec_shell; |
34b34302cac9
7039303 Move gdb 6.8 from SFW to Userland.
George Vasick <george.vasick@oracle.com>
parents:
diff
changeset
|
16 |
+ |
34b34302cac9
7039303 Move gdb 6.8 from SFW to Userland.
George Vasick <george.vasick@oracle.com>
parents:
diff
changeset
|
17 |
/* Break up SCRATCH into an argument vector suitable for passing to |
34b34302cac9
7039303 Move gdb 6.8 from SFW to Userland.
George Vasick <george.vasick@oracle.com>
parents:
diff
changeset
|
18 |
execvp and store it in ARGV. E.g., on "run a b c d" this routine |
34b34302cac9
7039303 Move gdb 6.8 from SFW to Userland.
George Vasick <george.vasick@oracle.com>
parents:
diff
changeset
|
19 |
would get as input the string "a b c d", and as output it would |
34b34302cac9
7039303 Move gdb 6.8 from SFW to Userland.
George Vasick <george.vasick@oracle.com>
parents:
diff
changeset
|
20 |
@@ -136,6 +146,8 @@ |
34b34302cac9
7039303 Move gdb 6.8 from SFW to Userland.
George Vasick <george.vasick@oracle.com>
parents:
diff
changeset
|
21 |
static char **argv; |
34b34302cac9
7039303 Move gdb 6.8 from SFW to Userland.
George Vasick <george.vasick@oracle.com>
parents:
diff
changeset
|
22 |
const char *inferior_io_terminal = get_inferior_io_terminal (); |
34b34302cac9
7039303 Move gdb 6.8 from SFW to Userland.
George Vasick <george.vasick@oracle.com>
parents:
diff
changeset
|
23 |
|
34b34302cac9
7039303 Move gdb 6.8 from SFW to Userland.
George Vasick <george.vasick@oracle.com>
parents:
diff
changeset
|
24 |
+ isaexec_shell = 0; /* Solaris only */ |
34b34302cac9
7039303 Move gdb 6.8 from SFW to Userland.
George Vasick <george.vasick@oracle.com>
parents:
diff
changeset
|
25 |
+ |
34b34302cac9
7039303 Move gdb 6.8 from SFW to Userland.
George Vasick <george.vasick@oracle.com>
parents:
diff
changeset
|
26 |
/* If no exec file handed to us, get it from the exec-file command |
34b34302cac9
7039303 Move gdb 6.8 from SFW to Userland.
George Vasick <george.vasick@oracle.com>
parents:
diff
changeset
|
27 |
-- with a good, common error message if none is specified. */ |
34b34302cac9
7039303 Move gdb 6.8 from SFW to Userland.
George Vasick <george.vasick@oracle.com>
parents:
diff
changeset
|
28 |
exec_file = exec_file_arg; |
34b34302cac9
7039303 Move gdb 6.8 from SFW to Userland.
George Vasick <george.vasick@oracle.com>
parents:
diff
changeset
|
29 |
@@ -148,6 +160,9 @@ |
34b34302cac9
7039303 Move gdb 6.8 from SFW to Userland.
George Vasick <george.vasick@oracle.com>
parents:
diff
changeset
|
30 |
shell_file = shell_file_arg; |
34b34302cac9
7039303 Move gdb 6.8 from SFW to Userland.
George Vasick <george.vasick@oracle.com>
parents:
diff
changeset
|
31 |
if (STARTUP_WITH_SHELL) |
34b34302cac9
7039303 Move gdb 6.8 from SFW to Userland.
George Vasick <george.vasick@oracle.com>
parents:
diff
changeset
|
32 |
{ |
34b34302cac9
7039303 Move gdb 6.8 from SFW to Userland.
George Vasick <george.vasick@oracle.com>
parents:
diff
changeset
|
33 |
+ /* Solaris only, is the shell a hard link to isaexec? */ |
34b34302cac9
7039303 Move gdb 6.8 from SFW to Userland.
George Vasick <george.vasick@oracle.com>
parents:
diff
changeset
|
34 |
+ struct stat buf1, buf2; |
34b34302cac9
7039303 Move gdb 6.8 from SFW to Userland.
George Vasick <george.vasick@oracle.com>
parents:
diff
changeset
|
35 |
+ |
34b34302cac9
7039303 Move gdb 6.8 from SFW to Userland.
George Vasick <george.vasick@oracle.com>
parents:
diff
changeset
|
36 |
/* Figure out what shell to start up the user program under. */ |
34b34302cac9
7039303 Move gdb 6.8 from SFW to Userland.
George Vasick <george.vasick@oracle.com>
parents:
diff
changeset
|
37 |
if (shell_file == NULL) |
34b34302cac9
7039303 Move gdb 6.8 from SFW to Userland.
George Vasick <george.vasick@oracle.com>
parents:
diff
changeset
|
38 |
shell_file = getenv ("SHELL"); |
34b34302cac9
7039303 Move gdb 6.8 from SFW to Userland.
George Vasick <george.vasick@oracle.com>
parents:
diff
changeset
|
39 |
@@ -154,6 +169,25 @@ |
34b34302cac9
7039303 Move gdb 6.8 from SFW to Userland.
George Vasick <george.vasick@oracle.com>
parents:
diff
changeset
|
40 |
if (shell_file == NULL) |
34b34302cac9
7039303 Move gdb 6.8 from SFW to Userland.
George Vasick <george.vasick@oracle.com>
parents:
diff
changeset
|
41 |
shell_file = default_shell_file; |
34b34302cac9
7039303 Move gdb 6.8 from SFW to Userland.
George Vasick <george.vasick@oracle.com>
parents:
diff
changeset
|
42 |
shell = 1; |
34b34302cac9
7039303 Move gdb 6.8 from SFW to Userland.
George Vasick <george.vasick@oracle.com>
parents:
diff
changeset
|
43 |
+ |
34b34302cac9
7039303 Move gdb 6.8 from SFW to Userland.
George Vasick <george.vasick@oracle.com>
parents:
diff
changeset
|
44 |
+ /* Solaris only, is the shell a hard link to isaexec? |
34b34302cac9
7039303 Move gdb 6.8 from SFW to Userland.
George Vasick <george.vasick@oracle.com>
parents:
diff
changeset
|
45 |
+ If either stat call fails or the user's shell is |
34b34302cac9
7039303 Move gdb 6.8 from SFW to Userland.
George Vasick <george.vasick@oracle.com>
parents:
diff
changeset
|
46 |
+ not linked to isaexec, proceed with gdb's normal |
34b34302cac9
7039303 Move gdb 6.8 from SFW to Userland.
George Vasick <george.vasick@oracle.com>
parents:
diff
changeset
|
47 |
+ behavior, i.e. do not skip an extra exec. |
34b34302cac9
7039303 Move gdb 6.8 from SFW to Userland.
George Vasick <george.vasick@oracle.com>
parents:
diff
changeset
|
48 |
+ |
34b34302cac9
7039303 Move gdb 6.8 from SFW to Userland.
George Vasick <george.vasick@oracle.com>
parents:
diff
changeset
|
49 |
+ Assume that two files are the same if their inode |
34b34302cac9
7039303 Move gdb 6.8 from SFW to Userland.
George Vasick <george.vasick@oracle.com>
parents:
diff
changeset
|
50 |
+ numbers, device numbers, and number of links match. |
34b34302cac9
7039303 Move gdb 6.8 from SFW to Userland.
George Vasick <george.vasick@oracle.com>
parents:
diff
changeset
|
51 |
+ Is it possible to get a false positive if the shell |
34b34302cac9
7039303 Move gdb 6.8 from SFW to Userland.
George Vasick <george.vasick@oracle.com>
parents:
diff
changeset
|
52 |
+ and isaexec are located on different file systems? */ |
34b34302cac9
7039303 Move gdb 6.8 from SFW to Userland.
George Vasick <george.vasick@oracle.com>
parents:
diff
changeset
|
53 |
+ if ( |
34b34302cac9
7039303 Move gdb 6.8 from SFW to Userland.
George Vasick <george.vasick@oracle.com>
parents:
diff
changeset
|
54 |
+ stat ("/usr/lib/isaexec", &buf1) == 0 && |
34b34302cac9
7039303 Move gdb 6.8 from SFW to Userland.
George Vasick <george.vasick@oracle.com>
parents:
diff
changeset
|
55 |
+ stat (shell_file, &buf2) == 0 && |
34b34302cac9
7039303 Move gdb 6.8 from SFW to Userland.
George Vasick <george.vasick@oracle.com>
parents:
diff
changeset
|
56 |
+ buf1.st_ino == buf2.st_ino && |
34b34302cac9
7039303 Move gdb 6.8 from SFW to Userland.
George Vasick <george.vasick@oracle.com>
parents:
diff
changeset
|
57 |
+ buf1.st_dev == buf2.st_dev && |
34b34302cac9
7039303 Move gdb 6.8 from SFW to Userland.
George Vasick <george.vasick@oracle.com>
parents:
diff
changeset
|
58 |
+ buf1.st_nlink == buf2.st_nlink |
34b34302cac9
7039303 Move gdb 6.8 from SFW to Userland.
George Vasick <george.vasick@oracle.com>
parents:
diff
changeset
|
59 |
+ ) { |
34b34302cac9
7039303 Move gdb 6.8 from SFW to Userland.
George Vasick <george.vasick@oracle.com>
parents:
diff
changeset
|
60 |
+ isaexec_shell = 1; |
34b34302cac9
7039303 Move gdb 6.8 from SFW to Userland.
George Vasick <george.vasick@oracle.com>
parents:
diff
changeset
|
61 |
+ } |
34b34302cac9
7039303 Move gdb 6.8 from SFW to Userland.
George Vasick <george.vasick@oracle.com>
parents:
diff
changeset
|
62 |
} |
34b34302cac9
7039303 Move gdb 6.8 from SFW to Userland.
George Vasick <george.vasick@oracle.com>
parents:
diff
changeset
|
63 |
|
34b34302cac9
7039303 Move gdb 6.8 from SFW to Userland.
George Vasick <george.vasick@oracle.com>
parents:
diff
changeset
|
64 |
/* Multiplying the length of exec_file by 4 is to account for the |
34b34302cac9
7039303 Move gdb 6.8 from SFW to Userland.
George Vasick <george.vasick@oracle.com>
parents:
diff
changeset
|
65 |
@@ -395,6 +429,9 @@ |
34b34302cac9
7039303 Move gdb 6.8 from SFW to Userland.
George Vasick <george.vasick@oracle.com>
parents:
diff
changeset
|
66 |
int pending_execs = ntraps; |
34b34302cac9
7039303 Move gdb 6.8 from SFW to Userland.
George Vasick <george.vasick@oracle.com>
parents:
diff
changeset
|
67 |
int terminal_initted = 0; |
34b34302cac9
7039303 Move gdb 6.8 from SFW to Userland.
George Vasick <george.vasick@oracle.com>
parents:
diff
changeset
|
68 |
|
34b34302cac9
7039303 Move gdb 6.8 from SFW to Userland.
George Vasick <george.vasick@oracle.com>
parents:
diff
changeset
|
69 |
+ /* Solaris only, increment ntraps if shell is isaexec'ed. */ |
34b34302cac9
7039303 Move gdb 6.8 from SFW to Userland.
George Vasick <george.vasick@oracle.com>
parents:
diff
changeset
|
70 |
+ pending_execs += isaexec_shell; |
34b34302cac9
7039303 Move gdb 6.8 from SFW to Userland.
George Vasick <george.vasick@oracle.com>
parents:
diff
changeset
|
71 |
+ |
34b34302cac9
7039303 Move gdb 6.8 from SFW to Userland.
George Vasick <george.vasick@oracle.com>
parents:
diff
changeset
|
72 |
/* The process was started by the fork that created it, but it will |
34b34302cac9
7039303 Move gdb 6.8 from SFW to Userland.
George Vasick <george.vasick@oracle.com>
parents:
diff
changeset
|
73 |
have stopped one instruction after execing the shell. Here we |
34b34302cac9
7039303 Move gdb 6.8 from SFW to Userland.
George Vasick <george.vasick@oracle.com>
parents:
diff
changeset
|
74 |
must get it up to actual execution of the real program. */ |