Przeglądaj źródła

merge updates from glibc and fix up to work again

Mike Frysinger 19 lat temu
rodzic
commit
df48714b9b
2 zmienionych plików z 43 dodań i 47 usunięć
  1. 5 5
      libc/sysdeps/linux/alpha/Makefile
  2. 38 42
      libc/sysdeps/linux/alpha/crt1.S

+ 5 - 5
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
 

+ 38 - 42
libc/sysdeps/linux/alpha/crt0.S → 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