Mark Wielaard 3eb96a
Index: valgrind/coregrind/m_clientstate.c
Mark Wielaard 3eb96a
===================================================================
Mark Wielaard 3eb96a
--- valgrind/coregrind/m_clientstate.c	(revision 13015)
Mark Wielaard 3eb96a
+++ valgrind/coregrind/m_clientstate.c	(working copy)
Mark Wielaard 3eb96a
@@ -64,6 +64,9 @@
Mark Wielaard 3eb96a
 /* A fd which refers to the fake /proc/<pid>/cmdline in /tmp. */
Mark Wielaard 3eb96a
 Int VG_(cl_cmdline_fd) = -1;
Mark Wielaard 3eb96a
 
Mark Wielaard 3eb96a
+/* A fd which refers to the fake /proc/<pid>/auxv in /tmp. */
Mark Wielaard 3eb96a
+Int VG_(cl_auxv_fd) = -1;
Mark Wielaard 3eb96a
+
Mark Wielaard 3eb96a
 // Command line pieces, after they have been extracted from argv in
Mark Wielaard 3eb96a
 // m_main.main().  The payload vectors are allocated in VG_AR_TOOL
Mark Wielaard 3eb96a
 // (the default arena).  They are never freed.
Mark Wielaard 3eb96a
Index: valgrind/coregrind/m_main.c
Mark Wielaard 3eb96a
===================================================================
Mark Wielaard 3eb96a
--- valgrind/coregrind/m_main.c	(revision 13015)
Mark Wielaard 3eb96a
+++ valgrind/coregrind/m_main.c	(working copy)
Mark Wielaard 3eb96a
@@ -1871,14 +1871,17 @@
Mark Wielaard 3eb96a
    setup_file_descriptors();
Mark Wielaard 3eb96a
 
Mark Wielaard 3eb96a
    //--------------------------------------------------------------
Mark Wielaard 3eb96a
-   // create the fake /proc/<pid>/cmdline file and then unlink it,
Mark Wielaard 3eb96a
-   // but hold onto the fd, so we can hand it out to the client
Mark Wielaard 3eb96a
-   // when it tries to open /proc/<pid>/cmdline for itself.
Mark Wielaard 3eb96a
+   // create fake /proc/<pid>/cmdline and /proc/<pid>/auxv files
Mark Wielaard 3eb96a
+   // and then unlink them, but hold onto the fds, so we can handr
Mark Wielaard 3eb96a
+   // them out to the client when it tries to open
Mark Wielaard 3eb96a
+   // /proc/<pid>/cmdline or /proc/<pid>/auxv for itself.
Mark Wielaard 3eb96a
    //   p: setup file descriptors
Mark Wielaard 3eb96a
+   //   p: ii_create_image for VG_(client_auxv) setup.
Mark Wielaard 3eb96a
    //--------------------------------------------------------------
Mark Wielaard 3eb96a
 #if !defined(VGO_linux)
Mark Wielaard 3eb96a
    // client shouldn't be using /proc!
Mark Wielaard 3eb96a
    VG_(cl_cmdline_fd) = -1;
Mark Wielaard 3eb96a
+   VG_(cl_auxv_fd) = -1;
Mark Wielaard 3eb96a
 #else
Mark Wielaard 3eb96a
    if (!need_help) {
Mark Wielaard 3eb96a
       HChar  buf[50], buf2[50+64];
Mark Wielaard 3eb96a
@@ -1915,6 +1918,34 @@
Mark Wielaard 3eb96a
          VG_(err_config_error)("Can't delete client cmdline file in %s\n", buf2);
Mark Wielaard 3eb96a
 
Mark Wielaard 3eb96a
       VG_(cl_cmdline_fd) = fd;
Mark Wielaard 3eb96a
+
Mark Wielaard 3eb96a
+      VG_(debugLog)(1, "main", "Create fake /proc/<pid>/auxv\n");
Mark Wielaard 3eb96a
+
Mark Wielaard 3eb96a
+      VG_(sprintf)(buf, "proc_%d_auxv", VG_(getpid)());
Mark Wielaard 3eb96a
+      fd = VG_(mkstemp)( buf, buf2 );
Mark Wielaard 3eb96a
+      if (fd == -1)
Mark Wielaard 3eb96a
+         VG_(err_config_error)("Can't create client auxv file in %s\n", buf2);
Mark Wielaard 3eb96a
+
Mark Wielaard 3eb96a
+      UWord *client_auxv = VG_(client_auxv);
Mark Wielaard 3eb96a
+      unsigned int client_auxv_len = 0;
Mark Wielaard 3eb96a
+      while (*client_auxv != 0) {
Mark Wielaard 3eb96a
+         client_auxv++;
Mark Wielaard 3eb96a
+         client_auxv++;
Mark Wielaard 3eb96a
+         client_auxv_len += 2 * sizeof(UWord);
Mark Wielaard 3eb96a
+      }
Mark Wielaard 3eb96a
+      client_auxv_len += 2 * sizeof(UWord);
Mark Wielaard 3eb96a
+
Mark Wielaard 3eb96a
+      VG_(write)(fd, VG_(client_auxv), client_auxv_len);
Mark Wielaard 3eb96a
+
Mark Wielaard 3eb96a
+      /* Don't bother to seek the file back to the start; instead do
Mark Wielaard 3eb96a
+	 it every time a copy of it is given out (by PRE(sys_open)). 
Mark Wielaard 3eb96a
+	 That is probably more robust across fork() etc. */
Mark Wielaard 3eb96a
+
Mark Wielaard 3eb96a
+      /* Now delete it, but hang on to the fd. */
Mark Wielaard 3eb96a
+      r = VG_(unlink)( buf2 );
Mark Wielaard 3eb96a
+      if (r)
Mark Wielaard 3eb96a
+         VG_(err_config_error)("Can't delete client cmdline file in %s\n", buf2);
Mark Wielaard 3eb96a
+      VG_(cl_auxv_fd) = fd;
Mark Wielaard 3eb96a
    }
Mark Wielaard 3eb96a
 #endif
Mark Wielaard 3eb96a
 
Mark Wielaard 3eb96a
Index: valgrind/coregrind/m_syswrap/syswrap-generic.c
Mark Wielaard 3eb96a
===================================================================
Mark Wielaard 3eb96a
--- valgrind/coregrind/m_syswrap/syswrap-generic.c	(revision 13015)
Mark Wielaard 3eb96a
+++ valgrind/coregrind/m_syswrap/syswrap-generic.c	(working copy)
Mark Wielaard 3eb96a
@@ -3633,6 +3633,31 @@
Mark Wielaard 3eb96a
          return;
Mark Wielaard 3eb96a
       }
Mark Wielaard 3eb96a
    }
Mark Wielaard 3eb96a
+
Mark Wielaard 3eb96a
+   /* Handle the case where the open is of /proc/self/auxv or
Mark Wielaard 3eb96a
+      /proc/<pid>/auxv, and just give it a copy of the fd for the
Mark Wielaard 3eb96a
+      fake file we cooked up at startup (in m_main).  Also, seek the
Mark Wielaard 3eb96a
+      cloned fd back to the start. */
Mark Wielaard 3eb96a
+   {
Mark Wielaard 3eb96a
+      HChar  name[30];
Mark Wielaard 3eb96a
+      Char*  arg1s = (Char*) ARG1;
Mark Wielaard 3eb96a
+      SysRes sres;
Mark Wielaard 3eb96a
+
Mark Wielaard 3eb96a
+      VG_(sprintf)(name, "/proc/%d/auxv", VG_(getpid)());
Mark Wielaard 3eb96a
+      if (ML_(safe_to_deref)( arg1s, 1 ) &&
Mark Wielaard 3eb96a
+          (VG_STREQ(arg1s, name) || VG_STREQ(arg1s, "/proc/self/auxv"))
Mark Wielaard 3eb96a
+         )
Mark Wielaard 3eb96a
+      {
Mark Wielaard 3eb96a
+         sres = VG_(dup)( VG_(cl_auxv_fd) );
Mark Wielaard 3eb96a
+         SET_STATUS_from_SysRes( sres );
Mark Wielaard 3eb96a
+         if (!sr_isError(sres)) {
Mark Wielaard 3eb96a
+            OffT off = VG_(lseek)( sr_Res(sres), 0, VKI_SEEK_SET );
Mark Wielaard 3eb96a
+            if (off < 0)
Mark Wielaard 3eb96a
+               SET_STATUS_Failure( VKI_EMFILE );
Mark Wielaard 3eb96a
+         }
Mark Wielaard 3eb96a
+         return;
Mark Wielaard 3eb96a
+      }
Mark Wielaard 3eb96a
+   }
Mark Wielaard 3eb96a
 #endif // defined(VGO_linux)
Mark Wielaard 3eb96a
 
Mark Wielaard 3eb96a
    /* Otherwise handle normally */
Mark Wielaard 3eb96a
Index: valgrind/coregrind/m_syswrap/syswrap-linux.c
Mark Wielaard 3eb96a
===================================================================
Mark Wielaard 3eb96a
--- valgrind/coregrind/m_syswrap/syswrap-linux.c	(revision 13015)
Mark Wielaard 3eb96a
+++ valgrind/coregrind/m_syswrap/syswrap-linux.c	(working copy)
Mark Wielaard 3eb96a
@@ -3332,6 +3332,22 @@
Mark Wielaard 3eb96a
       return;
Mark Wielaard 3eb96a
    }
Mark Wielaard 3eb96a
 
Mark Wielaard 3eb96a
+   /* Do the same for /proc/self/auxv or /proc/<pid>/auxv case. */
Mark Wielaard 3eb96a
+
Mark Wielaard 3eb96a
+   VG_(sprintf)(name, "/proc/%d/auxv", VG_(getpid)());
Mark Wielaard 3eb96a
+   if (ML_(safe_to_deref)( (void*)ARG2, 1 )
Mark Wielaard 3eb96a
+       && (VG_(strcmp)((Char *)ARG2, name) == 0 
Mark Wielaard 3eb96a
+           || VG_(strcmp)((Char *)ARG2, "/proc/self/auxv") == 0)) {
Mark Wielaard 3eb96a
+      sres = VG_(dup)( VG_(cl_auxv_fd) );
Mark Wielaard 3eb96a
+      SET_STATUS_from_SysRes( sres );
Mark Wielaard 3eb96a
+      if (!sr_isError(sres)) {
Mark Wielaard 3eb96a
+         OffT off = VG_(lseek)( sr_Res(sres), 0, VKI_SEEK_SET );
Mark Wielaard 3eb96a
+         if (off < 0)
Mark Wielaard 3eb96a
+            SET_STATUS_Failure( VKI_EMFILE );
Mark Wielaard 3eb96a
+      }
Mark Wielaard 3eb96a
+      return;
Mark Wielaard 3eb96a
+   }
Mark Wielaard 3eb96a
+
Mark Wielaard 3eb96a
    /* Otherwise handle normally */
Mark Wielaard 3eb96a
    *flags |= SfMayBlock;
Mark Wielaard 3eb96a
 }
Mark Wielaard 3eb96a
Index: valgrind/coregrind/pub_core_clientstate.h
Mark Wielaard 3eb96a
===================================================================
Mark Wielaard 3eb96a
--- valgrind/coregrind/pub_core_clientstate.h	(revision 13015)
Mark Wielaard 3eb96a
+++ valgrind/coregrind/pub_core_clientstate.h	(working copy)
Mark Wielaard 3eb96a
@@ -67,6 +67,9 @@
Mark Wielaard 3eb96a
    the file contents alive exactly until the process exits. */
Mark Wielaard 3eb96a
 extern Int VG_(cl_cmdline_fd);
Mark Wielaard 3eb96a
 
Mark Wielaard 3eb96a
+/* Same as above, but for /proc/<pid>/auxv. */
Mark Wielaard 3eb96a
+extern Int VG_(cl_auxv_fd);
Mark Wielaard 3eb96a
+
Mark Wielaard 3eb96a
 // Client's original rlimit data and rlimit stack
Mark Wielaard 3eb96a
 extern struct vki_rlimit VG_(client_rlimit_data);
Mark Wielaard 3eb96a
 extern struct vki_rlimit VG_(client_rlimit_stack);
Mark Wielaard 3eb96a
Index: valgrind/memcheck/tests/linux/Makefile.am
Mark Wielaard 3eb96a
===================================================================
Mark Wielaard 3eb96a
--- valgrind/memcheck/tests/linux/Makefile.am	(revision 13015)
Mark Wielaard 3eb96a
+++ valgrind/memcheck/tests/linux/Makefile.am	(working copy)
Mark Wielaard 3eb96a
@@ -15,7 +15,8 @@
Mark Wielaard 3eb96a
 	syscalls-2007.vgtest syscalls-2007.stderr.exp \
Mark Wielaard 3eb96a
 	syslog-syscall.vgtest syslog-syscall.stderr.exp \
Mark Wielaard 3eb96a
 	timerfd-syscall.vgtest timerfd-syscall.stderr.exp \
Mark Wielaard 3eb96a
-	with-space.stderr.exp with-space.stdout.exp with-space.vgtest
Mark Wielaard 3eb96a
+	with-space.stderr.exp with-space.stdout.exp with-space.vgtest \
Mark Wielaard 3eb96a
+	proc-auxv.vgtest proc-auxv.stderr.exp
Mark Wielaard 3eb96a
 
Mark Wielaard 3eb96a
 check_PROGRAMS = \
Mark Wielaard 3eb96a
 	brk \
Mark Wielaard 3eb96a
@@ -27,7 +28,8 @@
Mark Wielaard 3eb96a
 	stack_switch \
Mark Wielaard 3eb96a
 	syscalls-2007 \
Mark Wielaard 3eb96a
 	syslog-syscall \
Mark Wielaard 3eb96a
-	timerfd-syscall
Mark Wielaard 3eb96a
+	timerfd-syscall \
Mark Wielaard 3eb96a
+	proc-auxv
Mark Wielaard 3eb96a
 
Mark Wielaard 3eb96a
 
Mark Wielaard 3eb96a
 AM_CFLAGS   += $(AM_FLAG_M3264_PRI)
Mark Wielaard 3eb96a
Index: memcheck/tests/linux/proc-auxv.c
Mark Wielaard 3eb96a
===================================================================
Mark Wielaard 3eb96a
--- valgrind/memcheck/tests/linux/proc-auxv.c	(revision 0)
Mark Wielaard 3eb96a
+++ valgrind/memcheck/tests/linux/proc-auxv.c	(working copy)
Mark Wielaard 3eb96a
@@ -0,0 +1,62 @@
Mark Wielaard 3eb96a
+#include <elf.h>
Mark Wielaard 3eb96a
+#include <link.h>
Mark Wielaard 3eb96a
+#include <stdio.h>
Mark Wielaard 3eb96a
+#include <stddef.h>
Mark Wielaard 3eb96a
+#include <string.h>
Mark Wielaard 3eb96a
+#include <sys/types.h>
Mark Wielaard 3eb96a
+#include <sys/stat.h>
Mark Wielaard 3eb96a
+#include <fcntl.h>
Mark Wielaard 3eb96a
+#include <unistd.h>
Mark Wielaard 3eb96a
+#include <stdlib.h>
Mark Wielaard 3eb96a
+
Mark Wielaard 3eb96a
+int
Mark Wielaard 3eb96a
+main (int argc, char **argv, char **envp)
Mark Wielaard 3eb96a
+{
Mark Wielaard 3eb96a
+  ElfW(auxv_t) auxv;
Mark Wielaard 3eb96a
+  ElfW(auxv_t) *auxv_p;
Mark Wielaard 3eb96a
+
Mark Wielaard 3eb96a
+  void *entry0 = NULL;
Mark Wielaard 3eb96a
+  void *entry1 = NULL;
Mark Wielaard 3eb96a
+
Mark Wielaard 3eb96a
+  char *platform0 = NULL;
Mark Wielaard 3eb96a
+  char *platform1 = NULL;
Mark Wielaard 3eb96a
+
Mark Wielaard 3eb96a
+  // First try the "traditional" way.
Mark Wielaard 3eb96a
+  while (*envp++ != NULL)
Mark Wielaard 3eb96a
+    ; /* Skip, skip, skip... and after finding a NULL we have the auxv. */
Mark Wielaard 3eb96a
+
Mark Wielaard 3eb96a
+  for (auxv_p = (ElfW(auxv_t) *) envp;
Mark Wielaard 3eb96a
+       auxv_p->a_type != AT_NULL;
Mark Wielaard 3eb96a
+       auxv_p++)
Mark Wielaard 3eb96a
+    {
Mark Wielaard 3eb96a
+      if (auxv_p->a_type == AT_ENTRY)
Mark Wielaard 3eb96a
+	entry0 = (void *) auxv_p->a_un.a_val;
Mark Wielaard 3eb96a
+      if (auxv_p->a_type == AT_PLATFORM)
Mark Wielaard 3eb96a
+	platform0 = strdup((char *) auxv_p->a_un.a_val);
Mark Wielaard 3eb96a
+    }
Mark Wielaard 3eb96a
+
Mark Wielaard 3eb96a
+  // Now the /proc way as often used in libraries.
Mark Wielaard 3eb96a
+  int fd = open("/proc/self/auxv", O_RDONLY);
Mark Wielaard 3eb96a
+  if (fd == -1)
Mark Wielaard 3eb96a
+    return -1;
Mark Wielaard 3eb96a
+
Mark Wielaard 3eb96a
+  while (read(fd, &auxv, sizeof(auxv)) == sizeof(auxv))
Mark Wielaard 3eb96a
+    {
Mark Wielaard 3eb96a
+      if (auxv.a_type == AT_ENTRY)
Mark Wielaard 3eb96a
+	entry1 = (void *) auxv.a_un.a_val;
Mark Wielaard 3eb96a
+      if (auxv.a_type == AT_PLATFORM)
Mark Wielaard 3eb96a
+	platform1 = strdup((char *) auxv.a_un.a_val);
Mark Wielaard 3eb96a
+    }
Mark Wielaard 3eb96a
+  close(fd);
Mark Wielaard 3eb96a
+
Mark Wielaard 3eb96a
+  if (entry0 == entry1 && entry0 != NULL)
Mark Wielaard 3eb96a
+    fprintf(stderr, "entries OK\n");
Mark Wielaard 3eb96a
+
Mark Wielaard 3eb96a
+  if (strcmp (platform0, platform1) == 0)
Mark Wielaard 3eb96a
+    fprintf(stderr, "platform OK\n");
Mark Wielaard 3eb96a
+
Mark Wielaard 3eb96a
+  free (platform0);
Mark Wielaard 3eb96a
+  free (platform1);
Mark Wielaard 3eb96a
+
Mark Wielaard 3eb96a
+  return 0;
Mark Wielaard 3eb96a
+}
Mark Wielaard 3eb96a
Index: valgrind/memcheck/tests/linux/proc-auxv.stderr.exp
Mark Wielaard 3eb96a
===================================================================
Mark Wielaard 3eb96a
--- valgrind/memcheck/tests/linux/proc-auxv.stderr.exp	(revision 0)
Mark Wielaard 3eb96a
+++ valgrind/memcheck/tests/linux/proc-auxv.stderr.exp	(working copy)
Mark Wielaard 3eb96a
@@ -0,0 +1,2 @@
Mark Wielaard 3eb96a
+entries OK
Mark Wielaard 3eb96a
+platform OK
Mark Wielaard 3eb96a
Index: valgrind/memcheck/tests/linux/proc-auxv.vgtest
Mark Wielaard 3eb96a
===================================================================
Mark Wielaard 3eb96a
--- valgrind/memcheck/tests/linux/proc-auxv.vgtest	(revision 0)
Mark Wielaard 3eb96a
+++ valgrind/memcheck/tests/linux/proc-auxv.vgtest	(working copy)
Mark Wielaard 3eb96a
@@ -0,0 +1,2 @@
Mark Wielaard 3eb96a
+prog: proc-auxv
Mark Wielaard 3eb96a
+vgopts: -q
Mark Wielaard 3eb96a
--- valgrind-3.8.1.orig/memcheck/tests/linux/Makefile.in	2012-09-18 21:19:20.000000000 +0200
Mark Wielaard 3eb96a
+++ valgrind-3.8.1/memcheck/tests/linux/Makefile.in	2012-10-03 19:18:09.543945571 +0200
Mark Wielaard 3eb96a
@@ -57,7 +57,8 @@
Mark Wielaard 3eb96a
 check_PROGRAMS = brk$(EXEEXT) capget$(EXEEXT) lsframe1$(EXEEXT) \
Mark Wielaard 3eb96a
 	lsframe2$(EXEEXT) sigqueue$(EXEEXT) stack_changes$(EXEEXT) \
Mark Wielaard 3eb96a
 	stack_switch$(EXEEXT) syscalls-2007$(EXEEXT) \
Mark Wielaard 3eb96a
-	syslog-syscall$(EXEEXT) timerfd-syscall$(EXEEXT)
Mark Wielaard 3eb96a
+	syslog-syscall$(EXEEXT) timerfd-syscall$(EXEEXT) \
Mark Wielaard 3eb96a
+	proc-auxv$(EXEEXT)
Mark Wielaard 3eb96a
 subdir = memcheck/tests/linux
Mark Wielaard 3eb96a
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
Mark Wielaard 3eb96a
 am__aclocal_m4_deps = $(top_srcdir)/configure.in
Mark Wielaard 3eb96a
@@ -79,6 +80,9 @@
Mark Wielaard 3eb96a
 lsframe2_SOURCES = lsframe2.c
Mark Wielaard 3eb96a
 lsframe2_OBJECTS = lsframe2.$(OBJEXT)
Mark Wielaard 3eb96a
 lsframe2_LDADD = $(LDADD)
Mark Wielaard 3eb96a
+proc_auxv_SOURCES = proc-auxv.c
Mark Wielaard 3eb96a
+proc_auxv_OBJECTS = proc-auxv.$(OBJEXT)
Mark Wielaard 3eb96a
+proc_auxv_LDADD = $(LDADD)
Mark Wielaard 3eb96a
 sigqueue_SOURCES = sigqueue.c
Mark Wielaard 3eb96a
 sigqueue_OBJECTS = sigqueue.$(OBJEXT)
Mark Wielaard 3eb96a
 sigqueue_LDADD = $(LDADD)
Mark Wielaard 3eb96a
@@ -106,11 +110,11 @@
Mark Wielaard 3eb96a
 	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
Mark Wielaard 3eb96a
 CCLD = $(CC)
Mark Wielaard 3eb96a
 LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
Mark Wielaard 3eb96a
-SOURCES = brk.c capget.c lsframe1.c lsframe2.c sigqueue.c \
Mark Wielaard 3eb96a
+SOURCES = brk.c capget.c lsframe1.c lsframe2.c proc-auxv.c sigqueue.c \
Mark Wielaard 3eb96a
 	stack_changes.c stack_switch.c syscalls-2007.c \
Mark Wielaard 3eb96a
 	syslog-syscall.c timerfd-syscall.c
Mark Wielaard 3eb96a
-DIST_SOURCES = brk.c capget.c lsframe1.c lsframe2.c sigqueue.c \
Mark Wielaard 3eb96a
-	stack_changes.c stack_switch.c syscalls-2007.c \
Mark Wielaard 3eb96a
+DIST_SOURCES = brk.c capget.c lsframe1.c lsframe2.c proc-auxv.c \
Mark Wielaard 3eb96a
+	sigqueue.c stack_changes.c stack_switch.c syscalls-2007.c \
Mark Wielaard 3eb96a
 	syslog-syscall.c timerfd-syscall.c
Mark Wielaard 3eb96a
 ETAGS = etags
Mark Wielaard 3eb96a
 CTAGS = ctags
Mark Wielaard 3eb96a
@@ -404,7 +408,8 @@
Mark Wielaard 3eb96a
 	syscalls-2007.vgtest syscalls-2007.stderr.exp \
Mark Wielaard 3eb96a
 	syslog-syscall.vgtest syslog-syscall.stderr.exp \
Mark Wielaard 3eb96a
 	timerfd-syscall.vgtest timerfd-syscall.stderr.exp \
Mark Wielaard 3eb96a
-	with-space.stderr.exp with-space.stdout.exp with-space.vgtest
Mark Wielaard 3eb96a
+	with-space.stderr.exp with-space.stdout.exp with-space.vgtest \
Mark Wielaard 3eb96a
+	proc-auxv.vgtest proc-auxv.stderr.exp
Mark Wielaard 3eb96a
 
Mark Wielaard 3eb96a
 stack_switch_LDADD = -lpthread
Mark Wielaard 3eb96a
 timerfd_syscall_LDADD = -lrt
Mark Wielaard 3eb96a
@@ -457,6 +462,9 @@
Mark Wielaard 3eb96a
 lsframe2$(EXEEXT): $(lsframe2_OBJECTS) $(lsframe2_DEPENDENCIES) 
Mark Wielaard 3eb96a
 	@rm -f lsframe2$(EXEEXT)
Mark Wielaard 3eb96a
 	$(LINK) $(lsframe2_OBJECTS) $(lsframe2_LDADD) $(LIBS)
Mark Wielaard 3eb96a
+proc-auxv$(EXEEXT): $(proc_auxv_OBJECTS) $(proc_auxv_DEPENDENCIES) 
Mark Wielaard 3eb96a
+	@rm -f proc-auxv$(EXEEXT)
Mark Wielaard 3eb96a
+	$(LINK) $(proc_auxv_OBJECTS) $(proc_auxv_LDADD) $(LIBS)
Mark Wielaard 3eb96a
 sigqueue$(EXEEXT): $(sigqueue_OBJECTS) $(sigqueue_DEPENDENCIES) 
Mark Wielaard 3eb96a
 	@rm -f sigqueue$(EXEEXT)
Mark Wielaard 3eb96a
 	$(LINK) $(sigqueue_OBJECTS) $(sigqueue_LDADD) $(LIBS)
Mark Wielaard 3eb96a
@@ -486,6 +494,7 @@
Mark Wielaard 3eb96a
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/capget.Po@am__quote@
Mark Wielaard 3eb96a
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lsframe1.Po@am__quote@
Mark Wielaard 3eb96a
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lsframe2.Po@am__quote@
Mark Wielaard 3eb96a
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/proc-auxv.Po@am__quote@
Mark Wielaard 3eb96a
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sigqueue.Po@am__quote@
Mark Wielaard 3eb96a
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stack_changes.Po@am__quote@
Mark Wielaard 3eb96a
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stack_switch.Po@am__quote@