about summary refs log tree commit diff
diff options
context:
space:
mode:
authorPaul Pluzhnikov <ppluzhnikov@google.com>2013-11-18 15:11:55 -0800
committerPaul Pluzhnikov <ppluzhnikov@google.com>2013-11-18 15:11:55 -0800
commit5c3499508eca3929635ddce90749bfc8ca7d0763 (patch)
tree2efd7d960dc7dcedcd1245a861475b8bf95c65fb
parent038b56f3dac74dcd8988e00092a21315a6b66c41 (diff)
downloadglibc-5c3499508eca3929635ddce90749bfc8ca7d0763.tar.gz
glibc-5c3499508eca3929635ddce90749bfc8ca7d0763.tar.xz
glibc-5c3499508eca3929635ddce90749bfc8ca7d0763.zip
Adjust AT_EXECFN when using explicit loader invocation.
2013-11-18  Paul Pluzhnikov  <ppluzhnikov@google.com>

	* elf/Makefile (tst-auxv): New test.
	* elf/tst-auxv.c: New
	* elf/rtld.c (dl_main): Adjust AT_EXECFN
-rw-r--r--ChangeLog6
-rw-r--r--elf/Makefile3
-rw-r--r--elf/rtld.c3
3 files changed, 11 insertions, 1 deletions
diff --git a/ChangeLog b/ChangeLog
index a37896c23c..4042e3b017 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2013-11-18  Paul Pluzhnikov  <ppluzhnikov@google.com>
+
+	* elf/Makefile (tst-auxv): New test.
+	* elf/tst-auxv.c: New
+	* elf/rtld.c (dl_main): Adjust AT_EXECFN
+
 2013-11-18  Joseph Myers  <joseph@codesourcery.com>
 
 	* include/libc-symbols.h (__hidden_proto): Add argument "thread".
diff --git a/elf/Makefile b/elf/Makefile
index 27d249b2ff..c6626e14bf 100644
--- a/elf/Makefile
+++ b/elf/Makefile
@@ -119,7 +119,8 @@ $(inst_auditdir)/sotruss-lib.so: $(objpfx)sotruss-lib.so $(+force)
 endif
 
 tests = tst-tls1 tst-tls2 tst-tls9 tst-leaks1 \
-	tst-array1 tst-array2 tst-array3 tst-array4 tst-array5
+	tst-array1 tst-array2 tst-array3 tst-array4 tst-array5 \
+	tst-auxv
 tests-static = tst-tls1-static tst-tls2-static tst-stackguard1-static \
 	       tst-leaks1-static tst-array1-static tst-array5-static \
 	       tst-ptrguard1-static
diff --git a/elf/rtld.c b/elf/rtld.c
index c5a6538628..3d207a3fa0 100644
--- a/elf/rtld.c
+++ b/elf/rtld.c
@@ -1118,6 +1118,9 @@ of this helper program; chances are you did not intend to run this program.\n\
 	  case AT_ENTRY:
 	    av->a_un.a_val = *user_entry;
 	    break;
+	  case AT_EXECFN:
+	    av->a_un.a_val = (uintptr_t) _dl_argv[0];
+	    break;
 	  }
 #endif
     }