]> Cypherpunks repositories - gostls13.git/commitdiff
debug/elf: SPARC64 relocation type is only 8 bits
authorIan Lance Taylor <iant@golang.org>
Thu, 10 Nov 2016 20:49:06 +0000 (12:49 -0800)
committerIan Lance Taylor <iant@golang.org>
Thu, 10 Nov 2016 22:58:49 +0000 (22:58 +0000)
https://docs.oracle.com/cd/E53394_01/html/E54813/chapter6-54839.html#OSLLGchapter6-24:

"For 64–bit SPARC Elf64_Rela structures, the r_info field is further
broken down into an 8–bit type identifier and a 24–bit type dependent
data field. For the existing relocation types, the data field is
zero. New relocation types, however, might make use of the data bits.

 #define ELF64_R_TYPE_ID(info)         (((Elf64_Xword)(info)<<56)>>56)
"

No test for this because the only test would be an invalid object file.

Change-Id: I5052ca3bfaf0759e920f9a24a16fd97543b24486
Reviewed-on: https://go-review.googlesource.com/33091
Reviewed-by: Michael Hudson-Doyle <michael.hudson@canonical.com>
src/debug/elf/file.go

index 0c547669a9a705e105b87fa80e9dd1cfe88ed7cc..8eeab65df89054aa0494e281683b22d244d15b00 100644 (file)
@@ -1021,7 +1021,7 @@ func (f *File) applyRelocationsSPARC64(dst []byte, rels []byte) error {
        for b.Len() > 0 {
                binary.Read(b, f.ByteOrder, &rela)
                symNo := rela.Info >> 32
-               t := R_SPARC(rela.Info & 0xffff)
+               t := R_SPARC(rela.Info & 0xff)
 
                if symNo == 0 || symNo > uint64(len(symbols)) {
                        continue