Date: Mon, 28 Jul 2014 10:58:16 -0500 From: Stacey Son <sson@FreeBSD.org> To: Stacey Son <sson@FreeBSD.ORG> Cc: David Chisnall <theraven@FreeBSD.org>, freebsd-mips@FreeBSD.org Subject: Re: mips64 ld GOT problem Message-ID: <A2A47455-537A-4782-8B45-AB6544571AA5@FreeBSD.org> In-Reply-To: <37D1F27C-B595-43AA-A0F8-6B48AE4D7C69@FreeBSD.org> References: <77F1DDA2-A4E5-4D64-AA43-F8CBC55249C4@me.com> <48935A3D-0387-42F1-ACF0-14EB7D8F9A06@bsdimp.com> <C7869A0A-8CE6-4764-9AFD-A49C93E680C1@FreeBSD.org> <2021F70B-2AA4-412C-8D1B-A8D38A3E031C@FreeBSD.org> <37D1F27C-B595-43AA-A0F8-6B48AE4D7C69@FreeBSD.org>
next in thread | previous in thread | raw e-mail | index | archive | help
OK, I found that if I simply add "-O" to the cmake "-DCMAKE_C_FLAGS" and = "-DCMAKE_CXX_FLAGS" (and setting -DCMAKE_BUILD_TYPE to None) everything = will bootstrap and link. If I am brave enough I may try a "Stage 3" = compile. On Jul 27, 2014, at 2:39 PM, Stacey Son <sson@FreeBSD.ORG> wrote: > Hi David: >=20 > Compiling with the cmake option "-DBUILD_SHARED_LIBS=3DTrue" does get = it pass linking 'opt' but it later fails later on... >=20 > [ 73%] Building CXX object = tools/clang/lib/AST/CMakeFiles/clangAST.dir/VTTBuilder.cpp.o > Linking CXX shared library ../../../../lib/libclangAST.so > [...] > /home/sson/llvm/tools/clang/lib/AST/ASTContext.cpp:(.text+0x710): = relocation truncated to fit: R_MIPS_CALL16 against `bool = llvm::isa<clang::ObjCPropertyDecl, clang::Decl const*>(clang::Decl = const* const&)' > [...] > /home/sson/llvm/tools/clang/lib/AST/ASTContext.cpp:(.text+0x5a98): = additional relocation overflows omitted from the output > clang-3.5: error: linker command failed with exit code 1 (use -v to = see invocation) > *** Error code 1 >=20 > As for enabling optimization, when I use "-DCMAKE_BUILD_TYPE=3DRelease" = or "-DCMAKE_BUILD_TYPE=3DMinSizeRel" with the cmake I get an = "EmitRawText called on an MCStreamer that doesn't support it, something = must not be fully mc'ized" abort. Only "-DCMAKE_BUILD_TYPE=3DDebug" or = "-DCMAKE_BUILD_TYPE=3DNone" seems to work. Maybe I am not enabling the = optimization correctly? >=20 > I have been able to get ld from binutils 2.24 to mostly work. It will = link binaries with "-static" but dynamic binaries are still a problem. = It seems the default ldscript is not quite right or something. >=20 > -stacey. >=20 > On Jul 26, 2014, at 6:46 AM, David Chisnall <theraven@FreeBSD.org> = wrote: >=20 >> The only way that I've ever got llvm to compile for MIPS has been by = enabling shared libraries, enabling optimisation, and disabling debug = info. This gave each shared lib a small enough GOT for our binutils = linker to work. >>=20 >> Newer binutils supports multi-GOT (GOT is split and different GOTs = are installed by some calls) and large-GOT (GOT accesses use register = offsets) modes. >>=20 >> David >>=20 >> On 25 Jul 2014, at 23:27, Stacey Son <sson@FreeBSD.org> wrote: >>=20 >>>=20 >>> Hi Warner... >>>=20 >>> On Jul 25, 2014, at 11:26 AM, Warner Losh <imp@bsdimp.com> wrote: >>>=20 >>>>=20 >>>> On Jul 25, 2014, at 9:24 AM, Stacey Son <sson@me.com> wrote: >>>>=20 >>>>> Hi all: >>>>>=20 >>>>> I have been trying to bootstrap clang/llvm 3.5 for mips64 (i.e. = cross build clang/llvm 3.5 for mips64 using clang/llvm 3.5) but run into = the following linker problem (see below) in about the midway point as it = is trying to link 'opt'. The assertions that fail are the following: >>>>>=20 >>>>> BFD 2.17.50 [FreeBSD] 2007-07-03 assertion fail = /usr/home/sson/freebsd/gnu/usr.bin/binutils/libbfd/../../../../contrib/bin= utils/bfd/elfxx-mips.c:7455 >>>>>=20 >>>>> BFD_ASSERT (g->assigned_gotno - g->local_gotno >>>>> <=3D g->global_gotno); >>>>>=20 >>>>> BFD 2.17.50 [FreeBSD] 2007-07-03 assertion fail = /usr/home/sson/freebsd/gnu/usr.bin/binutils/libbfd/../../../../contrib/bin= utils/bfd/elfxx-mips.c:2767 >>>>>=20 >>>>> /* There should have been enough room in the symbol table to >>>>> accommodate both the GOT and non-GOT symbols. */ >>>>> BFD_ASSERT (hsd.max_non_got_dynindx <=3D hsd.min_got_dynindx); >>>>>=20 >>>>> BFD 2.17.50 [FreeBSD] 2007-07-03 assertion fail = /usr/home/sson/freebsd/gnu/usr.bin/binutils/libbfd/../../../../contrib/bin= utils/bfd/elfxx-mips.c:10282 >>>>>=20 >>>>> /* Make sure we didn't grow the global .got region. */ >>>>> dynobj =3D elf_hash_table (info)->dynobj; >>>>> got =3D mips_elf_got_section (dynobj, FALSE); >>>>> g =3D mips_elf_section_data (got)->u.got_info; >>>>>=20 >>>>> if (g->global_gotsym !=3D NULL) >>>>> BFD_ASSERT ((elf_hash_table (info)->dynsymcount >>>>> - g->global_gotsym->dynindx) >>>>> <=3D g->global_gotno); >>>>>=20 >>>>> Does anyone have an idea for a work around or fix? >>>>=20 >>>> Silly question: does using the latest binutils fix this problem? >>>=20 >>> Is there a stable port of the latest binutils to mips? Does someone = have some patches? I did tried TheRaven's port of the 2.18 binutils but = it seemed that 'ld' wasn't very happy. It didn't like any of the object = files I offered it. >>>=20 >>>> Failing that, perhaps we need to specify a larger GOT region that = we do today? IIRC, that=92s specified with -g on the linker line, Try = adding =93-G0=94. I have a vague recollection we always used to do this, = but moved it to be a default (or maybe other systems have the default = and we still need to add it). It doesn=92t look like it is being added = from the output that you=92ve posted. IIRC, it has to be specified on = all the compiler invocations as well. >>>=20 >>> Reading the man page implies -Gvalue/--gpsize=3Dvalue is only for = ECOFF binaries. I tried it anyway and it didn't seem to help. >>>=20 >>> -stacey. >>=20 >=20 > _______________________________________________ > freebsd-mips@freebsd.org mailing list > http://lists.freebsd.org/mailman/listinfo/freebsd-mips > To unsubscribe, send any mail to = "freebsd-mips-unsubscribe@freebsd.org"
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?A2A47455-537A-4782-8B45-AB6544571AA5>