author | Mike Sullivan <Mike.Sullivan@Oracle.COM> |
Thu, 26 Jan 2017 16:44:14 -0800 | |
changeset 7617 | 14b1a4293086 |
parent 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 |
# |
6403
9d25dbe7eb71
23209274 Upgrade libsigsegv to 2.10
xiao qing lu - Sun Microsystems - Beijing China <xiaoqing.lu@oracle.com>
parents:
1850
diff
changeset
|
7 |
diff -Naru libsigsegv-2.10.original/configure libsigsegv-2.10/configure |
9d25dbe7eb71
23209274 Upgrade libsigsegv to 2.10
xiao qing lu - Sun Microsystems - Beijing China <xiaoqing.lu@oracle.com>
parents:
1850
diff
changeset
|
8 |
--- libsigsegv-2.10.original/configure 2011-04-03 08:50:50.000000000 -0700 |
9d25dbe7eb71
23209274 Upgrade libsigsegv to 2.10
xiao qing lu - Sun Microsystems - Beijing China <xiaoqing.lu@oracle.com>
parents:
1850
diff
changeset
|
9 |
+++ libsigsegv-2.10/configure 2016-05-12 19:05:26.396147574 -0700 |
9d25dbe7eb71
23209274 Upgrade libsigsegv to 2.10
xiao qing lu - Sun Microsystems - Beijing China <xiaoqing.lu@oracle.com>
parents:
1850
diff
changeset
|
10 |
@@ -14601,20 +14601,19 @@ |
9d25dbe7eb71
23209274 Upgrade libsigsegv to 2.10
xiao qing lu - Sun Microsystems - Beijing China <xiaoqing.lu@oracle.com>
parents:
1850
diff
changeset
|
11 |
|
1850
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 |
|
6403
9d25dbe7eb71
23209274 Upgrade libsigsegv to 2.10
xiao qing lu - Sun Microsystems - Beijing China <xiaoqing.lu@oracle.com>
parents:
1850
diff
changeset
|
14 |
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for PIOCMAP in sys/procfs.h" >&5 |
1850
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; } |
6403
9d25dbe7eb71
23209274 Upgrade libsigsegv to 2.10
xiao qing lu - Sun Microsystems - Beijing China <xiaoqing.lu@oracle.com>
parents:
1850
diff
changeset
|
16 |
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for prmap_t in procfs.h" >&5 |
1850
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; } |
6403
9d25dbe7eb71
23209274 Upgrade libsigsegv to 2.10
xiao qing lu - Sun Microsystems - Beijing China <xiaoqing.lu@oracle.com>
parents:
1850
diff
changeset
|
18 |
if ${sv_cv_procfsvma+:} false; then : |
1850
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 |
6403
9d25dbe7eb71
23209274 Upgrade libsigsegv to 2.10
xiao qing lu - Sun Microsystems - Beijing China <xiaoqing.lu@oracle.com>
parents:
1850
diff
changeset
|
21 |
|
9d25dbe7eb71
23209274 Upgrade libsigsegv to 2.10
xiao qing lu - Sun Microsystems - Beijing China <xiaoqing.lu@oracle.com>
parents:
1850
diff
changeset
|
22 |
cat confdefs.h - <<_ACEOF >conftest.$ac_ext |
1850
fc1533d9d8d7
18647077 libsigsegv uses the obsolete ioctl-based version of the /proc interface
Roger A. Faulkner <Roger.Faulkner@Oracle.COM>
parents:
diff
changeset
|
23 |
/* 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
|
24 |
-#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
|
25 |
+#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
|
26 |
int |
fc1533d9d8d7
18647077 libsigsegv uses the obsolete ioctl-based version of the /proc interface
Roger A. Faulkner <Roger.Faulkner@Oracle.COM>
parents:
diff
changeset
|
27 |
main () |
fc1533d9d8d7
18647077 libsigsegv uses the obsolete ioctl-based version of the /proc interface
Roger A. Faulkner <Roger.Faulkner@Oracle.COM>
parents:
diff
changeset
|
28 |
{ |
fc1533d9d8d7
18647077 libsigsegv uses the obsolete ioctl-based version of the /proc interface
Roger A. Faulkner <Roger.Faulkner@Oracle.COM>
parents:
diff
changeset
|
29 |
-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
|
30 |
- ; |
fc1533d9d8d7
18647077 libsigsegv uses the obsolete ioctl-based version of the /proc interface
Roger A. Faulkner <Roger.Faulkner@Oracle.COM>
parents:
diff
changeset
|
31 |
+ 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
|
32 |
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
|
33 |
} |
fc1533d9d8d7
18647077 libsigsegv uses the obsolete ioctl-based version of the /proc interface
Roger A. Faulkner <Roger.Faulkner@Oracle.COM>
parents:
diff
changeset
|
34 |
_ACEOF |
6403
9d25dbe7eb71
23209274 Upgrade libsigsegv to 2.10
xiao qing lu - Sun Microsystems - Beijing China <xiaoqing.lu@oracle.com>
parents:
1850
diff
changeset
|
35 |
diff -Naru libsigsegv-2.10.original/configure.ac libsigsegv-2.10/configure.ac |
9d25dbe7eb71
23209274 Upgrade libsigsegv to 2.10
xiao qing lu - Sun Microsystems - Beijing China <xiaoqing.lu@oracle.com>
parents:
1850
diff
changeset
|
36 |
--- libsigsegv-2.10.original/configure.ac 2011-04-03 08:30:16.000000000 -0700 |
9d25dbe7eb71
23209274 Upgrade libsigsegv to 2.10
xiao qing lu - Sun Microsystems - Beijing China <xiaoqing.lu@oracle.com>
parents:
1850
diff
changeset
|
37 |
+++ libsigsegv-2.10/configure.ac 2016-05-12 19:08:31.848947387 -0700 |
9d25dbe7eb71
23209274 Upgrade libsigsegv to 2.10
xiao qing lu - Sun Microsystems - Beijing China <xiaoqing.lu@oracle.com>
parents:
1850
diff
changeset
|
38 |
@@ -648,9 +648,9 @@ |
9d25dbe7eb71
23209274 Upgrade libsigsegv to 2.10
xiao qing lu - Sun Microsystems - Beijing China <xiaoqing.lu@oracle.com>
parents:
1850
diff
changeset
|
39 |
dnl Requires AC_CANONICAL_HOST. |
1850
fc1533d9d8d7
18647077 libsigsegv uses the obsolete ioctl-based version of the /proc interface
Roger A. Faulkner <Roger.Faulkner@Oracle.COM>
parents:
diff
changeset
|
40 |
|
fc1533d9d8d7
18647077 libsigsegv uses the obsolete ioctl-based version of the /proc interface
Roger A. Faulkner <Roger.Faulkner@Oracle.COM>
parents:
diff
changeset
|
41 |
dnl Determination of the stack's virtual memory area. |
6403
9d25dbe7eb71
23209274 Upgrade libsigsegv to 2.10
xiao qing lu - Sun Microsystems - Beijing China <xiaoqing.lu@oracle.com>
parents:
1850
diff
changeset
|
42 |
-AC_CACHE_CHECK([for PIOCMAP in sys/procfs.h], [sv_cv_procfsvma], [ |
1850
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_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
|
44 |
- [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
|
45 |
+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
|
46 |
+ 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
|
47 |
+ [ prmap_t y;], |
6403
9d25dbe7eb71
23209274 Upgrade libsigsegv to 2.10
xiao qing lu - Sun Microsystems - Beijing China <xiaoqing.lu@oracle.com>
parents:
1850
diff
changeset
|
48 |
[sv_cv_procfsvma=yes], [sv_cv_procfsvma=no]) |
1850
fc1533d9d8d7
18647077 libsigsegv uses the obsolete ioctl-based version of the /proc interface
Roger A. Faulkner <Roger.Faulkner@Oracle.COM>
parents:
diff
changeset
|
49 |
]) |
6403
9d25dbe7eb71
23209274 Upgrade libsigsegv to 2.10
xiao qing lu - Sun Microsystems - Beijing China <xiaoqing.lu@oracle.com>
parents:
1850
diff
changeset
|
50 |
AC_CHECK_FUNCS([mquery mincore]) |
9d25dbe7eb71
23209274 Upgrade libsigsegv to 2.10
xiao qing lu - Sun Microsystems - Beijing China <xiaoqing.lu@oracle.com>
parents:
1850
diff
changeset
|
51 |
diff -Naru libsigsegv-2.10.original/src/stackvma-procfs.c libsigsegv-2.10/src/stackvma-procfs.c |
9d25dbe7eb71
23209274 Upgrade libsigsegv to 2.10
xiao qing lu - Sun Microsystems - Beijing China <xiaoqing.lu@oracle.com>
parents:
1850
diff
changeset
|
52 |
--- libsigsegv-2.10.original/src/stackvma-procfs.c 2009-08-16 04:10:00.000000000 -0700 |
9d25dbe7eb71
23209274 Upgrade libsigsegv to 2.10
xiao qing lu - Sun Microsystems - Beijing China <xiaoqing.lu@oracle.com>
parents:
1850
diff
changeset
|
53 |
+++ libsigsegv-2.10/src/stackvma-procfs.c 2016-05-12 19:11:17.173911686 -0700 |
9d25dbe7eb71
23209274 Upgrade libsigsegv to 2.10
xiao qing lu - Sun Microsystems - Beijing China <xiaoqing.lu@oracle.com>
parents:
1850
diff
changeset
|
54 |
@@ -20,8 +20,9 @@ |
1850
fc1533d9d8d7
18647077 libsigsegv uses the obsolete ioctl-based version of the /proc interface
Roger A. Faulkner <Roger.Faulkner@Oracle.COM>
parents:
diff
changeset
|
55 |
#include <fcntl.h> /* open */ |
6403
9d25dbe7eb71
23209274 Upgrade libsigsegv to 2.10
xiao qing lu - Sun Microsystems - Beijing China <xiaoqing.lu@oracle.com>
parents:
1850
diff
changeset
|
56 |
#include <string.h> /* memcpy */ |
1850
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 <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
|
58 |
+#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
|
59 |
#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
|
60 |
-#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
|
61 |
+#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
|
62 |
|
fc1533d9d8d7
18647077 libsigsegv uses the obsolete ioctl-based version of the /proc interface
Roger A. Faulkner <Roger.Faulkner@Oracle.COM>
parents:
diff
changeset
|
63 |
#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
|
64 |
|
6403
9d25dbe7eb71
23209274 Upgrade libsigsegv to 2.10
xiao qing lu - Sun Microsystems - Beijing China <xiaoqing.lu@oracle.com>
parents:
1850
diff
changeset
|
65 |
@@ -44,10 +45,7 @@ |
1850
fc1533d9d8d7
18647077 libsigsegv uses the obsolete ioctl-based version of the /proc interface
Roger A. Faulkner <Roger.Faulkner@Oracle.COM>
parents:
diff
changeset
|
66 |
int |
fc1533d9d8d7
18647077 libsigsegv uses the obsolete ioctl-based version of the /proc interface
Roger A. Faulkner <Roger.Faulkner@Oracle.COM>
parents:
diff
changeset
|
67 |
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
|
68 |
{ |
fc1533d9d8d7
18647077 libsigsegv uses the obsolete ioctl-based version of the /proc interface
Roger A. Faulkner <Roger.Faulkner@Oracle.COM>
parents:
diff
changeset
|
69 |
- 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
|
70 |
- 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
|
71 |
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
|
72 |
- 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
|
73 |
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
|
74 |
#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
|
75 |
# define zero_fd -1 |
6403
9d25dbe7eb71
23209274 Upgrade libsigsegv to 2.10
xiao qing lu - Sun Microsystems - Beijing China <xiaoqing.lu@oracle.com>
parents:
1850
diff
changeset
|
76 |
@@ -59,6 +57,7 @@ |
1850
fc1533d9d8d7
18647077 libsigsegv uses the obsolete ioctl-based version of the /proc interface
Roger A. Faulkner <Roger.Faulkner@Oracle.COM>
parents:
diff
changeset
|
77 |
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
|
78 |
# 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
|
79 |
#endif |
fc1533d9d8d7
18647077 libsigsegv uses the obsolete ioctl-based version of the /proc interface
Roger A. Faulkner <Roger.Faulkner@Oracle.COM>
parents:
diff
changeset
|
80 |
+ 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
|
81 |
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
|
82 |
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
|
83 |
unsigned long auxmap_end; |
6403
9d25dbe7eb71
23209274 Upgrade libsigsegv to 2.10
xiao qing lu - Sun Microsystems - Beijing China <xiaoqing.lu@oracle.com>
parents:
1850
diff
changeset
|
84 |
@@ -72,26 +71,14 @@ |
1850
fc1533d9d8d7
18647077 libsigsegv uses the obsolete ioctl-based version of the /proc interface
Roger A. Faulkner <Roger.Faulkner@Oracle.COM>
parents:
diff
changeset
|
85 |
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
|
86 |
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
|
87 |
|
fc1533d9d8d7
18647077 libsigsegv uses the obsolete ioctl-based version of the /proc interface
Roger A. Faulkner <Roger.Faulkner@Oracle.COM>
parents:
diff
changeset
|
88 |
- /* 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
|
89 |
- 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
|
90 |
- *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
|
91 |
- { |
fc1533d9d8d7
18647077 libsigsegv uses the obsolete ioctl-based version of the /proc interface
Roger A. Faulkner <Roger.Faulkner@Oracle.COM>
parents:
diff
changeset
|
92 |
- 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
|
93 |
- do |
fc1533d9d8d7
18647077 libsigsegv uses the obsolete ioctl-based version of the /proc interface
Roger A. Faulkner <Roger.Faulkner@Oracle.COM>
parents:
diff
changeset
|
94 |
- *--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
|
95 |
- 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
|
96 |
- } |
fc1533d9d8d7
18647077 libsigsegv uses the obsolete ioctl-based version of the /proc interface
Roger A. Faulkner <Roger.Faulkner@Oracle.COM>
parents:
diff
changeset
|
97 |
- 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
|
98 |
- 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
|
99 |
- |
fc1533d9d8d7
18647077 libsigsegv uses the obsolete ioctl-based version of the /proc interface
Roger A. Faulkner <Roger.Faulkner@Oracle.COM>
parents:
diff
changeset
|
100 |
- 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
|
101 |
+ 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
|
102 |
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
|
103 |
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
|
104 |
|
fc1533d9d8d7
18647077 libsigsegv uses the obsolete ioctl-based version of the /proc interface
Roger A. Faulkner <Roger.Faulkner@Oracle.COM>
parents:
diff
changeset
|
105 |
- 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
|
106 |
+ 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
|
107 |
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
|
108 |
|
fc1533d9d8d7
18647077 libsigsegv uses the obsolete ioctl-based version of the /proc interface
Roger A. Faulkner <Roger.Faulkner@Oracle.COM>
parents:
diff
changeset
|
109 |
- 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
|
110 |
+ 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
|
111 |
/* 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
|
112 |
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
|
113 |
We also cannot use malloc here, because a malloc() call may have been |
6403
9d25dbe7eb71
23209274 Upgrade libsigsegv to 2.10
xiao qing lu - Sun Microsystems - Beijing China <xiaoqing.lu@oracle.com>
parents:
1850
diff
changeset
|
114 |
@@ -113,7 +100,7 @@ |
1850
fc1533d9d8d7
18647077 libsigsegv uses the obsolete ioctl-based version of the /proc interface
Roger A. Faulkner <Roger.Faulkner@Oracle.COM>
parents:
diff
changeset
|
115 |
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
|
116 |
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
|
117 |
|
fc1533d9d8d7
18647077 libsigsegv uses the obsolete ioctl-based version of the /proc interface
Roger A. Faulkner <Roger.Faulkner@Oracle.COM>
parents:
diff
changeset
|
118 |
- 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
|
119 |
+ 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
|
120 |
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
|
121 |
|
fc1533d9d8d7
18647077 libsigsegv uses the obsolete ioctl-based version of the /proc interface
Roger A. Faulkner <Roger.Faulkner@Oracle.COM>
parents:
diff
changeset
|
122 |
#if STACK_DIRECTION < 0 |