components/gdb/patches/gdb.fork-child.c.patch
author Rich Burridge <rich.burridge@oracle.com>
Tue, 20 Mar 2012 09:27:53 -0700
changeset 739 fd5e421b1434
parent 243 34b34302cac9
child 1511 4d3b0b480760
permissions -rw-r--r--
7085609 openexr and ilmbase need license file upgrade 7085613 libmng needs license file upgrade 7085624 lighttpd needs TPNO and license file modifications 7085966 iperf needs TPNO and license file modifications 7085948 swig needs TPNO and license file modifications 7085963 tcpdump needs TPNO and license file modifications 7085967 Lua needs TPNO and license file modifications 7123118 libxslt needs TPNO and license file modifications 7123119 libxml2 needs TPNO and license file modifications 7133262 areca needs TPNO and license file modifications 7151922 autogen needs TPNO and license file modifications
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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.  */