LD_PRELOAD poll implementation

- add poll implementation
- implementation based on vppcom_poll
- implementation based on vppcom_select
- currently vppcom_select implementation is picked

Change-Id: If6c2862ae72e9969335aca5b8085957c98287dc0
Signed-off-by: shrinivasan ganapathy <shrinivasanganapathy@gmail.com>
Signed-off-by: Dave Wallace <dwallacelf@gmail.com>
diff --git a/extras/vcl-ldpreload/src/libvcl-ldpreload/vcom_socket_wrapper.c b/extras/vcl-ldpreload/src/libvcl-ldpreload/vcom_socket_wrapper.c
index 087cd6b..9b961af 100644
--- a/extras/vcl-ldpreload/src/libvcl-ldpreload/vcom_socket_wrapper.c
+++ b/extras/vcl-ldpreload/src/libvcl-ldpreload/vcom_socket_wrapper.c
@@ -263,6 +263,15 @@
 				   int __maxevents, int __timeout,
 				   const __sigset_t * __ss);
 
+typedef int (*__libc_poll) (struct pollfd * __fds, nfds_t __nfds,
+			    int __timeout);
+
+#ifdef __USE_GNU
+typedef int (*__libc_ppoll) (struct pollfd * __fds, nfds_t __nfds,
+			     const struct timespec * __timeout,
+			     const __sigset_t * __ss);
+#endif
+
 
 #define SWRAP_SYMBOL_ENTRY(i) \
         union { \
@@ -334,6 +343,10 @@
   SWRAP_SYMBOL_ENTRY (epoll_ctl);
   SWRAP_SYMBOL_ENTRY (epoll_wait);
   SWRAP_SYMBOL_ENTRY (epoll_pwait);
+  SWRAP_SYMBOL_ENTRY (poll);
+#ifdef __USE_GNU
+  SWRAP_SYMBOL_ENTRY (ppoll);
+#endif
 };
 
 struct swrap
@@ -811,6 +824,25 @@
 						 __ss);
 }
 
+int
+libc_poll (struct pollfd *__fds, nfds_t __nfds, int __timeout)
+{
+  swrap_bind_symbol_libc (poll);
+
+  return swrap.libc.symbols._libc_poll.f (__fds, __nfds, __timeout);
+}
+
+#ifdef __USE_GNU
+int
+libc_ppoll (struct pollfd *__fds, nfds_t __nfds,
+	    const struct timespec *__timeout, const __sigset_t * __ss)
+{
+  swrap_bind_symbol_libc (ppoll);
+
+  return swrap.libc.symbols._libc_ppoll.f (__fds, __nfds, __timeout, __ss);
+}
+#endif
+
 static void
 swrap_thread_prepare (void)
 {