diff options
Diffstat (limited to 'libc')
| -rw-r--r-- | libc/sysdeps/linux/alpha/Makefile | 10 | ||||
| -rw-r--r-- | libc/sysdeps/linux/alpha/crt1.S (renamed from libc/sysdeps/linux/alpha/crt0.S) | 80 | 
2 files changed, 43 insertions, 47 deletions
diff --git a/libc/sysdeps/linux/alpha/Makefile b/libc/sysdeps/linux/alpha/Makefile index 5c7310b38..c37858380 100644 --- a/libc/sysdeps/linux/alpha/Makefile +++ b/libc/sysdeps/linux/alpha/Makefile @@ -19,8 +19,8 @@  TOPDIR=../../../../  include $(TOPDIR)Rules.mak -CRT0_SRC = crt0.S -CRT0_OBJ = crt0.o crt1.o +CRT_SRC = crt1.S +CRT_OBJ = crt1.o  CTOR_TARGETS=$(TOPDIR)lib/crti.o $(TOPDIR)lib/crtn.o  SSRC=__longjmp.S brk.S bsd-_setjmp.S bsd-setjmp.S clone.S \ @@ -36,12 +36,12 @@ OBJ_LIST=../../../obj.sysdeps.$(TARGET_ARCH)  all: $(OBJ_LIST) -$(OBJ_LIST): $(OBJS) $(CRT0_OBJ) $(CTOR_TARGETS) +$(OBJ_LIST): $(OBJS) $(CRT_OBJ) $(CTOR_TARGETS)  	echo $(patsubst %, sysdeps/linux/$(TARGET_ARCH)/%, $(OBJS)) > $(OBJ_LIST)  	$(INSTALL) -d $(TOPDIR)lib/ -	cp $(CRT0_OBJ) $(TOPDIR)lib/ +	cp $(CRT_OBJ) $(TOPDIR)lib/ -$(CRT0_OBJ): $(CRT0_SRC) +$(CRT_OBJ): $(CRT_SRC)  	$(CC) $(ASFLAGS) -DL_$* $< -c -o $*.o  	$(STRIPTOOL) -x -R .note -R .comment $*.o diff --git a/libc/sysdeps/linux/alpha/crt0.S b/libc/sysdeps/linux/alpha/crt1.S index e8d0c5498..0831ecf6f 100644 --- a/libc/sysdeps/linux/alpha/crt0.S +++ b/libc/sysdeps/linux/alpha/crt1.S @@ -19,66 +19,62 @@     02111-1307 USA.  */  #include <features.h> +#include <asm/regdef.h> -#define a0      $16     /* argument registers (caller-saved) */ -#define a1      $17 -#define a2      $18 -#define a3      $19 -#define a4      $20 -#define a5      $21 -#define ra      $26     /* return address register */ - -#define s6      $15 -#define fp      s6      /* frame-pointer (s6 in frame-less procedures) */ -#define gp      $29     /* global pointer */ -#define sp      $30     /* stack pointer */ -#define zero    $31     /* reads as zero, writes are noops */ - -	.text -	.align 3 -	.global _start -	.ent _start, 0 -	.type _start,@function -#if ! defined(__UCLIBC_CTOR_DTOR__) -	.weak	_init -	.weak	_fini +.text +.global _start +.ent    _start,0 +.type   _start,%function +#if defined(__UCLIBC_CTOR_DTOR__) +.type	_init,%function +.type	_fini,%function +#else +.weak   _init +.weak   _fini  #endif -	.type	__uClibc_main,@function +.type   __uClibc_main,%function  /* Stick in a dummy reference to main(), so that if an application   * is linking when the main() function is in a static library (.a)   * we can be sure that main() actually gets linked in */ -	.type	main,@function +.type   main,%function  _start: -	.frame fp, 0, zero -	mov	zero, fp +	.frame	$15, 0, $15  	br	gp, 1f  1:	ldgp	gp, 0(gp)  	subq	sp, 16, sp +	mov	0, $15  	.prologue 0 -	ldl	a0, 16(sp)	/* get argc */ -	lda	a1, 24(sp)	/* get argv */ -	addq    a0, 1, a2 -	s8addq  a2, a1, a2      /* Calculate environ */ +	/* Load address of the user's main function.  */ +	lda	a0, main + +	ldl	a1, 16(sp)	/* get argc */ +	lda	a2, 24(sp)	/* get argv */ + +	/* Load address of our own entry points to .fini and .init.  */ +	lda	a3, _init +	lda	a4, _fini -  /* Call the user's main function, and exit with its value. -     But let the libc call main.  */ +	/* Store address of the shared library termination function.  */ +	mov	v0, a5 + +	/* Provide the highest stack address to the user code.  */ +	stq	sp, 0(sp) + +	/* Call the user's main function, and exit with its value. +	 * But let the libc call main.  */  	jsr	ra, __uClibc_main -  /* Die very horribly if exit returns.  Call_pal hlt is callable from -     kernel mode only; this will result in an illegal instruction trap.  */ +	/* Die very horribly if exit returns.  Call_pal hlt is callable from +	 * kernel mode only; this will result in an illegal instruction trap.  */  	call_pal 0  	.end _start -/* For ECOFF backwards compatibility. */ -.weak    __start; -	__start    =   _start -  /* Define a symbol for the first piece of initialized data.  */ -	.data -	.globl __data_start +.data +.global __data_start  __data_start: -	.long 0 -	.weak data_start +.long 0 +.weak data_start  	data_start = __data_start  | 
