uclibc initfini specs

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



How should the init and fini functions work? Im trying to build uclibc
with gcc-3.4. the initfini.S generated from initfini.c is different
from how those generated with gcc-3.3.2. I tried creating the crti.S
and crtn.S files by hand. My test programs seg fault when run though.
	.file	"initfini.c"
#APP
	
/*@HEADER_ENDS*/
	
/*@_init_PROLOG_BEGINS*/
	.section .init
	
/*@_init_EPILOG_ENDS*/
	
/*@_fini_PROLOG_BEGINS*/
	.section .fini
	
/*@_fini_EPILOG_ENDS*/
	
/*@TRAILER_BEGINS*/
#NO_APP
	.text
.globl dummy
	.type	dummy, @function
dummy:
	pushl	%ebp
	movl	%esp, %ebp
	movl	8(%ebp), %eax
	testl	%eax, %eax
	je	.L1
	call	*%eax
.L1:
	popl	%ebp
	ret
	.size	dummy, .-dummy
.globl _fini
	.type	_fini, @function
_fini:
	pushl	%ebp
	movl	%esp, %ebp
	pushl	%ebx
	call	__i686.get_pc_thunk.bx
	addl	$_GLOBAL_OFFSET_TABLE_, %ebx
#APP
	ALIGN
	END_FINI
	
/*@_fini_PROLOG_ENDS*/
#NO_APP
	call	i_am_not_a_leaf2@PLT
#APP
	
/*@_fini_EPILOG_BEGINS*/
#NO_APP
	popl	%ebx
	popl	%ebp
	ret
	.size	_fini, .-_fini
.globl _init
	.type	_init, @function
_init:
	pushl	%ebp
	movl	%esp, %ebp
	pushl	%ebx
	call	__i686.get_pc_thunk.bx
	addl	$_GLOBAL_OFFSET_TABLE_, %ebx
#APP
	
/*@_init_PROLOG_PAUSES*/
#NO_APP
	call	i_am_not_a_leaf@PLT
#APP
	
/*@_init_PROLOG_UNPAUSES*/
	ALIGN
	END_INIT
	
/*@_init_PROLOG_ENDS*/
	
/*@_init_EPILOG_BEGINS*/
#NO_APP
	popl	%ebx
	popl	%ebp
	ret
	.size	_init, .-_init
	.section	.gnu.linkonce.t.__i686.get_pc_thunk.bx,"ax",@progbits
.globl __i686.get_pc_thunk.bx
	.hidden	__i686.get_pc_thunk.bx
	.type	__i686.get_pc_thunk.bx, @function
__i686.get_pc_thunk.bx:
	movl	(%esp), %ebx
	ret
	.section	.note.GNU-stack,"",@progbits
	.ident	"GCC: (GNU) 3.4 20031029 (experimental)"
	.file	"initfini.c"
	
	.section .init
	
.globl _init
        .hidden _init
	.type	_init, @function
_init:
	pushl	%ebp
	movl	%esp, %ebp
	pushl	%ebx
	call	__i686.get_pc_thunk.bx
	addl	$_GLOBAL_OFFSET_TABLE_, %ebx
	
	.section .fini
	
.globl _fini
        .hidden _fini
	.type	_fini, @function
_fini:
	pushl	%ebp
	movl	%esp, %ebp
	pushl	%ebx
	call	__i686.get_pc_thunk.bx
	addl	$_GLOBAL_OFFSET_TABLE_, %ebx
	
	.section	.gnu.linkonce.t.__i686.get_pc_thunk.bx,"ax",@progbits
.globl __i686.get_pc_thunk.bx
	.hidden	__i686.get_pc_thunk.bx
	.type	__i686.get_pc_thunk.bx, @function
__i686.get_pc_thunk.bx:
	movl	(%esp), %ebx
	ret
	
	.ident	"GCC: (GNU) 3.4 20031029 (experimental)"
	.file	"initfini.c"
	
	.section .init
.globl _init
	.type	_init, @function
	popl	%ebx
	popl	%ebp
	ret
	.size	_init, .-_init
	
	.section .fini
.globl _fini
	.type	_fini, @function
	popl	%ebx
	popl	%ebp
	ret
	.size	_fini, .-_fini
	
	.ident	"GCC: (GNU) 3.4 20031029 (experimental)"

[Index of Archives]     [Linux C Programming]     [Linux Kernel]     [eCos]     [Fedora Development]     [Fedora Announce]     [Autoconf]     [The DWARVES Debugging Tools]     [Yosemite Campsites]     [Yosemite News]     [Linux GCC]

  Powered by Linux