diff options
| author | Adam Langley <agl@golang.org> | 2009-11-02 12:02:16 -0800 |
|---|---|---|
| committer | Adam Langley <agl@golang.org> | 2009-11-02 12:02:16 -0800 |
| commit | 16dd5020239cfc71c205a29bb0d957fd6d6c1a9c (patch) | |
| tree | 60fe8c0d3ae25d25dfdf05ba1073c880f3df739a /src/pkg/encoding/binary/binary.go | |
| parent | 240084c12a52bf9a31c171a62a3f8b1c43ea429d (diff) | |
| download | golang-16dd5020239cfc71c205a29bb0d957fd6d6c1a9c.tar.gz | |
Fix cgo for GCC 4.4
Firstly, with -Werror, GCC switched to printing warnings starting
with "error:". Widening the string matches solves this as the messages
are otherwise unchanged.
Secondly, GCC 4.4 outputs DWARF sections with with NUL bytes in all
the offsets and requires the relocation section for .debug_info to be
processed in order to result in valid DWARF data. Thus we add minimal
handling for relocation sections, which is sufficient for our needs.
BUG=1
Fixes issue 1.
R=rsc, iant
CC=go-dev
http://go/go-review/1017003
Diffstat (limited to 'src/pkg/encoding/binary/binary.go')
| -rw-r--r-- | src/pkg/encoding/binary/binary.go | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/src/pkg/encoding/binary/binary.go b/src/pkg/encoding/binary/binary.go index 836a43df0..c49879c66 100644 --- a/src/pkg/encoding/binary/binary.go +++ b/src/pkg/encoding/binary/binary.go @@ -19,6 +19,9 @@ type ByteOrder interface { Uint16(b []byte) uint16; Uint32(b []byte) uint32; Uint64(b []byte) uint64; + PutUint16([]byte, uint16); + PutUint32([]byte, uint32); + PutUint64([]byte, uint64); String() string; } @@ -35,15 +38,38 @@ func (littleEndian) Uint16(b []byte) uint16 { return uint16(b[0]) | uint16(b[1])<<8; } +func (littleEndian) PutUint16(b []byte, v uint16) { + b[0] = byte(v); + b[1] = byte(v>>8); +} + func (littleEndian) Uint32(b []byte) uint32 { return uint32(b[0]) | uint32(b[1])<<8 | uint32(b[2])<<16 | uint32(b[3])<<24; } +func (littleEndian) PutUint32(b []byte, v uint32) { + b[0] = byte(v); + b[1] = byte(v>>8); + b[2] = byte(v>>16); + b[3] = byte(v>>24); +} + func (littleEndian) Uint64(b []byte) uint64 { return uint64(b[0]) | uint64(b[1])<<8 | uint64(b[2])<<16 | uint64(b[3])<<24 | uint64(b[4])<<32 | uint64(b[5])<<40 | uint64(b[6])<<48 | uint64(b[7])<<56; } +func (littleEndian) PutUint64(b []byte, v uint64) { + b[0] = byte(v); + b[1] = byte(v>>8); + b[2] = byte(v>>16); + b[3] = byte(v>>24); + b[4] = byte(v>>32); + b[5] = byte(v>>40); + b[6] = byte(v>>48); + b[7] = byte(v>>56); +} + func (littleEndian) String() string { return "LittleEndian"; } @@ -58,15 +84,38 @@ func (bigEndian) Uint16(b []byte) uint16 { return uint16(b[1]) | uint16(b[0])<<8; } +func (bigEndian) PutUint16(b []byte, v uint16) { + b[0] = byte(v>>8); + b[1] = byte(v); +} + func (bigEndian) Uint32(b []byte) uint32 { return uint32(b[3]) | uint32(b[2])<<8 | uint32(b[1])<<16 | uint32(b[0])<<24; } +func (bigEndian) PutUint32(b []byte, v uint32) { + b[0] = byte(v>>24); + b[1] = byte(v>>16); + b[2] = byte(v>>8); + b[3] = byte(v); +} + func (bigEndian) Uint64(b []byte) uint64 { return uint64(b[7]) | uint64(b[6])<<8 | uint64(b[5])<<16 | uint64(b[4])<<24 | uint64(b[3])<<32 | uint64(b[2])<<40 | uint64(b[1])<<48 | uint64(b[0])<<56; } +func (bigEndian) PutUint64(b []byte, v uint64) { + b[0] = byte(v>>56); + b[1] = byte(v>>48); + b[2] = byte(v>>40); + b[3] = byte(v>>32); + b[4] = byte(v>>24); + b[5] = byte(v>>16); + b[6] = byte(v>>8); + b[7] = byte(v); +} + func (bigEndian) String() string { return "BigEndian"; } |
