<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/157515>157515</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
problems when building for ppc64
</td>
</tr>
<tr>
<th>Labels</th>
<td>
new issue
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
paleozogt
</td>
</tr>
</table>
<pre>
In ##156704 I misunderstood where the problem was. Clang seems to be ok when cross-compiling for ppc64(be), but `ld.lld` and `llvm-objdump` have problems with debug symbols.
Given a simple c file:
```c
// test.c
int foobar(int v) {
return v+1;
}
```
Build and link with gnu, but objdump with llvm, which doesn't seem to know where the symbols are:
```bash
$ powerpc64-linux-gnu-gcc -ffreestanding -O0 -c test.c -o test.ppc64.o
$ powerpc64-linux-gnu-ld -nostdlib test.ppc64.o -o test.ppc64.elf
$ llvm-objdump-14 -d test.ppc64.elf
test.ppc64.elf: file format elf64-powerpc
Disassembly of section .text:
00000000100000e8 <.text>:
100000e8: fb e1 ff f8 std 31, -8(1)
100000ec: f8 21 ff c1 stdu 1, -64(1)
100000f0: 7c 3f 0b 78 mr 31, 1
100000f4: 7c 69 1b 78 mr 9, 3
100000f8: 91 3f 00 70 stw 9, 112(31)
100000fc: 81 3f 00 70 lwz 9, 112(31)
10000100: 39 29 00 01 addi 9, 9, 1
10000104: 7d 29 07 b4 extsw 9, 9
10000108: 7d 23 4b 78 mr 3, 9
1000010c: 38 3f 00 40 addi 1, 31, 64
10000110: eb e1 ff f8 ld 31, -8(1)
10000114: 4e 80 00 20 blr
...
10000120: 80 01 00 01 lwz 0, 1(1)
```
Contrast that with gnu's objdump behavior:
```bash
$ powerpc64-linux-gnu-objdump -d test.ppc64.elf
test.ppc64.elf: file format elf64-powerpc
Disassembly of section .text:
00000000100000e8 <.foobar>:
100000e8: fb e1 ff f8 std r31,-8(r1)
100000ec: f8 21 ff c1 stdu r1,-64(r1)
100000f0: 7c 3f 0b 78 mr r31,r1
100000f4: 7c 69 1b 78 mr r9,r3
100000f8: 91 3f 00 70 stw r9,112(r31)
100000fc: 81 3f 00 70 lwz r9,112(r31)
10000100: 39 29 00 01 addi r9,r9,1
10000104: 7d 29 07 b4 extsw r9,r9
10000108: 7d 23 4b 78 mr r3,r9
1000010c: 38 3f 00 40 addi r1,r31,64
10000110: eb e1 ff f8 ld r31,-8(r1)
10000114: 4e 80 00 20 blr
...
10000120: 80 01 00 01 lwz r0,1(r1)
```
If we build and objdump with gnu, but link with llvm, it doesn't seem to bring over the debug symbols:
```bash
$ powerpc64-linux-gnu-gcc -ffreestanding -O0 -c test.c -o test.ppc64.o
$ ld.lld --oformat=elf_ppc64 -nostdlib test.ppc64.o -o test.ppc64.elf
$ powerpc64-linux-gnu-objdump -d test.ppc64.elf
test.ppc64.elf: file format elf64-powerpc
Disassembly of section .text:
0000000010010204 <.text>:
10010204: fb e1 ff f8 std r31,-8(r1)
10010208: f8 21 ff c1 stdu r1,-64(r1)
1001020c: 7c 3f 0b 78 mr r31,r1
10010210: 7c 69 1b 78 mr r9,r3
10010214: 91 3f 00 70 stw r9,112(r31)
10010218: 81 3f 00 70 lwz r9,112(r31)
1001021c: 39 29 00 01 addi r9,r9,1
10010220: 7d 29 07 b4 extsw r9,r9
10010224: 7d 23 4b 78 mr r3,r9
10010228: 38 3f 00 40 addi r1,r31,64
1001022c: eb e1 ff f8 ld r31,-8(r1)
10010230: 4e 80 00 20 blr
...
1001023c: 80 01 00 01 lwz r0,1(r1)
```
The same behavior happens if I build with clang targeting ppc64. Also, this all seems to work fine on ppc64le.
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJzMV11vozgb_TXOzSMi25BALnKRtm9f9Wpv9n5lwARPDY5sk8zMr1_5AwJp02lH2tWi0cwEzvHzYZ9jmxkjjj3ne7R5QJunFRtsq_T-xCRXP9XRrkpV_9i_9IBoimhKNtscZ_ACnTBDX3NtrFI1XFquOdiWw0mrUvIOLsysAR4l649gOO8MWAUlB_XqwD1UWhmTVKo7CSn6IzRKw-lUbTNEi5IjukP0EcrBAtpiWa-lrNEWA-tr_0Keu0SV3-qhO7nXLTtPkQ1chG2h5uVwBPOjK5U0a4QPCB_-L868BwZGdCfJoYJGSI7SQ_iKtjj8qdwP-ozoM1hu7Nr9Fr2FRqmSaUQL9-OM6A5Q_oDwAQA0t4Pu3csHglL3EuVP8zFDiIdByNoXIUX_GhI99sNYaqwovHc1ug-XVlQt1IqbHtHc-ma6Xr726jLre6wUmB4rGkOXzLS-ogxO6sK1a3IiRT98T479kByrCpKm0Zwby_razUXyB4akisVDosL__Oys1QdDyRqSXhlbS1EuODdjcNnEUeYTmZAMkvodHD7cvEsPfubcmumYBS6bbZbEhALhSRhmDO9K-QNUA4ZXVqge1pZ_t9OE4_gQ_zcvAKWPEfG_ABq_-IglcAJNA00BAMbWkBI3P0mBaEHcgp3wlccXQD2-IgE_QMD7Jb4gNNgR8grSBnAJuQvQ6Tg-ucKyCNvugFxh_vFySa9Qn_KO-BEx5NincAkwQiiiRbpMwedcLAjy8vMugWCfc7oDunME7IpkdS0CY7fInOCQee3BOZQZAPDv1lxG9AQsRmAK2awTNyifbFrEZDM8xvYNC23bZhOc-FT5Yv7k3ekjxCebcSiwG5260Uupg9AXz3q9nljUByl8J8Z-uAbi0Ikpxo0jPKreamYs2JbZmSHkZnKDkrfsLJT-mqxH9qcV5Z5_TFXROkdduVhzbcGNuoK-3KP9LPlJ0rGDM_I7QotSc1TP9Gp7Sw2SgxvR-cUWQmqyxGcTfqa-q_60W8g6XXJibUsZBiFOnKAtnb7NsArs4obtFtWHzChNuBFnlMiUqx9iyXtHpaNOr6wFI1a4FGzs4jvwWNJSubPEfON9-718r0wSS-I3y0TW8MtlEgUNN5KeRB1UfIXTGGup5dB4Hwv7zl0j3Uj6pYELh3La6he7-my3vx4Bxq1e2Hf2-VK7LVmdufb7_OJc86_s9OH0BUmigjOg9InL5i8P-up-_191KoIpzt7u_zB--l2TcuTR4b5sU45c3bWpWeTgVYFB8BeNynGyt0b1CZNyzOK-Sd1lR2r1Gy5FMB3lOfepux7l8Nldj4otfIdTvD1g_NKmHK-6a1MfrpEUf-hQi-PGjFW9PXJ83qb-dJcG1vHpfAEtO514b0A08BL9y9tT5S9xlukjt840ghgBDtIoZ1u2FQaYlNd73kXpV2hEz0H1AS55vIMhfFjV-7TepTu24nuSb_J0QylNV-1-m7GC72qeUbareJVled1sCN-UGdluKWlWYk8x3eAdLkhO0yxdk6KoypRsCU7zbLdtUIZ5x4RcO0tdK31cCWMGviebfEM2K8lKLo2_6lLa8wv4r4hSd_PVe38bKYejQRmWwlhzHcYKK_n-esV0V1jfosXddTVouW-tPXln9lfIo7DtUK4r1SH6HIze_5OctPrGK4vos0_CIPocszzv6d8BAAD__6xzJMM">