Procházet zdrojové kódy

PIE support for i386

Rich Felker před 13 roky
rodič
revize
83023d1b50
3 změnil soubory, kde provedl 25 přidání a 1 odebrání
  1. 1 1
      Makefile
  2. 0 0
      crt/Scrt1.c
  3. 24 0
      crt/i386/Scrt1.s

+ 1 - 1
Makefile

@@ -39,7 +39,7 @@ ALL_INCLUDES = $(sort $(wildcard include/*.h include/*/*.h) $(GENH))
 
 EMPTY_LIB_NAMES = m rt pthread crypt util xnet resolv dl
 EMPTY_LIBS = $(EMPTY_LIB_NAMES:%=lib/lib%.a)
-CRT_LIBS = lib/crt1.o lib/crti.o lib/crtn.o
+CRT_LIBS = lib/crt1.o lib/Scrt1.o lib/crti.o lib/crtn.o
 STATIC_LIBS = lib/libc.a
 SHARED_LIBS = lib/libc.so
 TOOL_LIBS = lib/musl-gcc.specs

+ 0 - 0
crt/Scrt1.c


+ 24 - 0
crt/i386/Scrt1.s

@@ -0,0 +1,24 @@
+.weak _init
+.weak _fini
+.text
+.global _start
+_start:
+	xorl %ebp,%ebp
+	popl %ecx
+	movl %esp,%eax
+	andl $-16,%esp
+	pushl %esp
+	pushl %esp
+	pushl %edx
+	call 1f
+1:	addl $_GLOBAL_OFFSET_TABLE_,(%esp)
+	pop %ebx
+	call 1f
+1:	addl $[_fini-.],(%esp)
+	call 1f
+1:	addl $[_init-.],(%esp)
+	pushl %eax
+	pushl %ecx
+	pushl main@GOT(%ebx)
+	call __libc_start_main@plt
+1:	jmp 1b