浏览代码

Pass _dl_fini function ptr to __uClibc_start_main().

To actually use it, one must define _DL_DO_FINI_IN_LIBC globally.
That will also break ABI for apps linked with previous version of crtX.S.
They must be relinked with this version to work again.
Joakim Tjernlund 21 年之前
父节点
当前提交
748c2fe424
共有 1 个文件被更改,包括 2 次插入1 次删除
  1. 2 1
      libc/sysdeps/linux/i386/crt0.S

+ 2 - 1
libc/sysdeps/linux/i386/crt0.S

@@ -55,6 +55,7 @@ _start:
 	popl %ecx	/* Store argc into %ecx */
 	movl %esp,%ebx  /* Store argv into ebx */
 	movl %esp,%eax  /* Store argv into eax as well*/
+	movl %edx,%esi	/* Store edx(FINI ptr) in %esi */
 	movl %ecx,%edx	/* Stick argc into %edx so we can do some math in a sec */
 	leal 4(%eax,%edx,4),%eax
 
@@ -81,7 +82,7 @@ _start:
 	pop %edx
 	addl $_GLOBAL_OFFSET_TABLE_+[.-.L0],%edx
 #endif
-
+	pushl %esi	/* Push FINI pointer */
 #if (defined L_crt1 || defined L_Scrt1) && defined __UCLIBC_CTOR_DTOR__
 	/* Push .init and .fini arguments to __uClibc_start_main() on the stack */
 #ifdef L_Scrt1