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-- |
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 |