| package bbolt |
| |
| 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 |
| } |