ソースを参照

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