PERFORCE change 135232 for review
Oleksandr Tymoshenko
gonzo at FreeBSD.org
Mon Feb 11 17:19:03 PST 2008
http://perforce.freebsd.org/chv.cgi?CH=135232
Change 135232 by gonzo at gonzo_jeeves on 2008/02/12 01:18:18
o Replace mips2 crt1.c with juniper's crt1.c. This is required
because exec_setregs registers layout in mips2-jnpr tree differs
from one in mips2. Juniper's is more logical and less hackerish:
it uses a0 and a3 registers to pass unaligned stack address
where arguments resides and ps_strings structs. _start from
mips2 uses $sp register for getting arguments and does not pass
ps_string struct at all.
NOTE: This submit is just a copy from //depot/vendor/juniper-mips
branch
Affected files ...
.. //depot/projects/mips2-jnpr/src/lib/csu/mips/crt1.c#2 edit
Differences ...
==== //depot/projects/mips2-jnpr/src/lib/csu/mips/crt1.c#2 (text+ko) ====
@@ -1,10 +1,6 @@
-/* LINTLIBRARY */
/*-
- * Copyright 2001 David E. O'Brien.
- * All rights reserved.
* Copyright 1996-1998 John D. Polstra.
* All rights reserved.
- * Copyright (c) 1997 Jason R. Thorpe.
* Copyright (c) 1995 Christopher G. Demetriou
* All rights reserved.
*
@@ -18,12 +14,8 @@
* documentation and/or other materials provided with the distribution.
* 3. All advertising materials mentioning features or use of this software
* must display the following acknowledgement:
- * This product includes software developed for the
- * FreeBSD Project. See http://www.freebsd.org/ for
- * information about FreeBSD.
- * This product includes software developed for the
- * NetBSD Project. See http://www.netbsd.org/ for
- * information about NetBSD.
+ * This product includes software developed by Christopher G. Demetriou
+ * for the NetBSD Project.
* 4. The name of the author may not be used to endorse or promote products
* derived from this software without specific prior written permission
*
@@ -37,31 +29,32 @@
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * FreeBSD: src/lib/csu/alpha/crt1.c,v 1.7.2.1 2000/10/30 20:32:23 obrien
*/
-#ifndef lint
+#include <sys/cdefs.h>
+__FBSDID("$FreeBSD$");
+
#ifndef __GNUC__
#error "GCC is needed to compile this file"
#endif
-#endif /* lint */
#include <stdlib.h>
-
#include "libc_private.h"
#include "crtbrand.c"
-#include <machine/asm.h>
struct Struct_Obj_Entry;
struct ps_strings;
+#ifndef NOSHARED
extern int _DYNAMIC;
#pragma weak _DYNAMIC
+#endif
+extern void _init(void);
extern void _fini(void);
-extern void _init(void);
extern int main(int, char **, char **);
-extern void _start(int, char **, char **, const struct Struct_Obj_Entry *,
- void (*)(void), struct ps_strings *);
#ifdef GCRT
extern void _mcleanup(void);
@@ -72,70 +65,37 @@
char **environ;
const char *__progname = "";
-struct ps_strings *__ps_strings;
+
+void __gccmain(void) {}
+void __main(void) {}
/* The entry function. */
-__asm(" .text \n"
-" .align 8 \n"
-" .globl _start \n"
-" _start: \n"
-" .cpload $25 \n"
-" /* Get cleanup routine and main object set by rtld */\n"
-" /* Note that a2 is already set to ps_string by _rtld_start */\n"
-" /* move a3, a0 */\n"
-" /* move t0, a1 */\n"
-" /* Get argc, argv from stack */ \n"
-" /* lw a0, 0(sp) */\n"
-" /* move a1, sp */\n"
-" /* addu a1, 4 */\n"
-" \n"
-" /* Stack should 8bytes aligned */\n"
-" /* required by ABI to pass */\n"
-" /* 64-bits arguments */\n"
-" /* and sp, ~8 */\n"
-" /* subu sp, sp, 20 */\n"
-" /* sw t0, 16(sp) */\n"
-" \n"
-" move $7, $4 /* atexit */\n"
-" move $8, $5 /* main_obj entry */\n"
-" lw $4, 0($29) \n"
-" move $5, $29 \n"
-" addu $5, 4 \n"
-" \n"
-" and $29, 0xfffffff8 \n"
-" subu $29, $29, 24 /* args slot + cleanup + 4 bytes padding */ \n"
-" sw $8, 16($29) \n"
-"\n"
-" la $25, __start \n"
-" nop \n"
-" j $25\n");
-/* ARGSUSED */
-
void
-__start(int argc, char **argv, struct ps_strings *ps_strings,
- void (*cleanup)(void), const struct Struct_Obj_Entry *obj __unused)
+_start(char **ap,
+ void (*cleanup)(void), /* from shared loader */
+ struct Struct_Obj_Entry *obj, /* from shared loader */
+ struct ps_strings *ps_strings)
{
+ int argc;
+ char **argv;
char **env;
- const char *s;
- env = argv + argc + 1;
+ argc = * (long *) ap;
+ argv = ap + 1;
+ env = ap + 2 + argc;
environ = env;
-
- if (argc > 0 && argv[0] != NULL) {
+ if(argc > 0 && argv[0] != NULL) {
+ const char *s;
__progname = argv[0];
for (s = __progname; *s != '\0'; s++)
if (*s == '/')
__progname = s + 1;
}
- if (ps_strings != (struct ps_strings *)0)
- __ps_strings = ps_strings;
-
+#ifndef NOSHARED
if (&_DYNAMIC != NULL)
atexit(cleanup);
- else
- _init_tls();
-
+#endif
#ifdef GCRT
atexit(_mcleanup);
#endif
@@ -143,7 +103,9 @@
#ifdef GCRT
monstartup(&eprol, &etext);
#endif
+#ifndef NOGPREL
_init();
+#endif
exit( main(argc, argv, env) );
}
@@ -152,5 +114,3 @@
__asm__("eprol:");
__asm__(".previous");
#endif
-
-__asm__(".ident\t\"$FreeBSD: src/lib/csu/arm/crt1.c,v 1.3 2004/09/23 23:00:51 cognet Exp $\"");
More information about the p4-projects
mailing list