summary refs log tree commit diff
diff options
context:
space:
mode:
authorFlorian Weimer <fweimer@redhat.com>2017-08-14 12:29:21 +0200
committerFlorian Weimer <fweimer@redhat.com>2017-08-14 15:08:48 +0200
commit630bf4916f10bdba28a99480ef32170b977ea5fc (patch)
tree7712de6ab55a8351a22253d6ee234092297afbab
parent9fa7449b35244645acaa450046b37678f46fe0f1 (diff)
downloadglibc-630bf4916f10bdba28a99480ef32170b977ea5fc.tar.gz
glibc-630bf4916f10bdba28a99480ef32170b977ea5fc.tar.xz
glibc-630bf4916f10bdba28a99480ef32170b977ea5fc.zip
_dl_start: Remove internal_function attribute
The i386 startup code needs adjusting because it calls the function
and the ABI has changed.
-rw-r--r--ChangeLog6
-rw-r--r--elf/rtld.c2
-rw-r--r--sysdeps/i386/dl-machine.h4
3 files changed, 10 insertions, 2 deletions
diff --git a/ChangeLog b/ChangeLog
index bf655ed0b4..74ad96d800 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,11 @@
 2017-08-14  Florian Weimer  <fweimer@redhat.com>
 
+	* elf/rtld.c (_dl_start): Remove internal_function.
+	* sysdeps/i386/dl-machine.h (RTLD_START): Adjust call to
+	_dl_start.
+
+2017-08-14  Florian Weimer  <fweimer@redhat.com>
+
 	* elf/dl-fini.c (_dl_fini): Remove internal_function
 	* sysdeps/generic/ldsodefs.h (_dl_fini): Likewise.
 
diff --git a/elf/rtld.c b/elf/rtld.c
index 1772f89ea8..d8e75c02e6 100644
--- a/elf/rtld.c
+++ b/elf/rtld.c
@@ -439,7 +439,7 @@ _dl_start_final (void *arg, struct dl_start_final_info *info)
   return start_addr;
 }
 
-static ElfW(Addr) __attribute_used__ internal_function
+static ElfW(Addr) __attribute_used__
 _dl_start (void *arg)
 {
 #ifdef DONT_USE_BOOTSTRAP_MAP
diff --git a/sysdeps/i386/dl-machine.h b/sysdeps/i386/dl-machine.h
index 9ee9d02c36..924de953b7 100644
--- a/sysdeps/i386/dl-machine.h
+++ b/sysdeps/i386/dl-machine.h
@@ -150,9 +150,11 @@ extern ElfW(Addr) _dl_profile_fixup (struct link_map *l,
 .globl _start\n\
 .globl _dl_start_user\n\
 _start:\n\
-	# Note that _dl_start gets the parameter in %eax.\n\
 	movl %esp, %eax\n\
+        subl $12, %esp\n\
+        pushl %eax\n\
 	call _dl_start\n\
+        addl $16, %esp\n\
 _dl_start_user:\n\
 	# Save the user entry point address in %edi.\n\
 	movl %eax, %edi\n\