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 > <javascript:>> 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 <javascript:>. >> 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 golang-nuts+unsubscr...@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.