diff options
author | Damien Gaignon <psolyca@users.noreply.github.com> | 2017-04-06 03:50:33 +0200 |
---|---|---|
committer | Lunny Xiao <xiaolunwen@gmail.com> | 2017-04-05 18:50:33 -0700 |
commit | a78a0266c4121ecc008620d7733bb6cfd7ec64e9 (patch) | |
tree | 3b9a22e02db6b955778890bd80d5c1ecb467326a /vendor/github.com/boltdb/bolt/bolt_arm.go | |
parent | d800305b347cd452319ffc61d7881bf8a1b8b707 (diff) | |
download | gitea-a78a0266c4121ecc008620d7733bb6cfd7ec64e9.tar.gz gitea-a78a0266c4121ecc008620d7733bb6cfd7ec64e9.zip |
Correct broken unaligned load/store in armv5 (#1355)
Update vendor github.com/boltdb/bolt to take care of the issue #1354.
Diffstat (limited to 'vendor/github.com/boltdb/bolt/bolt_arm.go')
-rw-r--r-- | vendor/github.com/boltdb/bolt/bolt_arm.go | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/vendor/github.com/boltdb/bolt/bolt_arm.go b/vendor/github.com/boltdb/bolt/bolt_arm.go index e659bfb91f..7e5cb4b941 100644 --- a/vendor/github.com/boltdb/bolt/bolt_arm.go +++ b/vendor/github.com/boltdb/bolt/bolt_arm.go @@ -1,7 +1,28 @@ package bolt +import "unsafe" + // maxMapSize represents the largest mmap size supported by Bolt. const maxMapSize = 0x7FFFFFFF // 2GB // maxAllocSize is the size used when creating array pointers. const maxAllocSize = 0xFFFFFFF + +// Are unaligned load/stores broken on this arch? +var brokenUnaligned bool + +func init() { + // Simple check to see whether this arch handles unaligned load/stores + // correctly. + + // ARM9 and older devices require load/stores to be from/to aligned + // addresses. If not, the lower 2 bits are cleared and that address is + // read in a jumbled up order. + + // See http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.faqs/ka15414.html + + raw := [6]byte{0xfe, 0xef, 0x11, 0x22, 0x22, 0x11} + val := *(*uint32)(unsafe.Pointer(uintptr(unsafe.Pointer(&raw)) + 2)) + + brokenUnaligned = val != 0x11222211 +} |