Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 27 Mar 2017 22:53:36 +0000 (UTC)
From:      Warner Losh <imp@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r316064 - head/sys/boot/i386/boot2
Message-ID:  <201703272253.v2RMra2L032487@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: imp
Date: Mon Mar 27 22:53:36 2017
New Revision: 316064
URL: https://svnweb.freebsd.org/changeset/base/316064

Log:
  Fix build with path names with 'align' or 'nop' in them.
  
  clang is now inserting .file directives with the entire path in
  them. This is fine, except that our sed peephole optimizer removes
  them if ${SRCTOP} or ${OBJTOP} contains 'align' or 'nop', leading to
  build failures. The sed peephole optimizer removes useful things for
  boot2 when used with clang, so restrict its use to gcc. Also, gcc no
  longer generates nops to pad things, so there's no point in removing
  it. Specialize the optimization to just removing the .align 4 lines to
  preclude inadvertant path matching.
  
  Sponsored by: Netflix
  Commit brought to you the path: /home/xxx/NCD-3592-logsynopts/FreeBSD

Modified:
  head/sys/boot/i386/boot2/Makefile

Modified: head/sys/boot/i386/boot2/Makefile
==============================================================================
--- head/sys/boot/i386/boot2/Makefile	Mon Mar 27 22:34:43 2017	(r316063)
+++ head/sys/boot/i386/boot2/Makefile	Mon Mar 27 22:53:36 2017	(r316064)
@@ -91,10 +91,18 @@ boot2.o: boot2.s
 
 SRCS=	boot2.c boot2.h
 
+# Gcc (4.2.1 at least) benefits from removing the forced alignment
+# clang doesn't. Make the removal as specific as possible to avoid
+# false positives (like path names with odd names for debugging info).
+# In the past, gcc benefited from nop removal, but not in 4.2.1.
+# Think of this as a poor-man's peephole optimizer for gcc 4.2.1
 boot2.s: boot2.c boot2.h ${.CURDIR}/../../common/ufsread.c
 	${CC} ${CFLAGS} -S -o boot2.s.tmp ${.CURDIR}/boot2.c
-	sed -e '/align/d' -e '/nop/d' < boot2.s.tmp > boot2.s
-	rm -f boot2.s.tmp
+.if ${COMPILER_TYPE} == "gcc"
+	sed -e '/\.align 4/d' < boot2.s.tmp > boot2.s
+.else
+	cp boot2.s.tmp boot2.s
+.endif
 
 boot2.h: boot1.out
 	${NM} -t d ${.ALLSRC} | awk '/([0-9])+ T xread/ \



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201703272253.v2RMra2L032487>