This is the mail archive of the glibc-cvs@sourceware.org mailing list for the glibc project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

GNU C Library master sources branch master updated. glibc-2.21-561-gfa9fef1


This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "GNU C Library master sources".

The branch, master has been updated
       via  fa9fef1f9b683582892fe39c4d8cd7b164b3388d (commit)
      from  213a2be7b4f08aba6d2e863106fa6c6b123f2360 (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
http://sourceware.org/git/gitweb.cgi?p=glibc.git;a=commitdiff;h=fa9fef1f9b683582892fe39c4d8cd7b164b3388d

commit fa9fef1f9b683582892fe39c4d8cd7b164b3388d
Author: H.J. Lu <hjl.tools@gmail.com>
Date:   Tue Jul 7 05:09:16 2015 -0700

    Add a testcase for i386 LD_AUDIT
    
    This patch adds a testcase for i386 LD_AUDIT to check function return
    and parameters passed in registers.
    
    	* sysdeps/i386/Makefile (tests)[elf]: Add tst-audit3.
    	(modules-names): Add tst-auditmod3a tst-auditmod3b.
    	($(objpfx)tst-audit3): New rule.
    	($(objpfx)tst-audit3.out): Likewise.
    	* sysdeps/i386/tst-audit3.c: New file.
    	* sysdeps/i386/tst-audit3.h: Likewise.
    	* sysdeps/i386/tst-auditmod3a.c: Likewise.
    	* sysdeps/i386/tst-auditmod3b.c: Likewise.

diff --git a/ChangeLog b/ChangeLog
index c6c3356..7348ef4 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,14 @@
+2015-07-07  H.J. Lu  <hongjiu.lu@intel.com>
+
+	* sysdeps/i386/Makefile (tests)[elf]: Add tst-audit3.
+	(modules-names): Add tst-auditmod3a tst-auditmod3b.
+	($(objpfx)tst-audit3): New rule.
+	($(objpfx)tst-audit3.out): Likewise.
+	* sysdeps/i386/tst-audit3.c: New file.
+	* sysdeps/i386/tst-audit3.h: Likewise.
+	* sysdeps/i386/tst-auditmod3a.c: Likewise.
+	* sysdeps/i386/tst-auditmod3b.c: Likewise.
+
 2015-07-07  Torvald Riegel  <triegel@redhat.com>
 
 	[BZ #18633]
diff --git a/sysdeps/i386/Makefile b/sysdeps/i386/Makefile
index c8af591..910edff 100644
--- a/sysdeps/i386/Makefile
+++ b/sysdeps/i386/Makefile
@@ -66,6 +66,13 @@ endif
 
 ifeq ($(subdir),elf)
 sysdep-dl-routines += tlsdesc dl-tlsdesc
+
+tests += tst-audit3
+modules-names += tst-auditmod3a tst-auditmod3b
+
+$(objpfx)tst-audit3: $(objpfx)tst-auditmod3a.so
+$(objpfx)tst-audit3.out: $(objpfx)tst-auditmod3b.so
+tst-audit3-ENV = LD_AUDIT=$(objpfx)tst-auditmod3b.so
 endif
 
 ifeq ($(subdir),csu)
diff --git a/sysdeps/i386/tst-audit3.c b/sysdeps/i386/tst-audit3.c
new file mode 100644
index 0000000..cb2fb90
--- /dev/null
+++ b/sysdeps/i386/tst-audit3.c
@@ -0,0 +1,37 @@
+/* Test case for i386 preserved registers in dynamic linker.
+   Copyright (C) 2015 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#include <stdlib.h>
+#include "tst-audit3.h"
+
+static int
+do_test (void)
+{
+  long long ll = audit1_test (1, 2, 3);
+  if (ll != 30)
+    abort ();
+
+  float f = audit2_test (1, 2, 3);
+  if (f != 30)
+    abort ();
+
+  return 0;
+}
+
+#define TEST_FUNCTION do_test ()
+#include "../../test-skeleton.c"
diff --git a/sysdeps/i386/tst-audit3.h b/sysdeps/i386/tst-audit3.h
new file mode 100644
index 0000000..9395605
--- /dev/null
+++ b/sysdeps/i386/tst-audit3.h
@@ -0,0 +1,20 @@
+/* Test case for i386 preserved registers in dynamic linker.
+   Copyright (C) 2015 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+extern long long audit1_test (int, int, int) __attribute__ ((regparm(3)));
+extern float audit2_test (int, int, int) __attribute__ ((regparm(3)));
diff --git a/sysdeps/i386/tst-auditmod3a.c b/sysdeps/i386/tst-auditmod3a.c
new file mode 100644
index 0000000..72fcfa7
--- /dev/null
+++ b/sysdeps/i386/tst-auditmod3a.c
@@ -0,0 +1,38 @@
+/* Test case for i386 preserved registers in dynamic linker.
+   Copyright (C) 2015 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#include <stdlib.h>
+#include "tst-audit3.h"
+
+long long
+__attribute__ ((regparm(3)))
+audit1_test (int i, int j, int k)
+{
+  if (i != 1 || j != 2 || k != 3)
+    abort ();
+  return 30;
+}
+
+float
+__attribute__ ((regparm(3)))
+audit2_test (int i, int j, int k)
+{
+  if (i != 1 || j != 2 || k != 3)
+    abort ();
+  return 30;
+}
diff --git a/sysdeps/i386/tst-auditmod3b.c b/sysdeps/i386/tst-auditmod3b.c
new file mode 100644
index 0000000..5b26a13
--- /dev/null
+++ b/sysdeps/i386/tst-auditmod3b.c
@@ -0,0 +1,185 @@
+/* Test case for i386 preserved registers in dynamic linker.
+   Copyright (C) 2015 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#include <dlfcn.h>
+#include <stdint.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <stddef.h>
+#include <string.h>
+#include <unistd.h>
+#include <link.h>
+#include <bits/wordsize.h>
+#include <gnu/lib-names.h>
+
+unsigned int
+la_version (unsigned int v)
+{
+  setlinebuf (stdout);
+
+  printf ("version: %u\n", v);
+
+  char buf[20];
+  sprintf (buf, "%u", v);
+
+  return v;
+}
+
+void
+la_activity (uintptr_t *cookie, unsigned int flag)
+{
+  const char *flagstr;
+  switch (flag)
+    {
+    case LA_ACT_CONSISTENT:
+      flagstr = "consistent";
+      break;
+    case LA_ACT_ADD:
+      flagstr = "add";
+      break;
+    case LA_ACT_DELETE:
+      flagstr = "delete";
+      break;
+    default:
+      printf ("activity: unknown activity %u\n", flag);
+      return;
+    }
+  printf ("activity: %s\n", flagstr);
+}
+
+char *
+la_objsearch (const char *name, uintptr_t *cookie, unsigned int flag)
+{
+  const char *flagstr;
+  switch (flag)
+    {
+    case LA_SER_ORIG:
+      flagstr = "LA_SET_ORIG";
+      break;
+    case LA_SER_LIBPATH:
+      flagstr = "LA_SER_LIBPATH";
+      break;
+    case LA_SER_RUNPATH:
+      flagstr = "LA_SER_RUNPATH";
+      break;
+    case LA_SER_CONFIG:
+      flagstr = "LA_SER_CONFIG";
+      break;
+    case LA_SER_DEFAULT:
+      flagstr = "LA_SER_DEFAULT";
+    case LA_SER_SECURE:
+      flagstr = "LA_SER_SECURE";
+      break;
+    default:
+      printf ("objsearch: %s, unknown flag %d\n", name, flag);
+      return (char *) name;
+    }
+
+  printf ("objsearch: %s, %s\n", name, flagstr);
+  return (char *) name;
+}
+
+unsigned int
+la_objopen (struct link_map *l, Lmid_t lmid, uintptr_t *cookie)
+{
+  printf ("objopen: %ld, %s\n", lmid, l->l_name);
+
+  return 3;
+}
+
+void
+la_preinit (uintptr_t *cookie)
+{
+  printf ("preinit\n");
+}
+
+unsigned int
+la_objclose  (uintptr_t *cookie)
+{
+  printf ("objclose\n");
+  return 0;
+}
+
+uintptr_t
+la_symbind32 (Elf32_Sym *sym, unsigned int ndx, uintptr_t *refcook,
+	      uintptr_t *defcook, unsigned int *flags, const char *symname)
+{
+  printf ("symbind32: symname=%s, st_value=%#lx, ndx=%u, flags=%u\n",
+	  symname, (long int) sym->st_value, ndx, *flags);
+
+  return sym->st_value;
+}
+
+#include "tst-audit.h"
+
+ElfW(Addr)
+pltenter (ElfW(Sym) *sym, unsigned int ndx, uintptr_t *refcook,
+	  uintptr_t *defcook, La_regs *regs, unsigned int *flags,
+	  const char *symname, long int *framesizep)
+{
+  printf ("pltenter: symname=%s, st_value=%#lx, ndx=%u, flags=%u\n",
+	  symname, (long int) sym->st_value, ndx, *flags);
+
+  if (strcmp (symname, "audit1_test") == 0
+      || strcmp (symname, "audit2_test") == 0)
+    {
+      if (regs->lr_eax != 1
+	  || regs->lr_edx != 2
+	  || regs->lr_ecx != 3)
+	abort ();
+
+      *framesizep = 200;
+    }
+
+  return sym->st_value;
+}
+
+unsigned int
+pltexit (ElfW(Sym) *sym, unsigned int ndx, uintptr_t *refcook,
+	 uintptr_t *defcook, const La_regs *inregs, La_retval *outregs,
+	 const char *symname)
+{
+  printf ("pltexit: symname=%s, st_value=%#lx, ndx=%u, retval=%tu\n",
+	  symname, (long int) sym->st_value, ndx,
+	  (ptrdiff_t) outregs->int_retval);
+
+  if (strcmp (symname, "audit1_test") == 0
+      || strcmp (symname, "audit2_test") == 0)
+    {
+      if (inregs->lr_eax != 1
+	  || inregs->lr_edx != 2
+	  || inregs->lr_ecx != 3)
+	abort ();
+
+      if (strcmp (symname, "audit1_test") == 0)
+	{
+	  long long x = ((unsigned long long) outregs->lrv_eax
+			 | (unsigned long long) outregs->lrv_edx << 32);
+
+	  if (x != 30)
+	    abort ();
+	}
+      else if (strcmp (symname, "audit2_test") == 0)
+	{
+	  if (outregs->lrv_st0 != 30)
+	    abort ();
+	}
+    }
+
+  return 0;
+}

-----------------------------------------------------------------------

Summary of changes:
 ChangeLog                     |   11 +++
 sysdeps/i386/Makefile         |    7 ++
 sysdeps/i386/tst-audit3.c     |   37 ++++++++
 sysdeps/i386/tst-audit3.h     |   20 +++++
 sysdeps/i386/tst-auditmod3a.c |   38 +++++++++
 sysdeps/i386/tst-auditmod3b.c |  185 +++++++++++++++++++++++++++++++++++++++++
 6 files changed, 298 insertions(+), 0 deletions(-)
 create mode 100644 sysdeps/i386/tst-audit3.c
 create mode 100644 sysdeps/i386/tst-audit3.h
 create mode 100644 sysdeps/i386/tst-auditmod3a.c
 create mode 100644 sysdeps/i386/tst-auditmod3b.c


hooks/post-receive
-- 
GNU C Library master sources


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]