diff options
Diffstat (limited to 'sunrpc')
-rw-r--r-- | sunrpc/svc_tcp.c | 15 | ||||
-rw-r--r-- | sunrpc/svc_unix.c | 15 |
2 files changed, 24 insertions, 6 deletions
diff --git a/sunrpc/svc_tcp.c b/sunrpc/svc_tcp.c index 94bfb33..06c05a6 100644 --- a/sunrpc/svc_tcp.c +++ b/sunrpc/svc_tcp.c @@ -81,14 +81,23 @@ static const struct xp_ops svctcp_op = */ static bool_t rendezvous_request (SVCXPRT *, struct rpc_msg *); static enum xprt_stat rendezvous_stat (SVCXPRT *); +static void svctcp_rendezvous_abort (void); + +/* This function makes sure abort() relocation goes through PLT + and thus can be lazy bound. */ +static void +svctcp_rendezvous_abort (void) +{ + abort (); +}; static const struct xp_ops svctcp_rendezvous_op = { rendezvous_request, rendezvous_stat, - (bool_t (*) (SVCXPRT *, xdrproc_t, caddr_t)) abort, - (bool_t (*) (SVCXPRT *, struct rpc_msg *)) abort, - (bool_t (*) (SVCXPRT *, xdrproc_t, caddr_t)) abort, + (bool_t (*) (SVCXPRT *, xdrproc_t, caddr_t)) svctcp_rendezvous_abort, + (bool_t (*) (SVCXPRT *, struct rpc_msg *)) svctcp_rendezvous_abort, + (bool_t (*) (SVCXPRT *, xdrproc_t, caddr_t)) svctcp_rendezvous_abort, svctcp_destroy }; diff --git a/sunrpc/svc_unix.c b/sunrpc/svc_unix.c index 4aa05a1..20bc0aa 100644 --- a/sunrpc/svc_unix.c +++ b/sunrpc/svc_unix.c @@ -74,14 +74,23 @@ static const struct xp_ops svcunix_op = */ static bool_t rendezvous_request (SVCXPRT *, struct rpc_msg *); static enum xprt_stat rendezvous_stat (SVCXPRT *); +static void svcunix_rendezvous_abort (void); + +/* This function makes sure abort() relocation goes through PLT + and thus can be lazy bound. */ +static void +svcunix_rendezvous_abort (void) +{ + abort (); +}; static const struct xp_ops svcunix_rendezvous_op = { rendezvous_request, rendezvous_stat, - (bool_t (*) (SVCXPRT *, xdrproc_t, caddr_t)) abort, - (bool_t (*) (SVCXPRT *, struct rpc_msg *)) abort, - (bool_t (*) (SVCXPRT *, xdrproc_t, caddr_t)) abort, + (bool_t (*) (SVCXPRT *, xdrproc_t, caddr_t)) svcunix_rendezvous_abort, + (bool_t (*) (SVCXPRT *, struct rpc_msg *)) svcunix_rendezvous_abort, + (bool_t (*) (SVCXPRT *, xdrproc_t, caddr_t)) svcunix_rendezvous_abort, svcunix_destroy }; |