components/libsigsegv/patches/stackvma-procfs.c.patch
author Roger A. Faulkner <Roger.Faulkner@Oracle.COM>
Thu, 24 Apr 2014 19:38:57 -0700
changeset 1850 fc1533d9d8d7
child 6403 9d25dbe7eb71
permissions -rw-r--r--
18647077 libsigsegv uses the obsolete ioctl-based version of the /proc interface
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
1850
fc1533d9d8d7 18647077 libsigsegv uses the obsolete ioctl-based version of the /proc interface
Roger A. Faulkner <Roger.Faulkner@Oracle.COM>
parents:
diff changeset
     1
#
fc1533d9d8d7 18647077 libsigsegv uses the obsolete ioctl-based version of the /proc interface
Roger A. Faulkner <Roger.Faulkner@Oracle.COM>
parents:
diff changeset
     2
# This patch converts libsigsegv from using the obsolete (since Solaris 2.6,
fc1533d9d8d7 18647077 libsigsegv uses the obsolete ioctl-based version of the /proc interface
Roger A. Faulkner <Roger.Faulkner@Oracle.COM>
parents:
diff changeset
     3
# 1997) ioctl-based version of the /proc interface to using the structured
fc1533d9d8d7 18647077 libsigsegv uses the obsolete ioctl-based version of the /proc interface
Roger A. Faulkner <Roger.Faulkner@Oracle.COM>
parents:
diff changeset
     4
# /proc interface as described in the proc(4) manual page.
fc1533d9d8d7 18647077 libsigsegv uses the obsolete ioctl-based version of the /proc interface
Roger A. Faulkner <Roger.Faulkner@Oracle.COM>
parents:
diff changeset
     5
# See libsigsegv bug: https://savannah.gnu.org/bugs/?42187
fc1533d9d8d7 18647077 libsigsegv uses the obsolete ioctl-based version of the /proc interface
Roger A. Faulkner <Roger.Faulkner@Oracle.COM>
parents:
diff changeset
     6
#
fc1533d9d8d7 18647077 libsigsegv uses the obsolete ioctl-based version of the /proc interface
Roger A. Faulkner <Roger.Faulkner@Oracle.COM>
parents:
diff changeset
     7
diff -r -u libsigsegv-2.6/configure.orig libsigsegv-2.6/configure
fc1533d9d8d7 18647077 libsigsegv uses the obsolete ioctl-based version of the /proc interface
Roger A. Faulkner <Roger.Faulkner@Oracle.COM>
parents:
diff changeset
     8
--- libsigsegv-2.6/configure.orig	2008-08-24 15:58:15.000000000 -0700
fc1533d9d8d7 18647077 libsigsegv uses the obsolete ioctl-based version of the /proc interface
Roger A. Faulkner <Roger.Faulkner@Oracle.COM>
parents:
diff changeset
     9
+++ libsigsegv-2.6/configure	2014-04-10 11:02:03.212637829 -0700
fc1533d9d8d7 18647077 libsigsegv uses the obsolete ioctl-based version of the /proc interface
Roger A. Faulkner <Roger.Faulkner@Oracle.COM>
parents:
diff changeset
    10
@@ -15596,8 +15596,8 @@
fc1533d9d8d7 18647077 libsigsegv uses the obsolete ioctl-based version of the /proc interface
Roger A. Faulkner <Roger.Faulkner@Oracle.COM>
parents:
diff changeset
    11
 _ACEOF
fc1533d9d8d7 18647077 libsigsegv uses the obsolete ioctl-based version of the /proc interface
Roger A. Faulkner <Roger.Faulkner@Oracle.COM>
parents:
diff changeset
    12
 
fc1533d9d8d7 18647077 libsigsegv uses the obsolete ioctl-based version of the /proc interface
Roger A. Faulkner <Roger.Faulkner@Oracle.COM>
parents:
diff changeset
    13
 
fc1533d9d8d7 18647077 libsigsegv uses the obsolete ioctl-based version of the /proc interface
Roger A. Faulkner <Roger.Faulkner@Oracle.COM>
parents:
diff changeset
    14
-{ $as_echo "$as_me:$LINENO: checking for PIOCMAP in sys/procfs.h" >&5
fc1533d9d8d7 18647077 libsigsegv uses the obsolete ioctl-based version of the /proc interface
Roger A. Faulkner <Roger.Faulkner@Oracle.COM>
parents:
diff changeset
    15
-$as_echo_n "checking for PIOCMAP in sys/procfs.h... " >&6; }
fc1533d9d8d7 18647077 libsigsegv uses the obsolete ioctl-based version of the /proc interface
Roger A. Faulkner <Roger.Faulkner@Oracle.COM>
parents:
diff changeset
    16
+{ $as_echo "$as_me:$LINENO: checking for prmap_t in procfs.h" >&5
fc1533d9d8d7 18647077 libsigsegv uses the obsolete ioctl-based version of the /proc interface
Roger A. Faulkner <Roger.Faulkner@Oracle.COM>
parents:
diff changeset
    17
+$as_echo_n "checking for prmap_t in procfs.h... " >&6; }
fc1533d9d8d7 18647077 libsigsegv uses the obsolete ioctl-based version of the /proc interface
Roger A. Faulkner <Roger.Faulkner@Oracle.COM>
parents:
diff changeset
    18
 if test "${sv_cv_procfsvma+set}" = set; then
fc1533d9d8d7 18647077 libsigsegv uses the obsolete ioctl-based version of the /proc interface
Roger A. Faulkner <Roger.Faulkner@Oracle.COM>
parents:
diff changeset
    19
   $as_echo_n "(cached) " >&6
fc1533d9d8d7 18647077 libsigsegv uses the obsolete ioctl-based version of the /proc interface
Roger A. Faulkner <Roger.Faulkner@Oracle.COM>
parents:
diff changeset
    20
 else
fc1533d9d8d7 18647077 libsigsegv uses the obsolete ioctl-based version of the /proc interface
Roger A. Faulkner <Roger.Faulkner@Oracle.COM>
parents:
diff changeset
    21
@@ -15608,12 +15608,11 @@
fc1533d9d8d7 18647077 libsigsegv uses the obsolete ioctl-based version of the /proc interface
Roger A. Faulkner <Roger.Faulkner@Oracle.COM>
parents:
diff changeset
    22
 cat confdefs.h >>conftest.$ac_ext
fc1533d9d8d7 18647077 libsigsegv uses the obsolete ioctl-based version of the /proc interface
Roger A. Faulkner <Roger.Faulkner@Oracle.COM>
parents:
diff changeset
    23
 cat >>conftest.$ac_ext <<_ACEOF
fc1533d9d8d7 18647077 libsigsegv uses the obsolete ioctl-based version of the /proc interface
Roger A. Faulkner <Roger.Faulkner@Oracle.COM>
parents:
diff changeset
    24
 /* end confdefs.h.  */
fc1533d9d8d7 18647077 libsigsegv uses the obsolete ioctl-based version of the /proc interface
Roger A. Faulkner <Roger.Faulkner@Oracle.COM>
parents:
diff changeset
    25
-#include <sys/procfs.h>
fc1533d9d8d7 18647077 libsigsegv uses the obsolete ioctl-based version of the /proc interface
Roger A. Faulkner <Roger.Faulkner@Oracle.COM>
parents:
diff changeset
    26
+#include <procfs.h>
fc1533d9d8d7 18647077 libsigsegv uses the obsolete ioctl-based version of the /proc interface
Roger A. Faulkner <Roger.Faulkner@Oracle.COM>
parents:
diff changeset
    27
 int
fc1533d9d8d7 18647077 libsigsegv uses the obsolete ioctl-based version of the /proc interface
Roger A. Faulkner <Roger.Faulkner@Oracle.COM>
parents:
diff changeset
    28
 main ()
fc1533d9d8d7 18647077 libsigsegv uses the obsolete ioctl-based version of the /proc interface
Roger A. Faulkner <Roger.Faulkner@Oracle.COM>
parents:
diff changeset
    29
 {
fc1533d9d8d7 18647077 libsigsegv uses the obsolete ioctl-based version of the /proc interface
Roger A. Faulkner <Roger.Faulkner@Oracle.COM>
parents:
diff changeset
    30
-int x = PIOCNMAP + PIOCMAP; prmap_t y;
fc1533d9d8d7 18647077 libsigsegv uses the obsolete ioctl-based version of the /proc interface
Roger A. Faulkner <Roger.Faulkner@Oracle.COM>
parents:
diff changeset
    31
-  ;
fc1533d9d8d7 18647077 libsigsegv uses the obsolete ioctl-based version of the /proc interface
Roger A. Faulkner <Roger.Faulkner@Oracle.COM>
parents:
diff changeset
    32
+  prmap_t y;
fc1533d9d8d7 18647077 libsigsegv uses the obsolete ioctl-based version of the /proc interface
Roger A. Faulkner <Roger.Faulkner@Oracle.COM>
parents:
diff changeset
    33
   return 0;
fc1533d9d8d7 18647077 libsigsegv uses the obsolete ioctl-based version of the /proc interface
Roger A. Faulkner <Roger.Faulkner@Oracle.COM>
parents:
diff changeset
    34
 }
fc1533d9d8d7 18647077 libsigsegv uses the obsolete ioctl-based version of the /proc interface
Roger A. Faulkner <Roger.Faulkner@Oracle.COM>
parents:
diff changeset
    35
 _ACEOF
fc1533d9d8d7 18647077 libsigsegv uses the obsolete ioctl-based version of the /proc interface
Roger A. Faulkner <Roger.Faulkner@Oracle.COM>
parents:
diff changeset
    36
diff -r -u libsigsegv-2.6/configure.ac.orig libsigsegv-2.6/configure.ac
fc1533d9d8d7 18647077 libsigsegv uses the obsolete ioctl-based version of the /proc interface
Roger A. Faulkner <Roger.Faulkner@Oracle.COM>
parents:
diff changeset
    37
--- libsigsegv-2.6/configure.ac.orig	2014-04-10 10:55:23.907673765 -0700
fc1533d9d8d7 18647077 libsigsegv uses the obsolete ioctl-based version of the /proc interface
Roger A. Faulkner <Roger.Faulkner@Oracle.COM>
parents:
diff changeset
    38
+++ libsigsegv-2.6/configure.ac	2014-04-10 11:02:35.810560742 -0700
fc1533d9d8d7 18647077 libsigsegv uses the obsolete ioctl-based version of the /proc interface
Roger A. Faulkner <Roger.Faulkner@Oracle.COM>
parents:
diff changeset
    39
@@ -619,9 +619,9 @@
fc1533d9d8d7 18647077 libsigsegv uses the obsolete ioctl-based version of the /proc interface
Roger A. Faulkner <Roger.Faulkner@Oracle.COM>
parents:
diff changeset
    40
    STACK_DIRECTION = 0 => spaghetti stack.])
fc1533d9d8d7 18647077 libsigsegv uses the obsolete ioctl-based version of the /proc interface
Roger A. Faulkner <Roger.Faulkner@Oracle.COM>
parents:
diff changeset
    41
 
fc1533d9d8d7 18647077 libsigsegv uses the obsolete ioctl-based version of the /proc interface
Roger A. Faulkner <Roger.Faulkner@Oracle.COM>
parents:
diff changeset
    42
 dnl Determination of the stack's virtual memory area.
fc1533d9d8d7 18647077 libsigsegv uses the obsolete ioctl-based version of the /proc interface
Roger A. Faulkner <Roger.Faulkner@Oracle.COM>
parents:
diff changeset
    43
-AC_CACHE_CHECK([for PIOCMAP in sys/procfs.h], sv_cv_procfsvma, [
fc1533d9d8d7 18647077 libsigsegv uses the obsolete ioctl-based version of the /proc interface
Roger A. Faulkner <Roger.Faulkner@Oracle.COM>
parents:
diff changeset
    44
-  AC_TRY_LINK([#include <sys/procfs.h>],
fc1533d9d8d7 18647077 libsigsegv uses the obsolete ioctl-based version of the /proc interface
Roger A. Faulkner <Roger.Faulkner@Oracle.COM>
parents:
diff changeset
    45
-    [int x = PIOCNMAP + PIOCMAP; prmap_t y;],
fc1533d9d8d7 18647077 libsigsegv uses the obsolete ioctl-based version of the /proc interface
Roger A. Faulkner <Roger.Faulkner@Oracle.COM>
parents:
diff changeset
    46
+AC_CACHE_CHECK([for prmap_t in procfs.h], sv_cv_procfsvma, [
fc1533d9d8d7 18647077 libsigsegv uses the obsolete ioctl-based version of the /proc interface
Roger A. Faulkner <Roger.Faulkner@Oracle.COM>
parents:
diff changeset
    47
+  AC_TRY_LINK([#include <procfs.h>],
fc1533d9d8d7 18647077 libsigsegv uses the obsolete ioctl-based version of the /proc interface
Roger A. Faulkner <Roger.Faulkner@Oracle.COM>
parents:
diff changeset
    48
+    [ prmap_t y;],
fc1533d9d8d7 18647077 libsigsegv uses the obsolete ioctl-based version of the /proc interface
Roger A. Faulkner <Roger.Faulkner@Oracle.COM>
parents:
diff changeset
    49
     sv_cv_procfsvma=yes, sv_cv_procfsvma=no)
fc1533d9d8d7 18647077 libsigsegv uses the obsolete ioctl-based version of the /proc interface
Roger A. Faulkner <Roger.Faulkner@Oracle.COM>
parents:
diff changeset
    50
 ])
fc1533d9d8d7 18647077 libsigsegv uses the obsolete ioctl-based version of the /proc interface
Roger A. Faulkner <Roger.Faulkner@Oracle.COM>
parents:
diff changeset
    51
 AC_CHECK_FUNCS([mincore])
fc1533d9d8d7 18647077 libsigsegv uses the obsolete ioctl-based version of the /proc interface
Roger A. Faulkner <Roger.Faulkner@Oracle.COM>
parents:
diff changeset
    52
diff -r -u libsigsegv-2.6/src/stackvma-procfs.c.orig libsigsegv-2.6/src/stackvma-procfs.c
fc1533d9d8d7 18647077 libsigsegv uses the obsolete ioctl-based version of the /proc interface
Roger A. Faulkner <Roger.Faulkner@Oracle.COM>
parents:
diff changeset
    53
--- libsigsegv-2.6/src/stackvma-procfs.c.orig	2014-04-10 11:05:58.957104341 -0700
fc1533d9d8d7 18647077 libsigsegv uses the obsolete ioctl-based version of the /proc interface
Roger A. Faulkner <Roger.Faulkner@Oracle.COM>
parents:
diff changeset
    54
+++ libsigsegv-2.6/src/stackvma-procfs.c	2014-04-10 10:49:41.584900672 -0700
fc1533d9d8d7 18647077 libsigsegv uses the obsolete ioctl-based version of the /proc interface
Roger A. Faulkner <Roger.Faulkner@Oracle.COM>
parents:
diff changeset
    55
@@ -19,8 +19,9 @@
fc1533d9d8d7 18647077 libsigsegv uses the obsolete ioctl-based version of the /proc interface
Roger A. Faulkner <Roger.Faulkner@Oracle.COM>
parents:
diff changeset
    56
 #include <unistd.h> /* open, close */
fc1533d9d8d7 18647077 libsigsegv uses the obsolete ioctl-based version of the /proc interface
Roger A. Faulkner <Roger.Faulkner@Oracle.COM>
parents:
diff changeset
    57
 #include <fcntl.h> /* open */
fc1533d9d8d7 18647077 libsigsegv uses the obsolete ioctl-based version of the /proc interface
Roger A. Faulkner <Roger.Faulkner@Oracle.COM>
parents:
diff changeset
    58
 #include <sys/types.h>
fc1533d9d8d7 18647077 libsigsegv uses the obsolete ioctl-based version of the /proc interface
Roger A. Faulkner <Roger.Faulkner@Oracle.COM>
parents:
diff changeset
    59
+#include <sys/stat.h>
fc1533d9d8d7 18647077 libsigsegv uses the obsolete ioctl-based version of the /proc interface
Roger A. Faulkner <Roger.Faulkner@Oracle.COM>
parents:
diff changeset
    60
 #include <sys/mman.h> /* mmap, munmap */
fc1533d9d8d7 18647077 libsigsegv uses the obsolete ioctl-based version of the /proc interface
Roger A. Faulkner <Roger.Faulkner@Oracle.COM>
parents:
diff changeset
    61
-#include <sys/procfs.h> /* PIOC*, prmap_t */
fc1533d9d8d7 18647077 libsigsegv uses the obsolete ioctl-based version of the /proc interface
Roger A. Faulkner <Roger.Faulkner@Oracle.COM>
parents:
diff changeset
    62
+#include <procfs.h> /* prmap_t */
fc1533d9d8d7 18647077 libsigsegv uses the obsolete ioctl-based version of the /proc interface
Roger A. Faulkner <Roger.Faulkner@Oracle.COM>
parents:
diff changeset
    63
 
fc1533d9d8d7 18647077 libsigsegv uses the obsolete ioctl-based version of the /proc interface
Roger A. Faulkner <Roger.Faulkner@Oracle.COM>
parents:
diff changeset
    64
 #include "stackvma-simple.c"
fc1533d9d8d7 18647077 libsigsegv uses the obsolete ioctl-based version of the /proc interface
Roger A. Faulkner <Roger.Faulkner@Oracle.COM>
parents:
diff changeset
    65
 
fc1533d9d8d7 18647077 libsigsegv uses the obsolete ioctl-based version of the /proc interface
Roger A. Faulkner <Roger.Faulkner@Oracle.COM>
parents:
diff changeset
    66
@@ -43,10 +44,7 @@
fc1533d9d8d7 18647077 libsigsegv uses the obsolete ioctl-based version of the /proc interface
Roger A. Faulkner <Roger.Faulkner@Oracle.COM>
parents:
diff changeset
    67
 int
fc1533d9d8d7 18647077 libsigsegv uses the obsolete ioctl-based version of the /proc interface
Roger A. Faulkner <Roger.Faulkner@Oracle.COM>
parents:
diff changeset
    68
 sigsegv_get_vma (unsigned long address, struct vma_struct *vma)
fc1533d9d8d7 18647077 libsigsegv uses the obsolete ioctl-based version of the /proc interface
Roger A. Faulkner <Roger.Faulkner@Oracle.COM>
parents:
diff changeset
    69
 {
fc1533d9d8d7 18647077 libsigsegv uses the obsolete ioctl-based version of the /proc interface
Roger A. Faulkner <Roger.Faulkner@Oracle.COM>
parents:
diff changeset
    70
-  char fnamebuf[6+10+1];
fc1533d9d8d7 18647077 libsigsegv uses the obsolete ioctl-based version of the /proc interface
Roger A. Faulkner <Roger.Faulkner@Oracle.COM>
parents:
diff changeset
    71
-  char *fname;
fc1533d9d8d7 18647077 libsigsegv uses the obsolete ioctl-based version of the /proc interface
Roger A. Faulkner <Roger.Faulkner@Oracle.COM>
parents:
diff changeset
    72
   int fd;
fc1533d9d8d7 18647077 libsigsegv uses the obsolete ioctl-based version of the /proc interface
Roger A. Faulkner <Roger.Faulkner@Oracle.COM>
parents:
diff changeset
    73
-  int nmaps;
fc1533d9d8d7 18647077 libsigsegv uses the obsolete ioctl-based version of the /proc interface
Roger A. Faulkner <Roger.Faulkner@Oracle.COM>
parents:
diff changeset
    74
   size_t memneed;
fc1533d9d8d7 18647077 libsigsegv uses the obsolete ioctl-based version of the /proc interface
Roger A. Faulkner <Roger.Faulkner@Oracle.COM>
parents:
diff changeset
    75
 #if HAVE_MMAP_ANON
fc1533d9d8d7 18647077 libsigsegv uses the obsolete ioctl-based version of the /proc interface
Roger A. Faulkner <Roger.Faulkner@Oracle.COM>
parents:
diff changeset
    76
 # define zero_fd -1
fc1533d9d8d7 18647077 libsigsegv uses the obsolete ioctl-based version of the /proc interface
Roger A. Faulkner <Roger.Faulkner@Oracle.COM>
parents:
diff changeset
    77
@@ -58,6 +56,7 @@
fc1533d9d8d7 18647077 libsigsegv uses the obsolete ioctl-based version of the /proc interface
Roger A. Faulkner <Roger.Faulkner@Oracle.COM>
parents:
diff changeset
    78
   int zero_fd;
fc1533d9d8d7 18647077 libsigsegv uses the obsolete ioctl-based version of the /proc interface
Roger A. Faulkner <Roger.Faulkner@Oracle.COM>
parents:
diff changeset
    79
 # define map_flags 0
fc1533d9d8d7 18647077 libsigsegv uses the obsolete ioctl-based version of the /proc interface
Roger A. Faulkner <Roger.Faulkner@Oracle.COM>
parents:
diff changeset
    80
 #endif
fc1533d9d8d7 18647077 libsigsegv uses the obsolete ioctl-based version of the /proc interface
Roger A. Faulkner <Roger.Faulkner@Oracle.COM>
parents:
diff changeset
    81
+  struct stat statb;
fc1533d9d8d7 18647077 libsigsegv uses the obsolete ioctl-based version of the /proc interface
Roger A. Faulkner <Roger.Faulkner@Oracle.COM>
parents:
diff changeset
    82
   void *auxmap;
fc1533d9d8d7 18647077 libsigsegv uses the obsolete ioctl-based version of the /proc interface
Roger A. Faulkner <Roger.Faulkner@Oracle.COM>
parents:
diff changeset
    83
   unsigned long auxmap_start;
fc1533d9d8d7 18647077 libsigsegv uses the obsolete ioctl-based version of the /proc interface
Roger A. Faulkner <Roger.Faulkner@Oracle.COM>
parents:
diff changeset
    84
   unsigned long auxmap_end;
fc1533d9d8d7 18647077 libsigsegv uses the obsolete ioctl-based version of the /proc interface
Roger A. Faulkner <Roger.Faulkner@Oracle.COM>
parents:
diff changeset
    85
@@ -71,26 +70,14 @@
fc1533d9d8d7 18647077 libsigsegv uses the obsolete ioctl-based version of the /proc interface
Roger A. Faulkner <Roger.Faulkner@Oracle.COM>
parents:
diff changeset
    86
   if (pagesize == 0)
fc1533d9d8d7 18647077 libsigsegv uses the obsolete ioctl-based version of the /proc interface
Roger A. Faulkner <Roger.Faulkner@Oracle.COM>
parents:
diff changeset
    87
     init_pagesize ();
fc1533d9d8d7 18647077 libsigsegv uses the obsolete ioctl-based version of the /proc interface
Roger A. Faulkner <Roger.Faulkner@Oracle.COM>
parents:
diff changeset
    88
 
fc1533d9d8d7 18647077 libsigsegv uses the obsolete ioctl-based version of the /proc interface
Roger A. Faulkner <Roger.Faulkner@Oracle.COM>
parents:
diff changeset
    89
-  /* Construct fname = sprintf (fnamebuf+i, "/proc/%u", getpid ()).  */
fc1533d9d8d7 18647077 libsigsegv uses the obsolete ioctl-based version of the /proc interface
Roger A. Faulkner <Roger.Faulkner@Oracle.COM>
parents:
diff changeset
    90
-  fname = fnamebuf + sizeof (fnamebuf) - 1;
fc1533d9d8d7 18647077 libsigsegv uses the obsolete ioctl-based version of the /proc interface
Roger A. Faulkner <Roger.Faulkner@Oracle.COM>
parents:
diff changeset
    91
-  *fname = '\0';
fc1533d9d8d7 18647077 libsigsegv uses the obsolete ioctl-based version of the /proc interface
Roger A. Faulkner <Roger.Faulkner@Oracle.COM>
parents:
diff changeset
    92
-  {
fc1533d9d8d7 18647077 libsigsegv uses the obsolete ioctl-based version of the /proc interface
Roger A. Faulkner <Roger.Faulkner@Oracle.COM>
parents:
diff changeset
    93
-    unsigned int value = getpid ();
fc1533d9d8d7 18647077 libsigsegv uses the obsolete ioctl-based version of the /proc interface
Roger A. Faulkner <Roger.Faulkner@Oracle.COM>
parents:
diff changeset
    94
-    do
fc1533d9d8d7 18647077 libsigsegv uses the obsolete ioctl-based version of the /proc interface
Roger A. Faulkner <Roger.Faulkner@Oracle.COM>
parents:
diff changeset
    95
-      *--fname = (value % 10) + '0';
fc1533d9d8d7 18647077 libsigsegv uses the obsolete ioctl-based version of the /proc interface
Roger A. Faulkner <Roger.Faulkner@Oracle.COM>
parents:
diff changeset
    96
-    while ((value = value / 10) > 0);
fc1533d9d8d7 18647077 libsigsegv uses the obsolete ioctl-based version of the /proc interface
Roger A. Faulkner <Roger.Faulkner@Oracle.COM>
parents:
diff changeset
    97
-  }
fc1533d9d8d7 18647077 libsigsegv uses the obsolete ioctl-based version of the /proc interface
Roger A. Faulkner <Roger.Faulkner@Oracle.COM>
parents:
diff changeset
    98
-  fname -= 6;
fc1533d9d8d7 18647077 libsigsegv uses the obsolete ioctl-based version of the /proc interface
Roger A. Faulkner <Roger.Faulkner@Oracle.COM>
parents:
diff changeset
    99
-  memcpy (fname, "/proc/", 6);
fc1533d9d8d7 18647077 libsigsegv uses the obsolete ioctl-based version of the /proc interface
Roger A. Faulkner <Roger.Faulkner@Oracle.COM>
parents:
diff changeset
   100
-
fc1533d9d8d7 18647077 libsigsegv uses the obsolete ioctl-based version of the /proc interface
Roger A. Faulkner <Roger.Faulkner@Oracle.COM>
parents:
diff changeset
   101
-  fd = open (fname, O_RDONLY);
fc1533d9d8d7 18647077 libsigsegv uses the obsolete ioctl-based version of the /proc interface
Roger A. Faulkner <Roger.Faulkner@Oracle.COM>
parents:
diff changeset
   102
+  fd = open ("/proc/self/map", O_RDONLY);
fc1533d9d8d7 18647077 libsigsegv uses the obsolete ioctl-based version of the /proc interface
Roger A. Faulkner <Roger.Faulkner@Oracle.COM>
parents:
diff changeset
   103
   if (fd < 0)
fc1533d9d8d7 18647077 libsigsegv uses the obsolete ioctl-based version of the /proc interface
Roger A. Faulkner <Roger.Faulkner@Oracle.COM>
parents:
diff changeset
   104
     goto failed;
fc1533d9d8d7 18647077 libsigsegv uses the obsolete ioctl-based version of the /proc interface
Roger A. Faulkner <Roger.Faulkner@Oracle.COM>
parents:
diff changeset
   105
 
fc1533d9d8d7 18647077 libsigsegv uses the obsolete ioctl-based version of the /proc interface
Roger A. Faulkner <Roger.Faulkner@Oracle.COM>
parents:
diff changeset
   106
-  if (ioctl (fd, PIOCNMAP, &nmaps) < 0)
fc1533d9d8d7 18647077 libsigsegv uses the obsolete ioctl-based version of the /proc interface
Roger A. Faulkner <Roger.Faulkner@Oracle.COM>
parents:
diff changeset
   107
+  if (fstat(fd, &statb) == -1)
fc1533d9d8d7 18647077 libsigsegv uses the obsolete ioctl-based version of the /proc interface
Roger A. Faulkner <Roger.Faulkner@Oracle.COM>
parents:
diff changeset
   108
     goto fail2;
fc1533d9d8d7 18647077 libsigsegv uses the obsolete ioctl-based version of the /proc interface
Roger A. Faulkner <Roger.Faulkner@Oracle.COM>
parents:
diff changeset
   109
 
fc1533d9d8d7 18647077 libsigsegv uses the obsolete ioctl-based version of the /proc interface
Roger A. Faulkner <Roger.Faulkner@Oracle.COM>
parents:
diff changeset
   110
-  memneed = (nmaps + 10) * sizeof (prmap_t);
fc1533d9d8d7 18647077 libsigsegv uses the obsolete ioctl-based version of the /proc interface
Roger A. Faulkner <Roger.Faulkner@Oracle.COM>
parents:
diff changeset
   111
+  memneed = statb.st_size + 10 * sizeof (prmap_t);
fc1533d9d8d7 18647077 libsigsegv uses the obsolete ioctl-based version of the /proc interface
Roger A. Faulkner <Roger.Faulkner@Oracle.COM>
parents:
diff changeset
   112
   /* Allocate memneed bytes of memory.
fc1533d9d8d7 18647077 libsigsegv uses the obsolete ioctl-based version of the /proc interface
Roger A. Faulkner <Roger.Faulkner@Oracle.COM>
parents:
diff changeset
   113
      We cannot use alloca here, because we are low on stack space.
fc1533d9d8d7 18647077 libsigsegv uses the obsolete ioctl-based version of the /proc interface
Roger A. Faulkner <Roger.Faulkner@Oracle.COM>
parents:
diff changeset
   114
      We also cannot use malloc here, because a malloc() call may have been
fc1533d9d8d7 18647077 libsigsegv uses the obsolete ioctl-based version of the /proc interface
Roger A. Faulkner <Roger.Faulkner@Oracle.COM>
parents:
diff changeset
   115
@@ -112,7 +99,7 @@
fc1533d9d8d7 18647077 libsigsegv uses the obsolete ioctl-based version of the /proc interface
Roger A. Faulkner <Roger.Faulkner@Oracle.COM>
parents:
diff changeset
   116
   auxmap_end = auxmap_start + memneed;
fc1533d9d8d7 18647077 libsigsegv uses the obsolete ioctl-based version of the /proc interface
Roger A. Faulkner <Roger.Faulkner@Oracle.COM>
parents:
diff changeset
   117
   maps = (prmap_t *) auxmap;
fc1533d9d8d7 18647077 libsigsegv uses the obsolete ioctl-based version of the /proc interface
Roger A. Faulkner <Roger.Faulkner@Oracle.COM>
parents:
diff changeset
   118
 
fc1533d9d8d7 18647077 libsigsegv uses the obsolete ioctl-based version of the /proc interface
Roger A. Faulkner <Roger.Faulkner@Oracle.COM>
parents:
diff changeset
   119
-  if (ioctl (fd, PIOCMAP, maps) < 0)
fc1533d9d8d7 18647077 libsigsegv uses the obsolete ioctl-based version of the /proc interface
Roger A. Faulkner <Roger.Faulkner@Oracle.COM>
parents:
diff changeset
   120
+  if (read(fd, (void *)maps, memneed) <= 0)
fc1533d9d8d7 18647077 libsigsegv uses the obsolete ioctl-based version of the /proc interface
Roger A. Faulkner <Roger.Faulkner@Oracle.COM>
parents:
diff changeset
   121
     goto fail1;
fc1533d9d8d7 18647077 libsigsegv uses the obsolete ioctl-based version of the /proc interface
Roger A. Faulkner <Roger.Faulkner@Oracle.COM>
parents:
diff changeset
   122
 
fc1533d9d8d7 18647077 libsigsegv uses the obsolete ioctl-based version of the /proc interface
Roger A. Faulkner <Roger.Faulkner@Oracle.COM>
parents:
diff changeset
   123
 #if STACK_DIRECTION < 0