You can subscribe to this list here.
| 2002 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
(1) |
Oct
(122) |
Nov
(152) |
Dec
(69) |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 2003 |
Jan
(6) |
Feb
(25) |
Mar
(73) |
Apr
(82) |
May
(24) |
Jun
(25) |
Jul
(10) |
Aug
(11) |
Sep
(10) |
Oct
(54) |
Nov
(203) |
Dec
(182) |
| 2004 |
Jan
(307) |
Feb
(305) |
Mar
(430) |
Apr
(312) |
May
(187) |
Jun
(342) |
Jul
(487) |
Aug
(637) |
Sep
(336) |
Oct
(373) |
Nov
(441) |
Dec
(210) |
| 2005 |
Jan
(385) |
Feb
(480) |
Mar
(636) |
Apr
(544) |
May
(679) |
Jun
(625) |
Jul
(810) |
Aug
(838) |
Sep
(634) |
Oct
(521) |
Nov
(965) |
Dec
(543) |
| 2006 |
Jan
(494) |
Feb
(431) |
Mar
(546) |
Apr
(411) |
May
(406) |
Jun
(322) |
Jul
(256) |
Aug
(401) |
Sep
(345) |
Oct
(542) |
Nov
(308) |
Dec
(481) |
| 2007 |
Jan
(427) |
Feb
(326) |
Mar
(367) |
Apr
(255) |
May
(244) |
Jun
(204) |
Jul
(223) |
Aug
(231) |
Sep
(354) |
Oct
(374) |
Nov
(497) |
Dec
(362) |
| 2008 |
Jan
(322) |
Feb
(482) |
Mar
(658) |
Apr
(422) |
May
(476) |
Jun
(396) |
Jul
(455) |
Aug
(267) |
Sep
(280) |
Oct
(253) |
Nov
(232) |
Dec
(304) |
| 2009 |
Jan
(486) |
Feb
(470) |
Mar
(458) |
Apr
(423) |
May
(696) |
Jun
(461) |
Jul
(551) |
Aug
(575) |
Sep
(134) |
Oct
(110) |
Nov
(157) |
Dec
(102) |
| 2010 |
Jan
(226) |
Feb
(86) |
Mar
(147) |
Apr
(117) |
May
(107) |
Jun
(203) |
Jul
(193) |
Aug
(238) |
Sep
(300) |
Oct
(246) |
Nov
(23) |
Dec
(75) |
| 2011 |
Jan
(133) |
Feb
(195) |
Mar
(315) |
Apr
(200) |
May
(267) |
Jun
(293) |
Jul
(353) |
Aug
(237) |
Sep
(278) |
Oct
(611) |
Nov
(274) |
Dec
(260) |
| 2012 |
Jan
(303) |
Feb
(391) |
Mar
(417) |
Apr
(441) |
May
(488) |
Jun
(655) |
Jul
(590) |
Aug
(610) |
Sep
(526) |
Oct
(478) |
Nov
(359) |
Dec
(372) |
| 2013 |
Jan
(467) |
Feb
(226) |
Mar
(391) |
Apr
(281) |
May
(299) |
Jun
(252) |
Jul
(311) |
Aug
(352) |
Sep
(481) |
Oct
(571) |
Nov
(222) |
Dec
(231) |
| 2014 |
Jan
(185) |
Feb
(329) |
Mar
(245) |
Apr
(238) |
May
(281) |
Jun
(399) |
Jul
(382) |
Aug
(500) |
Sep
(579) |
Oct
(435) |
Nov
(487) |
Dec
(256) |
| 2015 |
Jan
(338) |
Feb
(357) |
Mar
(330) |
Apr
(294) |
May
(191) |
Jun
(108) |
Jul
(142) |
Aug
(261) |
Sep
(190) |
Oct
(54) |
Nov
(83) |
Dec
(22) |
| 2016 |
Jan
(49) |
Feb
(89) |
Mar
(33) |
Apr
(50) |
May
(27) |
Jun
(34) |
Jul
(53) |
Aug
(53) |
Sep
(98) |
Oct
(206) |
Nov
(93) |
Dec
(53) |
| 2017 |
Jan
(65) |
Feb
(82) |
Mar
(102) |
Apr
(86) |
May
(187) |
Jun
(67) |
Jul
(23) |
Aug
(93) |
Sep
(65) |
Oct
(45) |
Nov
(35) |
Dec
(17) |
| 2018 |
Jan
(26) |
Feb
(35) |
Mar
(38) |
Apr
(32) |
May
(8) |
Jun
(43) |
Jul
(27) |
Aug
(30) |
Sep
(43) |
Oct
(42) |
Nov
(38) |
Dec
(67) |
| 2019 |
Jan
(32) |
Feb
(37) |
Mar
(53) |
Apr
(64) |
May
(49) |
Jun
(18) |
Jul
(14) |
Aug
(53) |
Sep
(25) |
Oct
(30) |
Nov
(49) |
Dec
(31) |
| 2020 |
Jan
(87) |
Feb
(45) |
Mar
(37) |
Apr
(51) |
May
(99) |
Jun
(36) |
Jul
(11) |
Aug
(14) |
Sep
(20) |
Oct
(24) |
Nov
(40) |
Dec
(23) |
| 2021 |
Jan
(14) |
Feb
(53) |
Mar
(85) |
Apr
(15) |
May
(19) |
Jun
(3) |
Jul
(14) |
Aug
(1) |
Sep
(57) |
Oct
(73) |
Nov
(56) |
Dec
(22) |
| 2022 |
Jan
(3) |
Feb
(22) |
Mar
(6) |
Apr
(55) |
May
(46) |
Jun
(39) |
Jul
(15) |
Aug
(9) |
Sep
(11) |
Oct
(34) |
Nov
(20) |
Dec
(36) |
| 2023 |
Jan
(79) |
Feb
(41) |
Mar
(99) |
Apr
(169) |
May
(48) |
Jun
(16) |
Jul
(16) |
Aug
(57) |
Sep
(19) |
Oct
|
Nov
|
Dec
|
| S | M | T | W | T | F | S |
|---|---|---|---|---|---|---|
|
1
(13) |
2
(33) |
3
(25) |
4
(22) |
5
(22) |
6
(21) |
7
(19) |
|
8
(29) |
9
(34) |
10
(29) |
11
(37) |
12
(36) |
13
(28) |
14
(25) |
|
15
(28) |
16
(23) |
17
(36) |
18
(21) |
19
(12) |
20
(14) |
21
(10) |
|
22
(7) |
23
(15) |
24
(41) |
25
(15) |
26
(9) |
27
(7) |
28
(6) |
|
29
(16) |
30
(24) |
31
(22) |
|
|
|
|
|
From: <sv...@va...> - 2005-05-29 23:30:53
|
Author: njn
Date: 2005-05-30 00:30:48 +0100 (Mon, 30 May 2005)
New Revision: 3814
Added:
trunk/coregrind/vki_unistd-amd64-linux.h
trunk/coregrind/vki_unistd-arm-linux.h
trunk/coregrind/vki_unistd-x86-linux.h
trunk/coregrind/vki_unistd.h
Removed:
trunk/coregrind/amd64-linux/
trunk/coregrind/arm-linux/
trunk/coregrind/x86-linux/
Modified:
trunk/configure.in
trunk/coregrind/Makefile.am
trunk/memcheck/tests/x86/scalar.h
Log:
Renamed the $PLATFORM/vki_unistd.h files as vki_unistd-$PLATFORM.h, to
match the headers files in include/.
As a consequence, coregrind/$PLATFORM directories are no longer needed,
hooray!
Modified: trunk/configure.in
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- trunk/configure.in 2005-05-29 18:46:38 UTC (rev 3813)
+++ trunk/configure.in 2005-05-29 23:30:48 UTC (rev 3814)
@@ -397,9 +397,6 @@
coregrind/arm/Makefile
coregrind/x86/Makefile
coregrind/linux/Makefile
- coregrind/amd64-linux/Makefile
- coregrind/arm-linux/Makefile
- coregrind/x86-linux/Makefile
addrcheck/Makefile
addrcheck/tests/Makefile
addrcheck/docs/Makefile
Modified: trunk/coregrind/Makefile.am
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- trunk/coregrind/Makefile.am 2005-05-29 18:46:38 UTC (rev 3813)
+++ trunk/coregrind/Makefile.am 2005-05-29 23:30:48 UTC (rev 3814)
@@ -13,11 +13,11 @@
## But when doing 'make dist', we are interested in every arch/OS/platfo=
rm.
## That's what DIST_SUBDIRS specifies.
SUBDIRS =3D \
- $(VG_ARCH) $(VG_OS) $(VG_PLATFORM) \
+ $(VG_ARCH) $(VG_OS) \
$(MODULES) .
=20
DIST_SUBDIRS =3D \
- $(VG_ARCH_ALL) $(VG_OS_ALL) $(VG_PLATFORM_ALL) \
+ $(VG_ARCH_ALL) $(VG_OS_ALL) \
$(MODULES) .
=20
AM_CPPFLAGS +=3D -DVG_LIBDIR=3D"\"$(valdir)"\" \
@@ -57,7 +57,11 @@
pub_core_transtab_asm.h \
ume.h \
vg_symtab2.h \
- vg_symtypes.h
+ vg_symtypes.h \
+ vki_unistd.h \
+ vki_unistd-amd64-linux.h\
+ vki_unistd-arm-linux.h \
+ vki_unistd-x86-linux.h
=20
EXTRA_DIST =3D \
valgrind.vs \
Copied: trunk/coregrind/vki_unistd-amd64-linux.h (from rev 3807, trunk/co=
regrind/amd64-linux/vki_unistd.h)
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- trunk/coregrind/amd64-linux/vki_unistd.h 2005-05-29 16:23:17 UTC (rev=
3807)
+++ trunk/coregrind/vki_unistd-amd64-linux.h 2005-05-29 23:30:48 UTC (rev=
3814)
@@ -0,0 +1,329 @@
+
+/*
+ This file is part of Valgrind, a dynamic binary instrumentation
+ framework.
+
+ Copyright (C) 2000-2005 Julian Seward=20
+ js...@ac...
+
+ This program is free software; you can redistribute it and/or
+ modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation; either version 2 of the
+ License, or (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307, USA.
+
+ The GNU General Public License is contained in the file COPYING.
+*/
+
+#ifndef __VKI_UNISTD_AMD64_LINUX_H
+#define __VKI_UNISTD_AMD64_LINUX_H
+
+// From linux-2.6.9/include/asm-x86_64/unistd.h
+
+#define __NR_read 0
+#define __NR_write 1
+#define __NR_open 2
+#define __NR_close 3
+#define __NR_stat 4
+#define __NR_fstat 5
+#define __NR_lstat 6
+#define __NR_poll 7
+
+#define __NR_lseek 8
+#define __NR_mmap 9
+#define __NR_mprotect 10
+#define __NR_munmap 11
+#define __NR_brk 12
+#define __NR_rt_sigaction 13
+#define __NR_rt_sigprocmask 14
+#define __NR_rt_sigreturn 15
+
+#define __NR_ioctl 16
+#define __NR_pread64 17
+#define __NR_pwrite64 18
+#define __NR_readv 19
+#define __NR_writev 20
+#define __NR_access 21
+#define __NR_pipe 22
+#define __NR_select 23
+
+#define __NR_sched_yield 24
+#define __NR_mremap 25
+#define __NR_msync 26
+#define __NR_mincore 27
+#define __NR_madvise 28
+#define __NR_shmget 29
+#define __NR_shmat 30
+#define __NR_shmctl 31
+
+#define __NR_dup 32
+#define __NR_dup2 33
+#define __NR_pause 34
+#define __NR_nanosleep 35
+#define __NR_getitimer 36
+#define __NR_alarm 37
+#define __NR_setitimer 38
+#define __NR_getpid 39
+
+#define __NR_sendfile 40
+#define __NR_socket 41
+#define __NR_connect 42
+#define __NR_accept 43
+#define __NR_sendto 44
+#define __NR_recvfrom 45
+#define __NR_sendmsg 46
+#define __NR_recvmsg 47
+
+#define __NR_shutdown 48
+#define __NR_bind 49
+#define __NR_listen 50
+#define __NR_getsockname 51
+#define __NR_getpeername 52
+#define __NR_socketpair 53
+#define __NR_setsockopt 54
+#define __NR_getsockopt 55
+
+#define __NR_clone 56
+#define __NR_fork 57
+#define __NR_vfork 58
+#define __NR_execve 59
+#define __NR_exit 60
+#define __NR_wait4 61
+#define __NR_kill 62
+#define __NR_uname 63
+
+#define __NR_semget 64
+#define __NR_semop 65
+#define __NR_semctl 66
+#define __NR_shmdt 67
+#define __NR_msgget 68
+#define __NR_msgsnd 69
+#define __NR_msgrcv 70
+#define __NR_msgctl 71
+
+#define __NR_fcntl 72
+#define __NR_flock 73
+#define __NR_fsync 74
+#define __NR_fdatasync 75
+#define __NR_truncate 76
+#define __NR_ftruncate 77
+#define __NR_getdents 78
+#define __NR_getcwd 79
+
+#define __NR_chdir 80
+#define __NR_fchdir 81
+#define __NR_rename 82
+#define __NR_mkdir 83
+#define __NR_rmdir 84
+#define __NR_creat 85
+#define __NR_link 86
+#define __NR_unlink 87
+
+#define __NR_symlink 88
+#define __NR_readlink 89
+#define __NR_chmod 90
+#define __NR_fchmod 91
+#define __NR_chown 92
+#define __NR_fchown 93
+#define __NR_lchown 94
+#define __NR_umask 95
+
+#define __NR_gettimeofday 96
+#define __NR_getrlimit 97
+#define __NR_getrusage 98
+#define __NR_sysinfo 99
+#define __NR_times 100
+#define __NR_ptrace 101
+#define __NR_getuid 102
+#define __NR_syslog 103
+
+/* at the very end the stuff that never runs during the benchmarks */
+#define __NR_getgid 104
+#define __NR_setuid 105
+#define __NR_setgid 106
+#define __NR_geteuid 107
+#define __NR_getegid 108
+#define __NR_setpgid 109
+#define __NR_getppid 110
+#define __NR_getpgrp 111
+
+#define __NR_setsid 112
+#define __NR_setreuid 113
+#define __NR_setregid 114
+#define __NR_getgroups 115
+#define __NR_setgroups 116
+#define __NR_setresuid 117
+#define __NR_getresuid 118
+#define __NR_setresgid 119
+
+#define __NR_getresgid 120
+#define __NR_getpgid 121
+#define __NR_setfsuid 122
+#define __NR_setfsgid 123
+#define __NR_getsid 124
+#define __NR_capget 125
+#define __NR_capset 126
+
+#define __NR_rt_sigpending 127
+#define __NR_rt_sigtimedwait 128
+#define __NR_rt_sigqueueinfo 129
+#define __NR_rt_sigsuspend 130
+#define __NR_sigaltstack 131
+#define __NR_utime 132
+#define __NR_mknod 133
+
+#define __NR_uselib 134
+#define __NR_personality 135
+
+#define __NR_ustat 136
+#define __NR_statfs 137
+#define __NR_fstatfs 138
+#define __NR_sysfs 139
+
+#define __NR_getpriority 140
+#define __NR_setpriority 141
+#define __NR_sched_setparam 142
+#define __NR_sched_getparam 143
+#define __NR_sched_setscheduler 144
+#define __NR_sched_getscheduler 145
+#define __NR_sched_get_priority_max 146
+#define __NR_sched_get_priority_min 147
+#define __NR_sched_rr_get_interval 148
+
+#define __NR_mlock 149
+#define __NR_munlock 150
+#define __NR_mlockall 151
+#define __NR_munlockall 152
+
+#define __NR_vhangup 153
+
+#define __NR_modify_ldt 154
+
+#define __NR_pivot_root 155
+
+#define __NR__sysctl 156
+
+#define __NR_prctl 157
+#define __NR_arch_prctl 158
+
+#define __NR_adjtimex 159
+
+#define __NR_setrlimit 160
+
+#define __NR_chroot 161
+
+#define __NR_sync 162
+
+#define __NR_acct 163
+
+#define __NR_settimeofday 164
+
+#define __NR_mount 165
+#define __NR_umount2 166
+
+#define __NR_swapon 167
+#define __NR_swapoff 168
+
+#define __NR_reboot 169
+
+#define __NR_sethostname 170
+#define __NR_setdomainname 171
+
+#define __NR_iopl 172
+#define __NR_ioperm 173
+
+#define __NR_create_module 174
+#define __NR_init_module 175
+#define __NR_delete_module 176
+#define __NR_get_kernel_syms 177
+#define __NR_query_module 178
+
+#define __NR_quotactl 179
+
+#define __NR_nfsservctl 180
+
+#define __NR_getpmsg 181 /* reserved for LiS/S=
TREAMS */
+#define __NR_putpmsg 182 /* reserved for LiS/S=
TREAMS */
+
+#define __NR_afs_syscall 183 /* reserved for AFS *=
/=20
+
+#define __NR_tuxcall 184 /* reserved for tux */
+
+#define __NR_security 185
+
+#define __NR_gettid 186
+
+#define __NR_readahead 187
+#define __NR_setxattr 188
+#define __NR_lsetxattr 189
+#define __NR_fsetxattr 190
+#define __NR_getxattr 191
+#define __NR_lgetxattr 192
+#define __NR_fgetxattr 193
+#define __NR_listxattr 194
+#define __NR_llistxattr 195
+#define __NR_flistxattr 196
+#define __NR_removexattr 197
+#define __NR_lremovexattr 198
+#define __NR_fremovexattr 199
+#define __NR_tkill 200
+#define __NR_time 201
+#define __NR_futex 202
+#define __NR_sched_setaffinity 203
+#define __NR_sched_getaffinity 204
+#define __NR_set_thread_area 205
+#define __NR_io_setup 206
+#define __NR_io_destroy 207
+#define __NR_io_getevents 208
+#define __NR_io_submit 209
+#define __NR_io_cancel 210
+#define __NR_get_thread_area 211
+#define __NR_lookup_dcookie 212
+#define __NR_epoll_create 213
+#define __NR_epoll_ctl_old 214
+#define __NR_epoll_wait_old 215
+#define __NR_remap_file_pages 216
+#define __NR_getdents64 217
+#define __NR_set_tid_address 218
+#define __NR_restart_syscall 219
+#define __NR_semtimedop 220
+#define __NR_fadvise64 221
+#define __NR_timer_create 222
+#define __NR_timer_settime 223
+#define __NR_timer_gettime 224
+#define __NR_timer_getoverrun 225
+#define __NR_timer_delete 226
+#define __NR_clock_settime 227
+#define __NR_clock_gettime 228
+#define __NR_clock_getres 229
+#define __NR_clock_nanosleep 230
+#define __NR_exit_group 231
+#define __NR_epoll_wait 232
+#define __NR_epoll_ctl 233
+#define __NR_tgkill 234
+#define __NR_utimes 235
+#define __NR_vserver 236
+#define __NR_vserver 236
+#define __NR_mbind 237
+#define __NR_set_mempolicy 238
+#define __NR_get_mempolicy 239
+#define __NR_mq_open 240
+#define __NR_mq_unlink 241
+#define __NR_mq_timedsend 242
+#define __NR_mq_timedreceive 243
+#define __NR_mq_notify 244
+#define __NR_mq_getsetattr 245
+#define __NR_kexec_load 246
+#define __NR_waitid 247
+
+
+#endif /* __VKI_UNISTD_AMD64_LINUX_H */
Copied: trunk/coregrind/vki_unistd-arm-linux.h (from rev 3807, trunk/core=
grind/arm-linux/vki_unistd.h)
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- trunk/coregrind/arm-linux/vki_unistd.h 2005-05-29 16:23:17 UTC (rev 3=
807)
+++ trunk/coregrind/vki_unistd-arm-linux.h 2005-05-29 23:30:48 UTC (rev 3=
814)
@@ -0,0 +1,311 @@
+
+/*
+ This file is part of Valgrind, a dynamic binary instrumentation
+ framework.
+
+ Copyright (C) 2000-2005 Julian Seward=20
+ js...@ac...
+
+ This program is free software; you can redistribute it and/or
+ modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation; either version 2 of the
+ License, or (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307, USA.
+
+ The GNU General Public License is contained in the file COPYING.
+*/
+
+#ifndef __VKI_UNISTD_ARM_LINUX_H
+#define __VKI_UNISTD_ARM_LINUX_H
+
+// From linux-2.6.8.1/include/asm-arm/unistd.h
+
+// Nb: ARM Thumb has a different __NR_SYSCALL_BASE, but we don't care ab=
out
+// that architecture.
+#define __NR_SYSCALL_BASE 0x900000
+
+#define __NR_restart_syscall (__NR_SYSCALL_BASE+ 0)
+#define __NR_exit (__NR_SYSCALL_BASE+ 1)
+#define __NR_fork (__NR_SYSCALL_BASE+ 2)
+#define __NR_read (__NR_SYSCALL_BASE+ 3)
+#define __NR_write (__NR_SYSCALL_BASE+ 4)
+#define __NR_open (__NR_SYSCALL_BASE+ 5)
+#define __NR_close (__NR_SYSCALL_BASE+ 6)
+ /* 7 was sys_waitpid */
+#define __NR_creat (__NR_SYSCALL_BASE+ 8)
+#define __NR_link (__NR_SYSCALL_BASE+ 9)
+#define __NR_unlink (__NR_SYSCALL_BASE+ 10)
+#define __NR_execve (__NR_SYSCALL_BASE+ 11)
+#define __NR_chdir (__NR_SYSCALL_BASE+ 12)
+#define __NR_time (__NR_SYSCALL_BASE+ 13)
+#define __NR_mknod (__NR_SYSCALL_BASE+ 14)
+#define __NR_chmod (__NR_SYSCALL_BASE+ 15)
+#define __NR_lchown (__NR_SYSCALL_BASE+ 16)
+ /* 17 was sys_break */
+ /* 18 was sys_stat */
+#define __NR_lseek (__NR_SYSCALL_BASE+ 19)
+#define __NR_getpid (__NR_SYSCALL_BASE+ 20)
+#define __NR_mount (__NR_SYSCALL_BASE+ 21)
+#define __NR_umount (__NR_SYSCALL_BASE+ 22)
+#define __NR_setuid (__NR_SYSCALL_BASE+ 23)
+#define __NR_getuid (__NR_SYSCALL_BASE+ 24)
+#define __NR_stime (__NR_SYSCALL_BASE+ 25)
+#define __NR_ptrace (__NR_SYSCALL_BASE+ 26)
+#define __NR_alarm (__NR_SYSCALL_BASE+ 27)
+ /* 28 was sys_fstat */
+#define __NR_pause (__NR_SYSCALL_BASE+ 29)
+#define __NR_utime (__NR_SYSCALL_BASE+ 30)
+ /* 31 was sys_stty */
+ /* 32 was sys_gtty */
+#define __NR_access (__NR_SYSCALL_BASE+ 33)
+#define __NR_nice (__NR_SYSCALL_BASE+ 34)
+ /* 35 was sys_ftime */
+#define __NR_sync (__NR_SYSCALL_BASE+ 36)
+#define __NR_kill (__NR_SYSCALL_BASE+ 37)
+#define __NR_rename (__NR_SYSCALL_BASE+ 38)
+#define __NR_mkdir (__NR_SYSCALL_BASE+ 39)
+#define __NR_rmdir (__NR_SYSCALL_BASE+ 40)
+#define __NR_dup (__NR_SYSCALL_BASE+ 41)
+#define __NR_pipe (__NR_SYSCALL_BASE+ 42)
+#define __NR_times (__NR_SYSCALL_BASE+ 43)
+ /* 44 was sys_prof */
+#define __NR_brk (__NR_SYSCALL_BASE+ 45)
+#define __NR_setgid (__NR_SYSCALL_BASE+ 46)
+#define __NR_getgid (__NR_SYSCALL_BASE+ 47)
+ /* 48 was sys_signal */
+#define __NR_geteuid (__NR_SYSCALL_BASE+ 49)
+#define __NR_getegid (__NR_SYSCALL_BASE+ 50)
+#define __NR_acct (__NR_SYSCALL_BASE+ 51)
+#define __NR_umount2 (__NR_SYSCALL_BASE+ 52)
+ /* 53 was sys_lock */
+#define __NR_ioctl (__NR_SYSCALL_BASE+ 54)
+#define __NR_fcntl (__NR_SYSCALL_BASE+ 55)
+ /* 56 was sys_mpx */
+#define __NR_setpgid (__NR_SYSCALL_BASE+ 57)
+ /* 58 was sys_ulimit */
+ /* 59 was sys_olduname */
+#define __NR_umask (__NR_SYSCALL_BASE+ 60)
+#define __NR_chroot (__NR_SYSCALL_BASE+ 61)
+#define __NR_ustat (__NR_SYSCALL_BASE+ 62)
+#define __NR_dup2 (__NR_SYSCALL_BASE+ 63)
+#define __NR_getppid (__NR_SYSCALL_BASE+ 64)
+#define __NR_getpgrp (__NR_SYSCALL_BASE+ 65)
+#define __NR_setsid (__NR_SYSCALL_BASE+ 66)
+#define __NR_sigaction (__NR_SYSCALL_BASE+ 67)
+ /* 68 was sys_sgetmask */
+ /* 69 was sys_ssetmask */
+#define __NR_setreuid (__NR_SYSCALL_BASE+ 70)
+#define __NR_setregid (__NR_SYSCALL_BASE+ 71)
+#define __NR_sigsuspend (__NR_SYSCALL_BASE+ 72)
+#define __NR_sigpending (__NR_SYSCALL_BASE+ 73)
+#define __NR_sethostname (__NR_SYSCALL_BASE+ 74)
+#define __NR_setrlimit (__NR_SYSCALL_BASE+ 75)
+#define __NR_getrlimit (__NR_SYSCALL_BASE+ 76) /* Back compat 2GB limi=
ted rlimit */
+#define __NR_getrusage (__NR_SYSCALL_BASE+ 77)
+#define __NR_gettimeofday (__NR_SYSCALL_BASE+ 78)
+#define __NR_settimeofday (__NR_SYSCALL_BASE+ 79)
+#define __NR_getgroups (__NR_SYSCALL_BASE+ 80)
+#define __NR_setgroups (__NR_SYSCALL_BASE+ 81)
+#define __NR_select (__NR_SYSCALL_BASE+ 82)
+#define __NR_symlink (__NR_SYSCALL_BASE+ 83)
+ /* 84 was sys_lstat */
+#define __NR_readlink (__NR_SYSCALL_BASE+ 85)
+#define __NR_uselib (__NR_SYSCALL_BASE+ 86)
+#define __NR_swapon (__NR_SYSCALL_BASE+ 87)
+#define __NR_reboot (__NR_SYSCALL_BASE+ 88)
+#define __NR_readdir (__NR_SYSCALL_BASE+ 89)
+#define __NR_mmap (__NR_SYSCALL_BASE+ 90)
+#define __NR_munmap (__NR_SYSCALL_BASE+ 91)
+#define __NR_truncate (__NR_SYSCALL_BASE+ 92)
+#define __NR_ftruncate (__NR_SYSCALL_BASE+ 93)
+#define __NR_fchmod (__NR_SYSCALL_BASE+ 94)
+#define __NR_fchown (__NR_SYSCALL_BASE+ 95)
+#define __NR_getpriority (__NR_SYSCALL_BASE+ 96)
+#define __NR_setpriority (__NR_SYSCALL_BASE+ 97)
+ /* 98 was sys_profil */
+#define __NR_statfs (__NR_SYSCALL_BASE+ 99)
+#define __NR_fstatfs (__NR_SYSCALL_BASE+100)
+ /* 101 was sys_ioperm */
+#define __NR_socketcall (__NR_SYSCALL_BASE+102)
+#define __NR_syslog (__NR_SYSCALL_BASE+103)
+#define __NR_setitimer (__NR_SYSCALL_BASE+104)
+#define __NR_getitimer (__NR_SYSCALL_BASE+105)
+#define __NR_stat (__NR_SYSCALL_BASE+106)
+#define __NR_lstat (__NR_SYSCALL_BASE+107)
+#define __NR_fstat (__NR_SYSCALL_BASE+108)
+ /* 109 was sys_uname */
+ /* 110 was sys_iopl */
+#define __NR_vhangup (__NR_SYSCALL_BASE+111)
+ /* 112 was sys_idle */
+#define __NR_syscall (__NR_SYSCALL_BASE+113) /* syscall to call a sysc=
all! */
+#define __NR_wait4 (__NR_SYSCALL_BASE+114)
+#define __NR_swapoff (__NR_SYSCALL_BASE+115)
+#define __NR_sysinfo (__NR_SYSCALL_BASE+116)
+#define __NR_ipc (__NR_SYSCALL_BASE+117)
+#define __NR_fsync (__NR_SYSCALL_BASE+118)
+#define __NR_sigreturn (__NR_SYSCALL_BASE+119)
+#define __NR_clone (__NR_SYSCALL_BASE+120)
+#define __NR_setdomainname (__NR_SYSCALL_BASE+121)
+#define __NR_uname (__NR_SYSCALL_BASE+122)
+ /* 123 was sys_modify_ldt */
+#define __NR_adjtimex (__NR_SYSCALL_BASE+124)
+#define __NR_mprotect (__NR_SYSCALL_BASE+125)
+#define __NR_sigprocmask (__NR_SYSCALL_BASE+126)
+ /* 127 was sys_create_module */
+#define __NR_init_module (__NR_SYSCALL_BASE+128)
+#define __NR_delete_module (__NR_SYSCALL_BASE+129)
+ /* 130 was sys_get_kernel_syms */
+#define __NR_quotactl (__NR_SYSCALL_BASE+131)
+#define __NR_getpgid (__NR_SYSCALL_BASE+132)
+#define __NR_fchdir (__NR_SYSCALL_BASE+133)
+#define __NR_bdflush (__NR_SYSCALL_BASE+134)
+#define __NR_sysfs (__NR_SYSCALL_BASE+135)
+#define __NR_personality (__NR_SYSCALL_BASE+136)
+ /* 137 was sys_afs_syscall */
+#define __NR_setfsuid (__NR_SYSCALL_BASE+138)
+#define __NR_setfsgid (__NR_SYSCALL_BASE+139)
+#define __NR__llseek (__NR_SYSCALL_BASE+140)
+#define __NR_getdents (__NR_SYSCALL_BASE+141)
+#define __NR__newselect (__NR_SYSCALL_BASE+142)
+#define __NR_flock (__NR_SYSCALL_BASE+143)
+#define __NR_msync (__NR_SYSCALL_BASE+144)
+#define __NR_readv (__NR_SYSCALL_BASE+145)
+#define __NR_writev (__NR_SYSCALL_BASE+146)
+#define __NR_getsid (__NR_SYSCALL_BASE+147)
+#define __NR_fdatasync (__NR_SYSCALL_BASE+148)
+#define __NR__sysctl (__NR_SYSCALL_BASE+149)
+#define __NR_mlock (__NR_SYSCALL_BASE+150)
+#define __NR_munlock (__NR_SYSCALL_BASE+151)
+#define __NR_mlockall (__NR_SYSCALL_BASE+152)
+#define __NR_munlockall (__NR_SYSCALL_BASE+153)
+#define __NR_sched_setparam (__NR_SYSCALL_BASE+154)
+#define __NR_sched_getparam (__NR_SYSCALL_BASE+155)
+#define __NR_sched_setscheduler (__NR_SYSCALL_BASE+156)
+#define __NR_sched_getscheduler (__NR_SYSCALL_BASE+157)
+#define __NR_sched_yield (__NR_SYSCALL_BASE+158)
+#define __NR_sched_get_priority_max (__NR_SYSCALL_BASE+159)
+#define __NR_sched_get_priority_min (__NR_SYSCALL_BASE+160)
+#define __NR_sched_rr_get_interval (__NR_SYSCALL_BASE+161)
+#define __NR_nanosleep (__NR_SYSCALL_BASE+162)
+#define __NR_mremap (__NR_SYSCALL_BASE+163)
+#define __NR_setresuid (__NR_SYSCALL_BASE+164)
+#define __NR_getresuid (__NR_SYSCALL_BASE+165)
+ /* 166 was sys_vm86 */
+ /* 167 was sys_query_module */
+#define __NR_poll (__NR_SYSCALL_BASE+168)
+#define __NR_nfsservctl (__NR_SYSCALL_BASE+169)
+#define __NR_setresgid (__NR_SYSCALL_BASE+170)
+#define __NR_getresgid (__NR_SYSCALL_BASE+171)
+#define __NR_prctl (__NR_SYSCALL_BASE+172)
+#define __NR_rt_sigreturn (__NR_SYSCALL_BASE+173)
+#define __NR_rt_sigaction (__NR_SYSCALL_BASE+174)
+#define __NR_rt_sigprocmask (__NR_SYSCALL_BASE+175)
+#define __NR_rt_sigpending (__NR_SYSCALL_BASE+176)
+#define __NR_rt_sigtimedwait (__NR_SYSCALL_BASE+177)
+#define __NR_rt_sigqueueinfo (__NR_SYSCALL_BASE+178)
+#define __NR_rt_sigsuspend (__NR_SYSCALL_BASE+179)
+#define __NR_pread64 (__NR_SYSCALL_BASE+180)
+#define __NR_pwrite64 (__NR_SYSCALL_BASE+181)
+#define __NR_chown (__NR_SYSCALL_BASE+182)
+#define __NR_getcwd (__NR_SYSCALL_BASE+183)
+#define __NR_capget (__NR_SYSCALL_BASE+184)
+#define __NR_capset (__NR_SYSCALL_BASE+185)
+#define __NR_sigaltstack (__NR_SYSCALL_BASE+186)
+#define __NR_sendfile (__NR_SYSCALL_BASE+187)
+ /* 188 reserved */
+ /* 189 reserved */
+#define __NR_vfork (__NR_SYSCALL_BASE+190)
+#define __NR_ugetrlimit (__NR_SYSCALL_BASE+191) /* SuS compliant getrl=
imit */
+#define __NR_mmap2 (__NR_SYSCALL_BASE+192)
+#define __NR_truncate64 (__NR_SYSCALL_BASE+193)
+#define __NR_ftruncate64 (__NR_SYSCALL_BASE+194)
+#define __NR_stat64 (__NR_SYSCALL_BASE+195)
+#define __NR_lstat64 (__NR_SYSCALL_BASE+196)
+#define __NR_fstat64 (__NR_SYSCALL_BASE+197)
+#define __NR_lchown32 (__NR_SYSCALL_BASE+198)
+#define __NR_getuid32 (__NR_SYSCALL_BASE+199)
+#define __NR_getgid32 (__NR_SYSCALL_BASE+200)
+#define __NR_geteuid32 (__NR_SYSCALL_BASE+201)
+#define __NR_getegid32 (__NR_SYSCALL_BASE+202)
+#define __NR_setreuid32 (__NR_SYSCALL_BASE+203)
+#define __NR_setregid32 (__NR_SYSCALL_BASE+204)
+#define __NR_getgroups32 (__NR_SYSCALL_BASE+205)
+#define __NR_setgroups32 (__NR_SYSCALL_BASE+206)
+#define __NR_fchown32 (__NR_SYSCALL_BASE+207)
+#define __NR_setresuid32 (__NR_SYSCALL_BASE+208)
+#define __NR_getresuid32 (__NR_SYSCALL_BASE+209)
+#define __NR_setresgid32 (__NR_SYSCALL_BASE+210)
+#define __NR_getresgid32 (__NR_SYSCALL_BASE+211)
+#define __NR_chown32 (__NR_SYSCALL_BASE+212)
+#define __NR_setuid32 (__NR_SYSCALL_BASE+213)
+#define __NR_setgid32 (__NR_SYSCALL_BASE+214)
+#define __NR_setfsuid32 (__NR_SYSCALL_BASE+215)
+#define __NR_setfsgid32 (__NR_SYSCALL_BASE+216)
+#define __NR_getdents64 (__NR_SYSCALL_BASE+217)
+#define __NR_pivot_root (__NR_SYSCALL_BASE+218)
+#define __NR_mincore (__NR_SYSCALL_BASE+219)
+#define __NR_madvise (__NR_SYSCALL_BASE+220)
+#define __NR_fcntl64 (__NR_SYSCALL_BASE+221)
+ /* 222 for tux */
+ /* 223 is unused */
+#define __NR_gettid (__NR_SYSCALL_BASE+224)
+#define __NR_readahead (__NR_SYSCALL_BASE+225)
+#define __NR_setxattr (__NR_SYSCALL_BASE+226)
+#define __NR_lsetxattr (__NR_SYSCALL_BASE+227)
+#define __NR_fsetxattr (__NR_SYSCALL_BASE+228)
+#define __NR_getxattr (__NR_SYSCALL_BASE+229)
+#define __NR_lgetxattr (__NR_SYSCALL_BASE+230)
+#define __NR_fgetxattr (__NR_SYSCALL_BASE+231)
+#define __NR_listxattr (__NR_SYSCALL_BASE+232)
+#define __NR_llistxattr (__NR_SYSCALL_BASE+233)
+#define __NR_flistxattr (__NR_SYSCALL_BASE+234)
+#define __NR_removexattr (__NR_SYSCALL_BASE+235)
+#define __NR_lremovexattr (__NR_SYSCALL_BASE+236)
+#define __NR_fremovexattr (__NR_SYSCALL_BASE+237)
+#define __NR_tkill (__NR_SYSCALL_BASE+238)
+#define __NR_sendfile64 (__NR_SYSCALL_BASE+239)
+#define __NR_futex (__NR_SYSCALL_BASE+240)
+#define __NR_sched_setaffinity (__NR_SYSCALL_BASE+241)
+#define __NR_sched_getaffinity (__NR_SYSCALL_BASE+242)
+#define __NR_io_setup (__NR_SYSCALL_BASE+243)
+#define __NR_io_destroy (__NR_SYSCALL_BASE+244)
+#define __NR_io_getevents (__NR_SYSCALL_BASE+245)
+#define __NR_io_submit (__NR_SYSCALL_BASE+246)
+#define __NR_io_cancel (__NR_SYSCALL_BASE+247)
+#define __NR_exit_group (__NR_SYSCALL_BASE+248)
+#define __NR_lookup_dcookie (__NR_SYSCALL_BASE+249)
+#define __NR_epoll_create (__NR_SYSCALL_BASE+250)
+#define __NR_epoll_ctl (__NR_SYSCALL_BASE+251)
+#define __NR_epoll_wait (__NR_SYSCALL_BASE+252)
+#define __NR_remap_file_pages (__NR_SYSCALL_BASE+253)
+ /* 254 for set_thread_area */
+ /* 255 for get_thread_area */
+ /* 256 for set_tid_address */
+#define __NR_timer_create (__NR_SYSCALL_BASE+257)
+#define __NR_timer_settime (__NR_SYSCALL_BASE+258)
+#define __NR_timer_gettime (__NR_SYSCALL_BASE+259)
+#define __NR_timer_getoverrun (__NR_SYSCALL_BASE+260)
+#define __NR_timer_delete (__NR_SYSCALL_BASE+261)
+#define __NR_clock_settime (__NR_SYSCALL_BASE+262)
+#define __NR_clock_gettime (__NR_SYSCALL_BASE+263)
+#define __NR_clock_getres (__NR_SYSCALL_BASE+264)
+#define __NR_clock_nanosleep (__NR_SYSCALL_BASE+265)
+#define __NR_statfs64 (__NR_SYSCALL_BASE+266)
+#define __NR_fstatfs64 (__NR_SYSCALL_BASE+267)
+#define __NR_tgkill (__NR_SYSCALL_BASE+268)
+#define __NR_utimes (__NR_SYSCALL_BASE+269)
+#define __NR_fadvise64_64 (__NR_SYSCALL_BASE+270)
+#define __NR_pciconfig_iobase (__NR_SYSCALL_BASE+271)
+#define __NR_pciconfig_read (__NR_SYSCALL_BASE+272)
+#define __NR_pciconfig_write (__NR_SYSCALL_BASE+273)
+
+#endif /* __VKI_UNISTD_ARM_LINUX_H */
Copied: trunk/coregrind/vki_unistd-x86-linux.h (from rev 3807, trunk/core=
grind/x86-linux/vki_unistd.h)
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- trunk/coregrind/x86-linux/vki_unistd.h 2005-05-29 16:23:17 UTC (rev 3=
807)
+++ trunk/coregrind/vki_unistd-x86-linux.h 2005-05-29 23:30:48 UTC (rev 3=
814)
@@ -0,0 +1,318 @@
+
+/*
+ This file is part of Valgrind, a dynamic binary instrumentation
+ framework.
+
+ Copyright (C) 2000-2005 Julian Seward=20
+ js...@ac...
+
+ This program is free software; you can redistribute it and/or
+ modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation; either version 2 of the
+ License, or (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307, USA.
+
+ The GNU General Public License is contained in the file COPYING.
+*/
+
+#ifndef __VKI_UNISTD_X86_LINUX_H
+#define __VKI_UNISTD_X86_LINUX_H
+
+// From linux-2.6.9/include/asm-i386/unistd.h
+
+#define __NR_restart_syscall 0
+#define __NR_exit 1
+#define __NR_fork 2
+#define __NR_read 3
+#define __NR_write 4
+#define __NR_open 5
+#define __NR_close 6
+#define __NR_waitpid 7
+#define __NR_creat 8
+#define __NR_link 9
+#define __NR_unlink 10
+#define __NR_execve 11
+#define __NR_chdir 12
+#define __NR_time 13
+#define __NR_mknod 14
+#define __NR_chmod 15
+#define __NR_lchown 16
+#define __NR_break 17
+#define __NR_oldstat 18
+#define __NR_lseek 19
+#define __NR_getpid 20
+#define __NR_mount 21
+#define __NR_umount 22
+#define __NR_setuid 23
+#define __NR_getuid 24
+#define __NR_stime 25
+#define __NR_ptrace 26
+#define __NR_alarm 27
+#define __NR_oldfstat 28
+#define __NR_pause 29
+#define __NR_utime 30
+#define __NR_stty 31
+#define __NR_gtty 32
+#define __NR_access 33
+#define __NR_nice 34
+#define __NR_ftime 35
+#define __NR_sync 36
+#define __NR_kill 37
+#define __NR_rename 38
+#define __NR_mkdir 39
+#define __NR_rmdir 40
+#define __NR_dup 41
+#define __NR_pipe 42
+#define __NR_times 43
+#define __NR_prof 44
+#define __NR_brk 45
+#define __NR_setgid 46
+#define __NR_getgid 47
+#define __NR_signal 48
+#define __NR_geteuid 49
+#define __NR_getegid 50
+#define __NR_acct 51
+#define __NR_umount2 52
+#define __NR_lock 53
+#define __NR_ioctl 54
+#define __NR_fcntl 55
+#define __NR_mpx 56
+#define __NR_setpgid 57
+#define __NR_ulimit 58
+#define __NR_oldolduname 59
+#define __NR_umask 60
+#define __NR_chroot 61
+#define __NR_ustat 62
+#define __NR_dup2 63
+#define __NR_getppid 64
+#define __NR_getpgrp 65
+#define __NR_setsid 66
+#define __NR_sigaction 67
+#define __NR_sgetmask 68
+#define __NR_ssetmask 69
+#define __NR_setreuid 70
+#define __NR_setregid 71
+#define __NR_sigsuspend 72
+#define __NR_sigpending 73
+#define __NR_sethostname 74
+#define __NR_setrlimit 75
+#define __NR_getrlimit 76 /* Back compatible 2Gig limited rlimit */
+#define __NR_getrusage 77
+#define __NR_gettimeofday 78
+#define __NR_settimeofday 79
+#define __NR_getgroups 80
+#define __NR_setgroups 81
+#define __NR_select 82
+#define __NR_symlink 83
+#define __NR_oldlstat 84
+#define __NR_readlink 85
+#define __NR_uselib 86
+#define __NR_swapon 87
+#define __NR_reboot 88
+#define __NR_readdir 89
+#define __NR_mmap 90
+#define __NR_munmap 91
+#define __NR_truncate 92
+#define __NR_ftruncate 93
+#define __NR_fchmod 94
+#define __NR_fchown 95
+#define __NR_getpriority 96
+#define __NR_setpriority 97
+#define __NR_profil 98
+#define __NR_statfs 99
+#define __NR_fstatfs 100
+#define __NR_ioperm 101
+#define __NR_socketcall 102
+#define __NR_syslog 103
+#define __NR_setitimer 104
+#define __NR_getitimer 105
+#define __NR_stat 106
+#define __NR_lstat 107
+#define __NR_fstat 108
+#define __NR_olduname 109
+#define __NR_iopl 110
+#define __NR_vhangup 111
+#define __NR_idle 112
+#define __NR_vm86old 113
+#define __NR_wait4 114
+#define __NR_swapoff 115
+#define __NR_sysinfo 116
+#define __NR_ipc 117
+#define __NR_fsync 118
+#define __NR_sigreturn 119
+#define __NR_clone 120
+#define __NR_setdomainname 121
+#define __NR_uname 122
+#define __NR_modify_ldt 123
+#define __NR_adjtimex 124
+#define __NR_mprotect 125
+#define __NR_sigprocmask 126
+#define __NR_create_module 127
+#define __NR_init_module 128
+#define __NR_delete_module 129
+#define __NR_get_kernel_syms 130
+#define __NR_quotactl 131
+#define __NR_getpgid 132
+#define __NR_fchdir 133
+#define __NR_bdflush 134
+#define __NR_sysfs 135
+#define __NR_personality 136
+#define __NR_afs_syscall 137 /* Syscall for Andrew File System */
+#define __NR_setfsuid 138
+#define __NR_setfsgid 139
+#define __NR__llseek 140
+#define __NR_getdents 141
+#define __NR__newselect 142
+#define __NR_flock 143
+#define __NR_msync 144
+#define __NR_readv 145
+#define __NR_writev 146
+#define __NR_getsid 147
+#define __NR_fdatasync 148
+#define __NR__sysctl 149
+#define __NR_mlock 150
+#define __NR_munlock 151
+#define __NR_mlockall 152
+#define __NR_munlockall 153
+#define __NR_sched_setparam 154
+#define __NR_sched_getparam 155
+#define __NR_sched_setscheduler 156
+#define __NR_sched_getscheduler 157
+#define __NR_sched_yield 158
+#define __NR_sched_get_priority_max 159
+#define __NR_sched_get_priority_min 160
+#define __NR_sched_rr_get_interval 161
+#define __NR_nanosleep 162
+#define __NR_mremap 163
+#define __NR_setresuid 164
+#define __NR_getresuid 165
+#define __NR_vm86 166
+#define __NR_query_module 167
+#define __NR_poll 168
+#define __NR_nfsservctl 169
+#define __NR_setresgid 170
+#define __NR_getresgid 171
+#define __NR_prctl 172
+#define __NR_rt_sigreturn 173
+#define __NR_rt_sigaction 174
+#define __NR_rt_sigprocmask 175
+#define __NR_rt_sigpending 176
+#define __NR_rt_sigtimedwait 177
+#define __NR_rt_sigqueueinfo 178
+#define __NR_rt_sigsuspend 179
+#define __NR_pread64 180
+#define __NR_pwrite64 181
+#define __NR_chown 182
+#define __NR_getcwd 183
+#define __NR_capget 184
+#define __NR_capset 185
+#define __NR_sigaltstack 186
+#define __NR_sendfile 187
+#define __NR_getpmsg 188 /* some people actually want streams */
+#define __NR_putpmsg 189 /* some people actually want streams */
+#define __NR_vfork 190
+#define __NR_ugetrlimit 191 /* SuS compliant getrlimit */
+#define __NR_mmap2 192
+#define __NR_truncate64 193
+#define __NR_ftruncate64 194
+#define __NR_stat64 195
+#define __NR_lstat64 196
+#define __NR_fstat64 197
+#define __NR_lchown32 198
+#define __NR_getuid32 199
+#define __NR_getgid32 200
+#define __NR_geteuid32 201
+#define __NR_getegid32 202
+#define __NR_setreuid32 203
+#define __NR_setregid32 204
+#define __NR_getgroups32 205
+#define __NR_setgroups32 206
+#define __NR_fchown32 207
+#define __NR_setresuid32 208
+#define __NR_getresuid32 209
+#define __NR_setresgid32 210
+#define __NR_getresgid32 211
+#define __NR_chown32 212
+#define __NR_setuid32 213
+#define __NR_setgid32 214
+#define __NR_setfsuid32 215
+#define __NR_setfsgid32 216
+#define __NR_pivot_root 217
+#define __NR_mincore 218
+#define __NR_madvise 219
+#define __NR_madvise1 219 /* delete when C lib stub is removed */
+#define __NR_getdents64 220
+#define __NR_fcntl64 221
+/* 223 is unused */
+#define __NR_gettid 224
+#define __NR_readahead 225
+#define __NR_setxattr 226
+#define __NR_lsetxattr 227
+#define __NR_fsetxattr 228
+#define __NR_getxattr 229
+#define __NR_lgetxattr 230
+#define __NR_fgetxattr 231
+#define __NR_listxattr 232
+#define __NR_llistxattr 233
+#define __NR_flistxattr 234
+#define __NR_removexattr 235
+#define __NR_lremovexattr 236
+#define __NR_fremovexattr 237
+#define __NR_tkill 238
+#define __NR_sendfile64 239
+#define __NR_futex 240
+#define __NR_sched_setaffinity 241
+#define __NR_sched_getaffinity 242
+#define __NR_set_thread_area 243
+#define __NR_get_thread_area 244
+#define __NR_io_setup 245
+#define __NR_io_destroy 246
+#define __NR_io_getevents 247
+#define __NR_io_submit 248
+#define __NR_io_cancel 249
+#define __NR_fadvise64 250
+
+#define __NR_exit_group 252
+#define __NR_lookup_dcookie 253
+#define __NR_epoll_create 254
+#define __NR_epoll_ctl 255
+#define __NR_epoll_wait 256
+#define __NR_remap_file_pages 257
+#define __NR_set_tid_address 258
+#define __NR_timer_create 259
+#define __NR_timer_settime (__NR_timer_create+1)
+#define __NR_timer_gettime (__NR_timer_create+2)
+#define __NR_timer_getoverrun (__NR_timer_create+3)
+#define __NR_timer_delete (__NR_timer_create+4)
+#define __NR_clock_settime (__NR_timer_create+5)
+#define __NR_clock_gettime (__NR_timer_create+6)
+#define __NR_clock_getres (__NR_timer_create+7)
+#define __NR_clock_nanosleep (__NR_timer_create+8)
+#define __NR_statfs64 268
+#define __NR_fstatfs64 269
+#define __NR_tgkill 270
+#define __NR_utimes 271
+#define __NR_fadvise64_64 272
+#define __NR_vserver 273
+#define __NR_mbind 274
+#define __NR_get_mempolicy 275
+#define __NR_set_mempolicy 276
+#define __NR_mq_open 277
+#define __NR_mq_unlink (__NR_mq_open+1)
+#define __NR_mq_timedsend (__NR_mq_open+2)
+#define __NR_mq_timedreceive (__NR_mq_open+3)
+#define __NR_mq_notify (__NR_mq_open+4)
+#define __NR_mq_getsetattr (__NR_mq_open+5)
+#define __NR_sys_kexec_load 283
+#define __NR_wait 284
+
+#endif /* __VKI_UNISTD_X86_LINUX_H */
Added: trunk/coregrind/vki_unistd.h
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- trunk/coregrind/vki_unistd.h 2005-05-29 18:46:38 UTC (rev 3813)
+++ trunk/coregrind/vki_unistd.h 2005-05-29 23:30:48 UTC (rev 3814)
@@ -0,0 +1,49 @@
+
+/*--------------------------------------------------------------------*/
+/*--- Generic header for Valgrind's kernel interface. ---*/
+/*--- vki_unistd.h ---*/
+/*--------------------------------------------------------------------*/
+
+/*
+ This file is part of Valgrind, a dynamic binary instrumentation
+ framework.
+
+ Copyright (C) 2005 Nicholas Nethercote
+ nj...@va...
+
+ This program is free software; you can redistribute it and/or
+ modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation; either version 2 of the
+ License, or (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307, USA.
+
+ The GNU General Public License is contained in the file COPYING.
+*/
+
+#ifndef __VKI_UNISTD_H
+#define __VKI_UNISTD_H
+
+#if defined(VGP_x86_linux)
+# include "vki_unistd-x86-linux.h" =20
+#elif defined(VGP_amd64_linux)
+# include "vki_unistd-amd64-linux.h"=20
+#elif defined(VGP_arm_linux)
+# include "vki_unistd-arm-linux.h"=20
+#else
+# error Unknown platform
+#endif
+
+#endif // __VKI_UNISTD_H
+
+/*--------------------------------------------------------------------*/
+/*--- end ---*/
+/*--------------------------------------------------------------------*/
Modified: trunk/memcheck/tests/x86/scalar.h
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- trunk/memcheck/tests/x86/scalar.h 2005-05-29 18:46:38 UTC (rev 3813)
+++ trunk/memcheck/tests/x86/scalar.h 2005-05-29 23:30:48 UTC (rev 3814)
@@ -1,4 +1,4 @@
-#include "../../../coregrind/x86-linux/vki_unistd.h"
+#include "../../../coregrind/vki_unistd-x86-linux.h"
=20
#include <assert.h>
#include <errno.h>
|
Author: njn
Date: 2005-05-29 19:46:38 +0100 (Sun, 29 May 2005)
New Revision: 3813
Removed:
trunk/coregrind/amd64-linux/core_platform.h
trunk/coregrind/arm-linux/core_platform.h
trunk/coregrind/x86-linux/core_platform.h
Modified:
trunk/coregrind/amd64-linux/Makefile.am
trunk/coregrind/arm-linux/Makefile.am
trunk/coregrind/core.h
trunk/coregrind/m_aspacemgr/aspacemgr.c
trunk/coregrind/m_syscalls/syscalls.c
trunk/coregrind/vg_mylibc.c
trunk/coregrind/x86-linux/Makefile.am
trunk/docs/porting-HOWTO
Log:
Eliminated VGP_DO_MMAP. Replaced it with VG_(mmap_native)(), which was
derived from mmap_inner().
As a consequence, $PLATFORM/core_platform.h files are no longer necessary=
,
hooray!
Modified: trunk/coregrind/amd64-linux/Makefile.am
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- trunk/coregrind/amd64-linux/Makefile.am 2005-05-29 17:50:40 UTC (rev =
3812)
+++ trunk/coregrind/amd64-linux/Makefile.am 2005-05-29 18:46:38 UTC (rev =
3813)
@@ -2,5 +2,4 @@
include $(top_srcdir)/Makefile.core-AM_CPPFLAGS.am
=20
noinst_HEADERS =3D \
- core_platform.h \
vki_unistd.h
Deleted: trunk/coregrind/amd64-linux/core_platform.h
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- trunk/coregrind/amd64-linux/core_platform.h 2005-05-29 17:50:40 UTC (=
rev 3812)
+++ trunk/coregrind/amd64-linux/core_platform.h 2005-05-29 18:46:38 UTC (=
rev 3813)
@@ -1,48 +0,0 @@
-
-/*--------------------------------------------------------------------*/
-/*--- Platform-specific stuff for the core. ---*/
-/*--- amd64-linux/core_platform.h ---*/
-/*--------------------------------------------------------------------*/
-
-/*
- This file is part of Valgrind, a dynamic binary instrumentation
- framework.
-
- Copyright (C) 2000-2005 Nicholas Nethercote
- nj...@va...
-
- This program is free software; you can redistribute it and/or
- modify it under the terms of the GNU General Public License as
- published by the Free Software Foundation; either version 2 of the
- License, or (at your option) any later version.
-
- This program is distributed in the hope that it will be useful, but
- WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
- 02111-1307, USA.
-
- The GNU General Public License is contained in the file COPYING.
-*/
-
-#ifndef __AMD64_LINUX_CORE_PLATFORM_H
-#define __AMD64_LINUX_CORE_PLATFORM_H
-
-/* ---------------------------------------------------------------------
- mmap() stuff
- ------------------------------------------------------------------ */
-
-#define VGP_DO_MMAP(ret, start, length, prot, flags, fd, offset) { \
- ret =3D VG_(do_syscall6)(__NR_mmap, (UWord)(start), (length), =
\
- (prot), (flags), (fd), (offset)); =
\
-} while (0)
-
-#endif // __AMD64_LINUX_CORE_PLATFORM_H
-
-/*--------------------------------------------------------------------*/
-/*--- end ---*/
-/*--------------------------------------------------------------------*/
Modified: trunk/coregrind/arm-linux/Makefile.am
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- trunk/coregrind/arm-linux/Makefile.am 2005-05-29 17:50:40 UTC (rev 38=
12)
+++ trunk/coregrind/arm-linux/Makefile.am 2005-05-29 18:46:38 UTC (rev 38=
13)
@@ -2,5 +2,4 @@
include $(top_srcdir)/Makefile.core-AM_CPPFLAGS.am
=20
noinst_HEADERS =3D \
- core_platform.h \
vki_unistd.h
Deleted: trunk/coregrind/arm-linux/core_platform.h
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- trunk/coregrind/arm-linux/core_platform.h 2005-05-29 17:50:40 UTC (re=
v 3812)
+++ trunk/coregrind/arm-linux/core_platform.h 2005-05-29 18:46:38 UTC (re=
v 3813)
@@ -1,47 +0,0 @@
-
-/*--------------------------------------------------------------------*/
-/*--- Platform-specific stuff for the core. ---*/
-/*--- arm-linux/core_platform.h ---*/
-/*--------------------------------------------------------------------*/
-
-/*
- This file is part of Valgrind, a dynamic binary instrumentation
- framework.
-
- Copyright (C) 2000-2005 Nicholas Nethercote
- nj...@va...
-
- This program is free software; you can redistribute it and/or
- modify it under the terms of the GNU General Public License as
- published by the Free Software Foundation; either version 2 of the
- License, or (at your option) any later version.
-
- This program is distributed in the hope that it will be useful, but
- WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
- 02111-1307, USA.
-
- The GNU General Public License is contained in the file COPYING.
-*/
-
-#ifndef __ARM_LINUX_CORE_PLATFORM_H
-#define __ARM_LINUX_CORE_PLATFORM_H
-
-/* ---------------------------------------------------------------------
- mmap() stuff
- ------------------------------------------------------------------ */
-
-#define VGP_DO_MMAP(ret, start, length, prot, flags, fd, offset) { \
- I_die_here; \
-} while (0)
-
-#endif // __ARM_LINUX_CORE_PLATFORM_H
-
-/*--------------------------------------------------------------------*/
-/*--- end ---*/
-/*--------------------------------------------------------------------*/
Modified: trunk/coregrind/core.h
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- trunk/coregrind/core.h 2005-05-29 17:50:40 UTC (rev 3812)
+++ trunk/coregrind/core.h 2005-05-29 18:46:38 UTC (rev 3813)
@@ -35,8 +35,6 @@
#include "tool.h" // tool stuff
#include "core_arch.h" // arch-specific stuff, eg. x86/core_arch.h
=20
-#include "core_platform.h" // platform-specific stuff,
- // eg. x86-linux/core_platform.h
#include "core_os.h" // OS-specific stuff, eg. linux/core_os.h
=20
#include "pub_core_mallocfree.h" // for type 'ArenaId'
@@ -442,10 +440,12 @@
extern Int VG_(poll)( struct vki_pollfd *, UInt nfds, Int timeout);
=20
/* system/mman.h */
-extern void* VG_(mmap)( void* start, SizeT length, UInt prot, UInt flags=
,
- UInt sf_flags, UInt fd, OffT offset );
-extern Int VG_(munmap)( void* start, SizeT length );
-extern Int VG_(mprotect)( void *start, SizeT length, UInt prot );
+extern void* VG_(mmap) ( void* start, SizeT length, UInt prot, UIn=
t flags,
+ UInt sf_flags, UInt fd, OffT offset );
+extern void* VG_(mmap_native)( void* start, SizeT length, UInt prot, UIn=
t flags,
+ UInt fd, OffT offset );
+extern Int VG_(munmap) ( void* start, SizeT length );
+extern Int VG_(mprotect) ( void *start, SizeT length, UInt prot );
extern Int VG_(mprotect_native)( void *start, SizeT length, UInt prot );
=20
=20
Modified: trunk/coregrind/m_aspacemgr/aspacemgr.c
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- trunk/coregrind/m_aspacemgr/aspacemgr.c 2005-05-29 17:50:40 UTC (rev =
3812)
+++ trunk/coregrind/m_aspacemgr/aspacemgr.c 2005-05-29 18:46:38 UTC (rev =
3813)
@@ -953,14 +953,14 @@
void VG_(pad_address_space)(Addr start)
{
Addr addr =3D (start =3D=3D 0) ? VG_(client_base) : start;
- Addr ret;
+ void* ret;
=20
Int i =3D 0;
Segment* s =3D i >=3D segments_used ? NULL : &segments[i];
=20
while (s && addr <=3D VG_(valgrind_last)) {
if (addr < s->addr) {
- VGP_DO_MMAP(ret, addr, s->addr - addr, 0,
+ ret =3D VG_(mmap_native)((void*)addr, s->addr - addr, 0,
VKI_MAP_FIXED | VKI_MAP_PRIVATE | VKI_MAP_ANONYMOUS=
,
-1, 0);
}
@@ -970,7 +970,7 @@
}
=20
if (addr <=3D VG_(valgrind_last)) {
- VGP_DO_MMAP(ret, addr, VG_(valgrind_last) - addr + 1, 0,
+ ret =3D VG_(mmap_native)((void*)addr, VG_(valgrind_last) - addr + =
1, 0,
VKI_MAP_FIXED | VKI_MAP_PRIVATE | VKI_MAP_ANONYMOUS,
-1, 0);
}
Modified: trunk/coregrind/m_syscalls/syscalls.c
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- trunk/coregrind/m_syscalls/syscalls.c 2005-05-29 17:50:40 UTC (rev 38=
12)
+++ trunk/coregrind/m_syscalls/syscalls.c 2005-05-29 18:46:38 UTC (rev 38=
13)
@@ -4533,8 +4533,7 @@
}
=20
if (RES !=3D -VKI_ENOMEM) {
- int res;
- VGP_DO_MMAP(res, a1, a2, a3, a4, a5, a6);
+ Int res =3D (Int)VG_(mmap_native)((void*)a1, a2, a3, a4, a5, a6);
SET_RESULT(res);
=20
if (!VG_(is_kerror)(RES)) {
Modified: trunk/coregrind/vg_mylibc.c
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- trunk/coregrind/vg_mylibc.c 2005-05-29 17:50:40 UTC (rev 3812)
+++ trunk/coregrind/vg_mylibc.c 2005-05-29 18:46:38 UTC (rev 3813)
@@ -288,19 +288,28 @@
mmap/munmap, exit, fcntl
------------------------------------------------------------------ */
=20
-static Int munmap_inner(void *start, SizeT length)
-{
- return VG_(do_syscall2)(__NR_munmap, (UWord)start, length );
-}
-
-static Addr mmap_inner(void *start, SizeT length, UInt prot, UInt flags,
+void* VG_(mmap_native)(void *start, SizeT length, UInt prot, UInt flags,
UInt fd, OffT offset)
{
- Word ret;
- =20
- VGP_DO_MMAP(ret, start, length, prot,
- flags & ~(VKI_MAP_NOSYMS|VKI_MAP_CLIENT), fd, offset);
- return ret;
+ UWord ret;
+#if defined(VGP_x86_linux)
+ {=20
+ UWord args[6];
+ args[0] =3D (UWord)start;
+ args[1] =3D length;
+ args[2] =3D prot;
+ args[3] =3D flags;
+ args[4] =3D fd;
+ args[5] =3D offset;
+ ret =3D VG_(do_syscall1)(__NR_mmap, (UWord)args );
+ }
+#elif defined(VGP_amd64_linux)
+ ret =3D VG_(do_syscall6)(__NR_mmap, (UWord)start, length,=20
+ prot, flags, fd, offset);
+#else
+# error Unknown platform
+#endif
+ return VG_(is_kerror)(ret) ? (void*)-1 : (void*)ret;
}
=20
/* Returns -1 on failure. */
@@ -317,10 +326,12 @@
if (start =3D=3D 0)
return (void *)-1;
=20
- res =3D mmap_inner(start, length, prot, flags, fd, offset);
+ res =3D (Addr)VG_(mmap_native)(start, length, prot,=20
+ flags & ~(VKI_MAP_NOSYMS | VKI_MAP_CLIEN=
T),
+ fd, offset);
=20
// Check it ended up in the right place.
- if (!VG_(is_kerror)(res)) {
+ if (res !=3D (Addr)-1) {
if (flags & VKI_MAP_CLIENT) {
vg_assert(VG_(client_base) <=3D res && res+length <=3D VG_(clie=
nt_end));
} else {
@@ -337,29 +348,36 @@
VG_(map_fd_segment)(res, length, prot, sf_flags, fd, offset, NULL)=
;
}
=20
- return VG_(is_kerror)(res) ? ((void*)(-1)) : (void*)res;
+ return (void*)res;
}
=20
+static Int munmap_native(void *start, SizeT length)
+{
+ Int res =3D VG_(do_syscall2)(__NR_munmap, (UWord)start, length );
+ return VG_(is_kerror)(res) ? -1 : 0;
+}
+
/* Returns -1 on failure. */
Int VG_(munmap)( void* start, SizeT length )
{
- Int res =3D munmap_inner(start, length);
- if (!VG_(is_kerror)(res))
+ Int res =3D munmap_native(start, length);
+ if (0 =3D=3D res)
VG_(unmap_range)((Addr)start, length);
- return VG_(is_kerror)(res) ? -1 : 0;
+ return res;
}
=20
-Int VG_(mprotect)( void *start, SizeT length, UInt prot )
+Int VG_(mprotect_native)( void *start, SizeT length, UInt prot )
{
Int res =3D VG_(do_syscall3)(__NR_mprotect, (UWord)start, length, pro=
t );
- if (!VG_(is_kerror)(res))
- VG_(mprotect_range)((Addr)start, length, prot);
return VG_(is_kerror)(res) ? -1 : 0;
}
-Int VG_(mprotect_native)( void *start, SizeT length, UInt prot )
+
+Int VG_(mprotect)( void *start, SizeT length, UInt prot )
{
- Int res =3D VG_(do_syscall3)(__NR_mprotect, (UWord)start, length, pro=
t );
- return VG_(is_kerror)(res) ? -1 : 0;
+ Int res =3D VG_(mprotect_native)(start, length, prot);
+ if (0 =3D=3D res)
+ VG_(mprotect_range)((Addr)start, length, prot);
+ return res;
}
=20
/* Pull down the entire world */
Modified: trunk/coregrind/x86-linux/Makefile.am
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- trunk/coregrind/x86-linux/Makefile.am 2005-05-29 17:50:40 UTC (rev 38=
12)
+++ trunk/coregrind/x86-linux/Makefile.am 2005-05-29 18:46:38 UTC (rev 38=
13)
@@ -2,5 +2,4 @@
include $(top_srcdir)/Makefile.core-AM_CPPFLAGS.am
=20
noinst_HEADERS =3D \
- core_platform.h \
vki_unistd.h
Deleted: trunk/coregrind/x86-linux/core_platform.h
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- trunk/coregrind/x86-linux/core_platform.h 2005-05-29 17:50:40 UTC (re=
v 3812)
+++ trunk/coregrind/x86-linux/core_platform.h 2005-05-29 18:46:38 UTC (re=
v 3813)
@@ -1,56 +0,0 @@
-
-/*--------------------------------------------------------------------*/
-/*--- Platform-specific stuff for the core. ---*/
-/*--- x86-linux/core_platform.h ---*/
-/*--------------------------------------------------------------------*/
-
-/*
- This file is part of Valgrind, a dynamic binary instrumentation
- framework.
-
- Copyright (C) 2000-2005 Nicholas Nethercote
- nj...@va...
-
- This program is free software; you can redistribute it and/or
- modify it under the terms of the GNU General Public License as
- published by the Free Software Foundation; either version 2 of the
- License, or (at your option) any later version.
-
- This program is distributed in the hope that it will be useful, but
- WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
- 02111-1307, USA.
-
- The GNU General Public License is contained in the file COPYING.
-*/
-
-#ifndef __X86_LINUX_CORE_PLATFORM_H
-#define __X86_LINUX_CORE_PLATFORM_H
-
-/* ---------------------------------------------------------------------
- mmap() stuff
- ------------------------------------------------------------------ */
-
-#define VGP_DO_MMAP(ret, start, length, prot, flags, fd, offset) { =
\
- UWord __args[6]; =
\
- =
\
- __args[0] =3D (UWord)(start); =
\
- __args[1] =3D (length); =
\
- __args[2] =3D (prot); =
\
- __args[3] =3D (flags); =
\
- __args[4] =3D (fd); =
\
- __args[5] =3D (offset); =
\
- =
\
- ret =3D VG_(do_syscall1)(__NR_mmap, (UWord)(&(__args[0])) ); =
\
-} while (0)
-
-#endif // __X86_LINUX_CORE_PLATFORM_H
-
-/*--------------------------------------------------------------------*/
-/*--- end ---*/
-/*--------------------------------------------------------------------*/
Modified: trunk/docs/porting-HOWTO
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- trunk/docs/porting-HOWTO 2005-05-29 17:50:40 UTC (rev 3812)
+++ trunk/docs/porting-HOWTO 2005-05-29 18:46:38 UTC (rev 3813)
@@ -1,6 +1,9 @@
This is a rough guide to porting Valgrind to a new architecture, or a ne=
w
operating system. It's quite preliminary, but should get you started.
=20
+[29-May-2005: the stuff about the locations of files is now badly out of
+date. --njn]
+
------------------------------------------------------------------------=
-----
Porting Valgrind to a new architecture
------------------------------------------------------------------------=
-----
|
|
From: <sv...@va...> - 2005-05-29 17:50:45
|
Author: njn
Date: 2005-05-29 18:50:40 +0100 (Sun, 29 May 2005)
New Revision: 3812
Modified:
trunk/coregrind/amd64-linux/core_platform.h
trunk/coregrind/arm-linux/core_platform.h
trunk/coregrind/m_syscalls/syscalls-amd64-linux.c
trunk/coregrind/m_syscalls/syscalls-x86-linux.c
trunk/coregrind/pub_core_syscalls.h
trunk/coregrind/vg_signals.c
trunk/coregrind/x86-linux/core_platform.h
Log:
Localized use of VGP_UCONTEXT_* to vg_signals.c, which meant they could
be moved out of $PLATFORM/core_platform.h.
Modified: trunk/coregrind/amd64-linux/core_platform.h
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- trunk/coregrind/amd64-linux/core_platform.h 2005-05-29 17:27:18 UTC (=
rev 3811)
+++ trunk/coregrind/amd64-linux/core_platform.h 2005-05-29 17:50:40 UTC (=
rev 3812)
@@ -32,20 +32,7 @@
#ifndef __AMD64_LINUX_CORE_PLATFORM_H
#define __AMD64_LINUX_CORE_PLATFORM_H
=20
-//#include "core_platform_asm.h" // platform-specific asm stuff
-//#include "platform_arch.h" // platform-specific tool stuff
-
/* ---------------------------------------------------------------------
- ucontext stuff
- ------------------------------------------------------------------ */
-
-#define VGP_UCONTEXT_INSTR_PTR(uc) ((uc)->uc_mcontext.rip)
-#define VGP_UCONTEXT_STACK_PTR(uc) ((uc)->uc_mcontext.rsp)
-#define VGP_UCONTEXT_FRAME_PTR(uc) ((uc)->uc_mcontext.rbp)
-#define VGP_UCONTEXT_SYSCALL_NUM(uc) ((uc)->uc_mcontext.rax)
-#define VGP_UCONTEXT_SYSCALL_RET(uc) ((uc)->uc_mcontext.rax)
-
-/* ---------------------------------------------------------------------
mmap() stuff
------------------------------------------------------------------ */
=20
Modified: trunk/coregrind/arm-linux/core_platform.h
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- trunk/coregrind/arm-linux/core_platform.h 2005-05-29 17:27:18 UTC (re=
v 3811)
+++ trunk/coregrind/arm-linux/core_platform.h 2005-05-29 17:50:40 UTC (re=
v 3812)
@@ -32,19 +32,7 @@
#ifndef __ARM_LINUX_CORE_PLATFORM_H
#define __ARM_LINUX_CORE_PLATFORM_H
=20
-//#include "core_platform_asm.h" // platform-specific asm stuff
-//#include "platform_arch.h" // platform-specific tool stuff
-
/* ---------------------------------------------------------------------
- ucontext stuff
- ------------------------------------------------------------------ */
-
-#define VGP_UCONTEXT_INSTR_PTR(uc) ((uc)->uc_mcontext.arm_pc)
-#define VGP_UCONTEXT_STACK_PTR(uc) ((uc)->uc_mcontext.arm_sp)
-#define VGP_UCONTEXT_FRAME_PTR(uc) ((uc)->uc_mcontext.arm_fp)
-#define VGP_UCONTEXT_SYSCALL_NUM(uc) ((uc)->uc_mcontext.arm_r0)
-
-/* ---------------------------------------------------------------------
mmap() stuff
------------------------------------------------------------------ */
=20
Modified: trunk/coregrind/m_syscalls/syscalls-amd64-linux.c
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- trunk/coregrind/m_syscalls/syscalls-amd64-linux.c 2005-05-29 17:27:18=
UTC (rev 3811)
+++ trunk/coregrind/m_syscalls/syscalls-amd64-linux.c 2005-05-29 17:50:40=
UTC (rev 3812)
@@ -108,18 +108,17 @@
*/
/* NB: this is identical to the x86 version */
void VGP_(interrupted_syscall)(ThreadId tid,=20
- struct vki_ucontext *uc,
+ Word ip, UWord sysnum, UWord sysret,
Bool restart)
{
static const Bool debug =3D 0;
=20
ThreadState *tst =3D VG_(get_ThreadState)(tid);
ThreadArchState *th_regs =3D &tst->arch;
- Word ip =3D VGP_UCONTEXT_INSTR_PTR(uc);
=20
if (debug)
VG_(printf)("interrupted_syscall: ip=3D%p; restart=3D%d eax=3D%d\n=
",=20
- ip, restart, VGP_UCONTEXT_SYSCALL_NUM(uc));
+ ip, restart, sysnum);
=20
if (ip < VGA_(blksys_setup) || ip >=3D VGA_(blksys_finished)) {
VG_(printf)(" not in syscall (%p - %p)\n", VGA_(blksys_setup), VG=
A_(blksys_finished));
@@ -149,8 +148,8 @@
The saved real CPU %rax has the result, which we need to move
to RAX. */
if (debug)
- VG_(printf)(" completed: ret=3D%d\n", VGP_UCONTEXT_SYSCALL_RET(uc));
- th_regs->vex.VGP_SYSCALL_RET =3D VGP_UCONTEXT_SYSCALL_RET(uc);
+ VG_(printf)(" completed: ret=3D%d\n", sysret);
+ th_regs->vex.VGP_SYSCALL_RET =3D sysret;
VG_(post_syscall)(tid);
} else if (ip >=3D VGA_(blksys_committed) && ip < VGA_(blksys_finishe=
d)) {
/* Result committed, but the signal mask has not been restored;
Modified: trunk/coregrind/m_syscalls/syscalls-x86-linux.c
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- trunk/coregrind/m_syscalls/syscalls-x86-linux.c 2005-05-29 17:27:18 U=
TC (rev 3811)
+++ trunk/coregrind/m_syscalls/syscalls-x86-linux.c 2005-05-29 17:50:40 U=
TC (rev 3812)
@@ -107,18 +107,17 @@
*/
/* NB: this is identical to the amd64 version */
void VGP_(interrupted_syscall)(ThreadId tid,=20
- struct vki_ucontext *uc,
+ Word eip, UWord sysnum, UWord sysret,
Bool restart)
{
static const Bool debug =3D 0;
=20
ThreadState *tst =3D VG_(get_ThreadState)(tid);
ThreadArchState *th_regs =3D &tst->arch;
- Word eip =3D VGP_UCONTEXT_INSTR_PTR(uc);
=20
if (debug)
VG_(printf)("interrupted_syscall: eip=3D%p; restart=3D%d eax=3D%d\=
n",=20
- eip, restart, VGP_UCONTEXT_SYSCALL_NUM(uc));
+ eip, restart, sysnum);
=20
if (eip < VGA_(blksys_setup) || eip >=3D VGA_(blksys_finished)) {
VG_(printf)(" not in syscall (%p - %p)\n", VGA_(blksys_setup), VG=
A_(blksys_finished));
@@ -148,8 +147,8 @@
The saved real CPU %eax has the result, which we need to move
to EAX. */
if (debug)
- VG_(printf)(" completed: ret=3D%d\n", VGP_UCONTEXT_SYSCALL_RET(uc));
- th_regs->vex.VGP_SYSCALL_RET =3D VGP_UCONTEXT_SYSCALL_RET(uc);
+ VG_(printf)(" completed: ret=3D%d\n", sysret);
+ th_regs->vex.VGP_SYSCALL_RET =3D sysret;
VG_(post_syscall)(tid);
} else if (eip >=3D VGA_(blksys_committed) && eip < VGA_(blksys_finis=
hed)) {
/* Result committed, but the signal mask has not been restored;
Modified: trunk/coregrind/pub_core_syscalls.h
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- trunk/coregrind/pub_core_syscalls.h 2005-05-29 17:27:18 UTC (rev 3811=
)
+++ trunk/coregrind/pub_core_syscalls.h 2005-05-29 17:50:40 UTC (rev 3812=
)
@@ -48,7 +48,7 @@
// (either interrupted or finished normally), or False if it was
// restarted (or the signal didn't actually interrupt a syscall).
extern void VGP_(interrupted_syscall)(ThreadId tid,
- struct vki_ucontext *uc,
+ Word eip, UWord sysnum, UWord sysr=
et,
Bool restart);
=20
// Release resources held by this thread
Modified: trunk/coregrind/vg_signals.c
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- trunk/coregrind/vg_signals.c 2005-05-29 17:27:18 UTC (rev 3811)
+++ trunk/coregrind/vg_signals.c 2005-05-29 17:50:40 UTC (rev 3812)
@@ -113,6 +113,28 @@
vki_siginfo_t sigs[N_QUEUED_SIGNALS];
} SigQueue;
=20
+#if defined(VGP_x86_linux)
+# define VGP_UCONTEXT_INSTR_PTR(uc) ((uc)->uc_mcontext.eip)
+# define VGP_UCONTEXT_STACK_PTR(uc) ((uc)->uc_mcontext.esp)
+# define VGP_UCONTEXT_FRAME_PTR(uc) ((uc)->uc_mcontext.ebp)
+# define VGP_UCONTEXT_SYSCALL_NUM(uc) ((uc)->uc_mcontext.eax)
+# define VGP_UCONTEXT_SYSCALL_RET(uc) ((uc)->uc_mcontext.eax)
+#elif defined(VGP_amd64_linux)
+# define VGP_UCONTEXT_INSTR_PTR(uc) ((uc)->uc_mcontext.rip)
+# define VGP_UCONTEXT_STACK_PTR(uc) ((uc)->uc_mcontext.rsp)
+# define VGP_UCONTEXT_FRAME_PTR(uc) ((uc)->uc_mcontext.rbp)
+# define VGP_UCONTEXT_SYSCALL_NUM(uc) ((uc)->uc_mcontext.rax)
+# define VGP_UCONTEXT_SYSCALL_RET(uc) ((uc)->uc_mcontext.rax)
+#elif defined(VGP_arm_linux)
+# define VGP_UCONTEXT_INSTR_PTR(uc) ((uc)->uc_mcontext.arm_pc)
+# define VGP_UCONTEXT_STACK_PTR(uc) ((uc)->uc_mcontext.arm_sp)
+# define VGP_UCONTEXT_FRAME_PTR(uc) ((uc)->uc_mcontext.arm_fp)
+# define VGP_UCONTEXT_SYSCALL_NUM(uc) ((uc)->uc_mcontext.arm_r0)
+# error VGP_UCONTEXT_SYSCALL_RET undefined for ARM/Linux
+#else
+# error Unknown platform
+#endif
+
/* ---------------------------------------------------------------------
HIGH LEVEL STUFF TO DO WITH SIGNALS: POLICY (MOSTLY)
------------------------------------------------------------------ */
@@ -1584,7 +1606,10 @@
sigNo, tid, info->si_code);
=20
/* Update thread state properly */
- VGP_(interrupted_syscall)(tid, uc,=20
+ VGP_(interrupted_syscall)(tid,=20
+ VGP_UCONTEXT_INSTR_PTR(uc),=20
+ VGP_UCONTEXT_SYSCALL_NUM(uc),=20
+ VGP_UCONTEXT_SYSCALL_RET(uc),=20
!!(scss.scss_per_sig[sigNo].scss_flags & VKI_SA_RESTART));
=20
/* Set up the thread's state to deliver a signal */
Modified: trunk/coregrind/x86-linux/core_platform.h
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- trunk/coregrind/x86-linux/core_platform.h 2005-05-29 17:27:18 UTC (re=
v 3811)
+++ trunk/coregrind/x86-linux/core_platform.h 2005-05-29 17:50:40 UTC (re=
v 3812)
@@ -32,20 +32,7 @@
#ifndef __X86_LINUX_CORE_PLATFORM_H
#define __X86_LINUX_CORE_PLATFORM_H
=20
-//#include "core_platform_asm.h" // platform-specific asm stuff
-//#include "platform_arch.h" // platform-specific tool stuff
-
/* ---------------------------------------------------------------------
- ucontext stuff
- ------------------------------------------------------------------ */
-
-#define VGP_UCONTEXT_INSTR_PTR(uc) ((uc)->uc_mcontext.eip)
-#define VGP_UCONTEXT_STACK_PTR(uc) ((uc)->uc_mcontext.esp)
-#define VGP_UCONTEXT_FRAME_PTR(uc) ((uc)->uc_mcontext.ebp)
-#define VGP_UCONTEXT_SYSCALL_NUM(uc) ((uc)->uc_mcontext.eax)
-#define VGP_UCONTEXT_SYSCALL_RET(uc) ((uc)->uc_mcontext.eax)
-
-/* ---------------------------------------------------------------------
mmap() stuff
------------------------------------------------------------------ */
=20
|
|
From: <sv...@va...> - 2005-05-29 17:27:22
|
Author: njn
Date: 2005-05-29 18:27:18 +0100 (Sun, 29 May 2005)
New Revision: 3811
Modified:
trunk/coregrind/amd64-linux/core_platform.h
trunk/coregrind/arm-linux/core_platform.h
trunk/coregrind/m_syscalls/syscalls.c
trunk/coregrind/x86-linux/core_platform.h
Log:
Eliminate VGP_GET_MMAP_ARGS.
Modified: trunk/coregrind/amd64-linux/core_platform.h
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- trunk/coregrind/amd64-linux/core_platform.h 2005-05-29 17:05:49 UTC (=
rev 3810)
+++ trunk/coregrind/amd64-linux/core_platform.h 2005-05-29 17:27:18 UTC (=
rev 3811)
@@ -54,11 +54,6 @@
(prot), (flags), (fd), (offset)); =
\
} while (0)
=20
-#define VGP_GET_MMAP_ARGS(tst, a1, a2, a3, a4, a5, a6) do {\
- I_die_here; \
-} while (0)
-
-
#endif // __AMD64_LINUX_CORE_PLATFORM_H
=20
/*--------------------------------------------------------------------*/
Modified: trunk/coregrind/arm-linux/core_platform.h
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- trunk/coregrind/arm-linux/core_platform.h 2005-05-29 17:05:49 UTC (re=
v 3810)
+++ trunk/coregrind/arm-linux/core_platform.h 2005-05-29 17:27:18 UTC (re=
v 3811)
@@ -52,10 +52,6 @@
I_die_here; \
} while (0)
=20
-#define VGP_GET_MMAP_ARGS(tst, a1, a2, a3, a4, a5, a6) do { \
- I_die_here; \
-} while (0)
-
#endif // __ARM_LINUX_CORE_PLATFORM_H
=20
/*--------------------------------------------------------------------*/
Modified: trunk/coregrind/m_syscalls/syscalls.c
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- trunk/coregrind/m_syscalls/syscalls.c 2005-05-29 17:05:49 UTC (rev 38=
10)
+++ trunk/coregrind/m_syscalls/syscalls.c 2005-05-29 17:27:18 UTC (rev 38=
11)
@@ -4467,6 +4467,9 @@
PRE_MEM_RASCIIZ( "mkdir(pathname)", ARG1 );
}
=20
+// Nb: this should probably be in m_syscalls/syscalls-x86-linux.c, but i=
t
+// might be required for ARM, and I was too lazy to move it (which would
+// have required making mmap_segment() public).
PRE(old_mmap, Special)
{
/* struct mmap_arg_struct { =20
@@ -4477,10 +4480,24 @@
unsigned long fd;
unsigned long offset;
}; */
- UInt a1, a2, a3, a4, a5, a6;
+#if defined(VGP_x86_linux)
+ // do nothing
+#else
+ vg_assert(0, "old_mmap should only be called on x86/Linux");
+#endif
+ =20
+ UWord a1, a2, a3, a4, a5, a6;
+ UWord *arg_block =3D (UWord*)(tst->arch.vex.VGP_SYSCALL_ARG1);
=20
PRE_REG_READ1(long, "old_mmap", struct mmap_arg_struct *, args);
- VGP_GET_MMAP_ARGS(tst, a1, a2, a3, a4, a5, a6);
+ arg_block =3D (UWord*)(tst->arch.vex.VGP_SYSCALL_ARG1);
+ PRE_MEM_READ( "old_mmap(args)", (Addr)arg_block, 6*sizeof(UWord) );\
+ a1 =3D arg_block[0];
+ a2 =3D arg_block[1];
+ a3 =3D arg_block[2];
+ a4 =3D arg_block[3];
+ a5 =3D arg_block[4];
+ a6 =3D arg_block[5];
=20
PRINT("old_mmap ( %p, %llu, %d, %d, %d, %d )",
a1, (ULong)a2, a3, a4, a5, a6 );
Modified: trunk/coregrind/x86-linux/core_platform.h
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- trunk/coregrind/x86-linux/core_platform.h 2005-05-29 17:05:49 UTC (re=
v 3810)
+++ trunk/coregrind/x86-linux/core_platform.h 2005-05-29 17:27:18 UTC (re=
v 3811)
@@ -62,17 +62,6 @@
ret =3D VG_(do_syscall1)(__NR_mmap, (UWord)(&(__args[0])) ); =
\
} while (0)
=20
-#define VGP_GET_MMAP_ARGS(tst, a1, a2, a3, a4, a5, a6) do { \
- UInt *arg_block =3D (UInt*)(tst->arch.vex.VGP_SYSCALL_ARG1); \
- PRE_MEM_READ( "old_mmap(args)", (Addr)arg_block, 6*sizeof(UWord) );\
- a1 =3D arg_block[0]; \
- a2 =3D arg_block[1]; \
- a3 =3D arg_block[2]; \
- a4 =3D arg_block[3]; \
- a5 =3D arg_block[4]; \
- a6 =3D arg_block[5]; \
-} while (0)
-
#endif // __X86_LINUX_CORE_PLATFORM_H
=20
/*--------------------------------------------------------------------*/
|
|
From: <sv...@va...> - 2005-05-29 17:05:52
|
Author: njn Date: 2005-05-29 18:05:49 +0100 (Sun, 29 May 2005) New Revision: 3810 Removed: trunk/coregrind/x86-linux/platform-private.h Log: Remove unused file. Deleted: trunk/coregrind/x86-linux/platform-private.h =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- trunk/coregrind/x86-linux/platform-private.h 2005-05-29 17:03:54 UTC = (rev 3809) +++ trunk/coregrind/x86-linux/platform-private.h 2005-05-29 17:05:49 UTC = (rev 3810) @@ -1,10 +0,0 @@ -#ifndef _X86_LINUX_PRIVATE_H -#define _X86_LINUX_PRIVATE_H - -/* These are addresses within VGA_(blocking_syscall). See syscall.S for= details. */ -extern const Word VGA_(blksys_setup); -extern const Word VGA_(blksys_restart); -extern const Word VGA_(blksys_complete); -extern const Word VGA_(blksys_committed); - -#endif /* _X86_LINUX_PRIVATE_H */ |
|
From: <sv...@va...> - 2005-05-29 17:03:57
|
Author: njn
Date: 2005-05-29 18:03:54 +0100 (Sun, 29 May 2005)
New Revision: 3809
Added:
trunk/coregrind/pub_core_redir.h
Log:
Forgot to add pub_core_redir.h when committing the m_redir module.
Added: trunk/coregrind/pub_core_redir.h
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- trunk/coregrind/pub_core_redir.h 2005-05-29 17:01:48 UTC (rev 3808)
+++ trunk/coregrind/pub_core_redir.h 2005-05-29 17:03:54 UTC (rev 3809)
@@ -0,0 +1,83 @@
+
+/*--------------------------------------------------------------------*/
+/*--- Code redirections. pub_core_redir.h ---*/
+/*--------------------------------------------------------------------*/
+
+/*
+ This file is part of Valgrind, a dynamic binary instrumentation
+ framework.
+
+ Copyright (C) 2000-2005 Julian Seward
+ js...@ac...
+
+ This program is free software; you can redistribute it and/or
+ modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation; either version 2 of the
+ License, or (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307, USA.
+
+ The GNU General Public License is contained in the file COPYING.
+*/
+
+#ifndef __PUB_CORE_REDIR_H
+#define __PUB_CORE_REDIR_H
+
+//--------------------------------------------------------------------
+// PURPOSE: This module deals with:
+// - code redirection: intercepting calls to client functions, and
+// pointing them to a different piece of code.
+// - function wrapping: add calls to code before and after client
+// functions execute, for inspection and/or modification.
+//
+// Nb: It's possible that this should be two modules.
+//--------------------------------------------------------------------
+
+/* Redirection machinery */
+extern Addr VG_(code_redirect) ( Addr orig );
+
+/* Set up some default redirects */
+extern void VG_(setup_code_redirect_table) ( void );
+
+extern void VG_(add_redirect_sym_to_addr)(const Char *from_lib,
+ const Char *from_sym,
+ Addr to_addr);
+extern void VG_(add_redirect_addr_to_addr)(Addr from_addr, Addr to_addr)=
;
+extern void VG_(resolve_seg_redirs)(SegInfo *si);
+
+/* Wrapping machinery */
+enum return_type {
+ RT_RETURN,
+ RT_LONGJMP,
+ RT_EXIT,
+};
+
+typedef struct _FuncWrapper FuncWrapper;
+struct _FuncWrapper {
+ void *(*before)(va_list args);
+ void (*after) (void *nonce, enum return_type, Word retval);
+};
+
+extern void VG_(wrap_function)(Addr eip, const FuncWrapper *wrapper);
+extern const FuncWrapper *VG_(is_wrapped)(Addr eip);
+extern Bool VG_(is_wrapper_return)(Addr eip);
+
+/* Primary interface for adding wrappers for client-side functions. */
+extern CodeRedirect *VG_(add_wrapper)(const Char *from_lib, const Char *=
from_sym,
+ const FuncWrapper *wrapper);
+
+extern Bool VG_(is_resolved)(const CodeRedirect *redir);
+
+#endif // __PUB_CORE_REDIR_H
+
+/*--------------------------------------------------------------------*/
+/*--- end ---*/
+/*--------------------------------------------------------------------*/
|
|
From: <sv...@va...> - 2005-05-29 17:01:51
|
Author: njn
Date: 2005-05-29 18:01:48 +0100 (Sun, 29 May 2005)
New Revision: 3808
Added:
trunk/coregrind/m_redir.c
Removed:
trunk/coregrind/amd64-linux/core_platform.c
trunk/coregrind/vg_redir.c
trunk/coregrind/x86-linux/core_platform.c
Modified:
trunk/coregrind/Makefile.am
trunk/coregrind/amd64-linux/Makefile.am
trunk/coregrind/arm-linux/Makefile.am
trunk/coregrind/core.h
trunk/coregrind/m_translate.c
trunk/coregrind/vg_main.c
trunk/coregrind/vg_symtab2.c
trunk/coregrind/x86-linux/Makefile.am
Log:
Modularised m_redir. As a side-effect, managed to remove
$PLATFORM/core_platform.c and $PLATFORM/libplatform.a, hooray.
Modified: trunk/coregrind/Makefile.am
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- trunk/coregrind/Makefile.am 2005-05-29 16:23:17 UTC (rev 3807)
+++ trunk/coregrind/Makefile.am 2005-05-29 17:01:48 UTC (rev 3808)
@@ -45,6 +45,7 @@
pub_core_hashtable.h \
pub_core_mallocfree.h \
pub_core_options.h \
+ pub_core_redir.h \
pub_core_replacemalloc.h\
pub_core_sigframe.h \
pub_core_skiplist.h \
@@ -79,6 +80,7 @@
m_hashtable.c \
m_mallocfree.c \
m_options.c \
+ m_redir.c \
m_skiplist.c \
m_stacktrace.c \
m_tooliface.c \
@@ -95,19 +97,16 @@
vg_symtab2.c \
vg_threadmodel.c \
vg_pthreadmodel.c \
- vg_redir.c \
vg_dwarf.c \
vg_stabs.c \
vg_symtypes.c
=20
-## libplatform.a must be before libarch.a and libos.a, it seems.
stage2_extra=3D \
m_dispatch/libdispatch.a \
m_demangle/libdemangle.a \
m_aspacemgr/libaspacemgr.a \
m_sigframe/libsigframe.a \
m_syscalls/libsyscalls.a \
- ${VG_PLATFORM}/libplatform.a \
${VG_ARCH}/libarch.a \
${VG_OS}/libos.a \
@VEX_DIR@/libvex.a
Modified: trunk/coregrind/amd64-linux/Makefile.am
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- trunk/coregrind/amd64-linux/Makefile.am 2005-05-29 16:23:17 UTC (rev =
3807)
+++ trunk/coregrind/amd64-linux/Makefile.am 2005-05-29 17:01:48 UTC (rev =
3808)
@@ -4,9 +4,3 @@
noinst_HEADERS =3D \
core_platform.h \
vki_unistd.h
-
-noinst_LIBRARIES =3D libplatform.a
-
-
-libplatform_a_SOURCES =3D \
- core_platform.c
Deleted: trunk/coregrind/amd64-linux/core_platform.c
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- trunk/coregrind/amd64-linux/core_platform.c 2005-05-29 16:23:17 UTC (=
rev 3807)
+++ trunk/coregrind/amd64-linux/core_platform.c 2005-05-29 17:01:48 UTC (=
rev 3808)
@@ -1,10 +0,0 @@
-#include "core.h"
-
-void VGP_(setup_redirects)(void)
-{
- /* Redirect vsyscalls to local versions */
- VG_(add_redirect_addr_to_addr)(0xFFFFFFFFFF600000ULL,
- VG_(client_trampoline_code)+VG_(tramp_=
gettimeofday_offset));
- VG_(add_redirect_addr_to_addr)(0xFFFFFFFFFF600400ULL,
- VG_(client_trampoline_code)+VG_(tramp_=
time_offset));
-}
Modified: trunk/coregrind/arm-linux/Makefile.am
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- trunk/coregrind/arm-linux/Makefile.am 2005-05-29 16:23:17 UTC (rev 38=
07)
+++ trunk/coregrind/arm-linux/Makefile.am 2005-05-29 17:01:48 UTC (rev 38=
08)
@@ -4,8 +4,3 @@
noinst_HEADERS =3D \
core_platform.h \
vki_unistd.h
-
-noinst_LIBRARIES =3D libplatform.a
-
-libplatform_a_SOURCES =3D
-
Modified: trunk/coregrind/core.h
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- trunk/coregrind/core.h 2005-05-29 16:23:17 UTC (rev 3807)
+++ trunk/coregrind/core.h 2005-05-29 17:01:48 UTC (rev 3808)
@@ -489,45 +489,6 @@
=20
=20
/* ---------------------------------------------------------------------
- Exports of vg_redir.c
- ------------------------------------------------------------------ */
-
-/* Redirection machinery */
-extern Addr VG_(code_redirect) ( Addr orig );
-
-/* Set up some default redirects */
-extern void VG_(setup_code_redirect_table) ( void );
-
-extern void VG_(add_redirect_sym_to_addr)(const Char *from_lib,
- const Char *from_sym,
- Addr to_addr);
-extern void VG_(add_redirect_addr_to_addr)(Addr from_addr, Addr to_addr)=
;
-extern void VG_(resolve_seg_redirs)(SegInfo *si);
-
-/* Wrapping machinery */
-enum return_type {
- RT_RETURN,
- RT_LONGJMP,
- RT_EXIT,
-};
-
-typedef struct _FuncWrapper FuncWrapper;
-struct _FuncWrapper {
- void *(*before)(va_list args);
- void (*after) (void *nonce, enum return_type, Word retval);
-};
-
-extern void VG_(wrap_function)(Addr eip, const FuncWrapper *wrapper);
-extern const FuncWrapper *VG_(is_wrapped)(Addr eip);
-extern Bool VG_(is_wrapper_return)(Addr eip);
-
-/* Primary interface for adding wrappers for client-side functions. */
-extern CodeRedirect *VG_(add_wrapper)(const Char *from_lib, const Char *=
from_sym,
- const FuncWrapper *wrapper);
-
-extern Bool VG_(is_resolved)(const CodeRedirect *redir);
-
-/* ---------------------------------------------------------------------
Exports of vg_main.c
------------------------------------------------------------------ */
=20
@@ -688,13 +649,6 @@
extern Bool VGA_(client_requests)(ThreadId tid, UWord *args);
=20
=20
-// ---------------------------------------------------------------------
-// Platform-specific things defined in eg. x86/*.c
-// ---------------------------------------------------------------------
-
-// Do any platform specific redirects.
-extern void VGP_(setup_redirects)(void);
-
///* -------------------------------------------------------------------=
--
// Thread modelling
// ------------------------------------------------------------------ =
*/
Copied: trunk/coregrind/m_redir.c (from rev 3807, trunk/coregrind/vg_redi=
r.c)
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- trunk/coregrind/vg_redir.c 2005-05-29 16:23:17 UTC (rev 3807)
+++ trunk/coregrind/m_redir.c 2005-05-29 17:01:48 UTC (rev 3808)
@@ -0,0 +1,726 @@
+/*--------------------------------------------------------------------*/
+/*--- Management of function redirection and wrapping. ---*/
+/*--- vg_redir.c ---*/
+/*--------------------------------------------------------------------*/
+
+/*
+ This file is part of Valgrind, an extensible x86 protected-mode
+ emulator for monitoring program execution on x86-Unixes.
+
+ Copyright (C) 2000-2005 Julian Seward=20
+ js...@ac...
+ Copyright (C) 2003-2005 Jeremy Fitzhardinge
+ je...@go...
+
+ This program is free software; you can redistribute it and/or
+ modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation; either version 2 of the
+ License, or (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307, USA.
+
+ The GNU General Public License is contained in the file COPYING.
+*/
+#include "core.h"
+#include "vg_symtab2.h"
+
+#include "pub_core_aspacemgr.h"
+#include "pub_core_skiplist.h"
+#include "pub_core_options.h"
+#include "pub_core_redir.h"
+#include "pub_core_transtab.h"
+
+/*------------------------------------------------------------*/
+/*--- General purpose redirection. ---*/
+/*------------------------------------------------------------*/
+
+/*
+ wraps and redirections, indexed by from_addr
+
+ Redirection and wrapping are two distinct mechanisms which Valgrind
+ can use to change the client's control flow.
+
+ Redirection intercepts a call to a client function, and re-points it
+ to a new piece of code (presumably functionally equivalent). The
+ original code is never run.
+
+ Wrapping does call the client's original code, but calls "before"
+ and "after" functions which can inspect (and perhaps modify) the
+ function's arguments and return value.
+ */
+struct _CodeRedirect {
+ enum redir_type {
+ R_REDIRECT, /* plain redirection */
+ R_WRAPPER, /* wrap with valgrind-internal code */
+ R_CLIENT_WRAPPER, /* wrap with client-side code */
+ } type;
+ =20
+ const Char *from_lib; /* library qualifier pattern */
+ const Char *from_sym; /* symbol */
+ Addr from_addr; /* old addr */
+
+ /* used for redirection */
+ const Char *to_lib; /* library qualifier pattern */
+ const Char *to_sym; /* symbol */
+ Addr to_addr; /* new addr */
+
+ /* used for wrapping */
+ const FuncWrapper *wrapper;
+
+ CodeRedirect *next; /* next pointer on unresolved list */
+};
+
+static Char *straddr(void *p)
+{
+ static Char buf[16];
+
+ VG_(sprintf)(buf, "%p", *(Addr *)p);
+
+ return buf;
+}
+
+static SkipList sk_resolved_redir =3D VG_SKIPLIST_INIT(CodeRedirect, fro=
m_addr,=20
+ VG_(cmp_Addr), straddr, VG_AR_SYMTAB);
+static CodeRedirect *unresolved_redir =3D NULL;
+
+static Bool match_lib(const Char *pattern, const SegInfo *si)
+{
+ /* pattern =3D=3D NULL matches everything, otherwise use globbing
+
+ If the pattern starts with:
+ file:, then match filename
+ soname:, then match soname
+ something else, match filename
+ */
+ const Char *name =3D si->filename;
+
+ if (pattern =3D=3D NULL)
+ return True;
+
+ if (VG_(strncmp)(pattern, "file:", 5) =3D=3D 0) {
+ pattern +=3D 5;
+ name =3D si->filename;
+ }
+ if (VG_(strncmp)(pattern, "soname:", 7) =3D=3D 0) {
+ pattern +=3D 7;
+ name =3D si->soname;
+ }
+
+ if (name =3D=3D NULL)
+ return False;
+ =20
+ return VG_(string_match)(pattern, name);
+}
+
+static inline Bool from_resolved(const CodeRedirect *redir)
+{
+ return redir->from_addr !=3D 0;
+}
+
+static inline Bool to_resolved(const CodeRedirect *redir)
+{
+ if (redir->type =3D=3D R_REDIRECT)
+ return redir->to_addr !=3D 0;
+ vg_assert(redir->wrapper !=3D NULL);
+ return True;
+}
+
+Bool VG_(is_resolved)(const CodeRedirect *redir)
+{
+ return from_resolved(redir) && to_resolved(redir);
+}
+
+static void add_resolved(CodeRedirect *redir)
+{
+ switch(redir->type) {
+ case R_REDIRECT:
+ if (VG_(clo_trace_redir)) {
+ VG_(message)(Vg_DebugMsg, " redir resolved (%s:%s=3D%p -> ",
+ redir->from_lib, redir->from_sym, redir->from_addr=
);
+ VG_(message)(Vg_DebugMsg, " %s:%s=3D%p)",
+ redir->to_lib, redir->to_sym, redir->to_addr);
+ }
+
+ if (VG_(search_transtab)(NULL, (Addr64)redir->from_addr, False)) {
+ /* For some given (from, to) redir, the "from" function got
+ called before the .so containing "to" became available. We
+ know this because there is already a translation for the
+ entry point of the original "from". So the redirect will
+ never actually take effect unless that translation is
+ discarded. =20
+
+ Note, we only really need to discard the first bb of the
+ old entry point, and so we avoid the problem of having to
+ figure out how big that bb was -- since it is at least 1
+ byte of original code, we can just pass 1 as the original
+ size to invalidate_translations() and it will indeed get
+ rid of the translation.=20
+
+ Note, this is potentially expensive -- discarding
+ translations causes complete unchaining. =20
+ */
+ if (VG_(clo_verbosity) > 2 && VG_(clo_trace_redir)) {
+ VG_(message)(Vg_UserMsg, =20
+ "Discarding translation due to redirect of alre=
ady called function" );
+ VG_(message)(Vg_UserMsg,
+ " %s (%p -> %p)",
+ redir->from_sym, redir->from_addr, redir->to_ad=
dr );
+ }
+ VG_(discard_translations)((Addr64)redir->from_addr, 1);
+ }
+
+ {
+ CodeRedirect *r =3D VG_(SkipList_Find_Exact)(&sk_resolved_redir=
, &redir->from_addr);
+
+ if (r =3D=3D NULL)
+ VG_(SkipList_Insert)(&sk_resolved_redir, redir);
+ else {
+ /* XXX leak redir */
+ if (VG_(clo_trace_redir))
+ VG_(message)(Vg_DebugMsg, " redir %s:%s:%p->%s:%s:%p dup=
licated\n",
+ redir->from_lib, redir->from_sym, redir->fro=
m_addr,
+ redir->to_lib, redir->to_sym, redir->to_addr=
);
+ }
+ }
+ break;
+
+ case R_WRAPPER:
+ if (VG_(clo_trace_redir)) {
+ VG_(message)(Vg_DebugMsg, " wrapper resolved (%s:%s=3D%p -> wr=
apper)",
+ redir->from_lib, redir->from_sym, redir->from_addr=
);
+ }
+
+ /* XXX redir leaked */
+ //VG_(wrap_function)(redir->from_addr, redir->wrapper);
+ break;
+
+ case R_CLIENT_WRAPPER:
+ VG_(core_panic)("not implemented");
+ break;
+ }
+}
+
+/* Resolve a redir using si if possible, and add it to the resolved
+ list */
+static Bool resolve_redir(CodeRedirect *redir, const SegInfo *si)
+{
+ Bool resolved;
+
+ vg_assert(si !=3D NULL);
+ vg_assert(si->seg !=3D NULL);
+
+ /* no redirection from Valgrind segments */
+ if (si->seg->flags & SF_VALGRIND)
+ return False;
+
+ resolved =3D VG_(is_resolved)(redir);
+
+ if (0 && VG_(clo_trace_redir))
+ VG_(printf)(" consider FROM binding %s:%s -> %s:%s in %s(%s)\n",
+ redir->from_lib, redir->from_sym,
+ redir->to_lib, redir->to_sym,
+ si->filename, si->soname);
+
+ vg_assert(!resolved);
+
+ if (!from_resolved(redir)) {
+ vg_assert(redir->from_sym !=3D NULL);
+
+ if (match_lib(redir->from_lib, si)) {
+ redir->from_addr =3D VG_(reverse_search_one_symtab)(si, redir->from_sy=
m);
+ if (VG_(clo_trace_redir) && redir->from_addr !=3D 0)
+ VG_(printf)(" bind FROM: %p =3D %s:%s\n",=20
+ redir->from_addr,redir->from_lib, redir->from_sy=
m );
+ }
+ }
+
+ if (!to_resolved(redir)) {
+ vg_assert(redir->type =3D=3D R_REDIRECT);
+ vg_assert(redir->to_sym !=3D NULL);
+
+ if (match_lib(redir->to_lib, si)) {
+ redir->to_addr =3D VG_(reverse_search_one_symtab)(si, redir->to_sym);
+ if (VG_(clo_trace_redir) && redir->to_addr !=3D 0)
+ VG_(printf)(" bind TO: %p =3D %s:%s\n",=20
+ redir->to_addr,redir->to_lib, redir->to_sym );
+
+ }
+ }
+
+ resolved =3D from_resolved(redir) && to_resolved(redir);
+
+ if (0 && VG_(clo_trace_redir))
+ VG_(printf)("resolve_redir: %s:%s from=3D%p %s:%s to=3D%p\n",
+ redir->from_lib, redir->from_sym, redir->from_addr,=20
+ redir->to_lib, redir->to_sym, redir->to_addr);
+
+ if (resolved) add_resolved(redir);
+
+ return resolved;
+}
+
+static Bool resolve_redir_allsegs(CodeRedirect *redir)
+{
+ const SegInfo *si;
+
+ for(si =3D VG_(next_seginfo)(NULL);=20
+ si !=3D NULL;=20
+ si =3D VG_(next_seginfo)(si))
+ {
+ if (resolve_redir(redir, si))
+ return True;
+ }
+ return False;
+}
+
+/* Go through the complete redir list, resolving as much as possible wit=
h this SegInfo.
+
+ This should be called when a new SegInfo symtab is loaded.
+ */
+void VG_(resolve_seg_redirs)(SegInfo *si)
+{
+ CodeRedirect **prevp =3D &unresolved_redir;
+ CodeRedirect *redir, *next;
+
+ if (VG_(clo_trace_redir))
+ VG_(printf)("Considering redirs to/from %s(soname=3D%s)\n",
+ si->filename, si->soname);
+
+ /* visit each unresolved redir - if it becomes resolved, then
+ remove it from the unresolved list */
+ for(redir =3D unresolved_redir; redir !=3D NULL; redir =3D next) {
+ next =3D redir->next;
+
+ if (resolve_redir(redir, si)) {
+ *prevp =3D next;
+ redir->next =3D NULL;
+ } else
+ prevp =3D &redir->next;
+ }
+}
+
+/* Redirect a lib/symbol reference to a function at lib/symbol */
+static void add_redirect_sym_to_sym(const Char *from_lib, const Char *fr=
om_sym,
+ const Char *to_lib, const Char *to_sym)
+{
+ CodeRedirect *redir =3D VG_(SkipNode_Alloc)(&sk_resolved_redir);
+
+ redir->type =3D R_REDIRECT;
+
+ redir->from_lib =3D VG_(arena_strdup)(VG_AR_SYMTAB, from_lib);
+ redir->from_sym =3D VG_(arena_strdup)(VG_AR_SYMTAB, from_sym);
+ redir->from_addr =3D 0;
+
+ redir->to_lib =3D VG_(arena_strdup)(VG_AR_SYMTAB, to_lib);
+ redir->to_sym =3D VG_(arena_strdup)(VG_AR_SYMTAB, to_sym);
+ redir->to_addr =3D 0;
+
+ if (VG_(clo_verbosity) >=3D 2 && VG_(clo_trace_redir))
+ VG_(message)(Vg_UserMsg,=20
+ "REDIRECT %s(%s) to %s(%s)",
+ from_lib, from_sym, to_lib, to_sym);
+
+ /* Check against all existing segments to see if this redirection
+ can be resolved immediately */
+ if (!resolve_redir_allsegs(redir)) {
+ /* nope, add to list */
+ redir->next =3D unresolved_redir;
+ unresolved_redir =3D redir;
+ }
+}
+
+/* Redirect a lib/symbol reference to a function at addr */
+void VG_(add_redirect_sym_to_addr)(const Char *from_lib, const Char *fro=
m_sym,
+ Addr to_addr)
+{
+ CodeRedirect *redir =3D VG_(SkipNode_Alloc)(&sk_resolved_redir);
+
+ redir->type =3D R_REDIRECT;
+
+ redir->from_lib =3D VG_(arena_strdup)(VG_AR_SYMTAB, from_lib);
+ redir->from_sym =3D VG_(arena_strdup)(VG_AR_SYMTAB, from_sym);
+ redir->from_addr =3D 0;
+
+ redir->to_lib =3D NULL;
+ redir->to_sym =3D NULL;
+ redir->to_addr =3D to_addr;
+
+ if (VG_(clo_verbosity) >=3D 2 && VG_(clo_trace_redir))
+ VG_(message)(Vg_UserMsg,=20
+ "REDIRECT %s(%s) to %p",
+ from_lib, from_sym, to_addr);
+
+ /* Check against all existing segments to see if this redirection
+ can be resolved immediately */
+ if (!resolve_redir_allsegs(redir)) {
+ /* nope, add to list */
+ redir->next =3D unresolved_redir;
+ unresolved_redir =3D redir;
+ }
+}
+
+/* Redirect a function at from_addr to a function at to_addr */
+void VG_(add_redirect_addr_to_addr)(Addr from_addr, Addr to_addr)
+{
+ CodeRedirect *redir =3D VG_(SkipNode_Alloc)(&sk_resolved_redir);
+
+ redir->type =3D R_REDIRECT;
+
+ redir->from_lib =3D NULL;
+ redir->from_sym =3D NULL;
+ redir->from_addr =3D from_addr;
+
+ redir->to_lib =3D NULL;
+ redir->to_sym =3D NULL;
+ redir->to_addr =3D to_addr;
+
+ if (VG_(clo_verbosity) >=3D 2 && VG_(clo_trace_redir))
+ VG_(message)(Vg_UserMsg,=20
+ "REDIRECT %p to %p",
+ from_addr, to_addr);
+
+ add_resolved(redir);
+}
+
+CodeRedirect *VG_(add_wrapper)(const Char *from_lib, const Char *from_sy=
m,
+ const FuncWrapper *wrapper)
+{
+ CodeRedirect *redir =3D VG_(SkipNode_Alloc)(&sk_resolved_redir);
+
+ if (0)
+ VG_(printf)("adding wrapper for %s:%s -> (%p,%p)\n",
+ from_lib, from_sym, wrapper->before, wrapper->after);
+
+ redir->type =3D R_WRAPPER;
+
+ redir->from_lib =3D VG_(arena_strdup)(VG_AR_SYMTAB, from_lib);
+ redir->from_sym =3D VG_(arena_strdup)(VG_AR_SYMTAB, from_sym);
+ redir->from_addr =3D 0;
+
+ redir->to_lib =3D NULL;
+ redir->to_sym =3D NULL;
+ redir->to_addr =3D 0;
+
+ redir->wrapper =3D wrapper;
+ =20
+ /* Check against all existing segments to see if this redirection
+ can be resolved immediately */
+ if (!resolve_redir_allsegs(redir)) {
+ /* nope, add to list */
+ redir->next =3D unresolved_redir;
+ unresolved_redir =3D redir;
+ }
+
+ return redir;
+}
+
+/* If address 'a' is being redirected, return the redirected-to
+ address. */
+Addr VG_(code_redirect)(Addr a)
+{
+ CodeRedirect* r;
+
+ r =3D VG_(SkipList_Find_Exact)(&sk_resolved_redir, &a);
+ if (r =3D=3D NULL)
+ return a;
+
+ vg_assert(r->to_addr !=3D 0);
+
+ return r->to_addr;
+}
+
+void VG_(setup_code_redirect_table) ( void )
+{
+ /* Overenthusiastic use of PLT bypassing by the glibc people also
+ means we need to patch the following functions to our own
+ implementations of said, in mac_replace_strmem.c.
+ */
+ add_redirect_sym_to_sym("soname:libc.so.6", "stpcpy",
+ "*vgpreload_memcheck.so*", "stpcpy");
+
+ add_redirect_sym_to_sym("soname:ld-linux.so.2", "strlen",
+ "*vgpreload_memcheck.so*", "strlen");
+ add_redirect_sym_to_sym("soname:libc.so.6", "strlen",
+ "*vgpreload_memcheck.so*", "strlen");
+
+ add_redirect_sym_to_sym("soname:libc.so.6", "strnlen",
+ "*vgpreload_memcheck.so*", "strnlen");
+
+ add_redirect_sym_to_sym("soname:ld-linux.so.2", "stpcpy",
+ "*vgpreload_memcheck.so*", "stpcpy");
+ add_redirect_sym_to_sym("soname:libc.so.6", "stpcpy",
+ "*vgpreload_memcheck.so*", "stpcpy");
+
+ add_redirect_sym_to_sym("soname:libc.so.6", "strchr",
+ "*vgpreload_memcheck.so*", "strchr");
+ add_redirect_sym_to_sym("soname:ld-linux.so.2", "strchr",
+ "*vgpreload_memcheck.so*", "strchr");
+
+ /* apparently index is the same thing as strchr */
+ add_redirect_sym_to_sym("soname:ld-linux.so.2", "index",
+ "*vgpreload_memcheck.so*", "strchr");
+
+ add_redirect_sym_to_sym("soname:libc.so.6", "strchrnul",
+ "*vgpreload_memcheck.so*", "glibc232_strchrnu=
l");
+
+ add_redirect_sym_to_sym("soname:libc.so.6", "rawmemchr",
+ "*vgpreload_memcheck.so*", "glibc232_rawmemch=
r");
+
+ /* amd64-linux (glibc 2.3.3, SuSE 9.2) */
+ /* apparently index is the same thing as strchr */
+ add_redirect_sym_to_sym("soname:libc.so.6", "index",
+ "*vgpreload_memcheck.so*", "strchr");
+ add_redirect_sym_to_sym("soname:ld-linux-x86-64.so.2", "index",
+ "*vgpreload_memcheck.so*", "strchr");
+
+ add_redirect_sym_to_sym("soname:libc.so.6", "strcpy",
+ "*vgpreload_memcheck.so*", "strcpy");
+
+ add_redirect_sym_to_sym("soname:ld-linux-x86-64.so.2", "strcmp",
+ "*vgpreload_memcheck.so*", "strcmp");
+ add_redirect_sym_to_sym("soname:libc.so.6", "strcmp",
+ "*vgpreload_memcheck.so*", "strcmp");
+
+ add_redirect_sym_to_sym("soname:ld-linux-x86-64.so.2", "strlen",
+ "*vgpreload_memcheck.so*", "strlen");
+
+#if defined(VGP_x86_linux)
+ /* Redirect _dl_sysinfo_int80, which is glibc's default system call
+ routine, to the routine in our trampoline page so that the
+ special sysinfo unwind hack in m_stacktrace.c will kick in. */
+ VG_(add_redirect_sym_to_addr)("soname:ld-linux.so.2", "_dl_sysinfo_in=
t80",
+ VG_(client_trampoline_code)+VG_(tramp_s=
yscall_offset));
+#elif defined(VGP_amd64_linux)
+ /* Redirect vsyscalls to local versions */
+ VG_(add_redirect_addr_to_addr)(0xFFFFFFFFFF600000ULL,
+ VG_(client_trampoline_code)+VG_(tramp_=
gettimeofday_offset));
+ VG_(add_redirect_addr_to_addr)(0xFFFFFFFFFF600400ULL,
+ VG_(client_trampoline_code)+VG_(tramp_=
time_offset));
+#else
+# error Unknown platform
+#endif
+}
+
+//:: /*------------------------------------------------------------*/
+//:: /*--- General function wrapping. ---*/
+//:: /*------------------------------------------------------------*/
+//::=20
+//:: /*=20
+//:: TODO:
+//:: - hook into the symtab machinery
+//:: - client-side wrappers?
+//:: - better interfaces for before() functions to get to arguments
+//:: - handle munmap of code (dlclose())
+//:: - handle thread exit
+//:: - handle longjmp
+//:: */
+//:: struct callkey {
+//:: ThreadId tid; /* calling thread */
+//:: Addr esp; /* address of args on stack */
+//:: Addr eip; /* return address */
+//:: };
+//::=20
+//:: struct call_instance {
+//:: struct callkey key;
+//::=20
+//:: const FuncWrapper *wrapper;
+//:: void *nonce;
+//:: };
+//::=20
+//:: static inline Addr addrcmp(Addr a, Addr b)
+//:: {
+//:: if (a < b)
+//:: return -1;
+//:: else if (a > b)
+//:: return 1;
+//:: else=20
+//:: return 0;
+//:: }
+//::=20
+//:: static inline Int cmp(UInt a, UInt b)
+//:: {
+//:: if (a < b)
+//:: return -1;
+//:: else if (a > b)
+//:: return 1;
+//:: else=20
+//:: return 0;
+//:: }
+//::=20
+//:: static Int keycmp(const void *pa, const void *pb)
+//:: {
+//:: const struct callkey *a =3D (const struct callkey *)pa;
+//:: const struct callkey *b =3D (const struct callkey *)pb;
+//:: Int ret;
+//::=20
+//:: if ((ret =3D cmp(a->tid, b->tid)))
+//:: return ret;
+//::=20
+//:: if ((ret =3D addrcmp(a->esp, b->esp)))
+//:: return ret;
+//::=20
+//:: return addrcmp(a->eip, b->eip);
+//:: }
+//::=20
+//:: /* List of wrapped call invocations which are currently active */
+//:: static SkipList wrapped_frames =3D VG_SKIPLIST_INIT(struct call_ins=
tance, key, keycmp,=20
+//:: NULL, VG_AR_SYMTAB);
+//::=20
+//:: static struct call_instance *find_call(Addr retaddr, Addr argsp, Th=
readId tid)
+//:: {
+//:: struct callkey key =3D { tid, argsp, retaddr };
+//::=20
+//:: return VG_(SkipList_Find_Exact)(&wrapped_frames, &key);
+//:: }
+//::=20
+//:: static void wrapper_return(Addr retaddr);
+//::=20
+//:: /* Called from generated code via helper */
+//:: void VG_(wrap_before)(ThreadState *tst, const FuncWrapper *wrapper)
+//:: {
+//:: Addr retaddr =3D VGA_RETADDR(tst->arch);
+//:: Addr argp =3D (Addr)&VGA_FUNC_ARG(tst->arch, 0);
+//:: void *nonce =3D NULL;
+//:: Bool mf =3D VG_(my_fault);
+//:: VG_(my_fault) =3D True;
+//::=20
+//:: if (wrapper->before) {
+//:: va_list args =3D VGA_VA_LIST(tst->arch);
+//:: nonce =3D (*wrapper->before)(args);
+//:: }
+//::=20
+//:: if (wrapper->after) {
+//:: /* If there's an after function, make sure it gets called */
+//:: struct call_instance *call;
+//::=20
+//:: call =3D find_call(retaddr, argp, tst->tid);
+//::=20
+//:: if (call !=3D NULL) {
+//:: /* Found a stale outstanding call; clean it up and recycle
+//:: the structure */
+//:: if (call->wrapper->after)
+//:: (*call->wrapper->after)(call->nonce, RT_LONGJMP, 0);
+//:: } else {
+//:: call =3D VG_(SkipNode_Alloc)(&wrapped_frames);
+//:: =20
+//:: call->key.tid =3D tst->tid;
+//:: call->key.esp =3D argp;
+//:: call->key.eip =3D retaddr;
+//::=20
+//:: VG_(SkipList_Insert)(&wrapped_frames, call);
+//::=20
+//:: wrapper_return(retaddr);
+//:: }
+//::=20
+//:: call->wrapper =3D wrapper;
+//:: call->nonce =3D nonce;
+//:: } else=20
+//:: vg_assert(nonce =3D=3D NULL);
+//::=20
+//:: VG_(my_fault) =3D mf;
+//:: }
+//::=20
+//:: /* Called from generated code via helper */
+//:: void VG_(wrap_after)(ThreadState *tst)
+//:: {
+//:: Addr EIP =3D VGA_INSTR_PTR(tst->arch); /* instruction after call=
*/
+//:: Addr ESP =3D VGA_STACK_PTR(tst->arch); /* pointer to args */
+//:: Word ret =3D VGA_RETVAL(tst->arch); /* return value */
+//:: struct call_instance *call;
+//:: Bool mf =3D VG_(my_fault);
+//::=20
+//:: VG_(my_fault) =3D True;
+//:: call =3D find_call(EIP, ESP, tst->tid);
+//::=20
+//:: if (0)
+//:: VG_(printf)("wrap_after(%p,%p,%d) -> %p\n", EIP, ESP, tst->ti=
d, call);
+//::=20
+//:: if (call !=3D NULL) {
+//:: if (call->wrapper->after)
+//:: (*call->wrapper->after)(call->nonce, RT_RETURN, ret);
+//::=20
+//:: VG_(SkipList_Remove)(&wrapped_frames, &call->key);
+//:: VG_(SkipNode_Free)(&wrapped_frames, call);
+//:: }
+//:: VG_(my_fault) =3D mf;
+//:: }
+//::=20
+//::=20
+//:: struct wrapped_function {
+//:: Addr eip; /* eip of function entrypoint */
+//:: const FuncWrapper *wrapper;
+//:: };
+//::=20
+//:: struct wrapper_return {
+//:: Addr eip; /* return address */
+//:: };
+//::=20
+//:: /* A mapping from eip of wrapped function entrypoints to actual wra=
ppers */
+//:: static SkipList wrapped_functions =3D VG_SKIPLIST_INIT(struct wrapp=
ed_function, eip, VG_(cmp_Addr),
+//:: NULL, VG_AR_SYMTAB);
+//::=20
+//:: /* A set of EIPs which are return addresses for wrapped functions *=
/
+//:: static SkipList wrapper_returns =3D VG_SKIPLIST_INIT(struct wrapper=
_return, eip, VG_(cmp_Addr),
+//:: NULL, VG_AR_SYMTAB);
+//::=20
+//:: /* Wrap function starting at eip */
+//:: void VG_(wrap_function)(Addr eip, const FuncWrapper *wrapper)
+//:: {
+//:: struct wrapped_function *func;
+//::=20
+//:: if (0)
+//:: VG_(printf)("wrapping %p with (%p,%p)\n", eip, wrapper->befor=
e, wrapper->after);
+//::=20
+//:: func =3D VG_(SkipList_Find_Exact)(&wrapped_functions, &eip);
+//::=20
+//:: if (func =3D=3D NULL) {
+//:: func =3D VG_(SkipNode_Alloc)(&wrapped_functions);
+//:: VG_(invalidate_translations)(eip, 1, True);
+//::=20
+//:: func->eip =3D eip;
+//:: VG_(SkipList_Insert)(&wrapped_functions, func);
+//:: }
+//::=20
+//:: func->wrapper =3D wrapper;
+//:: }
+//::=20
+//:: const FuncWrapper *VG_(is_wrapped)(Addr eip)
+//:: {
+//:: struct wrapped_function *func =3D VG_(SkipList_Find_Exact)(&wrap=
ped_functions, &eip);
+//::=20
+//:: if (func)
+//:: return func->wrapper;
+//:: return NULL;
+//:: }
+//::=20
+//:: Bool VG_(is_wrapper_return)(Addr eip)
+//:: {
+//:: struct wrapper_return *ret =3D VG_(SkipList_Find_Exact)(&wrapper=
_returns, &eip);
+//::=20
+//:: return ret !=3D NULL;
+//:: }
+//::=20
+//:: /* Mark eip as being the return address of a wrapper, so that the
+//:: codegen will generate the appropriate call. */
+//:: void wrapper_return(Addr eip)
+//:: {
+//:: struct wrapper_return *ret;
+//::=20
+//:: if (VG_(is_wrapper_return)(eip))
+//:: return;
+//::=20
+//:: VG_(invalidate_translations)(eip, 1, True);
+//::=20
+//:: ret =3D VG_(SkipNode_Alloc)(&wrapper_returns);
+//:: ret->eip =3D eip;
+//::=20
+//:: VG_(SkipList_Insert)(&wrapper_returns, ret);
+//:: }
Modified: trunk/coregrind/m_translate.c
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- trunk/coregrind/m_translate.c 2005-05-29 16:23:17 UTC (rev 3807)
+++ trunk/coregrind/m_translate.c 2005-05-29 17:01:48 UTC (rev 3808)
@@ -32,6 +32,7 @@
#include "core.h"
#include "pub_core_aspacemgr.h"
#include "pub_core_options.h"
+#include "pub_core_redir.h"
#include "pub_core_tooliface.h"
#include "pub_core_translate.h"
#include "pub_core_transtab.h"
Modified: trunk/coregrind/vg_main.c
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- trunk/coregrind/vg_main.c 2005-05-29 16:23:17 UTC (rev 3807)
+++ trunk/coregrind/vg_main.c 2005-05-29 17:01:48 UTC (rev 3808)
@@ -37,6 +37,7 @@
#include "pub_core_errormgr.h"
#include "pub_core_execontext.h"
#include "pub_core_options.h"
+#include "pub_core_redir.h"
#include "pub_core_syscalls.h"
#include "pub_core_tooliface.h"
#include "pub_core_transtab.h"
@@ -2794,7 +2795,6 @@
//--------------------------------------------------------------
VG_(debugLog)(1, "main", "Initialise redirects\n");
VG_(setup_code_redirect_table)();
- VGP_(setup_redirects)();
=20
//--------------------------------------------------------------
// Verbosity message
Deleted: trunk/coregrind/vg_redir.c
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- trunk/coregrind/vg_redir.c 2005-05-29 16:23:17 UTC (rev 3807)
+++ trunk/coregrind/vg_redir.c 2005-05-29 17:01:48 UTC (rev 3808)
@@ -1,710 +0,0 @@
-/*--------------------------------------------------------------------*/
-/*--- Management of function redirection and wrapping. ---*/
-/*--- vg_redir.c ---*/
-/*--------------------------------------------------------------------*/
-
-/*
- This file is part of Valgrind, an extensible x86 protected-mode
- emulator for monitoring program execution on x86-Unixes.
-
- Copyright (C) 2000-2005 Julian Seward=20
- js...@ac...
- Copyright (C) 2003-2005 Jeremy Fitzhardinge
- je...@go...
-
- This program is free software; you can redistribute it and/or
- modify it under the terms of the GNU General Public License as
- published by the Free Software Foundation; either version 2 of the
- License, or (at your option) any later version.
-
- This program is distributed in the hope that it will be useful, but
- WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
- 02111-1307, USA.
-
- The GNU General Public License is contained in the file COPYING.
-*/
-#include "core.h"
-#include "vg_symtab2.h"
-
-#include "pub_core_aspacemgr.h"
-#include "pub_core_skiplist.h"
-#include "pub_core_options.h"
-#include "pub_core_transtab.h"
-
-/*------------------------------------------------------------*/
-/*--- General purpose redirection. ---*/
-/*------------------------------------------------------------*/
-
-/*
- wraps and redirections, indexed by from_addr
-
- Redirection and wrapping are two distinct mechanisms which Valgrind
- can use to change the client's control flow.
-
- Redirection intercepts a call to a client function, and re-points it
- to a new piece of code (presumably functionally equivalent). The
- original code is never run.
-
- Wrapping does call the client's original code, but calls "before"
- and "after" functions which can inspect (and perhaps modify) the
- function's arguments and return value.
- */
-struct _CodeRedirect {
- enum redir_type {
- R_REDIRECT, /* plain redirection */
- R_WRAPPER, /* wrap with valgrind-internal code */
- R_CLIENT_WRAPPER, /* wrap with client-side code */
- } type;
- =20
- const Char *from_lib; /* library qualifier pattern */
- const Char *from_sym; /* symbol */
- Addr from_addr; /* old addr */
-
- /* used for redirection */
- const Char *to_lib; /* library qualifier pattern */
- const Char *to_sym; /* symbol */
- Addr to_addr; /* new addr */
-
- /* used for wrapping */
- const FuncWrapper *wrapper;
-
- CodeRedirect *next; /* next pointer on unresolved list */
-};
-
-static Char *straddr(void *p)
-{
- static Char buf[16];
-
- VG_(sprintf)(buf, "%p", *(Addr *)p);
-
- return buf;
-}
-
-static SkipList sk_resolved_redir =3D VG_SKIPLIST_INIT(CodeRedirect, fro=
m_addr,=20
- VG_(cmp_Addr), straddr, VG_AR_SYMTAB);
-static CodeRedirect *unresolved_redir =3D NULL;
-
-static Bool match_lib(const Char *pattern, const SegInfo *si)
-{
- /* pattern =3D=3D NULL matches everything, otherwise use globbing
-
- If the pattern starts with:
- file:, then match filename
- soname:, then match soname
- something else, match filename
- */
- const Char *name =3D si->filename;
-
- if (pattern =3D=3D NULL)
- return True;
-
- if (VG_(strncmp)(pattern, "file:", 5) =3D=3D 0) {
- pattern +=3D 5;
- name =3D si->filename;
- }
- if (VG_(strncmp)(pattern, "soname:", 7) =3D=3D 0) {
- pattern +=3D 7;
- name =3D si->soname;
- }
-
- if (name =3D=3D NULL)
- return False;
- =20
- return VG_(string_match)(pattern, name);
-}
-
-static inline Bool from_resolved(const CodeRedirect *redir)
-{
- return redir->from_addr !=3D 0;
-}
-
-static inline Bool to_resolved(const CodeRedirect *redir)
-{
- if (redir->type =3D=3D R_REDIRECT)
- return redir->to_addr !=3D 0;
- vg_assert(redir->wrapper !=3D NULL);
- return True;
-}
-
-Bool VG_(is_resolved)(const CodeRedirect *redir)
-{
- return from_resolved(redir) && to_resolved(redir);
-}
-
-static void add_resolved(CodeRedirect *redir)
-{
- switch(redir->type) {
- case R_REDIRECT:
- if (VG_(clo_trace_redir)) {
- VG_(message)(Vg_DebugMsg, " redir resolved (%s:%s=3D%p -> ",
- redir->from_lib, redir->from_sym, redir->from_addr=
);
- VG_(message)(Vg_DebugMsg, " %s:%s=3D%p)",
- redir->to_lib, redir->to_sym, redir->to_addr);
- }
-
- if (VG_(search_transtab)(NULL, (Addr64)redir->from_addr, False)) {
- /* For some given (from, to) redir, the "from" function got
- called before the .so containing "to" became available. We
- know this because there is already a translation for the
- entry point of the original "from". So the redirect will
- never actually take effect unless that translation is
- discarded. =20
-
- Note, we only really need to discard the first bb of the
- old entry point, and so we avoid the problem of having to
- figure out how big that bb was -- since it is at least 1
- byte of original code, we can just pass 1 as the original
- size to invalidate_translations() and it will indeed get
- rid of the translation.=20
-
- Note, this is potentially expensive -- discarding
- translations causes complete unchaining. =20
- */
- if (VG_(clo_verbosity) > 2 && VG_(clo_trace_redir)) {
- VG_(message)(Vg_UserMsg, =20
- "Discarding translation due to redirect of alre=
ady called function" );
- VG_(message)(Vg_UserMsg,
- " %s (%p -> %p)",
- redir->from_sym, redir->from_addr, redir->to_ad=
dr );
- }
- VG_(discard_translations)((Addr64)redir->from_addr, 1);
- }
-
- {
- CodeRedirect *r =3D VG_(SkipList_Find_Exact)(&sk_resolved_redir=
, &redir->from_addr);
-
- if (r =3D=3D NULL)
- VG_(SkipList_Insert)(&sk_resolved_redir, redir);
- else {
- /* XXX leak redir */
- if (VG_(clo_trace_redir))
- VG_(message)(Vg_DebugMsg, " redir %s:%s:%p->%s:%s:%p dup=
licated\n",
- redir->from_lib, redir->from_sym, redir->fro=
m_addr,
- redir->to_lib, redir->to_sym, redir->to_addr=
);
- }
- }
- break;
-
- case R_WRAPPER:
- if (VG_(clo_trace_redir)) {
- VG_(message)(Vg_DebugMsg, " wrapper resolved (%s:%s=3D%p -> wr=
apper)",
- redir->from_lib, redir->from_sym, redir->from_addr=
);
- }
-
- /* XXX redir leaked */
- //VG_(wrap_function)(redir->from_addr, redir->wrapper);
- break;
-
- case R_CLIENT_WRAPPER:
- VG_(core_panic)("not implemented");
- break;
- }
-}
-
-/* Resolve a redir using si if possible, and add it to the resolved
- list */
-static Bool resolve_redir(CodeRedirect *redir, const SegInfo *si)
-{
- Bool resolved;
-
- vg_assert(si !=3D NULL);
- vg_assert(si->seg !=3D NULL);
-
- /* no redirection from Valgrind segments */
- if (si->seg->flags & SF_VALGRIND)
- return False;
-
- resolved =3D VG_(is_resolved)(redir);
-
- if (0 && VG_(clo_trace_redir))
- VG_(printf)(" consider FROM binding %s:%s -> %s:%s in %s(%s)\n",
- redir->from_lib, redir->from_sym,
- redir->to_lib, redir->to_sym,
- si->filename, si->soname);
-
- vg_assert(!resolved);
-
- if (!from_resolved(redir)) {
- vg_assert(redir->from_sym !=3D NULL);
-
- if (match_lib(redir->from_lib, si)) {
- redir->from_addr =3D VG_(reverse_search_one_symtab)(si, redir->from_sy=
m);
- if (VG_(clo_trace_redir) && redir->from_addr !=3D 0)
- VG_(printf)(" bind FROM: %p =3D %s:%s\n",=20
- redir->from_addr,redir->from_lib, redir->from_sy=
m );
- }
- }
-
- if (!to_resolved(redir)) {
- vg_assert(redir->type =3D=3D R_REDIRECT);
- vg_assert(redir->to_sym !=3D NULL);
-
- if (match_lib(redir->to_lib, si)) {
- redir->to_addr =3D VG_(reverse_search_one_symtab)(si, redir->to_sym);
- if (VG_(clo_trace_redir) && redir->to_addr !=3D 0)
- VG_(printf)(" bind TO: %p =3D %s:%s\n",=20
- redir->to_addr,redir->to_lib, redir->to_sym );
-
- }
- }
-
- resolved =3D from_resolved(redir) && to_resolved(redir);
-
- if (0 && VG_(clo_trace_redir))
- VG_(printf)("resolve_redir: %s:%s from=3D%p %s:%s to=3D%p\n",
- redir->from_lib, redir->from_sym, redir->from_addr,=20
- redir->to_lib, redir->to_sym, redir->to_addr);
-
- if (resolved) add_resolved(redir);
-
- return resolved;
-}
-
-static Bool resolve_redir_allsegs(CodeRedirect *redir)
-{
- const SegInfo *si;
-
- for(si =3D VG_(next_seginfo)(NULL);=20
- si !=3D NULL;=20
- si =3D VG_(next_seginfo)(si))
- {
- if (resolve_redir(redir, si))
- return True;
- }
- return False;
-}
-
-/* Go through the complete redir list, resolving as much as possible wit=
h this SegInfo.
-
- This should be called when a new SegInfo symtab is loaded.
- */
-void VG_(resolve_seg_redirs)(SegInfo *si)
-{
- CodeRedirect **prevp =3D &unresolved_redir;
- CodeRedirect *redir, *next;
-
- if (VG_(clo_trace_redir))
- VG_(printf)("Considering redirs to/from %s(soname=3D%s)\n",
- si->filename, si->soname);
-
- /* visit each unresolved redir - if it becomes resolved, then
- remove it from the unresolved list */
- for(redir =3D unresolved_redir; redir !=3D NULL; redir =3D next) {
- next =3D redir->next;
-
- if (resolve_redir(redir, si)) {
- *prevp =3D next;
- redir->next =3D NULL;
- } else
- prevp =3D &redir->next;
- }
-}
-
-/* Redirect a lib/symbol reference to a function at lib/symbol */
-static void add_redirect_sym_to_sym(const Char *from_lib, const Char *fr=
om_sym,
- const Char *to_lib, const Char *to_sym)
-{
- CodeRedirect *redir =3D VG_(SkipNode_Alloc)(&sk_resolved_redir);
-
- redir->type =3D R_REDIRECT;
-
- redir->from_lib =3D VG_(arena_strdup)(VG_AR_SYMTAB, from_lib);
- redir->from_sym =3D VG_(arena_strdup)(VG_AR_SYMTAB, from_sym);
- redir->from_addr =3D 0;
-
- redir->to_lib =3D VG_(arena_strdup)(VG_AR_SYMTAB, to_lib);
- redir->to_sym =3D VG_(arena_strdup)(VG_AR_SYMTAB, to_sym);
- redir->to_addr =3D 0;
-
- if (VG_(clo_verbosity) >=3D 2 && VG_(clo_trace_redir))
- VG_(message)(Vg_UserMsg,=20
- "REDIRECT %s(%s) to %s(%s)",
- from_lib, from_sym, to_lib, to_sym);
-
- /* Check against all existing segments to see if this redirection
- can be resolved immediately */
- if (!resolve_redir_allsegs(redir)) {
- /* nope, add to list */
- redir->next =3D unresolved_redir;
- unresolved_redir =3D redir;
- }
-}
-
-/* Redirect a lib/symbol reference to a function at addr */
-void VG_(add_redirect_sym_to_addr)(const Char *from_lib, const Char *fro=
m_sym,
- Addr to_addr)
-{
- CodeRedirect *redir =3D VG_(SkipNode_Alloc)(&sk_resolved_redir);
-
- redir->type =3D R_REDIRECT;
-
- redir->from_lib =3D VG_(arena_strdup)(VG_AR_SYMTAB, from_lib);
- redir->from_sym =3D VG_(arena_strdup)(VG_AR_SYMTAB, from_sym);
- redir->from_addr =3D 0;
-
- redir->to_lib =3D NULL;
- redir->to_sym =3D NULL;
- redir->to_addr =3D to_addr;
-
- if (VG_(clo_verbosity) >=3D 2 && VG_(clo_trace_redir))
- VG_(message)(Vg_UserMsg,=20
- "REDIRECT %s(%s) to %p",
- from_lib, from_sym, to_addr);
-
- /* Check against all existing segments to see if this redirection
- can be resolved immediately */
- if (!resolve_redir_allsegs(redir)) {
- /* nope, add to list */
- redir->next =3D unresolved_redir;
- unresolved_redir =3D redir;
- }
-}
-
-/* Redirect a function at from_addr to a function at to_addr */
-void VG_(add_redirect_addr_to_addr)(Addr from_addr, Addr to_addr)
-{
- CodeRedirect *redir =3D VG_(SkipNode_Alloc)(&sk_resolved_redir);
-
- redir->type =3D R_REDIRECT;
-
- redir->from_lib =3D NULL;
- redir->from_sym =3D NULL;
- redir->from_addr =3D from_addr;
-
- redir->to_lib =3D NULL;
- redir->to_sym =3D NULL;
- redir->to_addr =3D to_addr;
-
- if (VG_(clo_verbosity) >=3D 2 && VG_(clo_trace_redir))
- VG_(message)(Vg_UserMsg,=20
- "REDIRECT %p to %p",
- from_addr, to_addr);
-
- add_resolved(redir);
-}
-
-CodeRedirect *VG_(add_wrapper)(const Char *from_lib, const Char *from_sy=
m,
- const FuncWrapper *wrapper)
-{
- CodeRedirect *redir =3D VG_(SkipNode_Alloc)(&sk_resolved_redir);
-
- if (0)
- VG_(printf)("adding wrapper for %s:%s -> (%p,%p)\n",
- from_lib, from_sym, wrapper->before, wrapper->after);
-
- redir->type =3D R_WRAPPER;
-
- redir->from_lib =3D VG_(arena_strdup)(VG_AR_SYMTAB, from_lib);
- redir->from_sym =3D VG_(arena_strdup)(VG_AR_SYMTAB, from_sym);
- redir->from_addr =3D 0;
-
- redir->to_lib =3D NULL;
- redir->to_sym =3D NULL;
- redir->to_addr =3D 0;
-
- redir->wrapper =3D wrapper;
- =20
- /* Check against all existing segments to see if this redirection
- can be resolved immediately */
- if (!resolve_redir_allsegs(redir)) {
- /* nope, add to list */
- redir->next =3D unresolved_redir;
- unresolved_redir =3D redir;
- }
-
- return redir;
-}
-
-/* If address 'a' is being redirected, return the redirected-to
- address. */
-Addr VG_(code_redirect)(Addr a)
-{
- CodeRedirect* r;
-
- r =3D VG_(SkipList_Find_Exact)(&sk_resolved_redir, &a);
- if (r =3D=3D NULL)
- return a;
-
- vg_assert(r->to_addr !=3D 0);
-
- return r->to_addr;
-}
-
-void VG_(setup_code_redirect_table) ( void )
-{
- /* Overenthusiastic use of PLT bypassing by the glibc people also
- means we need to patch the following functions to our own
- implementations of said, in mac_replace_strmem.c.
- */
- add_redirect_sym_to_sym("soname:libc.so.6", "stpcpy",
- "*vgpreload_memcheck.so*", "stpcpy");
-
- add_redirect_sym_to_sym("soname:ld-linux.so.2", "strlen",
- "*vgpreload_memcheck.so*", "strlen");
- add_redirect_sym_to_sym("soname:libc.so.6", "strlen",
- "*vgpreload_memcheck.so*", "strlen");
-
- add_redirect_sym_to_sym("soname:libc.so.6", "strnlen",
- "*vgpreload_memcheck.so*", "strnlen");
-
- add_redirect_sym_to_sym("soname:ld-linux.so.2", "stpcpy",
- "*vgpreload_memcheck.so*", "stpcpy");
- add_redirect_sym_to_sym("soname:libc.so.6", "stpcpy",
- "*vgpreload_memcheck.so*", "stpcpy");
-
- add_redirect_sym_to_sym("soname:libc.so.6", "strchr",
- "*vgpreload_memcheck.so*", "strchr");
- add_redirect_sym_to_sym("soname:ld-linux.so.2", "strchr",
- "*vgpreload_memcheck.so*", "strchr");
-
- /* apparently index is the same thing as strchr */
- add_redirect_sym_to_sym("soname:ld-linux.so.2", "index",
- "*vgpreload_memcheck.so*", "strchr");
-
- add_redirect_sym_to_sym("soname:libc.so.6", "strchrnul",
- "*vgpreload_memcheck.so*", "glibc232_strchrnu=
l");
-
- add_redirect_sym_to_sym("soname:libc.so.6", "rawmemchr",
- "*vgpreload_memcheck.so*", "glibc232_rawmemch=
r");
-
- /* amd64-linux (glibc 2.3.3, SuSE 9.2) */
- /* apparently index is the same thing as strchr */
- add_redirect_sym_to_sym("soname:libc.so.6", "index",
- "*vgpreload_memcheck.so*", "strchr");
- add_redirect_sym_to_sym("soname:ld-linux-x86-64.so.2", "index",
- "*vgpreload_memcheck.so*", "strchr");
-
- add_redirect_sym_to_sym("soname:libc.so.6", "strcpy",
- "*vgpreload_memcheck.so*", "strcpy");
-
- add_redirect_sym_to_sym("soname:ld-linux-x86-64.so.2", "strcmp",
- "*vgpreload_memcheck.so*", "strcmp");
- add_redirect_sym_to_sym("soname:libc.so.6", "strcmp",
- "*vgpreload_memcheck.so*", "strcmp");
-
- add_redirect_sym_to_sym("soname:ld-linux-x86-64.so.2", "strlen",
- "*vgpreload_memcheck.so*", "strlen");
-}
-
-
-//:: /*------------------------------------------------------------*/
-//:: /*--- General function wrapping. ---*/
-//:: /*------------------------------------------------------------*/
-//::=20
-//:: /*=20
-//:: TODO:
-//:: - hook into the symtab machinery
-//:: - client-side wrappers?
-//:: - better interfaces for before() functions to get to arguments
-//:: - handle munmap of code (dlclose())
-//:: - handle thread exit
-//:: - handle longjmp
-//:: */
-//:: struct callkey {
-//:: ThreadId tid; /* calling thread */
-//:: Addr esp; /* address of args on stack */
-//:: Addr eip; /* return address */
-//:: };
-//::=20
-//:: struct call_instance {
-//:: struct callkey key;
-//::=20
-//:: const FuncWrapper *wrapper;
-//:: void *nonce;
-//:: };
-//::=20
-//:: static inline Addr addrcmp(Addr a, Addr b)
-//:: {
-//:: if (a < b)
-//:: return -1;
-//:: else if (a > b)
-//:: return 1;
-//:: else=20
-//:: return 0;
-//:: }
-//::=20
-//:: static inline Int cmp(UInt a, UInt b)
-//:: {
-//:: if (a < b)
-//:: return -1;
-//:: else if (a > b)
-//:: return 1;
-//:: else=20
-//:: return 0;
-//:: }
-//::=20
-//:: static Int keycmp(const void *pa, const void *pb)
-//:: {
-//:: const struct callkey *a =3D (const struct callkey *)pa;
-//:: const struct callkey *b =3D (const struct callkey *)pb;
-//:: Int ret;
-//::=20
-//:: if ((ret =3D cmp(a->tid, b->tid)))
-//:: return ret;
-//::=20
-//:: if ((ret =3D addrcmp(a->esp, b->esp)))
-//:: return ret;
-//::=20
-//:: return addrcmp(a->eip, b->eip);
-//:: }
-//::=20
-//:: /* List of wrapped call invocations which are currently active */
-//:: static SkipList wrapped_frames =3D VG_SKIPLIST_INIT(struct call_ins=
tance, key, keycmp,=20
-//:: NULL, VG_AR_SYMTAB);
-//::=20
-//:: static struct call_instance *find_call(Addr retaddr, Addr argsp, Th=
readId tid)
-//:: {
-//:: struct callkey key =3D { tid, argsp, retaddr };
-//::=20
-//:: return VG_(SkipList_Find_Exact)(&wrapped_frames, &key);
-//:: }
-//::=20
-//:: static void wrapper_return(Addr retaddr);
-//::=20
-//:: /* Called from generated code via helper */
-//:: void VG_(wrap_before)(ThreadState *tst, const FuncWrapper *wrapper)
-//:: {
-//:: Addr retaddr =3D VGA_RETADDR(tst->arch);
-//:: Addr argp =3D (Addr)&VGA_FUNC_ARG(tst->arch, 0);
-//:: void *nonce =3D NULL;
-//:: Bool mf =3D VG_(my_fault);
-//:: VG_(my_fault) =3D True;
-//::=20
-//:: if (wrapper->before) {
-//:: va_list args =3D VGA_VA_LIST(tst->arch);
-//:: nonce =3D (*wrapper->before)(args);
-//:: }
-//::=20
-//:: if (wrapper->after) {
-//:: /* If there's an after function, make sure it gets called */
-//:: struct call_instance *call;
-//::=20
-//:: call =3D find_call(retaddr, argp, tst->tid);
-//::=20
-//:: if (call !=3D NULL) {
-//:: /* Found a stale outstanding call; clean it up and recycle
-//:: the structure */
-//:: if (call->wrapper->after)
-//:: (*call->wrapper->after)(call->nonce, RT_LONGJMP, 0);
-//:: } else {
-//:: call =3D VG_(SkipNode_Alloc)(&wrapped_frames);
-//:: =20
-//:: call->key.tid =3D tst->tid;
-//:: call->key.esp =3D argp;
-//:: call->key.eip =3D retaddr;
-//::=20
-//:: VG_(SkipList_Insert)(&wrapped_frames, call);
-//::=20
-//:: wrapper_return(retaddr);
-//:: }
-//::=20
-//:: call->wrapper =3D wrapper;
-//:: call->nonce =3D nonce;
-//:: } else=20
-//:: vg_assert(nonce =3D=3D NULL);
-//::=20
-//:: VG_(my_fault) =3D mf;
-//:: }
-//::=20
-//:: /* Called from generated code via helper */
-//:: void VG_(wrap_after)(ThreadState *tst)
-//:: {
-//:: Addr EIP =3D VGA_INSTR_PTR(tst->arch); /* instruction after call=
*/
-//:: Addr ESP =3D VGA_STACK_PTR(tst->arch); /* pointer to args */
-//:: Word ret =3D VGA_RETVAL(tst->arch); /* return value */
-//:: struct call_instance *call;
-//:: Bool mf =3D VG_(my_fault);
-//::=20
-//:: VG_(my_fault) =3D True;
-//:: call =3D find_call(EIP, ESP, tst->tid);
-//::=20
-//:: if (0)
-//:: VG_(printf)("wrap_after(%p,%p,%d) -> %p\n", EIP, ESP, tst->ti=
d, call);
-//::=20
-//:: if (call !=3D NULL) {
-//:: if (call->wrapper->after)
-//:: (*call->wrapper->after)(call->nonce, RT_RETURN, ret);
-//::=20
-//:: VG_(SkipList_Remove)(&wrapped_frames, &call->key);
-//:: VG_(SkipNode_Free)(&wrapped_frames, call);
-//:: }
-//:: VG_(my_fault) =3D mf;
-//:: }
-//::=20
-//::=20
-//:: struct wrapped_function {
-//:: Addr eip; /* eip of function entrypoint */
-//:: const FuncWrapper *wrapper;
-//:: };
-//::=20
-//:: struct wrapper_return {
-//:: Addr eip; /* return address */
-//:: };
-//::=20
-//:: /* A mapping from eip of wrapped function entrypoints to actual wra=
ppers */
-//:: static SkipList wrapped_functions =3D VG_SKIPLIST_INIT(struct wrapp=
ed_function, eip, VG_(cmp_Addr),
-//:: NULL, VG_AR_SYMTAB);
-//::=20
-//:: /* A set of EIPs which are return addresses for wrapped functions *=
/
-//:: static SkipList wrapper_returns =3D VG_SKIPLIST_INIT(struct wrapper=
_return, eip, VG_(cmp_Addr),
-//:: NULL, VG_AR_SYMTAB);
-//::=20
-//:: /* Wrap function starting at eip */
-//:: void VG_(wrap_function)(Addr eip, const FuncWrapper *wrapper)
-//:: {
-//:: struct wrapped_function *func;
-//::=20
-//:: if (0)
-//:: VG_(printf)("wrapping %p with (%p,%p)\n", eip, wrapper->befor=
e, wrapper->after);
-//::=20
-//:: func =3D VG_(SkipList_Find_Exact)(&wrapped_functions, &eip);
-//::=20
-//:: if (func =3D=3D NULL) {
-//:: func =3D VG_(SkipNode_Alloc)(&wrapped_functions);
-//:: VG_(invalidate_translations)(eip, 1, True);
-//::=20
-//:: func->eip =3D eip;
-//:: VG_(SkipList_Insert)(&wrapped_functions, func);
-//:: }
-//::=20
-//:: func->wrapper =3D wrapper;
-//:: }
-//::=20
-//:: const FuncWrapper *VG_(is_wrapped)(Addr eip)
-//:: {
-//:: struct wrapped_function *func =3D VG_(SkipList_Find_Exact)(&wrap=
ped_functions, &eip);
-//::=20
-//:: if (func)
-//:: return func->wrapper;
-//:: return NULL;
-//:: }
-//::=20
-//:: Bool VG_(is_wrapper_return)(Addr eip)
-//:: {
-//:: struct wrapper_return *ret =3D VG_(SkipList_Find_Exact)(&wrapper=
_returns, &eip);
-//::=20
-//:: return ret !=3D NULL;
-//:: }
-//::=20
-//:: /* Mark eip as being the return address of a wrapper, so that the
-//:: codegen will generate the appropriate call. */
-//:: void wrapper_return(Addr eip)
-//:: {
-//:: struct wrapper_return *ret;
-//::=20
-//:: if (VG_(is_wrapper_return)(eip))
-//:: return;
-//::=20
-//:: VG_(invalidate_translations)(eip, 1, True);
-//::=20
-//:: ret =3D VG_(SkipNode_Alloc)(&wrapper_returns);
-//:: ret->eip =3D eip;
-//::=20
-//:: VG_(SkipList_Insert)(&wrapper_returns, ret);
-//:: }
Modified: trunk/coregrind/vg_symtab2.c
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- trunk/coregrind/vg_symtab2.c 2005-05-29 16:23:17 UTC (rev 3807)
+++ trunk/coregrind/vg_symtab2.c 2005-05-29 17:01:48 UTC (rev 3808)
@@ -36,6 +36,7 @@
#include "pub_core_aspacemgr.h"
#include "pub_core_demangle.h"
#include "pub_core_options.h"
+#include "pub_core_redir.h"
#include "pub_core_tooliface.h"
=20
#include <elf.h> /* ELF defns */
Modified: trunk/coregrind/x86-linux/Makefile.am
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- trunk/coregrind/x86-linux/Makefile.am 2005-05-29 16:23:17 UTC (rev 38=
07)
+++ trunk/coregrind/x86-linux/Makefile.am 2005-05-29 17:01:48 UTC (rev 38=
08)
@@ -4,9 +4,3 @@
noinst_HEADERS =3D \
core_platform.h \
vki_unistd.h
-
-noinst_LIBRARIES =3D libplatform.a
-
-
-libplatform_a_SOURCES =3D \
- core_platform.c
Deleted: trunk/coregrind/x86-linux/core_platform.c
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- trunk/coregrind/x86-linux/core_platform.c 2005-05-29 16:23:17 UTC (re=
v 3807)
+++ trunk/coregrind/x86-linux/core_platform.c 2005-05-29 17:01:48 UTC (re=
v 3808)
@@ -1,11 +0,0 @@
-#include "core.h"
-
-void VGP_(setup_redirects)(void)
-{
- /* Redirect _dl_sysinfo_int80, which is glibc's default system call
- routine, to the routine in our trampoline page so that the
- special sysinfo unwind hack in vg_execontext.c will kick in.
- */
- VG_(add_redirect_sym_to_addr)("soname:ld-linux.so.2", "_dl_sysinfo_in=
t80",
- VG_(client_trampoline_code)+VG_(tramp_s=
yscall_offset));
-}
|
|
From: <sv...@va...> - 2005-05-29 16:23:19
|
Author: njn
Date: 2005-05-29 17:23:17 +0100 (Sun, 29 May 2005)
New Revision: 3807
Modified:
trunk/coregrind/x86-linux/core_platform.h
Log:
Remove remnants of the futex-based semaphore implementation.
Modified: trunk/coregrind/x86-linux/core_platform.h
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- trunk/coregrind/x86-linux/core_platform.h 2005-05-29 16:05:37 UTC (re=
v 3806)
+++ trunk/coregrind/x86-linux/core_platform.h 2005-05-29 16:23:17 UTC (re=
v 3807)
@@ -73,74 +73,6 @@
a6 =3D arg_block[5]; \
} while (0)
=20
-/* ---------------------------------------------------------------------
- Inline asm for atomic operations for use with futexes
- Taken from futex-2.2/i386.h
- ------------------------------------------------------------------ */
-/* (C) Matthew Kirkwood <ma...@ha...>
- (C) 2002 Rusty Russell IBM <ru...@ru...>
- */
-
-/* Atomic dec: return new value. */
-static __inline__ Int __futex_down(Int *counter)
-{
- Int val;
- UChar eqz;
-
- /* Don't decrement if already negative. */
- val =3D *counter;
- if (val < 0)
- return val;
-
- /* Damn 386: no cmpxchg... */
- __asm__ __volatile__(
- "lock; decl %0; sete %1"
- :"=3Dm" (*counter), "=3Dqm" (eqz)
- :"m" (*counter) : "memory");
-
- /* We know if it's zero... */
- if (eqz) return 0;
- /* Otherwise, we have no way of knowing value. Guess -1 (if
- we're wrong we'll spin). */
- return -1;
-}
-
-/* Atomic inc: return 1 if counter incremented from 0 to 1. */
-static __inline__ Int __futex_up(Int *c)
-{
- Int r =3D 1;
-
- /* This actually tests if result >=3D 1. Damn 386. --RR */
- __asm__ __volatile__ (
- " lock; incl %1\n"
- " jg 1f\n"
- " decl %0\n"
- "1:\n"
- : "=3Dq"(r), "=3Dm"(*c) : "0"(r)
- );
- return r;
-}
-
-/* Simple atomic increment. */
-static __inline__ void __atomic_inc(Int *c)
-{
- __asm__ __volatile__(
- "lock; incl %0"
- :"=3Dm" (*c)
- :"m" (*c));
-}
-
-
-/* Commit the write, so it happens before we send the semaphore to
- anyone else */
-static __inline__ void __futex_commit(void)
-{
- /* Probably overkill, but some non-Intel clones support
- out-of-order stores, according to 2.5.5-pre1's
- linux/include/asm-i386/system.h */
- __asm__ __volatile__ ("lock; addl $0,0(%%esp)": : :"memory");
-}
-
#endif // __X86_LINUX_CORE_PLATFORM_H
=20
/*--------------------------------------------------------------------*/
|
|
From: <sv...@va...> - 2005-05-29 16:05:46
|
Author: njn
Date: 2005-05-29 17:05:37 +0100 (Sun, 29 May 2005)
New Revision: 3806
Modified:
trunk/coregrind/linux/core_os.h
trunk/coregrind/linux/sema.c
Log:
Removed the unused futex-based semaphore implementation. It can be
added back in later if necessary.
Modified: trunk/coregrind/linux/core_os.h
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- trunk/coregrind/linux/core_os.h 2005-05-25 21:30:05 UTC (rev 3805)
+++ trunk/coregrind/linux/core_os.h 2005-05-29 16:05:37 UTC (rev 3806)
@@ -32,61 +32,8 @@
#ifndef __LINUX_CORE_OS_H
#define __LINUX_CORE_OS_H
=20
-#define FUTEX_SEMA 0
-
-#if FUTEX_SEMA
-/* ---------------------------------------------------------------------
- Definition for a semaphore. Defined in terms of futex.
-
- Futex semaphore operations taken from futex-2.2/usersem.h
- ------------------------------------------------------------------ */
+/* Not really a semaphore, but use a pipe for a token-passing scheme */
typedef struct {
- int count;
-} vg_sema_t;
-
-extern Int __futex_down_slow(vg_sema_t *, int, struct vki_timespec *);
-extern Int __futex_up_slow(vg_sema_t *);
-
-void VGO_(sema_init)(vg_sema_t *);
-static inline void VGO_(sema_deinit)(vg_sema_t *)=20
-{
-}
-
-static inline void VGO_(sema_down)(vg_sema_t *futx)
-{
- Int val, woken =3D 0;
-
- /* Returns new value */
- while ((val =3D __futex_down(&futx->count)) !=3D 0) {
- Int ret =3D __futex_down_slow(futx, val, NULL);
- if (ret < 0)=20
- return; /* error */
- else if (ret =3D=3D 1)
- return; /* passed */
- else if (ret =3D=3D 0)
- woken =3D 1; /* slept */
- else
- /* loop */;
- }
- /* If we were woken, someone else might be sleeping too: set to -1 */
- if (woken) {
- futx->count =3D -1;
- }
- return;
-}
-
-/* If __futex_up increments count from 0 -> 1, noone was waiting.
- Otherwise, set to 1 and tell kernel to wake them up. */
-static inline void VGO_(sema_up)(vg_sema_t *futx)
-{
- if (!__futex_up(&futx->count))
- __futex_up_slow(futx);
-}
-#else /* !FUTEX_SEMA */
-/*=20
- Not really a semaphore, but use a pipe for a token-passing scheme
- */
-typedef struct {
Int pipe[2];
Int owner_thread; /* who currently has it */
} vg_sema_t;
@@ -96,8 +43,6 @@
void VGO_(sema_down)(vg_sema_t *sema);
void VGO_(sema_up)(vg_sema_t *sema);
=20
-#endif /* FUTEX_SEMA */
-
/* OS-specific thread state */
typedef struct {
/* who we are */
Modified: trunk/coregrind/linux/sema.c
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- trunk/coregrind/linux/sema.c 2005-05-25 21:30:05 UTC (rev 3805)
+++ trunk/coregrind/linux/sema.c 2005-05-29 16:05:37 UTC (rev 3806)
@@ -31,58 +31,9 @@
=20
#include "core.h"
=20
-#if FUTEX_SEMA
/*=20
- Futex-based semaphore operations.
-
- Taken from futex-2.2/usersem.c
- Based on work by Matthew Kirkwood <ma...@ha...>.=20
-*/
-
-#define FUTEX_PASSED (-(1024 * 1024 * 1024))
-
-static inline Int sys_futex(Int *futex, Int op, Int val, struct vki_time=
spec *rel)
-{
- return VG_(do_syscall)(__NR_futex, futex, op, val, rel);
-}
-
-/* Returns -1 on fail, 0 on wakeup, 1 on pass, 2 on didn't sleep */
-int __futex_down_slow(vg_sema_t *futx, int val, struct vki_timespec *rel=
)
-{
- Int ret;
-
- ret =3D sys_futex(&futx->count, VKI_FUTEX_WAIT, val, rel);
- if (ret =3D=3D 0) {
- /* <=3D in case someone else decremented it */
- if (futx->count <=3D FUTEX_PASSED) {
- futx->count =3D -1;
- return 1;
- }
- return 0;
- }
- /* EWOULDBLOCK just means value changed before we slept: loop */
- if (ret =3D=3D -VKI_EWOULDBLOCK)
- return 2;
- return -1;
-}
-
-int __futex_up_slow(vg_sema_t *futx)
-{
- futx->count =3D 1;
- __futex_commit();
- return sys_futex(&futx->count, VKI_FUTEX_WAKE, 1, NULL);
-}
-
-void VGO_(sema_init)(vg_sema_t *sema)
-{
- sema->count =3D 1;
- __futex_commit();
-}
-
-#else /* !FUTEX_SEMA */
-
-/*=20
- Slower but more portable pipe-based token passing scheme.
+ Slower (than the removed futex-based sema scheme) but more portable
+ pipe-based token passing scheme.
*/
=20
void VGO_(sema_init)(vg_sema_t *sema)
@@ -139,8 +90,6 @@
vg_assert(ret =3D=3D 1);
}
=20
-#endif /* FUTEX_SEMA */
-
/*--------------------------------------------------------------------*/
/*--- end ---*/
/*--------------------------------------------------------------------*/
|
|
From: Jeremy F. <je...@go...> - 2005-05-29 05:28:45
|
Ashley Pittman wrote:
>It's somewhat complicated...
>
>
Er, yep.
>the parent thread calls elan3_detach (an ioctl) and the device driver
>sets some state and wakes up the kernel thread sitting in the lwp ioctl.
>This thread then returns done and the lwp exits. Other than that the
>lwp only returns to user-space to take signals.
>
>
So what makes it return done? What triggers that event?
>That's the theory anyway, it's complicated by the fact that we have
>kernel patches (not just modules) to provide "ptrack" functionality,
>basically the job starts in a container and when the job finishes all
>processes (and sys-v stuff) created in that container also get
>destroyed.
>
>
Is this some extra kernel state which Valgrind needs to understand to do
a correct emulation? How are these containers created? In this case,
would the program running under valgrind create a new container which is
expected to mop up all the threads when the main thread exits? How is a
"job" defined?
>If you are using rms/pdsh/slurm to start jobs then you will be using the
>ptrack code (it's done by the open source "rms" kernel module), if you
>are just running your programs by hand then you won't have the ptrack
>stuff.
>
>It's purpose is to make syscalls on behalf of the nic, the c code on the
>nic sets up a descriptor, generates and interrupt which the lower half
>forwards onto the lwp kernel thread. This thread then makes syscalls
>back into the kernel from the top half as the appropriate user with
>suitable permissions.
>
>
Hm, I think I follow, but I don't see at what point it depends on the
initial thread terminating before one of the child threads (or when they
should all exit together).
In the 2.6 NPTL thread model, exit_group() terminates all threads in the
thread group atomically, so there's no waiting around for things to
terminate (or dependence on termination order). Is this running in a
2.4 thread model, or a 2.6 one? It sounds like the container machinery
has an atomic group termination property similar to exit_group().
J
J
|
|
From: <js...@ac...> - 2005-05-29 02:50:08
|
Nightly build on phoenix ( SuSE 9.1 ) started at 2005-05-29 03:50:00 BST Checking out source tree ... done Configuring ... done Building ... done Running regression tests ... done Last 20 lines of log.verbose follow Nightly build on phoenix ( SuSE 9.1 ) started at 2005-05-29 03:50:00 BST |
|
From: Tom H. <to...@co...> - 2005-05-29 02:35:49
|
Nightly build on dunsmere ( athlon, Fedora Core 3 ) started at 2005-05-29 03:30:03 BST Checking out vex source tree ... done Building vex ... done Checking out valgrind source tree ... done Configuring valgrind ... done Building valgrind ... done Running regression tests ... failed Regression test results follow == 176 tests, 8 stderr failures, 1 stdout failure ================= memcheck/tests/execve (stderr) memcheck/tests/execve2 (stderr) memcheck/tests/x86/scalar (stderr) memcheck/tests/x86/scalar_supp (stderr) memcheck/tests/xml1 (stderr) none/tests/faultstatus (stderr) none/tests/selfrun (stdout) none/tests/selfrun (stderr) none/tests/x86/int (stderr) |
|
From: Tom H. <th...@cy...> - 2005-05-29 02:30:40
|
Nightly build on audi ( i686, Red Hat 9 ) started at 2005-05-29 03:25:01 BST Checking out vex source tree ... done Building vex ... done Checking out valgrind source tree ... done Configuring valgrind ... done Building valgrind ... done Running regression tests ... failed Regression test results follow == 175 tests, 4 stderr failures, 0 stdout failures ================= memcheck/tests/xml1 (stderr) corecheck/tests/fdleak_cmsg (stderr) none/tests/faultstatus (stderr) none/tests/x86/int (stderr) |
|
From: Tom H. <th...@cy...> - 2005-05-29 02:20:25
|
Nightly build on alvis ( i686, Red Hat 7.3 ) started at 2005-05-29 03:15:02 BST Checking out vex source tree ... done Building vex ... done Checking out valgrind source tree ... done Configuring valgrind ... done Building valgrind ... done Running regression tests ... failed Regression test results follow == 174 tests, 13 stderr failures, 0 stdout failures ================= memcheck/tests/addressable (stderr) memcheck/tests/describe-block (stderr) memcheck/tests/leak-0 (stderr) memcheck/tests/leak-cycle (stderr) memcheck/tests/leak-regroot (stderr) memcheck/tests/leak-tree (stderr) memcheck/tests/match-overrun (stderr) memcheck/tests/pointer-trace (stderr) memcheck/tests/vgtest_ume (stderr) memcheck/tests/xml1 (stderr) corecheck/tests/fdleak_cmsg (stderr) none/tests/faultstatus (stderr) none/tests/x86/int (stderr) |
|
From: Tom H. <th...@cy...> - 2005-05-29 02:19:40
|
Nightly build on dellow ( x86_64, Fedora Core 3 ) started at 2005-05-29 03:10:02 BST Checking out vex source tree ... done Building vex ... done Checking out valgrind source tree ... done Configuring valgrind ... done Building valgrind ... done Running regression tests ... failed Regression test results follow == 155 tests, 15 stderr failures, 2 stdout failures ================= memcheck/tests/brk (stderr) memcheck/tests/sigaltstack (stderr) memcheck/tests/sigprocmask (stderr) memcheck/tests/toobig-allocs (stderr) memcheck/tests/weirdioctl (stderr) memcheck/tests/xml1 (stderr) corecheck/tests/fdleak_cmsg (stderr) corecheck/tests/fdleak_dup (stderr) corecheck/tests/fdleak_dup2 (stderr) corecheck/tests/fdleak_ipv4 (stderr) corecheck/tests/fdleak_pipe (stderr) corecheck/tests/fdleak_socketpair (stderr) massif/tests/toobig-allocs (stderr) none/tests/faultstatus (stderr) none/tests/selfrun (stdout) none/tests/selfrun (stderr) none/tests/yield (stdout) |
|
From: Tom H. <th...@cy...> - 2005-05-29 02:05:20
|
Nightly build on gill ( x86_64, Fedora Core 2 ) started at 2005-05-29 03:00:03 BST Checking out vex source tree ... done Building vex ... done Checking out valgrind source tree ... done Configuring valgrind ... done Building valgrind ... done Running regression tests ... failed Regression test results follow == 155 tests, 16 stderr failures, 1 stdout failure ================= memcheck/tests/brk (stderr) memcheck/tests/sigaltstack (stderr) memcheck/tests/sigprocmask (stderr) memcheck/tests/toobig-allocs (stderr) memcheck/tests/weirdioctl (stderr) memcheck/tests/xml1 (stderr) corecheck/tests/fdleak_cmsg (stderr) corecheck/tests/fdleak_dup (stderr) corecheck/tests/fdleak_dup2 (stderr) corecheck/tests/fdleak_fcntl (stderr) corecheck/tests/fdleak_ipv4 (stderr) corecheck/tests/fdleak_pipe (stderr) corecheck/tests/fdleak_socketpair (stderr) massif/tests/toobig-allocs (stderr) none/tests/faultstatus (stderr) none/tests/selfrun (stdout) none/tests/selfrun (stderr) |