* [PATCH, alpha, go]: Introduce applyRelocationsALPHA
@ 2017-06-20 19:46 Uros Bizjak
2017-06-21 22:39 ` Ian Lance Taylor
0 siblings, 1 reply; 4+ messages in thread
From: Uros Bizjak @ 2017-06-20 19:46 UTC (permalink / raw)
To: gcc-patches; +Cc: gofrontend-dev, Ian Taylor
[-- Attachment #1: Type: text/plain, Size: 221 bytes --]
This patch inroduces applyRelocationsALPHA to solve:
FAIL: TestCgoConsistentResults
FAIL: TestCgoPkgConfig
FAIL: TestCgoHandlesWlORIGIN
gotools errors.
Bootstrapped and regression tested on alphaev68-linux-gnu.
Uros.
[-- Attachment #2: g.diff.txt --]
[-- Type: text/plain, Size: 1948 bytes --]
Index: go/debug/elf/file.go
===================================================================
--- go/debug/elf/file.go (revision 249418)
+++ go/debug/elf/file.go (working copy)
@@ -602,6 +602,8 @@
return f.applyRelocationss390x(dst, rels)
case f.Class == ELFCLASS64 && f.Machine == EM_SPARCV9:
return f.applyRelocationsSPARC64(dst, rels)
+ case f.Class == ELFCLASS64 && f.Machine == EM_ALPHA:
+ return f.applyRelocationsALPHA(dst, rels)
default:
return errors.New("applyRelocations: not implemented")
}
@@ -1049,6 +1051,55 @@
return nil
}
+func (f *File) applyRelocationsALPHA(dst []byte, rels []byte) error {
+ // 24 is the size of Rela64.
+ if len(rels)%24 != 0 {
+ return errors.New("length of relocation section is not a multiple of 24")
+ }
+
+ symbols, _, err := f.getSymbols(SHT_SYMTAB)
+ if err != nil {
+ return err
+ }
+
+ b := bytes.NewReader(rels)
+ var rela Rela64
+
+ for b.Len() > 0 {
+ binary.Read(b, f.ByteOrder, &rela)
+ symNo := rela.Info >> 32
+ t := R_ALPHA(rela.Info & 0xffff)
+
+ if symNo == 0 || symNo > uint64(len(symbols)) {
+ continue
+ }
+ sym := &symbols[symNo-1]
+ if SymType(sym.Info&0xf) != STT_SECTION {
+ // We don't handle non-section relocations for now.
+ continue
+ }
+
+ // There are relocations, so this must be a normal
+ // object file, and we only look at section symbols,
+ // so we assume that the symbol value is 0.
+
+ switch t {
+ case R_ALPHA_REFQUAD:
+ if rela.Off+8 >= uint64(len(dst)) || rela.Addend < 0 {
+ continue
+ }
+ f.ByteOrder.PutUint64(dst[rela.Off:rela.Off+8], uint64(rela.Addend))
+ case R_ALPHA_REFLONG:
+ if rela.Off+4 >= uint64(len(dst)) || rela.Addend < 0 {
+ continue
+ }
+ f.ByteOrder.PutUint32(dst[rela.Off:rela.Off+4], uint32(rela.Addend))
+ }
+ }
+
+ return nil
+}
+
func (f *File) DWARF() (*dwarf.Data, error) {
// sectionData gets the data for s, checks its size, and
// applies any applicable relations.
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [PATCH, alpha, go]: Introduce applyRelocationsALPHA
2017-06-20 19:46 [PATCH, alpha, go]: Introduce applyRelocationsALPHA Uros Bizjak
@ 2017-06-21 22:39 ` Ian Lance Taylor
2017-06-22 7:13 ` Uros Bizjak
0 siblings, 1 reply; 4+ messages in thread
From: Ian Lance Taylor @ 2017-06-21 22:39 UTC (permalink / raw)
To: Uros Bizjak; +Cc: gcc-patches, gofrontend-dev
On Tue, Jun 20, 2017 at 12:46 PM, Uros Bizjak <ubizjak@gmail.com> wrote:
> This patch inroduces applyRelocationsALPHA to solve:
>
> FAIL: TestCgoConsistentResults
> FAIL: TestCgoPkgConfig
> FAIL: TestCgoHandlesWlORIGIN
>
> gotools errors.
>
> Bootstrapped and regression tested on alphaev68-linux-gnu.
Thanks! Committed to mainline.
Ian
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [PATCH, alpha, go]: Introduce applyRelocationsALPHA
2017-06-21 22:39 ` Ian Lance Taylor
@ 2017-06-22 7:13 ` Uros Bizjak
2017-06-26 22:47 ` Ian Lance Taylor
0 siblings, 1 reply; 4+ messages in thread
From: Uros Bizjak @ 2017-06-22 7:13 UTC (permalink / raw)
To: Ian Lance Taylor; +Cc: gcc-patches, gofrontend-dev
On Thu, Jun 22, 2017 at 12:39 AM, Ian Lance Taylor <iant@golang.org> wrote:
> On Tue, Jun 20, 2017 at 12:46 PM, Uros Bizjak <ubizjak@gmail.com> wrote:
>> This patch inroduces applyRelocationsALPHA to solve:
>>
>> FAIL: TestCgoConsistentResults
>> FAIL: TestCgoPkgConfig
>> FAIL: TestCgoHandlesWlORIGIN
>>
>> gotools errors.
>>
>> Bootstrapped and regression tested on alphaev68-linux-gnu.
>
> Thanks! Committed to mainline.
Thanks!
However, there is one another issue with zdefaultcc.go generation. On
my system, the default gccgo, gcc and g++ are installed in:
$ which gccgo
/usr/bin/gccgo
$ which gcc
/usr/bin/gcc
but gotools Makefile uses $(bindir) to derive absolute path to the binaries:
echo 'package main' > zdefaultcc.go.tmp
echo 'const defaultGCCGO = "$(bindir)/$(GCCGO_INSTALL_NAME)"'
>> zdefaultcc.go.tmp
echo 'const defaultCC = "$(bindir)/$(GCC_INSTALL_NAME)"' >>
zdefaultcc.go.tmp
echo 'const defaultCXX = "$(bindir)/$(GXX_INSTALL_NAME)"' >>
zdefaultcc.go.tmp
echo 'const defaultPkgConfig = "pkg-config"' >> zdefaultcc.go.tmp
However, since $prefix (by default) points to /usr/local, $bindir
points to /usr/local/bin. Consequently, zdefaultcc.go reads:
package main
const defaultGCCGO = "/usr/local/bin/gccgo"
const defaultCC = "/usr/local/bin/gcc"
const defaultCXX = "/usr/local/bin/g++"
const defaultPkgConfig = "pkg-config"
The absolute path is wrong, since - as mentioned above - the system
compiler is installed in /usr/bin.
Probably we just need to remove $bindir and assume that these binaries
exist in $PATH.
Uros.
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [PATCH, alpha, go]: Introduce applyRelocationsALPHA
2017-06-22 7:13 ` Uros Bizjak
@ 2017-06-26 22:47 ` Ian Lance Taylor
0 siblings, 0 replies; 4+ messages in thread
From: Ian Lance Taylor @ 2017-06-26 22:47 UTC (permalink / raw)
To: Uros Bizjak; +Cc: gcc-patches, gofrontend-dev
[-- Attachment #1: Type: text/plain, Size: 1495 bytes --]
On Thu, Jun 22, 2017 at 12:13 AM, Uros Bizjak <ubizjak@gmail.com> wrote:
>
> However, there is one another issue with zdefaultcc.go generation. On
> my system, the default gccgo, gcc and g++ are installed in:
>
> $ which gccgo
> /usr/bin/gccgo
> $ which gcc
> /usr/bin/gcc
>
> but gotools Makefile uses $(bindir) to derive absolute path to the binaries:
>
> echo 'package main' > zdefaultcc.go.tmp
> echo 'const defaultGCCGO = "$(bindir)/$(GCCGO_INSTALL_NAME)"'
>>> zdefaultcc.go.tmp
> echo 'const defaultCC = "$(bindir)/$(GCC_INSTALL_NAME)"' >>
> zdefaultcc.go.tmp
> echo 'const defaultCXX = "$(bindir)/$(GXX_INSTALL_NAME)"' >>
> zdefaultcc.go.tmp
> echo 'const defaultPkgConfig = "pkg-config"' >> zdefaultcc.go.tmp
>
> However, since $prefix (by default) points to /usr/local, $bindir
> points to /usr/local/bin. Consequently, zdefaultcc.go reads:
>
> package main
> const defaultGCCGO = "/usr/local/bin/gccgo"
> const defaultCC = "/usr/local/bin/gcc"
> const defaultCXX = "/usr/local/bin/g++"
> const defaultPkgConfig = "pkg-config"
>
> The absolute path is wrong, since - as mentioned above - the system
> compiler is installed in /usr/bin.
>
> Probably we just need to remove $bindir and assume that these binaries
> exist in $PATH.
I did that for defaultCC and defaultCXX, as appended.
Ian
2017-06-26 Ian Lance Taylor <iant@golang.org>
* Makefile.am (s-zdefaultcc): Don't record $(bindir) for defaultCC
or defaultCXX.
* Makefile.in: Rebuild.
[-- Attachment #2: patch.txt --]
[-- Type: text/plain, Size: 2006 bytes --]
Index: Makefile.am
===================================================================
--- Makefile.am (revision 249668)
+++ Makefile.am (working copy)
@@ -100,8 +100,8 @@ zdefaultcc.go: s-zdefaultcc; @true
s-zdefaultcc: Makefile
echo 'package main' > zdefaultcc.go.tmp
echo 'const defaultGCCGO = "$(bindir)/$(GCCGO_INSTALL_NAME)"' >> zdefaultcc.go.tmp
- echo 'const defaultCC = "$(bindir)/$(GCC_INSTALL_NAME)"' >> zdefaultcc.go.tmp
- echo 'const defaultCXX = "$(bindir)/$(GXX_INSTALL_NAME)"' >> zdefaultcc.go.tmp
+ echo 'const defaultCC = "$(GCC_INSTALL_NAME)"' >> zdefaultcc.go.tmp
+ echo 'const defaultCXX = "$(GXX_INSTALL_NAME)"' >> zdefaultcc.go.tmp
echo 'const defaultPkgConfig = "pkg-config"' >> zdefaultcc.go.tmp
$(SHELL) $(srcdir)/../move-if-change zdefaultcc.go.tmp zdefaultcc.go
$(STAMP) $@
Index: Makefile.in
===================================================================
--- Makefile.in (revision 249668)
+++ Makefile.in (working copy)
@@ -582,8 +582,8 @@ distclean-generic:
maintainer-clean-generic:
@echo "This command is intended for maintainers to use"
@echo "it deletes files that may require special tools to rebuild."
-@NATIVE_FALSE@uninstall-local:
@NATIVE_FALSE@install-exec-local:
+@NATIVE_FALSE@uninstall-local:
clean: clean-am
clean-am: clean-binPROGRAMS clean-generic clean-noinstPROGRAMS \
@@ -682,8 +682,8 @@ zdefaultcc.go: s-zdefaultcc; @true
s-zdefaultcc: Makefile
echo 'package main' > zdefaultcc.go.tmp
echo 'const defaultGCCGO = "$(bindir)/$(GCCGO_INSTALL_NAME)"' >> zdefaultcc.go.tmp
- echo 'const defaultCC = "$(bindir)/$(GCC_INSTALL_NAME)"' >> zdefaultcc.go.tmp
- echo 'const defaultCXX = "$(bindir)/$(GXX_INSTALL_NAME)"' >> zdefaultcc.go.tmp
+ echo 'const defaultCC = "$(GCC_INSTALL_NAME)"' >> zdefaultcc.go.tmp
+ echo 'const defaultCXX = "$(GXX_INSTALL_NAME)"' >> zdefaultcc.go.tmp
echo 'const defaultPkgConfig = "pkg-config"' >> zdefaultcc.go.tmp
$(SHELL) $(srcdir)/../move-if-change zdefaultcc.go.tmp zdefaultcc.go
$(STAMP) $@
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2017-06-26 22:47 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2017-06-20 19:46 [PATCH, alpha, go]: Introduce applyRelocationsALPHA Uros Bizjak
2017-06-21 22:39 ` Ian Lance Taylor
2017-06-22 7:13 ` Uros Bizjak
2017-06-26 22:47 ` Ian Lance Taylor
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).