diff --git a/lib/csu/common_elf/common.h b/lib/csu/common_elf/common.h index 2f3b3685707c..8f6135f6e211 100644 --- a/lib/csu/common_elf/common.h +++ b/lib/csu/common_elf/common.h @@ -1,4 +1,4 @@ -/* $NetBSD: common.h,v 1.12 2006/05/18 17:54:19 christos Exp $ */ +/* $NetBSD: common.h,v 1.13 2009/12/14 01:04:02 matt Exp $ */ /* * Copyright (c) 1995 Christopher G. Demetriou @@ -53,7 +53,7 @@ typedef void Obj_Entry; #endif -extern int __syscall(quad_t, ...); +extern quad_t __syscall(quad_t, ...); #define _exit(v) __syscall(SYS_exit, (v)) #define write(fd, s, n) __syscall(SYS_write, (fd), (s), (n)) diff --git a/lib/csu/mips/crt0.c b/lib/csu/mips/crt0.c index 2e9343ecf63d..32418382c298 100644 --- a/lib/csu/mips/crt0.c +++ b/lib/csu/mips/crt0.c @@ -1,4 +1,4 @@ -/* $NetBSD: crt0.c,v 1.19 2005/12/24 22:02:10 perry Exp $ */ +/* $NetBSD: crt0.c,v 1.20 2009/12/14 01:04:02 matt Exp $ */ /* * Copyright (c) 1995 Christopher G. Demetriou @@ -86,10 +86,15 @@ __start(u_long sp, */ #ifndef DYNAMIC +#ifdef _LP64 + __asm volatile("dla $28,_gp"); +#else __asm volatile("la $28,_gp"); +#endif #endif ksp = (char**)sp; +#if defined(__mips_n32) || defined(__mips_n64) if (ksp == 0) { /* * Uh, oh. We're running on a old kernel that passed @@ -110,6 +115,7 @@ __start(u_long sp, __asm volatile(" addiu %0,$29,64" : "=r" (ksp)); #endif } +#endif argc = *(int *)ksp; @@ -157,7 +163,7 @@ __start(u_long sp, * is the entrypoint. (Only needed for old toolchains). */ #if defined(LIBC_SCCS) && !defined(lint) -__RCSID("$NetBSD: crt0.c,v 1.19 2005/12/24 22:02:10 perry Exp $"); +__RCSID("$NetBSD: crt0.c,v 1.20 2009/12/14 01:04:02 matt Exp $"); #endif /* LIBC_SCCS and not lint */ #include "common.c" diff --git a/lib/csu/mips/dot_init.h b/lib/csu/mips/dot_init.h index 4bcd135da2b1..7a7a1cfd1756 100644 --- a/lib/csu/mips/dot_init.h +++ b/lib/csu/mips/dot_init.h @@ -1,4 +1,4 @@ -/* $NetBSD: dot_init.h,v 1.9 2008/05/10 15:31:04 martin Exp $ */ +/* $NetBSD: dot_init.h,v 1.10 2009/12/14 01:04:02 matt Exp $ */ /*- * Copyright (c) 2001 Ross Harvey @@ -36,48 +36,98 @@ #include /* RCS ID & Copyright macro defns */ -#define ra "$31" +#define t9 "$25" /* - * Allocate 32 bytes for the stack frame. Store GP at SP+16 (since - * this is where code generated by the compiler for fallthru processing - * expects it to be), and the RA at SP+28. + * For O32/O64, allocate 8 "slots" for the stack frame. Store GP in the 4th + * (zero-based) slot (since this is where compiler generated code for fallthru + * processing expects it to be), and the RA in seventh (highest address). * - * This will need adjustment for 64-bit ABIs. + * For N32/N64, allocate 4 8-byte "slots" for the stack frame. Store GP in the + * 2nd (zero-based) slot (since ...) and the RA in third (highest address). */ -#ifdef __ABICALLS__ -#define MD_FUNCTION_PROLOGUE \ - ".set noreorder \n"\ - ".cpload $25 \n"\ - ".set reorder \n"\ - " subu $sp,$sp,32 \n"\ - ".cprestore 16 \n"\ - " sw "ra",28($sp) \n" + +#ifdef __mips_o32 +#define sPTR_ADDU "addu" +#define sREG_L "lw" +#define sREG_S "sw" +#define sRAOFF "28" +#define sFRAMESZ "32" +#define MD_GPRESTORE /* nothing */ #else -#define MD_FUNCTION_PROLOGUE \ - " subu $sp,$sp,32 \n"\ - " sw "ra",28($sp) \n" +#define sPTR_ADDU "daddu" +#define sREG_L "ld" +#define sREG_S "sd" +#if defined(__mips_n32) || defined(__mips_n64) +#define MD_GPRESTORE "ld $gp,8($sp)" "\n\t" +#define sRAOFF "24" +#define sFRAMESZ "32" +#elif defined(__mips_o64) +#define sRAOFF "56" +#define sFRAMESZ "64" +#define MD_GPRESTORE /* nothing */ +#endif #endif +#ifdef __ABICALLS__ +#if defined(__mips_o32) || defined(__mips_o64) +#define MD_FUNCTION_PROLOGUE(entry_pt) \ + ".set noreorder" "\n\t" \ + ".cpload "t9 "\n\t" \ + ".set reorder" "\n\t" \ + sPTR_ADDU" $sp,$sp,-"sFRAMESZ "\n\t" \ + ".cprestore 16" "\n\t" \ + sREG_S" $ra,"sRAOFF"($sp)" "\n\t" -#define MD_SECTION_PROLOGUE(sect, entry_pt) \ - __asm ( \ - ".section "#sect",\"ax\",@progbits \n"\ - ".align 2 \n"\ - ".globl "#entry_pt" \n"\ - #entry_pt": \n"\ - MD_FUNCTION_PROLOGUE \ - " /* fall thru */ \n"\ +#elif defined(__mips_n32) || defined(__mips_n64) +#define MD_FUNCTION_PROLOGUE(entry_pt) \ + ".set noreorder" "\n\t" \ + "daddu $sp,$sp,-32" "\n\t" \ + ".cpsetup "t9", 8, "#entry_pt "\n\t" \ + "sd $ra,24($sp)" "\n\t" \ + ".set reorder" "\n\t" +#else +#error ABI not supported (__ABICALLS) +#endif +#else +#if defined(__mips_o32) || defined(__mips_o64) +#define MD_FUNCTION_PROLOGUE(entry_pt) \ + sPTR_ADDU" $sp,$sp,-"sFRAMESZ "\n\t" \ + sREG_S" $ra,"sRAOFF"($sp)" "\n\t" + +#elif defined(__mips_n32) || defined(__mips_n64) +/* + * On N32/N64, GP is callee-saved. + */ +#define MD_FUNCTION_PROLOGUE(entry_pt) \ + "daddu $sp,$sp,-32" "\n\t" \ + "sd $gp,8($sp)" "\n\t" \ + "sd $ra,24($sp)" "\n\t" +#else +#error ABI not supported (!__ABICALLS) +#endif +#endif /* __ABICALLS */ + + +#define MD_SECTION_PROLOGUE(sect, entry_pt) \ + __asm ( \ + ".section "#sect",\"ax\",@progbits" "\n\t" \ + ".align 2" "\n\t" \ + ".globl "#entry_pt "\n\t" \ + #entry_pt":" "\n\t" \ + MD_FUNCTION_PROLOGUE(entry_pt) \ + " /* fall thru */" "\n\t" \ ".previous") -#define MD_SECTION_EPILOGUE(sect) \ - __asm ( \ - ".section "#sect",\"ax\",@progbits \n"\ - " lw "ra",28($sp) \n"\ - " .set noreorder \n"\ - " j "ra" \n"\ - " addu $sp,$sp,32 \n"\ - " .set reorder \n"\ +#define MD_SECTION_EPILOGUE(sect) \ + __asm ( \ + ".section "#sect",\"ax\",@progbits" "\n\t" \ + sREG_L" $ra,"sRAOFF"($sp)" "\n\t" \ + MD_GPRESTORE \ + ".set noreorder" "\n\t" \ + "j $ra" "\n\t" \ + sPTR_ADDU" $sp,$sp,"sFRAMESZ "\n\t" \ + ".set reorder" "\n\t" \ ".previous") #define MD_INIT_SECTION_PROLOGUE MD_SECTION_PROLOGUE(.init, _init) diff --git a/share/mk/bsd.kmodule.mk b/share/mk/bsd.kmodule.mk index 2112328f79db..b1de671ff67b 100644 --- a/share/mk/bsd.kmodule.mk +++ b/share/mk/bsd.kmodule.mk @@ -1,4 +1,4 @@ -# $NetBSD: bsd.kmodule.mk,v 1.21 2009/11/10 14:47:52 skrll Exp $ +# $NetBSD: bsd.kmodule.mk,v 1.22 2009/12/14 01:00:46 matt Exp $ # We are not building this with PIE MKPIE=no @@ -43,7 +43,8 @@ ${OBJS} ${LOBJS}: ${DPSRCS} ${PROG}: ${OBJS} ${DPADD} ${_MKTARGET_LINK} - ${LD} -T ${KMODSCRIPT} -r -d -o ${.TARGET} ${OBJS} + ${CC} ${LDFLAGS} -nostdlib -Wl,-T,${KMODSCRIPT},-r,-d \ + -o ${.TARGET} ${OBJS} ##### Install rules .if !target(kmodinstall) diff --git a/share/mk/bsd.own.mk b/share/mk/bsd.own.mk index 15cf3e2d4554..b1fb0ad46352 100644 --- a/share/mk/bsd.own.mk +++ b/share/mk/bsd.own.mk @@ -1,4 +1,4 @@ -# $NetBSD: bsd.own.mk,v 1.612 2009/12/13 09:10:16 mrg Exp $ +# $NetBSD: bsd.own.mk,v 1.613 2009/12/14 01:00:46 matt Exp $ # This needs to be before bsd.init.mk .if defined(BSD_MK_COMPAT_FILE) @@ -532,8 +532,7 @@ MKPICLIB:= no # # On VAX using ELF, all objects are PIC, not just shared libraries, -# so don't build the _pic version. Unless we are using GCC3 which -# doesn't support PIC yet. +# so don't build the _pic version. # .if ${MACHINE_ARCH} == "vax" MKPICLIB= no @@ -653,7 +652,8 @@ MK${var}:= yes # # MK* options which have variable defaults. # -.if ${MACHINE_ARCH} == "x86_64" || ${MACHINE_ARCH} == "sparc64" +.if ${MACHINE_ARCH} == "x86_64" || ${MACHINE_ARCH} == "sparc64" || \ + ${MACHINE_ARCH} == "mips64eb" || ${MACHINE_ARCH} == "mips64el" MKCOMPAT?= yes .else # Don't let this build where it really isn't supported. @@ -680,9 +680,9 @@ MKZFS?= yes _MKVARS.yes= \ MKATF \ MKBINUTILS \ - MKCATPAGES MKCRYPTO MKCOMPLEX MKCVS \ + MKCATPAGES MKCRYPTO MKCOMPLEX MKCVS MKCXX \ MKDOC \ - MKGCC MKGCCCMDS MKGDB \ + MKGCC MKGCCCMDS MKGDB MKGROFF \ MKHESIOD MKHTML \ MKIEEEFP MKINET6 MKINFO MKIPFILTER MKISCSI \ MKKERBEROS \ @@ -741,6 +741,11 @@ X11FLAVOUR?= Xorg # Force some options off if their dependencies are off. # +.if ${MKCXX} == "no" +MKATF:= no +MKGROFF:= no +.endif + .if ${MKCRYPTO} == "no" MKKERBEROS:= no .endif diff --git a/share/mk/bsd.prog.mk b/share/mk/bsd.prog.mk index c245fa85374d..950a84c7dffd 100644 --- a/share/mk/bsd.prog.mk +++ b/share/mk/bsd.prog.mk @@ -1,4 +1,4 @@ -# $NetBSD: bsd.prog.mk,v 1.244 2009/12/08 15:18:42 uebayasi Exp $ +# $NetBSD: bsd.prog.mk,v 1.245 2009/12/14 01:00:46 matt Exp $ # @(#)bsd.prog.mk 8.2 (Berkeley) 4/2/94 .ifndef HOSTPROG @@ -309,7 +309,7 @@ ${_P}: .gdbinit ${LIBCRT0} ${OBJS.${_P}} ${LIBC} ${LIBCRTBEGIN} ${LIBCRTEND} ${D ${_P}.ro: ${OBJS.${_P}} ${DPADD} ${_MKTARGET_LINK} - ${LD} -r -dc -o ${.TARGET} ${OBJS.${_P}} + ${CC} ${LDFLAGS} -nostdlib -Wl,-r,-dc -o ${.TARGET} ${OBJS.${_P}} .if defined(_PROGDEBUG.${_P}) ${_PROGDEBUG.${_P}}: ${_P} diff --git a/share/mk/bsd.sys.mk b/share/mk/bsd.sys.mk index 3a87b3f4084e..f232db4d59fa 100644 --- a/share/mk/bsd.sys.mk +++ b/share/mk/bsd.sys.mk @@ -1,4 +1,4 @@ -# $NetBSD: bsd.sys.mk,v 1.187 2009/12/13 18:40:50 christos Exp $ +# $NetBSD: bsd.sys.mk,v 1.188 2009/12/14 01:00:46 matt Exp $ # # Build definitions used for NetBSD source tree builds. @@ -89,6 +89,18 @@ FFLAGS+= -mieee CFLAGS+= -Wa,-Av8plus .endif +.if (${MACHINE_ARCH} == "mips64el") || (${MACHINE_ARCH} == "mips64eb") +CPUFLAGS+= -Wa,--fatal-warnings +.endif + +#.if ${MACHINE} == "sbmips" +#CFLAGS+= -mips64 -mtune=sb1 +#.endif + +#.if (${MACHINE_ARCH} == "mips64el" || ${MACHINE_ARCH} == "mips64eb") && \ +# (defined(MKPIC) && ${MKPIC} == "no") +#CPUFLAGS+= -mno-abicalls -fno-PIC +#.endif CFLAGS+= ${CPUFLAGS} AFLAGS+= ${CPUFLAGS}