[lld] draft: [lld] Add thunks for hexagon (PR #111217)

Brian Cain via llvm-commits llvm-commits at lists.llvm.org
Fri Oct 4 15:06:32 PDT 2024


androm3da wrote:

For reference, here's how the Hexagon SDK's `hexagon-link` handles this interesting test case:

```
$ /local/mnt/workspace/Qualcomm/Hexagon_SDK/5.4.1.1/tools/HEXAGON_Tools/8.7.06/Tools/bin/hexagon-llvm-mc -filetype=obj -triple=hexagon-unknown-linux-musl ../llvm-project/lld/test/ELF/hexagon-thunks-packets.s -o hexagon-thunks-packets.s.tmp.o && /local/mnt/workspace/Qualcomm/Hexagon_SDK/5.4.1.1/tools/HEXAGON_Tools/8.7.06/Tools/bin/hexagon-link -o hexagon-thunks-packets.s.tmp hexagon-thunks-packets.s.tmp.o && /local/mnt/workspace/Qualcomm/Hexagon_SDK/5.4.1.1/tools/HEXAGON_Tools/8.7.06/Tools/bin/hexagon-llvm-objdump -d --print-imm-hex hexagon-thunks-packets.s.tmp

hexagon-thunks-packets.s.tmp:	file format elf32-hexagon

Disassembly of section .text:

00000000 <myfn_b>:
       0:	00 c0 9f 52	529fc000 { 	jumpr r31 } 

00000004 <main>:
       4:	28 40 00 5a	5a004028 { 	call 0x54 <trampoline_1_for_myfn_a>
       8:	00 c0 00 78	7800c000   	r0 = #0x0 } 
       c:	24 c0 00 5a	5a00c024 { 	call 0x54 <trampoline_1_for_myfn_a> } 
      10:	f8 ff ff 5b	5bfffff8 { 	call 0x0 <myfn_b> } 
      14:	f6 60 df 5d	5ddf60f6 { 	if (p0) call 0x0 <myfn_b>
      18:	20 40 20 5d	5d204020   	if (!p0) call 0x54 <trampoline_1_for_myfn_a>
      1c:	02 c1 00 f3	f300c102   	r2 = add(r0,r1) } 
      20:	1a 40 00 5d	5d00401a { 	if (p0) call 0x54 <trampoline_1_for_myfn_a>
      24:	1a 40 20 5d	5d20401a   	if (!p0) call 0x54 <trampoline_1_for_myfn_a>
      28:	02 c1 00 f3	f300c102   	r2 = add(r0,r1) } 
      2c:	14 50 80 61	61805014 { 	if (r0==#0) jump:t 0x54
      30:	02 41 00 f3	f3004102   	r2 = add(r0,r1)
      34:	54 30 41 30	30413054   	r1 = r4; 	r4 = r5 } 
      38:	0e 50 c0 61	61c0500e { 	if (r0<=#0) jump:t 0x54
      3c:	0e 40 00 12	1200400e   	p1 = cmp.eq(r0,#0x0); if (p1.new) jump:nt 0x54 <trampoline_1_for_myfn_a>
      40:	02 41 00 f3	f3004102   	r2 = add(r0,r1)
      44:	04 c0 65 70	7065c004   	r4 = r5 } 
      48:	06 c0 00 16	1600c006 { 	r0 = #0x0 ; jump 0x54 <trampoline_1_for_myfn_a> } 
      4c:	da c0 30 16	1630c0da { 	r0 = #0x0 ; jump 0x0 <myfn_b> } 
      50:	00 c0 9f 52	529fc000 { 	jumpr r31 } 

00000054 <trampoline_1_for_myfn_a>:
      54:	00 40 08 00	00084000 { 	immext(#0x800000)
      58:	10 c0 00 58	5800c010   	jump 0x80005c <myfn_a> } 
		...

0080005c <myfn_a>:
  80005c:	04 c0 00 16	1600c004 { 	r0 = #0x0 ; jump 0x800064 <trampoline_2_for_myfn_b> } 
  800060:	00 c0 9f 52	529fc000 { 	jumpr r31 } 

00800064 <trampoline_2_for_myfn_b>:
  800064:	fe 7f f7 0f	0ff77ffe { 	immext(#0xff7fff80)
  800068:	38 c0 00 58	5800c038   	jump 0x0 <myfn_b> } 
```

https://github.com/llvm/llvm-project/pull/111217


More information about the llvm-commits mailing list