[PATCH] D34689: [LLD][ELF] Pre-create ThunkSections at Target specific intervals

Igor Kudrin via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Mon Jul 17 05:17:15 PDT 2017


ikudrin added a comment.

It is possible that a precreated thunk section stays empty in the first pass, but is used in the next pass. In that case, it isn't added into ISR in `ThunkCreator::mergeThunks()`. For example:

  $ cat a.s
  	.global _start, foo
  .section .text.start,"ax",%progbits
  _start:
  	bl _start
  .section .text.dummy1,"ax",%progbits
  .space 0xfffffe
  .section .text.foo,"ax",%progbits
  foo:
  	bl _start
  $ llvm-mc -filetype=obj -triple=thumbv7a-none-linux-gnueabi a.s -o a.o
  $ ld.lld a.o -o a.out
  $ objdump -d a.out
  a.out:     file format elf32-littlearm
  
  
  Disassembly of section .text:
  
  00011000 <_start>:
     11000:	f7ff effe 	blx	11000 <_start>
  
  00011004 <__Thumbv7ABSLongThunk__start>:
     11004:	f241 0c00 	movw	ip, #4096	; 0x1000
     11008:	f2c0 0c01 	movt	ip, #1
     1100c:	4760      	bx	ip
  	...
  
  01011002 <__Thumbv7ABSLongThunk__start>:
  	...
  
  0101100c <foo>:
   101100c:	f7ff fff9 	bl	1011002 <__Thumbv7ABSLongThunk__start>

By the way, this sample shows one additional issue: redundant thunks are not removed.


https://reviews.llvm.org/D34689





More information about the llvm-commits mailing list