svn commit: r203263 - projects/capabilities8/lib/csu/i386-elf

Robert Watson rwatson at FreeBSD.org
Sun Jan 31 01:30:52 UTC 2010


Author: rwatson
Date: Sun Jan 31 01:30:51 2010
New Revision: 203263
URL: http://svn.freebsd.org/changeset/base/203263

Log:
  Merge c173990, c173992, and c173993 from the p4 TrustedBSD Capabilities
  branch to capabilities8:
  
    Correct use of --localizesymbol when constructing capability mode
    bits of csu on i386.
  
    Comment out profiling-related code in capstart on i386 until we
    work out how to deal with this.
  
    Report capability-mode C runtime to i386, which was apparently lost
    during integration of a rearrangement of this code.
  
  Sponsored by:	Google, Inc.

Modified:
  projects/capabilities8/lib/csu/i386-elf/Makefile
  projects/capabilities8/lib/csu/i386-elf/crt1_c.c
  projects/capabilities8/lib/csu/i386-elf/crt1_s.S

Modified: projects/capabilities8/lib/csu/i386-elf/Makefile
==============================================================================
--- projects/capabilities8/lib/csu/i386-elf/Makefile	Sat Jan 30 23:59:40 2010	(r203262)
+++ projects/capabilities8/lib/csu/i386-elf/Makefile	Sun Jan 31 01:30:51 2010	(r203263)
@@ -21,13 +21,13 @@ gcrt1.o: gcrt1_c.o crt1_s.o
 
 crt1.o:	crt1_c.o crt1_s.o
 	${LD} ${LDFLAGS} -o crt1.o -r crt1_s.o crt1_c.o
-	objcopy --localize-symbol _start1 crt1.o
+	objcopy --localize-symbol _start1 --localize-symbol _capstart1 crt1.o
 
 Scrt1_c.o:	crt1_c.c
 	${CC} ${CFLAGS} -DGCRT -fPIC -DPIC -c -o Scrt1_c.o ${.CURDIR}/crt1_c.c
 
 Scrt1.o: Scrt1_c.o crt1_s.o
 	${LD} ${LDFLAGS} -o Scrt1.o -r crt1_s.o Scrt1_c.o
-	objcopy --localize-symbol _start1 Scrt1.o
+	objcopy --localize-symbol _start1 --localize-symbol _capstart1 Scrt1.o
 
 .include <bsd.prog.mk>

Modified: projects/capabilities8/lib/csu/i386-elf/crt1_c.c
==============================================================================
--- projects/capabilities8/lib/csu/i386-elf/crt1_c.c	Sat Jan 30 23:59:40 2010	(r203262)
+++ projects/capabilities8/lib/csu/i386-elf/crt1_c.c	Sun Jan 31 01:30:51 2010	(r203263)
@@ -59,6 +59,7 @@ char **environ;
 const char *__progname = "";
 
 void _start1(fptr, int, char *[]) __dead2;
+void _capstart1(fptr, int, char *[]) __dead2;
 
 /* The entry function, C part. */
 void
@@ -93,23 +94,15 @@ __asm__("eprol:");
 	exit( main(argc, argv, env) );
 }
 
+__asm(".hidden	_start1");
 
 /* The Capsicum entry function. */
 void
-_capstart(char *ap, ...)
+_capstart1(fptr cleanup, int argc, char *argv[])
 {
-	fptr cleanup;
-	int argc;
-	char **argv;
 	char **env;
 	const char *s;
 
-#ifdef __GNUC__
-	__asm__("and $0xfffffff0,%esp");
-#endif
-	cleanup = get_rtld_cleanup();
-	argv = &ap;
-	argc = *(long *)(void *)(argv - 1);
 	env = argv + argc + 1;
 	environ = env;
 	if (argc > 0 && argv[0] != NULL) {
@@ -129,11 +122,11 @@ _capstart(char *ap, ...)
 #endif
 	atexit(_fini);
 #ifdef GCRT
-/*	monstartup(&eprol, &etext);
-__asm__("eprol:");*/
+/* XXXCAP:	monstartup(&eprol, &etext); */
+/* XXXCAP: __asm__("eprol:"); */
 #endif
 	_init();
 	exit( cap_main(argc, argv, env) );
 }
 
-__asm(".hidden	_start1");
+__asm(".hidden	_capstart1");

Modified: projects/capabilities8/lib/csu/i386-elf/crt1_s.S
==============================================================================
--- projects/capabilities8/lib/csu/i386-elf/crt1_s.S	Sat Jan 30 23:59:40 2010	(r203262)
+++ projects/capabilities8/lib/csu/i386-elf/crt1_s.S	Sun Jan 31 01:30:51 2010	(r203263)
@@ -41,4 +41,17 @@ _start:	xorl	%ebp,%ebp
 	call	_start1
 	.size	_start, . - _start
 
+	.globl	_capstart
+	.type	_capstart, @function
+_capstart:	xorl	%ebp,%ebp
+	pushl	%ebp
+	movl	%esp,%ebp
+	andl	$0xfffffff0,%esp # align stack
+	leal	8(%ebp),%eax
+	pushl	%eax		# argv
+	pushl	4(%ebp)		# argc
+	pushl	%edx		# rtld cleanup
+	call	_capstart1
+	.size	_capstart, . - _capstart
+
 	.ident	"$FreeBSD$"


More information about the svn-src-projects mailing list