Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

cmd/ld: support R_X86_64_64 relocation for dynamic symbol #4272

Closed
taruti opened this issue Oct 21, 2012 · 3 comments
Closed

cmd/ld: support R_X86_64_64 relocation for dynamic symbol #4272

taruti opened this issue Oct 21, 2012 · 3 comments
Milestone

Comments

@taruti
Copy link
Contributor

taruti commented Oct 21, 2012

When trying to wrap a library using cgo on amd64 I keep getting
unexpected R_X86_64_64 relocation for dynamic symbol. The C sources are
in the same directory as the go source and get built by "go
test (/install)". The error occurs on both go1 and tip.

This was posted to -nuts and it was suggested that an issue should be filed.

Code: https://github.com/taruti/tidy-html5/tree/master/go/tidyhtml5

Debugging:

taruti@gate:~/go-work/src/github.com/taruti/tidy-html5/go/tidyhtml5$ go
test -x
WORK=/tmp/go-build850086970
mkdir -p
$WORK/github.com/taruti/tidy-html5/go/tidyhtml5/_test/github.com/taruti/tidy-html5/go/
mkdir -p $WORK/github.com/taruti/tidy-html5/go/tidyhtml5/_test/
cd /home/taruti/go-work/src/github.com/taruti/tidy-html5/go/tidyhtml5
/usr/lib/go/pkg/tool/linux_amd64/cgo -objdir
$WORK/github.com/taruti/tidy-html5/go/tidyhtml5/_test/ -- -I
$WORK/github.com/taruti/tidy-html5/go/tidyhtml5/_test/ tidyhtml5.go
/usr/lib/go/pkg/tool/linux_amd64/6c -FVw -I
$WORK/github.com/taruti/tidy-html5/go/tidyhtml5/_test/ -I
/usr/lib/go/pkg/linux_amd64 -o
$WORK/github.com/taruti/tidy-html5/go/tidyhtml5/_test/_cgo_defun.6
-DGOOS_linux -DGOARCH_amd64
$WORK/github.com/taruti/tidy-html5/go/tidyhtml5/_test/_cgo_defun.c
gcc -I . -g -O2 -fPIC -m64 -pthread -print-libgcc-file-name
gcc -I . -g -O2 -fPIC -m64 -pthread -I
$WORK/github.com/taruti/tidy-html5/go/tidyhtml5/_test/ -o
$WORK/github.com/taruti/tidy-html5/go/tidyhtml5/_test/_cgo_main.o -c
$WORK/github.com/taruti/tidy-html5/go/tidyhtml5/_test/_cgo_main.c
gcc -I . -g -O2 -fPIC -m64 -pthread -I
$WORK/github.com/taruti/tidy-html5/go/tidyhtml5/_test/ -o
$WORK/github.com/taruti/tidy-html5/go/tidyhtml5/_test/_cgo_export.o -c
$WORK/github.com/taruti/tidy-html5/go/tidyhtml5/_test/_cgo_export.c
gcc -I . -g -O2 -fPIC -m64 -pthread -I
$WORK/github.com/taruti/tidy-html5/go/tidyhtml5/_test/ -o
$WORK/github.com/taruti/tidy-html5/go/tidyhtml5/_test/tidyhtml5.cgo2.o
-c
$WORK/github.com/taruti/tidy-html5/go/tidyhtml5/_test/tidyhtml5.cgo2.c
gcc -I . -g -O2 -fPIC -m64 -pthread -I
$WORK/github.com/taruti/tidy-html5/go/tidyhtml5/_test/ -o
$WORK/github.com/taruti/tidy-html5/go/tidyhtml5/_test/access.o -c
./access.c
gcc -I . -g -O2 -fPIC -m64 -pthread -I
$WORK/github.com/taruti/tidy-html5/go/tidyhtml5/_test/ -o
$WORK/github.com/taruti/tidy-html5/go/tidyhtml5/_test/alloc.o -c
./alloc.c
gcc -I . -g -O2 -fPIC -m64 -pthread -I
$WORK/github.com/taruti/tidy-html5/go/tidyhtml5/_test/ -o
$WORK/github.com/taruti/tidy-html5/go/tidyhtml5/_test/attrask.o -c
./attrask.c
gcc -I . -g -O2 -fPIC -m64 -pthread -I
$WORK/github.com/taruti/tidy-html5/go/tidyhtml5/_test/ -o
$WORK/github.com/taruti/tidy-html5/go/tidyhtml5/_test/attrdict.o -c
./attrdict.c
gcc -I . -g -O2 -fPIC -m64 -pthread -I
$WORK/github.com/taruti/tidy-html5/go/tidyhtml5/_test/ -o
$WORK/github.com/taruti/tidy-html5/go/tidyhtml5/_test/attrget.o -c
./attrget.c
gcc -I . -g -O2 -fPIC -m64 -pthread -I
$WORK/github.com/taruti/tidy-html5/go/tidyhtml5/_test/ -o
$WORK/github.com/taruti/tidy-html5/go/tidyhtml5/_test/attrs.o -c
./attrs.c
gcc -I . -g -O2 -fPIC -m64 -pthread -I
$WORK/github.com/taruti/tidy-html5/go/tidyhtml5/_test/ -o
$WORK/github.com/taruti/tidy-html5/go/tidyhtml5/_test/buffio.o -c
./buffio.c
gcc -I . -g -O2 -fPIC -m64 -pthread -I
$WORK/github.com/taruti/tidy-html5/go/tidyhtml5/_test/ -o
$WORK/github.com/taruti/tidy-html5/go/tidyhtml5/_test/clean.o -c
./clean.c
gcc -I . -g -O2 -fPIC -m64 -pthread -I
$WORK/github.com/taruti/tidy-html5/go/tidyhtml5/_test/ -o
$WORK/github.com/taruti/tidy-html5/go/tidyhtml5/_test/config.o -c
./config.c
gcc -I . -g -O2 -fPIC -m64 -pthread -I
$WORK/github.com/taruti/tidy-html5/go/tidyhtml5/_test/ -o
$WORK/github.com/taruti/tidy-html5/go/tidyhtml5/_test/entities.o -c
./entities.c
gcc -I . -g -O2 -fPIC -m64 -pthread -I
$WORK/github.com/taruti/tidy-html5/go/tidyhtml5/_test/ -o
$WORK/github.com/taruti/tidy-html5/go/tidyhtml5/_test/fileio.o -c
./fileio.c
gcc -I . -g -O2 -fPIC -m64 -pthread -I
$WORK/github.com/taruti/tidy-html5/go/tidyhtml5/_test/ -o
$WORK/github.com/taruti/tidy-html5/go/tidyhtml5/_test/gdoc.o -c ./gdoc.c
gcc -I . -g -O2 -fPIC -m64 -pthread -I
$WORK/github.com/taruti/tidy-html5/go/tidyhtml5/_test/ -o
$WORK/github.com/taruti/tidy-html5/go/tidyhtml5/_test/istack.o -c
./istack.c
gcc -I . -g -O2 -fPIC -m64 -pthread -I
$WORK/github.com/taruti/tidy-html5/go/tidyhtml5/_test/ -o
$WORK/github.com/taruti/tidy-html5/go/tidyhtml5/_test/lexer.o -c
./lexer.c
gcc -I . -g -O2 -fPIC -m64 -pthread -I
$WORK/github.com/taruti/tidy-html5/go/tidyhtml5/_test/ -o
$WORK/github.com/taruti/tidy-html5/go/tidyhtml5/_test/localize.o -c
./localize.c
gcc -I . -g -O2 -fPIC -m64 -pthread -I
$WORK/github.com/taruti/tidy-html5/go/tidyhtml5/_test/ -o
$WORK/github.com/taruti/tidy-html5/go/tidyhtml5/_test/mappedio.o -c
./mappedio.c
gcc -I . -g -O2 -fPIC -m64 -pthread -I
$WORK/github.com/taruti/tidy-html5/go/tidyhtml5/_test/ -o
$WORK/github.com/taruti/tidy-html5/go/tidyhtml5/_test/parser.o -c
./parser.c
gcc -I . -g -O2 -fPIC -m64 -pthread -I
$WORK/github.com/taruti/tidy-html5/go/tidyhtml5/_test/ -o
$WORK/github.com/taruti/tidy-html5/go/tidyhtml5/_test/pprint.o -c
./pprint.c
gcc -I . -g -O2 -fPIC -m64 -pthread -I
$WORK/github.com/taruti/tidy-html5/go/tidyhtml5/_test/ -o
$WORK/github.com/taruti/tidy-html5/go/tidyhtml5/_test/streamio.o -c
./streamio.c
gcc -I . -g -O2 -fPIC -m64 -pthread -I
$WORK/github.com/taruti/tidy-html5/go/tidyhtml5/_test/ -o
$WORK/github.com/taruti/tidy-html5/go/tidyhtml5/_test/tagask.o -c
./tagask.c
gcc -I . -g -O2 -fPIC -m64 -pthread -I
$WORK/github.com/taruti/tidy-html5/go/tidyhtml5/_test/ -o
$WORK/github.com/taruti/tidy-html5/go/tidyhtml5/_test/tags.o -c ./tags.c
gcc -I . -g -O2 -fPIC -m64 -pthread -I
$WORK/github.com/taruti/tidy-html5/go/tidyhtml5/_test/ -o
$WORK/github.com/taruti/tidy-html5/go/tidyhtml5/_test/tidylib.o -c
./tidylib.c
gcc -I . -g -O2 -fPIC -m64 -pthread -I
$WORK/github.com/taruti/tidy-html5/go/tidyhtml5/_test/ -o
$WORK/github.com/taruti/tidy-html5/go/tidyhtml5/_test/tmbstr.o -c
./tmbstr.c
gcc -I . -g -O2 -fPIC -m64 -pthread -I
$WORK/github.com/taruti/tidy-html5/go/tidyhtml5/_test/ -o
$WORK/github.com/taruti/tidy-html5/go/tidyhtml5/_test/utf8.o -c ./utf8.c
gcc -I . -g -O2 -fPIC -m64 -pthread -o
$WORK/github.com/taruti/tidy-html5/go/tidyhtml5/_test/_cgo_.o
$WORK/github.com/taruti/tidy-html5/go/tidyhtml5/_test/_cgo_main.o
$WORK/github.com/taruti/tidy-html5/go/tidyhtml5/_test/_cgo_export.o
$WORK/github.com/taruti/tidy-html5/go/tidyhtml5/_test/tidyhtml5.cgo2.o
$WORK/github.com/taruti/tidy-html5/go/tidyhtml5/_test/access.o
$WORK/github.com/taruti/tidy-html5/go/tidyhtml5/_test/alloc.o
$WORK/github.com/taruti/tidy-html5/go/tidyhtml5/_test/attrask.o
$WORK/github.com/taruti/tidy-html5/go/tidyhtml5/_test/attrdict.o
$WORK/github.com/taruti/tidy-html5/go/tidyhtml5/_test/attrget.o
$WORK/github.com/taruti/tidy-html5/go/tidyhtml5/_test/attrs.o
$WORK/github.com/taruti/tidy-html5/go/tidyhtml5/_test/buffio.o
$WORK/github.com/taruti/tidy-html5/go/tidyhtml5/_test/clean.o
$WORK/github.com/taruti/tidy-html5/go/tidyhtml5/_test/config.o
$WORK/github.com/taruti/tidy-html5/go/tidyhtml5/_test/entities.o
$WORK/github.com/taruti/tidy-html5/go/tidyhtml5/_test/fileio.o
$WORK/github.com/taruti/tidy-html5/go/tidyhtml5/_test/gdoc.o
$WORK/github.com/taruti/tidy-html5/go/tidyhtml5/_test/istack.o
$WORK/github.com/taruti/tidy-html5/go/tidyhtml5/_test/lexer.o
$WORK/github.com/taruti/tidy-html5/go/tidyhtml5/_test/localize.o
$WORK/github.com/taruti/tidy-html5/go/tidyhtml5/_test/mappedio.o
$WORK/github.com/taruti/tidy-html5/go/tidyhtml5/_test/parser.o
$WORK/github.com/taruti/tidy-html5/go/tidyhtml5/_test/pprint.o
$WORK/github.com/taruti/tidy-html5/go/tidyhtml5/_test/streamio.o
$WORK/github.com/taruti/tidy-html5/go/tidyhtml5/_test/tagask.o
$WORK/github.com/taruti/tidy-html5/go/tidyhtml5/_test/tags.o
$WORK/github.com/taruti/tidy-html5/go/tidyhtml5/_test/tidylib.o
$WORK/github.com/taruti/tidy-html5/go/tidyhtml5/_test/tmbstr.o
$WORK/github.com/taruti/tidy-html5/go/tidyhtml5/_test/utf8.o
/usr/lib/go/pkg/tool/linux_amd64/cgo -objdir
$WORK/github.com/taruti/tidy-html5/go/tidyhtml5/_test/ -dynimport
$WORK/github.com/taruti/tidy-html5/go/tidyhtml5/_test/_cgo_.o -dynout
$WORK/github.com/taruti/tidy-html5/go/tidyhtml5/_test/_cgo_import.c
/usr/lib/go/pkg/tool/linux_amd64/6c -FVw -I
$WORK/github.com/taruti/tidy-html5/go/tidyhtml5/_test/ -I
/usr/lib/go/pkg/linux_amd64 -o
$WORK/github.com/taruti/tidy-html5/go/tidyhtml5/_test/_cgo_import.6
-DGOOS_linux -DGOARCH_amd64
$WORK/github.com/taruti/tidy-html5/go/tidyhtml5/_test/_cgo_import.c
gcc -I . -g -O2 -fPIC -m64 -pthread -o
$WORK/github.com/taruti/tidy-html5/go/tidyhtml5/_test/_all.o
$WORK/github.com/taruti/tidy-html5/go/tidyhtml5/_test/_cgo_export.o
$WORK/github.com/taruti/tidy-html5/go/tidyhtml5/_test/tidyhtml5.cgo2.o
$WORK/github.com/taruti/tidy-html5/go/tidyhtml5/_test/access.o
$WORK/github.com/taruti/tidy-html5/go/tidyhtml5/_test/alloc.o
$WORK/github.com/taruti/tidy-html5/go/tidyhtml5/_test/attrask.o
$WORK/github.com/taruti/tidy-html5/go/tidyhtml5/_test/attrdict.o
$WORK/github.com/taruti/tidy-html5/go/tidyhtml5/_test/attrget.o
$WORK/github.com/taruti/tidy-html5/go/tidyhtml5/_test/attrs.o
$WORK/github.com/taruti/tidy-html5/go/tidyhtml5/_test/buffio.o
$WORK/github.com/taruti/tidy-html5/go/tidyhtml5/_test/clean.o
$WORK/github.com/taruti/tidy-html5/go/tidyhtml5/_test/config.o
$WORK/github.com/taruti/tidy-html5/go/tidyhtml5/_test/entities.o
$WORK/github.com/taruti/tidy-html5/go/tidyhtml5/_test/fileio.o
$WORK/github.com/taruti/tidy-html5/go/tidyhtml5/_test/gdoc.o
$WORK/github.com/taruti/tidy-html5/go/tidyhtml5/_test/istack.o
$WORK/github.com/taruti/tidy-html5/go/tidyhtml5/_test/lexer.o
$WORK/github.com/taruti/tidy-html5/go/tidyhtml5/_test/localize.o
$WORK/github.com/taruti/tidy-html5/go/tidyhtml5/_test/mappedio.o
$WORK/github.com/taruti/tidy-html5/go/tidyhtml5/_test/parser.o
$WORK/github.com/taruti/tidy-html5/go/tidyhtml5/_test/pprint.o
$WORK/github.com/taruti/tidy-html5/go/tidyhtml5/_test/streamio.o
$WORK/github.com/taruti/tidy-html5/go/tidyhtml5/_test/tagask.o
$WORK/github.com/taruti/tidy-html5/go/tidyhtml5/_test/tags.o
$WORK/github.com/taruti/tidy-html5/go/tidyhtml5/_test/tidylib.o
$WORK/github.com/taruti/tidy-html5/go/tidyhtml5/_test/tmbstr.o
$WORK/github.com/taruti/tidy-html5/go/tidyhtml5/_test/utf8.o -Wl,-r
-nostdlib /usr/lib/gcc/x86_64-linux-gnu/4.6/libgcc.a
/usr/lib/go/pkg/tool/linux_amd64/6g -o
$WORK/github.com/taruti/tidy-html5/go/tidyhtml5/_test/_go_.6 -p
github.com/taruti/tidy-html5/go/tidyhtml5 -D
_/home/taruti/go-work/src/github.com/taruti/tidy-html5/go/tidyhtml5 -I
$WORK ./tidyhtml5_test.go
$WORK/github.com/taruti/tidy-html5/go/tidyhtml5/_test/_cgo_gotypes.go
$WORK/github.com/taruti/tidy-html5/go/tidyhtml5/_test/tidyhtml5.cgo1.go
/usr/lib/go/pkg/tool/linux_amd64/pack grcP $WORK
$WORK/github.com/taruti/tidy-html5/go/tidyhtml5/_test/github.com/taruti/tidy-html5/go/tidyhtml5.a
$WORK/github.com/taruti/tidy-html5/go/tidyhtml5/_test/_go_.6
$WORK/github.com/taruti/tidy-html5/go/tidyhtml5/_test/_cgo_import.6
$WORK/github.com/taruti/tidy-html5/go/tidyhtml5/_test/_cgo_defun.6
$WORK/github.com/taruti/tidy-html5/go/tidyhtml5/_test/_all.o
cd $WORK/github.com/taruti/tidy-html5/go/tidyhtml5/_test
/usr/lib/go/pkg/tool/linux_amd64/6g -o ./_go_.6 -p testmain -D  -I . -I
$WORK ./_testmain.go
/usr/lib/go/pkg/tool/linux_amd64/pack grcP $WORK ./main.a ./_go_.6
cd .
/usr/lib/go/pkg/tool/linux_amd64/6l -o
$WORK/github.com/taruti/tidy-html5/go/tidyhtml5/_test/tidyhtml5.test -L
$WORK/github.com/taruti/tidy-html5/go/tidyhtml5/_test -L $WORK
$WORK/github.com/taruti/tidy-html5/go/tidyhtml5/_test/main.a
# testmain
github.com/taruti/tidy-html5/go/tidyhtml5(.data.rel.ro): unexpected
R_X86_64_64 relocation for dynamic symbol prvTidyParsePre
github.com/taruti/tidy-html5/go/tidyhtml5(.data.rel.ro): unexpected
R_X86_64_64 relocation for dynamic symbol prvTidyParsePre
github.com/taruti/tidy-html5/go/tidyhtml5(.data.rel.ro): unexpected
R_X86_64_64 relocation for dynamic symbol prvTidyParsePre
github.com/taruti/tidy-html5/go/tidyhtml5(.data.rel.ro): unexpected
R_X86_64_64 relocation for dynamic symbol prvTidyParsePre
$WORK/github.com/taruti/tidy-html5/go/tidyhtml5/_test/tidyhtml5.test
FAIL    github.com/taruti/tidy-html5/go/tidyhtml5 [build failed]
taruti@gate:~/go-work/src/github.com/taruti/tidy-html5/go/tidyhtml5$



And some more info:

# Library built with cgo with "go build" and "go install" with the C
  source files in the same directory.

taruti@gate:~/go-work/src/github.com/taruti/tidy-html5/go/tidyhtml5$ go
test
# testmain
/tmp/go-build100262425/github.com/taruti/tidy-html5/go/tidyhtml5/_test/github.com/taruti/tidy-html5/go/tidyhtml5.a(tags.o)(.data.rel.ro):
unexpected R_X86_64_64 relocation for dynamic symbol prvTidyParsePre
/tmp/go-build100262425/github.com/taruti/tidy-html5/go/tidyhtml5/_test/github.com/taruti/tidy-html5/go/tidyhtml5.a(tags.o)(.data.rel.ro):
unexpected R_X86_64_64 relocation for dynamic symbol prvTidyParsePre
/tmp/go-build100262425/github.com/taruti/tidy-html5/go/tidyhtml5/_test/github.com/taruti/tidy-html5/go/tidyhtml5.a(tags.o)(.data.rel.ro):
unexpected R_X86_64_64 relocation for dynamic symbol prvTidyParsePre
/tmp/go-build100262425/github.com/taruti/tidy-html5/go/tidyhtml5/_test/github.com/taruti/tidy-html5/go/tidyhtml5.a(tags.o)(.data.rel.ro):
unexpected R_X86_64_64 relocation for dynamic symbol prvTidyParsePre
FAIL       github.com/taruti/tidy-html5/go/tidyhtml5 [build failed]
taruti@gate:~/go-work/src/github.com/taruti/tidy-html5/go/tidyhtml5$ go
tool pack xv
~/go-work/pkg/linux_amd64/github.com/taruti/tidy-html5/go/tidyhtml5.a
tags.o parser.o
x - parser.o
x - tags.o
taruti@gate:~/go-work/src/github.com/taruti/tidy-html5/go/tidyhtml5$ nm
tags.o | grep prvTidyParsePre
                 U prvTidyParsePre
taruti@gate:~/go-work/src/github.com/taruti/tidy-html5/go/tidyhtml5$
objdump -x tags.o | grep prvTidyParsePre
0000000000000000         *UND*  0000000000000000 prvTidyParsePre
000000000000048a R_X86_64_GOTPCREL  prvTidyParsePre-0x0000000000000004
00000000000005d7 R_X86_64_GOTPCREL  prvTidyParsePre-0x0000000000000004
000000000000091b R_X86_64_GOTPCREL  prvTidyParsePre-0x0000000000000004
0000000000000de8 R_X86_64_64       prvTidyParsePre
00000000000010e8 R_X86_64_64       prvTidyParsePre
0000000000001128 R_X86_64_64       prvTidyParsePre
0000000000001928 R_X86_64_64       prvTidyParsePre
taruti@gate:~/go-work/src/github.com/taruti/tidy-html5/go/tidyhtml5$ nm
parser.o | grep prvTidyParsePre
0000000000001290 T prvTidyParsePre
taruti@gate:~/go-work/src/github.com/taruti/tidy-html5/go/tidyhtml5$
objdump -x parser.o | grep prvTidyParsePre
0000000000001290 g     F .text  0000000000000376 prvTidyParsePre
000000000000054c R_X86_64_GOTPCREL  prvTidyParsePre-0x0000000000000004
000000000000065c R_X86_64_GOTPCREL  prvTidyParsePre-0x0000000000000004
00000000000010b4 R_X86_64_GOTPCREL  prvTidyParsePre-0x0000000000000004
0000000000005b4f R_X86_64_GOTPCREL  prvTidyParsePre-0x0000000000000004
taruti@gate:~/go-work/src/github.com/taruti/tidy-html5/go/tidyhtml5$
@minux
Copy link
Member

minux commented Oct 21, 2012

Comment 1:

the correct way is to add a R_X86_64_COPY relocation for it.

Labels changed: added priority-later, removed priority-triage.

Status changed to Accepted.

@rsc
Copy link
Contributor

rsc commented Dec 10, 2012

Comment 2:

Labels changed: added size-l.

@rsc
Copy link
Contributor

rsc commented Mar 11, 2013

Comment 3:

We're not going to add explicit support for this; instead, we'll make builds like this
one invoke gcc to do the final link. You can try the work in progress at tip by using
go build -ldflags '-w -hostobj' your/binary
There won't be any dwarf information in the binary - that doesn't work yet. And
eventually the go command will set this mode automatically for you.
All this is being tracked as issue #4069.

Status changed to Duplicate.

Merged into issue #4069.

@rsc rsc added this to the Go1.1 milestone Apr 14, 2015
@rsc rsc removed the go1.1 label Apr 14, 2015
@golang golang locked and limited conversation to collaborators Jun 24, 2016
This issue was closed.
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Projects
None yet
Development

No branches or pull requests

4 participants