aboutsummaryrefslogtreecommitdiff
path: root/src/pkg/encoding/binary/binary.go
diff options
context:
space:
mode:
authorAdam Langley <agl@golang.org>2009-11-02 12:02:16 -0800
committerAdam Langley <agl@golang.org>2009-11-02 12:02:16 -0800
commit72ec930fa70c20ce69b21bf32a7916c04c2e9c2f (patch)
tree60fe8c0d3ae25d25dfdf05ba1073c880f3df739a /src/pkg/encoding/binary/binary.go
parent6358cac7d85544d77ca27597bc4a46c61d0d964e (diff)
downloadgo-72ec930fa70c20ce69b21bf32a7916c04c2e9c2f.tar.xz
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 #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.go49
1 files changed, 49 insertions, 0 deletions
diff --git a/src/pkg/encoding/binary/binary.go b/src/pkg/encoding/binary/binary.go
index 836a43df09..c49879c664 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";
}