Port-m68k archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

Intermediate step for new arch for lc040 compatibility



Hi,

Please see attached patch:

I've found it very hard to set the -mlcfix flag for gas(1) depending on the 
caller. If it's gcc its pretty easy to set CFLAGS but not necessarily for 
other programmes.

It was easier to make a toolchain where -mlcfix was the default ensuring 
compatibility no matter which programme was calling gas(1).

The attached patch will make a toolchain where by -mlcfix is the default if -V 
MKLC040COMPAT is passed to build.sh.

This is an intermediate step for a new arch where the flag can be set (say 
m68klc).

Best regards and thank you for your consideration,

Nat
diff -r 9fc76abb7419 BUILDING
--- a/BUILDING	Mon Apr 14 16:43:00 2025 +0000
+++ b/BUILDING	Fri Apr 18 02:11:09 2025 +1000
@@ -259,20 +259,20 @@ CONFIGURATION
            MKDEBUGTOOLS, MKDEPINCLUDES, MKDOC, MKDTB, MKDTC, MKDTRACE,
            MKDYNAMICROOT, MKFIRMWARE, MKGCC, MKGCCCMDS, MKGDB, MKGROFF,
            MKGROFFHTMLDOC, MKHESIOD, MKHOSTOBJ, MKHTML, MKIEEEFP, MKINET6,
-           MKINFO, MKIPFILTER, MKISCSI, MKKERBEROS, MKKMOD, MKKYUA, MKLDAP,
-           MKLIBCSANITIZER, MKLIBCXX, MKLIBSTDCXX, MKLINKLIB, MKLINT, MKLLVM,
-           MKLLVMRT, MKLVM, MKMAKEMANDB, MKMAN, MKMANDOC, MKMANZ, MKMDNS,
-           MKNLS, MKNOUVEAUFIRMWARE, MKNPF, MKNSD, MKOBJ, MKOBJDIRS, MKPAM,
-           MKPCC, MKPF, MKPIC, MKPICINSTALL, MKPICLIB, MKPIE, MKPIGZGZIP,
-           MKPOSTFIX, MKPROFILE, MKRADEONFIRMWARE, MKRELRO, MKREPRO,
-           MKREPRO_TIMESTAMP, MKRUMP, MKSANITIZER, MKSHARE, MKSKEY, MKSLJIT,
-           MKSOFTFLOAT, MKSTATICLIB, MKSTATICPIE, MKSTRIPIDENT, MKSTRIPSYM,
-           MKTEGRAFIRMWARE, MKTPM, MKUNBOUND, MKUNPRIVED, MKUPDATE, MKX11,
-           MKX11FONTS, MKX11MOTIF, MKXORG_SERVER, MKYP, MKZFS, NETBSDSRCDIR,
-           NETBSD_OFFICIAL_RELEASE, NOCLEANDIR, NODISTRIBDIRS, NOINCLUDES,
-           OBJMACHINE, RELEASEDIR, RUMPUSER_THREADS, RUMP_CURLWP, RUMP_DEBUG,
-           RUMP_DIAGNOSTIC, RUMP_KTRACE, RUMP_LOCKDEBUG, RUMP_LOCKS_UP,
-           RUMP_NBCOMPAT, RUMP_VIRTIF, RUMP_VNODE_LOCKDEBUG,
+           MKINFO, MKIPFILTER, MKISCSI, MKKERBEROS, MKKMOD, MKKYUA,
+           MKLC040COMPAT, MKLDAP, MKLIBCSANITIZER, MKLIBCXX, MKLIBSTDCXX,
+           MKLINKLIB, MKLINT, MKLLVM, MKLLVMRT, MKLVM, MKMAKEMANDB, MKMAN,
+           MKMANDOC, MKMANZ, MKMDNS, MKNLS, MKNOUVEAUFIRMWARE, MKNPF, MKNSD,
+           MKOBJ, MKOBJDIRS, MKPAM, MKPCC, MKPF, MKPIC, MKPICINSTALL, MKPICLIB,
+           MKPIE, MKPIGZGZIP, MKPOSTFIX, MKPROFILE, MKRADEONFIRMWARE, MKRELRO,
+           MKREPRO, MKREPRO_TIMESTAMP, MKRUMP, MKSANITIZER, MKSHARE, MKSKEY,
+           MKSLJIT, MKSOFTFLOAT, MKSTATICLIB, MKSTATICPIE, MKSTRIPIDENT,
+           MKSTRIPSYM, MKTEGRAFIRMWARE, MKTPM, MKUNBOUND, MKUNPRIVED, MKUPDATE,
+           MKX11, MKX11FONTS, MKX11MOTIF, MKXORG_SERVER, MKYP, MKZFS,
+           NETBSDSRCDIR, NETBSD_OFFICIAL_RELEASE, NOCLEANDIR, NODISTRIBDIRS,
+           NOINCLUDES, OBJMACHINE, RELEASEDIR, RUMPUSER_THREADS, RUMP_CURLWP,
+           RUMP_DEBUG, RUMP_DIAGNOSTIC, RUMP_KTRACE, RUMP_LOCKDEBUG,
+           RUMP_LOCKS_UP, RUMP_NBCOMPAT, RUMP_VIRTIF, RUMP_VNODE_LOCKDEBUG,
            TOOLCHAIN_MISSING, TOOLDIR, USETOOLS, USE_FORT, USE_HESIOD,
            USE_INET6, USE_JEMALLOC, USE_KERBEROS, USE_LDAP, USE_LIBCSANITIZER,
            USE_PAM, USE_PIGZGZIP, USE_SANITIZER, USE_SKEY, USE_SSP,
diff -r 9fc76abb7419 doc/HACKS
--- a/doc/HACKS	Mon Apr 14 16:43:00 2025 +0000
+++ b/doc/HACKS	Fri Apr 18 02:11:09 2025 +1000
@@ -1040,11 +1040,15 @@ kcah
 
 hack	binutils: 68lc040 needs support for fpu emulation on some cpus.
 cdate	Thu Apr 3 11:52:14 UTC 2025
+mdate	Tue Apr 15 00:01:00 UTC 2025
 port	m68k
 who	nat
-file	external/gpl3/binutils/dist/gas/config/tc-m68k.c : 1.13
+file	external/gpl3/binutils/dist/gas/config/tc-m68k.c : 1.14
 descr	Early buggy revisions of 68LC040 cpu cannot use fpu emulation without
 	some binutils supprt. Adding NOP before F-LINE instructions.
 	(PR port-mac68k/13078 and binutils PATCH request
 	- https://sourceware.org/pipermail/binutils/2025-March/140270.html)
+
+	Pass MKLC040COMPAT=yes to build.sh to make an lc040 compatable
+	toolchain to build userland and packages. 
 kcah
diff -r 9fc76abb7419 external/gpl3/binutils/dist/gas/config/tc-m68k.c
--- a/external/gpl3/binutils/dist/gas/config/tc-m68k.c	Mon Apr 14 16:43:00 2025 +0000
+++ b/external/gpl3/binutils/dist/gas/config/tc-m68k.c	Fri Apr 18 02:11:09 2025 +1000
@@ -74,7 +74,11 @@ int flag_want_pic;
 static int flag_short_refs;	/* -l option.  */
 static int flag_long_jumps;	/* -S option.  */
 static int flag_keep_pcrel;	/* --pcrel option.  */
+#if LC040COMPAT
+static bool lcfix = true;
+#else
 static bool lcfix = false;
+#endif
 
 #ifdef REGISTER_PREFIX_OPTIONAL
 int flag_reg_prefix_optional = REGISTER_PREFIX_OPTIONAL;
@@ -4281,7 +4285,7 @@ next:
 
   m68k_ip (str);
 
-  if (lcfix == true && hasnop == false &&
+  if (lcfix && !hasnop &&
        (the_ins.opcode[0] & 0xf000) == 0xf000)
     {
       memset (&the_ins, '\0', sizeof (the_ins));
@@ -7476,6 +7480,8 @@ md_parse_option (int c, const char *arg)
 	;
       else if (m68k_set_cpu (arg, 0, 1))
 	;
+      else if (startswith (arg, "no-lcfix"))
+	lcfix = false;
       else if (startswith (arg, "lcfix"))
 	lcfix = true;
       else
@@ -7579,8 +7585,20 @@ md_show_usage (FILE *stream)
   fprintf (stream, _("\
 -march=<arch>		set architecture\n\
 -mcpu=<cpu>		set cpu [default %s]\n\
--mlcfix		compatability with lc040 nop before f-line\n\
 "), default_cpu);
+
+#if LC040COMPAT
+  fprintf (stream, _("\
+-mno-lcfix		no compatability with lc040 nop before f-line\n\
+-mlcfix			compatability with lc040 nop before f-line (Default)\n\
+"));
+#else
+  fprintf (stream, _("\
+-mno-lcfix		no compatability with lc040 nop before f-line (Default)\n\
+-mlcfix			compatability with lc040 nop before f-line\n\
+"));
+#endif
+
   for (i = 0; m68k_extensions[i].name; i++)
     fprintf (stream, _("\
 -m[no-]%-16s enable/disable %s architecture extension\n\
diff -r 9fc76abb7419 external/gpl3/binutils/usr.bin/gas/Makefile
--- a/external/gpl3/binutils/usr.bin/gas/Makefile	Mon Apr 14 16:43:00 2025 +0000
+++ b/external/gpl3/binutils/usr.bin/gas/Makefile	Fri Apr 18 02:11:09 2025 +1000
@@ -4,6 +4,10 @@ CPPFLAGS+=	-I${.CURDIR}/arch/${BINUTILS_
 CPPFLAGS+=	-I${DIST}/gas -I${DIST}/gas/config
 CPPFLAGS+=	-I${DIST}
 
+.if ${MKLC040COMPAT} != "no"
+CPPFLAGS+= -DLC040COMPAT
+.endif
+
 .include "${.CURDIR}/../common/Makefile.inc"
 .include "${.CURDIR}/arch/${BINUTILS_MACHINE_ARCH}/defs.mk"
 
diff -r 9fc76abb7419 share/man/man5/mk.conf.5
--- a/share/man/man5/mk.conf.5	Mon Apr 14 16:43:00 2025 +0000
+++ b/share/man/man5/mk.conf.5	Fri Apr 18 02:11:09 2025 +1000
@@ -1,6 +1,6 @@
 .\"	$NetBSD: mk.conf.5,v 1.111 2024/09/07 19:13:28 rillig Exp $
 .\"
-.\"  Copyright (c) 1999-2023 The NetBSD Foundation, Inc.
+.\"  Copyright (c) 1999-2025 The NetBSD Foundation, Inc.
 .\"  All rights reserved.
 .\"
 .\"  This code is derived from software contributed to The NetBSD Foundation
@@ -27,7 +27,7 @@
 .\" ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 .\" POSSIBILITY OF SUCH DAMAGE.
 .\"
-.Dd September 7, 2024
+.Dd April 15, 2025
 .Dt MK.CONF 5
 .Os
 .\" turn off hyphenation
@@ -1037,6 +1037,12 @@ variable.
 .Dq no
 until the import of Kyua is done and validated.
 .
+.It Sy MKLC040COMPAT
+Build a XCLC040 compatable toolchain
+.Sy m68k
+.DFLT
+.Dq no
+.
 .It Sy MKLDAP
 .YorN
 Indicates whether the Lightweight Directory Access Protocol (LDAP)
diff -r 9fc76abb7419 share/mk/bsd.own.mk
--- a/share/mk/bsd.own.mk	Mon Apr 14 16:43:00 2025 +0000
+++ b/share/mk/bsd.own.mk	Fri Apr 18 02:11:09 2025 +1000
@@ -1212,6 +1212,11 @@ MKSTATICPIE?=	no
 .endif
 
 #
+# Build option for lc040 (m68k) compatible toolchain.
+#
+MKLC040COMPAT?=	no
+
+#
 # MK* options which default to "yes".
 # Please keep alphabetically sorted with one entry per line.
 #
diff -r 9fc76abb7419 tools/binutils/Makefile
--- a/tools/binutils/Makefile	Mon Apr 14 16:43:00 2025 +0000
+++ b/tools/binutils/Makefile	Fri Apr 18 02:11:09 2025 +1000
@@ -33,6 +33,10 @@ INSTALL_TARGET+=install-gprof
 
 .include "${.CURDIR}/../Makefile.gnuhost"
 
+.if ${MKLC040COMPAT} != "no"
+HOST_CPPFLAGS+= -DLC040COMPAT
+.endif
+
 CCADDFLAGS=	-I${GNUHOSTDIST}/include  -I${DESTDIR}/usr/include
 CCADDFLAGS+=	-B${DESTDIR}/usr/lib/
 CCADDFLAGS+=	${HOST_CPPFLAGS}


Home | Main Index | Thread Index | Old Index