Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 14 Oct 2015 00:34:36 -0700
From:      Mark Millard <markmi@dsl-only.net>
To:        David Chisnall <theraven@FreeBSD.org>, Baptiste Daroussin <bapt@FreeBSD.org>
Cc:        FreeBSD PowerPC ML <freebsd-ppc@freebsd.org>, FreeBSD Toolchain <freebsd-toolchain@freebsd.org>
Subject:   Re: powerpc64-xtoolchain-gcc/powerpc64-gcc gets libcxxrt/guard.cc:104:15: error: expected constructor, destructor, . . . for lib32 (clang 3.6.1 context)
Message-ID:  <00A78528-C61E-494C-B471-F2D86759D4E9@dsl-only.net>
In-Reply-To: <15CF1760-66B9-477B-B382-7F0C41D7C699@dsl-only.net>
References:  <C5A031FF-4CDE-4B37-9CB1-A9F5224EEC52@dsl-only.net> <A7A5E829-EB88-4D0B-919F-5403CB966EE3@FreeBSD.org> <15CF1760-66B9-477B-B382-7F0C41D7C699@dsl-only.net>

next in thread | previous in thread | raw e-mail | index | archive | help

David Chisnall wrote (Mon Oct 12 08:21:28 UTC 2015):

> On 12 Oct 2015, at 03:17, Mark Millard <markmi at dsl-only.net> wrote:
> >=20
> > /usr/src/lib/libcxxrt/../../contrib/libcxxrt/guard.cc:104:15: error: =
expected constructor, destructor, or type conversion before '(' token
> > _Static_assert(sizeof(guard_t) =3D=3D sizeof(uint64_t), "");
>=20
> I think that this is the error that you get with old gcc when a static =
assert fails.  What is the type of guard_t on PPC64?  It may simply be =
that gcc isn=E2=80=99t providing the correct #defines to let the file =
know that it=E2=80=99s a 64-bit target.
>=20
> David

and I had replied about _Static_assert not being a C++ keyword and not =
being created for C++ by FreeBSD=E2=80=99s current. But C++11's =
static_assert "may appear at block scope (as a block declration) and =
inside a class body (as a member declaration" (cppreference.com). It is =
not valid at file scope. And unless the compile is explicitly or =
implicitly specified as a c++11 or later style of compile static_assert =
is then not part of the C++ vintage in use.

/usr/local/bin/powerpc64-portbld-freebsd11.0-g++ -m32 -mcpu=3Dpowerpc =
-DCOMPAT_32BIT  -isystem =
/usr/obj/powerpc.powerpc64/usr/src/lib32/usr/include/  =
-L/usr/obj/powerpc.powerpc64/usr/src/lib32/usr/lib32  =
-B/usr/obj/powerpc.powerpc64/usr/src/lib32/usr/lib32 =
--sysroot=3D/usr/obj/powerpc.powerpc64/usr/src/tmp  -O2 -pipe =
-I/usr/src/lib/libcxxrt/../../contrib/libcxxrt -fstack-protector   -c =
/usr/src/lib/libcxxrt/../../contrib/libcxxrt/guard.cc -o guard.o

does not specify -std=3Dc++11 or -std=3Dgnu++11 or the like so =
static_assert is not enabled as part of the language vintage used. So =
moving into block scope would not be sufficient of itself.


So I tried simply removing the _Static_assert line that was in guard.cc:

Index: /usr/src/contrib/libcxxrt/guard.cc
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- /usr/src/contrib/libcxxrt/guard.cc	(revision 288459)
+++ /usr/src/contrib/libcxxrt/guard.cc	(working copy)
@@ -101,7 +101,6 @@
 	uint32_t init_half;
 	uint32_t lock_half;
 } guard_t;
-_Static_assert(sizeof(guard_t) =3D=3D sizeof(uint64_t), "");
 static const uint32_t LOCKED =3D 1;
 static const uint32_t INITIALISED =3D static_cast<guard_lock_t>(1) << =
24;
=20
=09
This allowed the guard.cc compile in question to complete and more. =
(I=E2=80=99m not claiming FreeBSD should skip having a check for a size =
mismatch someplace.)


But eventually the build eventually got:

--- lib/libcrypt__L ---
CC=3D'/usr/local/bin/powerpc64-portbld-freebsd11.0-gcc -m32 =
-mcpu=3Dpowerpc -DCOMPAT_32BIT  -isystem =
/usr/obj/powerpc.powerpc64/usr/src/lib32/usr/include/  =
-L/usr/obj/powerpc.powerpc64/usr/src/lib32/usr/lib32  =
-B/usr/obj/powerpc.powerpc64/usr/src/lib32/usr/lib32 =
--sysroot=3D/usr/obj/powerpc.powerpc64/usr/src/tmp ' mkdep -f .depend -a =
   -I/usr/src/lib/libcrypt/../libmd -I/usr/src/lib/libcrypt/../libutil =
-I/usr/src/lib/libcrypt -DHAS_DES -DHAS_BLOWFISH -DMD4Init=3D__MD4Init =
-DMD4Final=3D__MD4Final -DMD4Update=3D__MD4Update -DMD4Pad=3D__MD4Pad =
-DMD5Init=3D__MD5Init -DMD5Final=3D__MD5Final -DMD5Update=3D__MD5Update =
-DMD5Pad=3D__MD5Pad -DSHA256_Init=3D__SHA256_Init =
-DSHA256_Final=3D__SHA256_Final -DSHA256_Update=3D__SHA256_Update =
-DSHA512_Init=3D__SHA512_Init -DSHA512_Final=3D__SHA512_Final =
-DSHA512_Update=3D__SHA512_Update -std=3Dgnu99   =
/usr/src/lib/libcrypt/crypt.c /usr/src/lib/libcrypt/misc.c =
/usr/src/lib/libcrypt/crypt-md5.c /usr/src/lib/libcrypt/../libmd/md5c.c =
/usr/src/lib/libcrypt/crypt-nthash.c =
/usr/src/lib/libcrypt/../libmd/md4c.c =
/usr/src/lib/libcrypt/crypt-sha256.c =
/usr/src/lib/libcrypt/../../sys/crypto/sha2/sha256c.c =
/usr/src/lib/libcrypt/crypt-sha512.c =
/usr/src/lib/libcrypt/../libmd/sha512c.c =
/usr/src/lib/libcrypt/../../secure/lib/libcrypt/crypt-des.c =
/usr/src/lib/libcrypt/../../secure/lib/libcrypt/crypt-blowfish.c =
/usr/src/lib/libcrypt/../../secure/lib/libcrypt/blowfish.c
. . .
--- lib/libcrypt__L ---
/usr/src/lib/libcrypt/crypt-sha256.c:38:20: fatal error: sha256.h: No =
such file or directory
. . .
--- lib/libcrypt__L ---
mkdep: compile failed
*** [.depend] Error code 1

make[4]: stopped in /usr/src/lib/libcrypt
1 error

Note. . .

root@FreeBSDx64:/usr/src # find / -name sha256.h -print | more
/usr/obj/powerpc.powerpc64/usr/src/tmp/legacy/usr/include/sha256.h
/usr/obj/powerpc.powerpc64/usr/src/tmp/usr/include/sha256.h
/usr/obj/usr/src/tmp/legacy/usr/include/sha256.h
/usr/obj/usr/src/tmp/usr/include/sha256.h
/usr/include/sha256.h
/usr/src/contrib/wpa/src/crypto/sha256.h
/usr/src/sys/crypto/sha2/sha256.h

and the lack of a =
/usr/obj/powerpc.powerpc64/usr/src/lib32/usr/include/sha256.h for the =
-isystem to find.





To be explicit about no amd64 to powerpc64 cross compling gcc being =
present for the build to execute . . .


For an amd64 11.0 context doing

root@FreeBSDx64:/usr/src # yes|make -j 6 CROSS_TOOLCHAIN=3Dpowerpc64-gcc =
\
-DWITHOUT_GCC -DWITHOUT_GCC_BOOTSTRAP -DWITHOUT_GNUCXX \
-DWITHOUT_CLANG -DWITHOUT_CLANG_BOOTSTRAP -DWITHOUT_CLANG_FULL =
-DWITHOUT_CLANG_IS_CC \
-DWITHOUT_CLANG_EXTRAS -DWITHOUT_LLDB \
-DWITHOUT_BOOT -DWITHOUT_LIB32 \
delete-old KERNCONF=3DGENERIC64-NODBG \
TARGET=3Dpowerpc TARGET_ARCH=3Dpowerpc64
. . .
root@FreeBSDx64:/usr/src # make -j 6 CROSS_TOOLCHAIN=3Dpowerpc64-gcc \
-DWITHOUT_GCC -DWITHOUT_GCC_BOOTSTRAP -DWITHOUT_GNUCXX \
-DWITHOUT_CLANG -DWITHOUT_CLANG_BOOTSTRAP -DWITHOUT_CLANG_FULL =
-DWITHOUT_CLANG_IS_CC \
-DWITHOUT_CLANG_EXTRAS -DWITHOUT_LLDB \
-DWITHOUT_BOOT -DWITH_LIB32 \
buildworld buildkernel KERNCONF=3DGENERIC64-NODBG \
TARGET=3Dpowerpc TARGET_ARCH=3Dpowerpc64



The context details follow.

Mac OS X 10.10.5 using a VirtualBox V5.0.4 VM with. . .
root@FreeBSDx64:/usr/src # freebsd-version -ku; uname -aKU
11.0-CURRENT
11.0-CURRENT
FreeBSD FreeBSDx64 11.0-CURRENT FreeBSD 11.0-CURRENT #0 r288459: Sat Oct =
 3 03:42:08 PDT 2015     =
root@FreeBSDx64:/usr/obj/usr/src/sys/GENERIC-NODEBUG  amd64 1100079 =
1100079

root@FreeBSDx64:/usr/src # svnlite info /usr/src
Path: .
Working Copy Root Path: /usr/src
URL: https://svn.freebsd.org/base/head
Relative URL: ^/head
Repository Root: https://svn.freebsd.org/base
Repository UUID: ccf9f872-aa2e-dd11-9fc8-001c23d0bc1f
Revision: 288459
Node Kind: directory
Schedule: normal
Last Changed Author: gjb
Last Changed Rev: 288459
Last Changed Date: 2015-10-01 12:48:10 -0700 (Thu, 01 Oct 2015)

root@FreeBSDx64:/usr/src # more /etc/src.conf
# World:
NO_WERROR=3D

# Kernel:
WERROR=3D

root@FreeBSDx64:/usr/src # more /etc/make.conf
/etc/make.conf: No such file or directory


root@FreeBSDx64:/usr/src # svnlite info /usr/ports
Path: /usr/ports
Working Copy Root Path: /usr/ports
URL: https://svn.freebsd.org/ports/head
Relative URL: ^/head
Repository Root: https://svn.freebsd.org/ports
Repository UUID: 35697150-7ecd-e111-bb59-0022644237b5
Revision: 398559
Node Kind: directory
Schedule: normal
Last Changed Author: jbeich
Last Changed Rev: 398559
Last Changed Date: 2015-10-03 17:42:55 -0700 (Sat, 03 Oct 2015)

root@FreeBSDx64:/usr/src # portmaster --list-origins
net/avahi
devel/boost-all
lang/clang37
ports-mgmt/dialog4ports
lang/gcc5
devel/git-lite
x11/lumina
sysutils/lxterminal
www/midori
net/netatalk3
ports-mgmt/pkg
ports-mgmt/portmaster
devel/powerpc64-xtoolchain-gcc
devel/qtcreator
security/sudo
mail/thunderbird
emulators/virtualbox-ose-additions


Very little is non-default source code. . .

root@FreeBSDx64:/usr/src # svnlite status
M       lib/csu/powerpc64/Makefile
?       sys/arm/conf/RPI2-NODBG
M       sys/boot/powerpc/Makefile.inc
?       sys/powerpc/conf/GENERIC64-NODBG

root@FreeBSDx64:/usr/src # svnlite status /usr/ports
?       /usr/ports/ion

root@FreeBSDx64:/usr/src # more =
/usr/src/sys/powerpc/conf/GENERIC64-NODBG=20
. . . (comments omitted) . . .

include GENERIC64

ident   GENERIC-NODBG

nooptions       INVARIANTS
nooptions       INVARIANT_SUPPORT
nooptions       WITNESS
nooptions       WITNESS_SKIPSPIN
nooptions       DEADLKRES

(The copy->paste sequence for the below diffs likely turned tabs into =
spaces.)

root@FreeBSDx64:/usr/src # svnlite diff sys/boot/powerpc/Makefile.inc=20
Index: sys/boot/powerpc/Makefile.inc
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- sys/boot/powerpc/Makefile.inc	(revision 288459)
+++ sys/boot/powerpc/Makefile.inc	(working copy)
@@ -2,7 +2,7 @@

.if ${MACHINE_ARCH} =3D=3D "powerpc64"
CFLAGS+=3D	-m32 -mcpu=3Dpowerpc
-LDFLAGS+=3D	-m elf32ppc_fbsd
+LDFLAGS+=3D	-Wl,-m -Wl,elf32ppc_fbsd -Wl,-M,--verbose
.endif

.include "../Makefile.inc"


The following is my personal, local workaround for =
/usr/src/lib/csu/powerpc64/Makefile forcing use of the gcc command even =
when the context does not have one.

root@FreeBSDx64:/usr/src # svnlite diff /usr/src
Index: /usr/src/lib/csu/powerpc64/Makefile
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- /usr/src/lib/csu/powerpc64/Makefile (revision 288459)
+++ /usr/src/lib/csu/powerpc64/Makefile (working copy)
@@ -13,8 +13,8 @@
# clang doesn't support -mlongcall, and testing shows a clang linked =
with a
# clang-built csu segfaults, this must currently be compiled with gcc.  =
Once
# clang supports -mlongcall, or we get a fixed ld, this can be =
revisited.
-CC:=3D           gcc
-COMPILER_TYPE:=3D        gcc
+#CC:=3D          gcc
+#COMPILER_TYPE:=3D       gcc

FILES=3D         ${OBJS}
FILESMODE=3D     ${LIBMODE}

=3D=3D=3D
Mark Millard
markmi@dsl-only.net




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?00A78528-C61E-494C-B471-F2D86759D4E9>