<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">