Auto merge of #44066 - cuviper:powerpc64-extern-abi, r=alexcrichton
authorbors <bors@rust-lang.org>
Sat, 2 Sep 2017 19:46:51 +0000 (19:46 +0000)
committerXimin Luo <infinity0@debian.org>
Mon, 6 Nov 2017 09:03:32 +0000 (09:03 +0000)
commit82ed1bc78be4eb3787b2dbbacbdccf243a5390d8
treeb396c8035048ef876d5bd4b1e6ee704937dd9128
parent744bd23d84dc6448a758cb604fbd347cce57dbdd
Auto merge of #44066 - cuviper:powerpc64-extern-abi, r=alexcrichton

powerpc64: improve extern struct ABI

These fixes all have to do with the 64-bit PowerPC ELF ABI for big-endian
targets.  The ELF v2 ABI for powerpc64le already worked well.

- Return after marking return aggregates indirect. Fixes #42757.
- Pass one-member float aggregates as direct argument values.
- Aggregate arguments less than 64-bit must be written in the least-
  significant bits of the parameter space.
- Larger aggregates are instead padded at the tail.
  (i.e. filling MSBs, padding the remaining LSBs.)

New tests were also added for the single-float aggregate, and a 3-byte
aggregate to check that it's filled into LSBs.  Overall, at least these
formerly-failing tests now pass on powerpc64:

- run-make/extern-fn-struct-passing-abi
- run-make/extern-fn-with-packed-struct
- run-pass/extern-pass-TwoU16s.rs
- run-pass/extern-pass-TwoU8s.rs
- run-pass/struct-return.rs

Gbp-Pq: Name u-ppc64-extern-struct-abi.patch
src/librustc_trans/cabi_powerpc64.rs
src/librustc_trans/cabi_x86.rs
src/test/run-make/extern-fn-struct-passing-abi/test.c
src/test/run-make/extern-fn-struct-passing-abi/test.rs
src/test/run-make/extern-fn-with-packed-struct/test.c
src/test/run-make/extern-fn-with-packed-struct/test.rs