rust/src/librustc_back
Jan Niehusmann 4450807ead ARMv5 needs +strict-align
Without that flag, LLVM generates unaligned memory access instructions, which are not allowed on ARMv5.

For example, the 'hello world' example from `cargo --new` failed with:
```
$ ./hello
Hello, world!
thread 'main' panicked at 'assertion failed: end <= len', src/libcollections/vec.rs:1113
note: Run with `RUST_BACKTRACE=1` for a backtrace.
```

I traced this error back to the following assembler code in `BufWriter::flush_buf`:
```
    6f44:       e28d0018        add     r0, sp, #24
[...]
    6f54:       e280b005        add     fp, r0, #5
[...]
    7018:       e5cd001c        strb    r0, [sp, #28]
    701c:       e1a0082a        lsr     r0, sl, #16
    7020:       03a01001        moveq   r1, #1
    7024:       e5cb0002        strb    r0, [fp, #2]
    7028:       e1cba0b0        strh    sl, [fp]
```

Note that `fp` points to `sp + 29`, so the three `str*`-instructions should fill up a 32bit - value at `sp + 28`, which is later used as the value `n` in `Ok(n) => written += n`. This doesn't work on ARMv5 as the `strh` can't write to the unaligned contents of `fp`, so the upper bits of `n` won't get cleared, leading to the assertion failure in Vec::drain.

With `+strict-align`, the code works as expected.
2017-05-30 17:50:44 +02:00
..
target ARMv5 needs +strict-align 2017-05-30 17:50:44 +02:00
Cargo.toml Remove internal liblog 2017-03-23 11:28:00 -07:00
dynamic_lib.rs Haiku: add missing cases of using LIBRARY_PATH 2017-04-24 14:29:39 +00:00
lib.rs rustc: Remove #![unstable] annotation 2017-05-11 16:03:05 -07:00
slice.rs std: Stabilize library APIs for 1.5 2015-10-25 09:36:32 -07:00
tempdir.rs try! -> ? 2016-03-22 22:01:37 -05:00