Hi Ivan, I think there is no problem to build latest gollvm in docker container now. There is no need to add "-fcf-protection" explicitly to CFLAGS/ASM_FLAGS any more according recent patches.
On Wednesday, July 29, 2020 at 12:10:35 PM UTC+8, Ivan Serdyuk wrote: > > Yuan, > do you have any progress here? > > Ivan > > On Thursday, May 28, 2020 at 6:47:41 AM UTC+3 Yuan Ting wrote: > >> Thanks for your correction, overriding CMAKE_C_FLAGS and CMAKE_ASM_FLAGS >> with "-fcf-protection=none" works for me. >> I also try to build gollvm from a clean slate (by recreating a build area >> and rerun cmake without overriding CMAKE_C_FLAGS and CMAKE_ASM_FLAGS). >> However, I still failed to build gollvm. I can even see the notice during >> the configuration: >> >> -- trying -fcf-protection=none workaround >> >> -- Performing Test SPLIT_STACK_WORKAROUND >> >> -- Performing Test SPLIT_STACK_WORKAROUND - Success >> >> -- applying -fcf-protection=none workaround >> >> -- starting libgo configuration. >> >> >> but during building, the same error happened: >> >> >> [2427/2600] Linking C shared library tools/gollvm/libgo/libgo.so.11git >> >> FAILED: tools/gollvm/libgo/libgo.so.11git >> >> : && /usr/bin/cc -fPIC -fPIC -Werror=date-time -Wall -Wextra >> -Wno-unused-parameter -Wwrite-strings -Wno-missing-field-initializers >> -pedantic -Wno-long-long -Wimplicit-fallthrough -Wno-comment >> -fdiagnostics-color -ffunction-sections -fdata-sections -O3 >> -Wl,-z,nodelete -fuse-ld=gold -Wl,-O3 -Wl,--gc-sections -shared >> -Wl,-soname,libgo.so.11git -o tools/gollvm/libgo/libgo.so.11git ...*(omits >> all object files)...* -Wl,-rpath,"\$ORIGIN/../lib" -lpthread -lm >> -fsplit-stack && : >> >> ... ... >> >> /usr/bin/ld.gold: error: >> tools/gollvm/libgo/CMakeFiles/libffi_piclib.dir/libffi/src/x86/ffi64.c.o: >> failed to match split-stack sequence at section 22 offset 0 >> >> /usr/bin/ld.gold: error: >> tools/gollvm/libgo/CMakeFiles/libffi_piclib.dir/libffi/src/x86/ffi64.c.o: >> failed to match split-stack sequence at section 26 offset 0 >> >> /usr/bin/ld.gold: error: >> tools/gollvm/libgo/CMakeFiles/libffi_piclib.dir/libffi/src/x86/ffiw64.c.o: >> failed to match split-stack sequence at section 16 offset 0 >> >> collect2: error: ld returned 1 exit status >> >> [2429/2600] Linking C static library tools/gollvm/libgo/libgo.a >> >> ninja: build stopped: subcommand failed. >> >> On Wednesday, May 27, 2020 at 10:36:23 PM UTC+8, Than McIntosh wrote: >> >>> >> I can successfully compile and link gollvm by setting >>> CMAKE_C_FLAGS="-fcf-protection=none". >>> >>> The manual override of CMAKE_C_FLAGS shouldn't be needed, if you rerun >>> cmake from a clean slate (removing the CMakeCache.txt, etc) it should >>> detect that "-fcf-protection=branch" is hard-wired on, and will add the >>> right flags under the hood to work around it. >>> >>> >>root@a78010e8da5d:~# go version >>> >>go: symbol lookup error: >>> /root/llvm-project/install-release/lib64/libgo.so.11git: undefined symbol: >>> __go_getcontext >>> >>> This symbol is defined in an assembly source file in libgo. What's >>> happening is that by setting CMAKE_C_FLAGS="-fcf-protection=none" but not >>> also setting CMAKE_ASM_FLAGS="-fcf-protection=none" you've introduced a >>> discrepancy between the C and Assembly compiles in libgo. If you >>> set CMAKE_C_FLAGS, you should also set CMAKE_ASM_FLAGS. >>> >>> Thanks, Than >>> >>> >>> On Wed, May 27, 2020 at 10:02 AM Yuan Ting <yuan...@ict.ac.cn> wrote: >>> >> Thank you for your guidance, now I can successfully compile and link >>>> gollvm by setting CMAKE_C_FLAGS="-fcf-protection=none". But after >>>> installing gollvm, there is still a weird problem: >>>> >>>> root@a78010e8da5d:~# go version >>>> go: symbol lookup error: >>>> /root/llvm-project/install-release/lib64/libgo.so.11git: undefined symbol: >>>> __go_getcontext >>>> >>>> On Wednesday, May 27, 2020 at 12:01:06 AM UTC+8, Than McIntosh wrote: >>>>> >>>>> >>>>> This looks exactly like the bug in >>>>> https://github.com/golang/go/issues/38728. The prolog of the function >>>>> contains >>>>> >>>>> 0: f3 0f 1e fa endbr64 >>>>> >>>>> which is confusing the gold linker. This instruction doesn't get added >>>>> unless the host compiler has "-fcf-protection=branch" turned on. I would >>>>> suggest deleting and recreating your build area or removing your >>>>> CMakeCache.txt file to insure that you have a rebuild from a clean start. >>>>> >>>>> Thanks, Than >>>>> >>>>> >>>>> On Tue, May 26, 2020 at 11:00 AM Yuan Ting <yuan...@ict.ac.cn> wrote: >>>>> >>>>>> OK, as follows >>>>>> >>>>>> ./tools/gollvm/libgo/CMakeFiles/libgo_c_piclib.dir/__/gofrontend/libgo/go/syscall/errno.c.o: >>>>>> >>>>>> file format elf64-x86-64 >>>>>> >>>>>> >>>>>> Disassembly of section .text.syscall.GetErrno: >>>>>> >>>>>> 0000000000000000 <syscall.GetErrno>: >>>>>> 0: f3 0f 1e fa endbr64 >>>>>> 4: 64 48 3b 24 25 70 00 cmp %fs:0x70,%rsp >>>>>> b: 00 00 >>>>>> d: 72 11 jb 20 <syscall.GetErrno+0x20> >>>>>> f: 48 83 ec 08 sub $0x8,%rsp >>>>>> 13: e8 00 00 00 00 callq 18 <syscall.GetErrno+0x18> >>>>>> 14: R_X86_64_PLT32 __errno_location-0x4 >>>>>> 18: 48 63 00 movslq (%rax),%rax >>>>>> 1b: 48 83 c4 08 add $0x8,%rsp >>>>>> 1f: c3 retq >>>>>> 20: 41 ba 08 00 00 00 mov $0x8,%r10d >>>>>> 26: 45 31 db xor %r11d,%r11d >>>>>> 29: e8 00 00 00 00 callq 2e <syscall.GetErrno+0x2e> >>>>>> 2a: R_X86_64_PLT32 __morestack-0x4 >>>>>> 2e: c3 retq >>>>>> 2f: f3 0f 1e fa endbr64 >>>>>> 33: eb da jmp f <syscall.GetErrno+0xf> >>>>>> >>>>>> On Tuesday, May 26, 2020 at 10:44:03 PM UTC+8, Than McIntosh wrote: >>>>>>> >>>>>>> OK. Just to confirm, what do you see from >>>>>>> >>>>>>> objdump -dr >>>>>>> ./tools/gollvm/libgo/CMakeFiles/libgo_c_piclib.dir/__/gofrontend/libgo/go/syscall/errno.c.o >>>>>>> >>>>>>> for the prolog of syscall.Geterrno. Should be something like >>>>>>> >>>>>>> Disassembly of section .text.syscall.GetErrno: >>>>>>> >>>>>>> 0000000000000000 <syscall.GetErrno>: >>>>>>> 0: 64 48 3b 24 25 70 00 cmp %fs:0x70,%rsp >>>>>>> 7: 00 00 >>>>>>> 9: 72 11 jb 1c <syscall.GetErrno+0x1c> >>>>>>> b: 48 83 ec 08 sub $0x8,%rsp >>>>>>> f: e8 00 00 00 00 callq 14 <syscall.GetErrno+0x14> >>>>>>> 10: R_X86_64_PLT32 __errno_location-0x4 >>>>>>> >>>>>>> Thanks, Than >>>>>>> >>>>>>> ? >>>>>>> >>>>>>> On Tue, May 26, 2020 at 10:05 AM Yuan Ting <yuan...@ict.ac.cn> >>>>>>> wrote: >>>>>>> >>>>>>>> Fine, that is >>>>>>>> >>>>>>>> [1/3] /usr/bin/cc -D_DEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS >>>>>>>> -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -Itools/gollvm/libgo >>>>>>>> -I/root/llvm-project/llvm/tools/gollvm/libgo -Iinclude >>>>>>>> -I/root/llvm-project/llvm/include >>>>>>>> -I/root/llvm-project/llvm/tools/gollvm/gofrontend/libgo/runtime >>>>>>>> -Itools/gollvm/libgo/runtime >>>>>>>> -I/root/llvm-project/llvm/tools/gollvm/libgo/libbacktrace -fPIC >>>>>>>> -Werror=date-time -Wall -Wextra -Wno-unused-parameter -Wwrite-strings >>>>>>>> -Wno-missing-field-initializers -pedantic -Wno-long-long >>>>>>>> -Wimplicit-fallthrough -Wno-comment -fdiagnostics-color >>>>>>>> -ffunction-sections >>>>>>>> -fdata-sections -O3 -fPIC -g -Wno-zero-length-array -fsplit-stack >>>>>>>> -D_GNU_SOURCE -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -UNDEBUG >>>>>>>> -MD -MT >>>>>>>> tools/gollvm/libgo/CMakeFiles/libgo_c_piclib.dir/__/gofrontend/libgo/go/syscall/errno.c.o >>>>>>>> >>>>>>>> -MF >>>>>>>> tools/gollvm/libgo/CMakeFiles/libgo_c_piclib.dir/__/gofrontend/libgo/go/syscall/errno.c.o.d >>>>>>>> >>>>>>>> -o >>>>>>>> tools/gollvm/libgo/CMakeFiles/libgo_c_piclib.dir/__/gofrontend/libgo/go/syscall/errno.c.o >>>>>>>> >>>>>>>> -c >>>>>>>> /root/llvm-project/llvm/tools/gollvm/gofrontend/libgo/go/syscall/errno.c >>>>>>>> >>>>>>>> On Tuesday, May 26, 2020 at 8:41:18 PM UTC+8, Than McIntosh wrote: >>>>>>>>> >>>>>>>>> OK. >>>>>>>>> >>>>>>>>> I'm wondering if for some reason the fix I put in is not effective. >>>>>>>>> >>>>>>>>> Could you please try this in your build area: >>>>>>>>> >>>>>>>>> rm >>>>>>>>> ./tools/gollvm/libgo/CMakeFiles/libgo_c_piclib.dir/__/gofrontend/libgo/go/syscall/errno.c.o >>>>>>>>> ninja -v libgo_all >>>>>>>>> >>>>>>>>> and post the compile line for errno.c? >>>>>>>>> >>>>>>>>> Thanks, Than >>>>>>>>> >>>>>>>>> >>>>>>>>> >>>>>>>>> >>>>>>>>> On Tue, May 26, 2020 at 7:21 AM Yuan Ting <yuan...@ict.ac.cn> >>>>>>>>> wrote: >>>>>>>>> >>>>>>>>>> Yes, I'm sure I fetched the last version of gollvm, >>>>>>>>>> i.e. 0edc44a02852dd0d56cac35163a45634b497d6cd >>>>>>>>>> >>>>>>>>>> On Tuesday, May 26, 2020 at 6:55:08 PM UTC+8, Than McIntosh wrote: >>>>>>>>>>> >>>>>>>>>>> Hello, >>>>>>>>>>> >>>>>>>>>>> The ld.gold error message looks a lot like one reported in a >>>>>>>>>>> previous bug, https://github.com/golang/go/issues/38728. >>>>>>>>>>> >>>>>>>>>>> Can you please check to make sure that your client is sync'd >>>>>>>>>>> past the CLs that fix this issue, >>>>>>>>>>> e.g. 0edc44a02852dd0d56cac35163a45634b497d6cd. >>>>>>>>>>> >>>>>>>>>>> Thanks, Than >>>>>>>>>>> >>>>>>>>>>> >>>>>>>>>>> On Mon, May 25, 2020 at 10:15 PM Yuan Ting <yuan...@ict.ac.cn> >>>>>>>>>>> wrote: >>>>>>>>>>> >>>>>>>>>>>> I tried to build gollvm in a docker container (the image is >>>>>>>>>>>> based on ubuntu 20.04, and the host OS is MacOS catalina). I >>>>>>>>>>>> configured >>>>>>>>>>>> llvm by >>>>>>>>>>>> >>>>>>>>>>>> SHELL=/bin/sh cmake -DCMAKE_BUILD_TYPE=Release >>>>>>>>>>>> -DLLVM_TARGETS_TO_BUILD=X86 -DLLVM_ENABLE_ASSERTIONS=On >>>>>>>>>>>> -DLLVM_ENABLE_RTTI=On -DLLVM_USE_LINKER=gold -G Ninja ../llvm >>>>>>>>>>>> >>>>>>>>>>>> and then build and install gollvm by >>>>>>>>>>>> >>>>>>>>>>>> ninja gollvm && ninja install-gollvm >>>>>>>>>>>> >>>>>>>>>>>> after a while, I encountered >>>>>>>>>>>> >>>>>>>>>>>> ... >>>>>>>>>>>> >>>>>>>>>>>> error: At most two relocations per offset are supported >>>>>>>>>>>> >>>>>>>>>>>> error: At most two relocations per offset are supported >>>>>>>>>>>> >>>>>>>>>>>> error: At most two relocations per offset are supported >>>>>>>>>>>> >>>>>>>>>>>> [212/1279] Creating >>>>>>>>>>>> /root/llvm-project/build-debug/tools/gollvm/libgo/tmp-sigtab.go >>>>>>>>>>>> >>>>>>>>>>>> FAILED: tools/gollvm/libgo/tmp-sigtab.go >>>>>>>>>>>> >>>>>>>>>>>> cd /root/llvm-project/build-debug/tools/gollvm/libgo && >>>>>>>>>>>> GOARCH=amd64 GOOS=linux /bin/sh >>>>>>>>>>>> /root/llvm-project/llvm/tools/gollvm/libgo/capturescript.sh >>>>>>>>>>>> /root/llvm-project/llvm/tools/gollvm/gofrontend/libgo/mksigtab.sh >>>>>>>>>>>> /root/llvm-project/build-debug/tools/gollvm/libgo/tmp-sigtab.go >>>>>>>>>>>> >>>>>>>>>>>> error: no SHELL setting >>>>>>>>>>>> >>>>>>>>>>>> [214/1279] Creating >>>>>>>>>>>> /root/llvm-project/build-debug/tools/gollvm/libgo/tmp-sysinfo.go >>>>>>>>>>>> >>>>>>>>>>>> ninja: build stopped: subcommand failed. >>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>>> By add SHELL=/bin/sh, the errors above seems to be skipped but >>>>>>>>>>>> another period of time: >>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>>> ... >>>>>>>>>>>> >>>>>>>>>>>> /usr/bin/ld.gold: error: >>>>>>>>>>>> tools/gollvm/libgo/CMakeFiles/libgo_c_piclib.dir/__/gofrontend/libgo/go/syscall/errno.c.o: >>>>>>>>>>>> >>>>>>>>>>>> failed to match split-stack sequence at section 4 offset 0 >>>>>>>>>>>> >>>>>>>>>>>> /usr/bin/ld.gold: error: >>>>>>>>>>>> tools/gollvm/libgo/CMakeFiles/libgo_c_piclib.dir/__/gofrontend/libgo/go/syscall/errno.c.o: >>>>>>>>>>>> >>>>>>>>>>>> failed to match split-stack sequence at section 6 offset 0 >>>>>>>>>>>> >>>>>>>>>>>> /usr/bin/ld.gold: error: >>>>>>>>>>>> tools/gollvm/libgo/CMakeFiles/libgo_c_piclib.dir/__/gofrontend/libgo/go/syscall/signame.c.o: >>>>>>>>>>>> >>>>>>>>>>>> failed to match split-stack sequence at section 5 offset 0 >>>>>>>>>>>> >>>>>>>>>>>> /usr/bin/ld.gold: error: >>>>>>>>>>>> tools/gollvm/libgo/CMakeFiles/libbacktrace_piclib.dir/libbacktrace/backtrace.c.o: >>>>>>>>>>>> >>>>>>>>>>>> failed to match split-stack sequence at section 4 offset 0 >>>>>>>>>>>> >>>>>>>>>>>> /usr/bin/ld.gold: error: >>>>>>>>>>>> tools/gollvm/libgo/CMakeFiles/libbacktrace_piclib.dir/libbacktrace/backtrace.c.o: >>>>>>>>>>>> >>>>>>>>>>>> failed to match split-stack sequence at section 6 offset 0 >>>>>>>>>>>> >>>>>>>>>>>> /usr/bin/ld.gold: error: >>>>>>>>>>>> tools/gollvm/libgo/CMakeFiles/libbacktrace_piclib.dir/libbacktrace/dwarf.c.o: >>>>>>>>>>>> >>>>>>>>>>>> failed to match split-stack sequence at section 18 offset 0 >>>>>>>>>>>> >>>>>>>>>>>> /usr/bin/ld.gold: error: >>>>>>>>>>>> tools/gollvm/libgo/CMakeFiles/libbacktrace_piclib.dir/libbacktrace/dwarf.c.o: >>>>>>>>>>>> >>>>>>>>>>>> failed to match split-stack sequence at section 79 offset 0 >>>>>>>>>>>> >>>>>>>>>>>> ... >>>>>>>>>>>> >>>>>>>>>>>> /usr/bin/ld.gold: error: >>>>>>>>>>>> tools/gollvm/libgo/CMakeFiles/libffi_piclib.dir/libffi/src/x86/ffi64.c.o: >>>>>>>>>>>> >>>>>>>>>>>> failed to match split-stack sequence at section 22 offset 0 >>>>>>>>>>>> >>>>>>>>>>>> /usr/bin/ld.gold: error: >>>>>>>>>>>> tools/gollvm/libgo/CMakeFiles/libffi_piclib.dir/libffi/src/x86/ffi64.c.o: >>>>>>>>>>>> >>>>>>>>>>>> failed to match split-stack sequence at section 26 offset 0 >>>>>>>>>>>> >>>>>>>>>>>> /usr/bin/ld.gold: error: >>>>>>>>>>>> tools/gollvm/libgo/CMakeFiles/libffi_piclib.dir/libffi/src/x86/ffiw64.c.o: >>>>>>>>>>>> >>>>>>>>>>>> failed to match split-stack sequence at section 16 offset 0 >>>>>>>>>>>> >>>>>>>>>>>> collect2: error: ld returned 1 exit status >>>>>>>>>>>> >>>>>>>>>>>> [901/1066] Linking C static library tools/gollvm/libgo/libgo.a >>>>>>>>>>>> >>>>>>>>>>>> ninja: build stopped: subcommand failed. >>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>>> I'm not sure the error is caused by the container environment >>>>>>>>>>>> or my configurations/other prerequisites. >>>>>>>>>>>> >>>>>>>>>>>> -- >>>>>>>>>>>> You received this message because you are subscribed to the >>>>>>>>>>>> Google Groups "golang-nuts" group. >>>>>>>>>>>> To unsubscribe from this group and stop receiving emails from >>>>>>>>>>>> it, send an email to golan...@googlegroups.com. >>>>>>>>>>>> To view this discussion on the web visit >>>>>>>>>>>> https://groups.google.com/d/msgid/golang-nuts/23309451-cb0a-4f7b-93a1-27038187302a%40googlegroups.com >>>>>>>>>>>> >>>>>>>>>>>> <https://groups.google.com/d/msgid/golang-nuts/23309451-cb0a-4f7b-93a1-27038187302a%40googlegroups.com?utm_medium=email&utm_source=footer> >>>>>>>>>>>> . >>>>>>>>>>>> >>>>>>>>>>> -- >>>>>>>>>> You received this message because you are subscribed to the >>>>>>>>>> Google Groups "golang-nuts" group. >>>>>>>>>> To unsubscribe from this group and stop receiving emails from it, >>>>>>>>>> send an email to golan...@googlegroups.com. >>>>>>>>>> To view this discussion on the web visit >>>>>>>>>> https://groups.google.com/d/msgid/golang-nuts/1ffd3fb4-e739-4f13-9168-565e4c64bc70%40googlegroups.com >>>>>>>>>> >>>>>>>>>> <https://groups.google.com/d/msgid/golang-nuts/1ffd3fb4-e739-4f13-9168-565e4c64bc70%40googlegroups.com?utm_medium=email&utm_source=footer> >>>>>>>>>> . >>>>>>>>>> >>>>>>>>> -- >>>>>>>> You received this message because you are subscribed to the Google >>>>>>>> Groups "golang-nuts" group. >>>>>>>> To unsubscribe from this group and stop receiving emails from it, >>>>>>>> send an email to golan...@googlegroups.com. >>>>>>>> To view this discussion on the web visit >>>>>>>> https://groups.google.com/d/msgid/golang-nuts/2e9d2af9-7d78-443b-9cda-34d7b9c41623%40googlegroups.com >>>>>>>> >>>>>>>> <https://groups.google.com/d/msgid/golang-nuts/2e9d2af9-7d78-443b-9cda-34d7b9c41623%40googlegroups.com?utm_medium=email&utm_source=footer> >>>>>>>> . >>>>>>>> >>>>>>> -- >>>>>> You received this message because you are subscribed to the Google >>>>>> Groups "golang-nuts" group. >>>>>> To unsubscribe from this group and stop receiving emails from it, >>>>>> send an email to golan...@googlegroups.com. >>>>>> To view this discussion on the web visit >>>>>> https://groups.google.com/d/msgid/golang-nuts/975b8157-5795-4c09-9aed-91278aa5f0e6%40googlegroups.com >>>>>> >>>>>> <https://groups.google.com/d/msgid/golang-nuts/975b8157-5795-4c09-9aed-91278aa5f0e6%40googlegroups.com?utm_medium=email&utm_source=footer> >>>>>> . >>>>>> >>>>> -- >>>> You received this message because you are subscribed to the Google >>>> Groups "golang-nuts" group. >>>> To unsubscribe from this group and stop receiving emails from it, send >>>> an email to golan...@googlegroups.com. >>>> >>> To view this discussion on the web visit >>>> https://groups.google.com/d/msgid/golang-nuts/51910be4-ce4a-49a0-91f4-1e1cc63902f6%40googlegroups.com >>>> >>>> <https://groups.google.com/d/msgid/golang-nuts/51910be4-ce4a-49a0-91f4-1e1cc63902f6%40googlegroups.com?utm_medium=email&utm_source=footer> >>>> . >>>> >>> -- You received this message because you are subscribed to the Google Groups "golang-nuts" group. To unsubscribe from this group and stop receiving emails from it, send an email to golang-nuts+unsubscr...@googlegroups.com. To view this discussion on the web visit https://groups.google.com/d/msgid/golang-nuts/4e8f0e19-76e2-4de3-9e5e-42561c80a525o%40googlegroups.com.