On Tue, Feb 16, 2016 at 08:08:13PM +0000, Miod Vallat wrote:
> Actually, I had forgotten to disable the stack protector, and guess
> what? Disabling it produces a working libstdc++, at least for that
> simple use case; I have not tried to build cmake.
>
> Therefore I suggest the following diff until someone with enough love
> for the utter crap known as `arm' comes with a real compiler fix:
>
> Index: Makefile
> ===================================================================
> RCS file: /OpenBSD/src/gnu/lib/libstdc++-v3/Makefile,v
> retrieving revision 1.8
> diff -u -p -r1.8 Makefile
> --- Makefile 14 May 2015 02:56:01 -0000 1.8
> +++ Makefile 16 Feb 2016 20:04:20 -0000
> @@ -17,6 +17,9 @@ CFLAGS+= -frandom-seed=RepeatabilityCons
> CXXFLAGS+= -frandom-seed=RepeatabilityConsideredGood
> CXXFLAGS+= -fno-implicit-templates -ffunction-sections -fdata-sections \
> -Wno-deprecated
> +.if ${MACHINE_ARCH} == "arm"
> +CXXFLAGS+= -fno-stack-protector
> +.endif
>
> DPADD= ${LIBM}
> LDADD= -lm
>
After building src/xenocara and prequisite ports it seems cmake
still has issues:
c++ -O2 -pipe -I/usr/ports/pobj/cmake-3.4.3/build-arm/Bootstrap.cmk
-I/usr/ports/pobj/cmake-3.4.3/cmake-3.4.3/Source
-I/usr/ports/pobj/cmake-3.4.3/build-arm/Bootstrap.cmk cmake.o cmakemain.o
cmcmd.o cmCommandArgumentLexer.o cmCommandArgumentParser.o
cmCommandArgumentParserHelper.o cmCommonTargetGenerator.o
cmCPackPropertiesGenerator.o cmDefinitions.o cmDepends.o cmDependsC.o
cmDocumentationFormatter.o cmPolicies.o cmProperty.o cmPropertyMap.o
cmPropertyDefinition.o cmPropertyDefinitionMap.o cmMakeDepend.o cmMakefile.o
cmExportFileGenerator.o cmExportInstallFileGenerator.o
cmExportTryCompileFileGenerator.o cmExportSet.o cmExportSetMap.o
cmExternalMakefileProjectGenerator.o cmGeneratorExpressionEvaluationFile.o
cmGeneratedFileStream.o cmGeneratorTarget.o cmGeneratorExpressionContext.o
cmGeneratorExpressionDAGChecker.o cmGeneratorExpressionEvaluator.o
cmGeneratorExpressionLexer.o cmGeneratorExpressionNode.o
cmGeneratorExpressionParser.o cmGeneratorExpression.o cmGlobalCommonGenerator.o
cmGlobalGenerator.o cmInstallDirectoryGenerator.o cmLocalCommonGenerator.o
cmLocalGenerator.o cmInstalledFile.o cmInstallGenerator.o
cmInstallExportGenerator.o cmInstallFilesGenerator.o cmInstallScriptGenerator.o
cmInstallTargetGenerator.o cmScriptGenerator.o cmSourceFile.o
cmSourceFileLocation.o cmState.o cmSystemTools.o cmTestGenerator.o cmVersion.o
cmFileTimeComparison.o cmGlobalUnixMakefileGenerator3.o
cmLocalUnixMakefileGenerator3.o cmMakefileExecutableTargetGenerator.o
cmMakefileLibraryTargetGenerator.o cmMakefileTargetGenerator.o
cmMakefileUtilityTargetGenerator.o cmOutputConverter.o cmOSXBundleGenerator.o
cmNewLineStyle.o cmBootstrapCommands1.o cmBootstrapCommands2.o
cmCommandsForBootstrap.o cmTarget.o cmTest.o cmCustomCommand.o
cmCustomCommandGenerator.o cmCacheManager.o cmListFileCache.o
cmComputeLinkDepends.o cmComputeLinkInformation.o cmOrderDirectories.o
cmComputeTargetDepends.o cmComputeComponentGraph.o cmExprLexer.o cmExprParser.o
cmExprParserHelper.o cmGlobalNinjaGenerator.o cmLocalNinjaGenerator.o
cmNinjaTargetGenerator.o cmNinjaNormalTargetGenerator.o
cmNinjaUtilityTargetGenerator.o cmListFileLexer.o Directory.o EncodingCXX.o
FStream.o Glob.o RegularExpression.o SystemTools.o EncodingC.o ProcessUNIX.o
String.o System.o Terminal.o -o cmake
cmCommandArgumentParserHelper.o: In function
`cmCommandArgumentParserHelper::AddString(std::basic_string<char,
std::char_traits<char>, std::allocator<char> > const&)':
cmCommandArgumentParserHelper.cxx:(.text+0x208): warning: warning: strcpy() is
almost always misused, please use strlcpy()
cmBootstrapCommands2.o: In function
`cmStringCommand::HandleRandomCommand(std::vector<std::basic_string<char,
std::char_traits<char>, std::allocator<char> >,
std::allocator<std::basic_string<char, std::char_traits<char>,
std::allocator<char> > > > const&)':
cmBootstrapCommands2.cxx:(.text+0x43a0): warning: warning: rand() may return
deterministic values, is that what you want?
cmCommandArgumentParserHelper.o: In function
`cmCommandArgumentParserHelper::CombineUnions(char*, char*)':
cmCommandArgumentParserHelper.cxx:(.text+0x35c): warning: warning: strcat() is
almost always misused, please use strlcat()
cmMakefile.o: In function `cmMakefile::AddDefaultDefinitions()':
cmMakefile.cxx:(.text+0x81c4): warning: warning: sprintf() is often misused,
please use snprintf()
loading initial cache file
/usr/ports/pobj/cmake-3.4.3/build-arm/Bootstrap.cmk/InitialCacheFlags.cmake
CMake Error: Error processing file:
/usr/ports/pobj/cmake-3.4.3/build-arm/Bootstrap.cmk/InitialCacheFlags.cmake
assertion "cmSystemTools::FileExists(currentStart.c_str(), true)" failed: file
"/usr/ports/pobj/cmake-3.4.3/cmake-3.4.3/Source/cmMakefile.cxx", line 1652,
function "Configure"
Abort trap (core dumped)
---------------------------------------------
Error when bootstrapping CMake:
Problem while running initial CMake
---------------------------------------------
*** Error 11 in . (/usr/ports/infrastructure/mk/bsd.port.mk:2750
'/usr/ports/pobj/cmake-3.4.3/build-arm/.configure_done')
gdb ./Bootstrap.cmk/cmake cmake.core
#0 0x4271fb9c in thrkill () at <stdin>:2
#1 0x427162f8 in *_libc_abort () at /usr/src/lib/libc/stdlib/abort.c:52
#2 0x42691cd4 in *_libc___assert2 (file=0xbffc98b8 "034iB230230034iBqBt\006",
line=Variable "line" is not available.
) at /usr/src/lib/libc/gen/assert.c:52
#3 0x42691cd4 in *_libc___assert2 (file=0xbffc98b8 "034iB230230034iBqBt\006",
line=Variable "line" is not available.
) at /usr/src/lib/libc/gen/assert.c:52
Previous frame identical to this frame (corrupt stack?)
Changing cmake itself to build with -fno-stack-protector fixes the cmake
bootstrap.
So we likely need it disabled in both places until it is figured out.
Index: Makefile
===================================================================
RCS file: /cvs/ports/devel/cmake/Makefile,v
retrieving revision 1.141
diff -u -p -r1.141 Makefile
--- Makefile 28 Jan 2016 11:28:02 -0000 1.141
+++ Makefile 18 Feb 2016 03:30:24 -0000
@@ -6,7 +6,7 @@ COMMENT = portable build system
VER = 3.4.3
DISTNAME = cmake-${VER}
-REVISION = 0
+REVISION = 1
CATEGORIES = devel
HOMEPAGE = http://www.cmake.org/
@@ -20,12 +20,6 @@ PERMIT_PACKAGE_CDROM = Yes
WANTLIB += archive c curl expat form jsoncpp m ncurses pthread stdc++ z
-# XXX: On arm libstdc++ from base (and especially iostream) seems
-# to be broken, so use g++ from ports.
-MODULES = gcc4
-MODGCC4_ARCHS = arm
-MODGCC4_LANGS = c++
-
# XXX: Ninja is broken on m88k
.if ${MACHINE_ARCH} != "m88k"
BUILD_DEPENDS = devel/ninja>=1.5.1
@@ -49,6 +43,10 @@ CONFIGURE_ARGS = --prefix=${PREFIX} \
--sphinx-man \
--system-libs \
--verbose
+
+.if ${MACHINE_ARCH} == "arm"
+CXXFLAGS+=-fno-stack-protector
+.endif
CONFIGURE_ENV += MAKE=${MAKE_PROGRAM}