svn commit: r316064 - head/sys/boot/i386/boot2
Warner Losh
imp at FreeBSD.org
Mon Mar 27 22:53:38 UTC 2017
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/ \
More information about the svn-src-all
mailing list