|
From: <sv...@va...> - 2005-06-09 13:25:42
|
Author: sewardj
Date: 2005-06-09 14:21:58 +0100 (Thu, 09 Jun 2005)
New Revision: 3857
Log:
Fix some socket-related functionality on amd64. This means file
descriptor leak checks now work on amd64.
Modified:
trunk/coregrind/m_libcfile.c
Modified: trunk/coregrind/m_libcfile.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_libcfile.c 2005-06-09 12:43:42 UTC (rev 3856)
+++ trunk/coregrind/m_libcfile.c 2005-06-09 13:21:58 UTC (rev 3857)
@@ -360,34 +360,44 @@
=20
Int VG_(getsockname) ( Int sd, struct vki_sockaddr *name, Int *namelen)
{
+ SysRes res;
+
# if defined(VGP_x86_linux)
- SysRes res;
UWord args[3];
args[0] =3D sd;
args[1] =3D (UWord)name;
args[2] =3D (UWord)namelen;
res =3D VG_(do_syscall2)(__NR_socketcall, VKI_SYS_GETSOCKNAME, (UWord=
)&args);
return res.isError ? -1 : res.val;
+
+# elif defined(VGP_amd64_linux)
+ res =3D VG_(do_syscall3)( __NR_getsockname,
+ (UWord)sd, (UWord)name, (UWord)namelen );
+ return res.isError ? -1 : res.val;
+
# else
- // AMD64/Linux doesn't define __NR_socketcall... see comment above
- // VG_(sigpending)() for more details.
I_die_here;
# endif
}
=20
Int VG_(getpeername) ( Int sd, struct vki_sockaddr *name, Int *namelen)
{
+ SysRes res;
+
# if defined(VGP_x86_linux)
- SysRes res;
UWord args[3];
args[0] =3D sd;
args[1] =3D (UWord)name;
args[2] =3D (UWord)namelen;
res =3D VG_(do_syscall2)(__NR_socketcall, VKI_SYS_GETPEERNAME, (UWord=
)&args);
return res.isError ? -1 : res.val;
+
+# elif defined(VGP_amd64_linux)
+ res =3D VG_(do_syscall3)( __NR_getpeername,
+ (UWord)sd, (UWord)name, (UWord)namelen );
+ return res.isError ? -1 : res.val;
+
# else
- // AMD64/Linux doesn't define __NR_socketcall... see comment above
- // VG_(sigpending)() for more details.
I_die_here;
# endif
}
@@ -395,8 +405,9 @@
Int VG_(getsockopt) ( Int sd, Int level, Int optname, void *optval,
Int *optlen)
{
+ SysRes res;
+
# if defined(VGP_x86_linux)
- SysRes res;
UWord args[5];
args[0] =3D sd;
args[1] =3D level;
@@ -405,10 +416,15 @@
args[4] =3D (UWord)optlen;
res =3D VG_(do_syscall2)(__NR_socketcall, VKI_SYS_GETSOCKOPT, (UWord)=
&args);
return res.isError ? -1 : res.val;
+
+# elif defined(VGP_amd64_linux)
+ res =3D VG_(do_syscall5)( __NR_getsockopt,
+ (UWord)sd, (UWord)level, (UWord)optname,=20
+ (UWord)optval, (UWord)optlen );
+ return res.isError ? -1 : res.val;
+
# else
I_die_here;
- // AMD64/Linux doesn't define __NR_socketcall... see comment above
- // VG_(sigpending)() for more details.
# endif
}
=20
|