[lld] 4d6c4cb - [LLD][ELF] Add support for PT_GNU_PROPERTY

Peter Smith via llvm-commits llvm-commits at lists.llvm.org
Thu Dec 5 02:07:40 PST 2019


Author: Peter Smith
Date: 2019-12-05T09:54:58Z
New Revision: 4d6c4cb4269e8e8e04854fca812c2dda13f83f9d

URL: https://github.com/llvm/llvm-project/commit/4d6c4cb4269e8e8e04854fca812c2dda13f83f9d
DIFF: https://github.com/llvm/llvm-project/commit/4d6c4cb4269e8e8e04854fca812c2dda13f83f9d.diff

LOG: [LLD][ELF] Add support for PT_GNU_PROPERTY

The PT_GNU_PROPERTY program header describes the location of the
.note.gnu.property SHT_NOTES section. The linux kernel uses this program
header to find the .note.gnu.property section rather than parsing.
Executables that have properties that the kernel needs to act on that don't
have the PT_GNU_PROPERTY program header will not boot.

Differential Revision: https://reviews.llvm.org/D70961

Added: 
    lld/test/ELF/pt-gnu-property.s

Modified: 
    lld/ELF/Writer.cpp
    lld/test/ELF/aarch64-feature-bti.s
    lld/test/ELF/aarch64-feature-btipac.s
    lld/test/ELF/aarch64-feature-pac.s
    lld/test/ELF/aarch64-ifunc-bti.s

Removed: 
    


################################################################################
diff  --git a/lld/ELF/Writer.cpp b/lld/ELF/Writer.cpp
index ebca612f77af..ab59d0365085 100644
--- a/lld/ELF/Writer.cpp
+++ b/lld/ELF/Writer.cpp
@@ -2188,6 +2188,9 @@ std::vector<PhdrEntry *> Writer<ELFT>::createPhdrs(Partition &part) {
   if (config->zWxneeded)
     addHdr(PT_OPENBSD_WXNEEDED, PF_X);
 
+  if (OutputSection *cmd = findSection(".note.gnu.property", partNo))
+    addHdr(PT_GNU_PROPERTY, PF_R)->add(cmd);
+
   // Create one PT_NOTE per a group of contiguous SHT_NOTE sections with the
   // same alignment.
   PhdrEntry *note = nullptr;

diff  --git a/lld/test/ELF/aarch64-feature-bti.s b/lld/test/ELF/aarch64-feature-bti.s
index f2889c6fcc92..0fa1cf83727b 100644
--- a/lld/test/ELF/aarch64-feature-bti.s
+++ b/lld/test/ELF/aarch64-feature-bti.s
@@ -55,28 +55,30 @@
 # BTIDYN:      0x0000000070000001 (AARCH64_BTI_PLT)
 # BTIDYN-NOT:  0x0000000070000003 (AARCH64_PAC_PLT)
 
-# BTISO: 0000000000010310 func2:
-# BTISO-NEXT:    10310: bl      #48 <func3 at plt>
-# BTISO-NEXT:    10314: ret
+# BTISO: 0000000000010348 func2:
+# BTISO-NEXT:    10348: bl      #56 <func3 at plt>
+# BTISO-NEXT:           ret
+# BTISO: 0000000000010350 func3:
+# BTISO-NEXT:    10350: ret
 # BTISO: Disassembly of section .plt:
-# BTISO: 0000000000010320 .plt:
-# BTISO-NEXT:    10320: bti     c
-# BTISO-NEXT:    10324: stp     x16, x30, [sp, #-16]!
-# BTISO-NEXT:    10328: adrp    x16, #131072
-# BTISO-NEXT:    1032c: ldr     x17, [x16, #1072]
-# BTISO-NEXT:    10330: add     x16, x16, #1072
-# BTISO-NEXT:    10334: br      x17
-# BTISO-NEXT:    10338: nop
-# BTISO-NEXT:    1033c: nop
-# BTISO: 0000000000010340 func3 at plt:
-# BTISO-NEXT:    10340: adrp    x16, #131072
-# BTISO-NEXT:    10344: ldr     x17, [x16, #1080]
-# BTISO-NEXT:    10348: add     x16, x16, #1080
-# BTISO-NEXT:    1034c: br      x17
+# BTISO: 0000000000010360 .plt:
+# BTISO-NEXT:    10360: bti     c
+# BTISO-NEXT:           stp     x16, x30, [sp, #-16]!
+# BTISO-NEXT:           adrp    x16, #131072
+# BTISO-NEXT:           ldr     x17, [x16, #1136]
+# BTISO-NEXT:           add     x16, x16, #1136
+# BTISO-NEXT:           br      x17
+# BTISO-NEXT:           nop
+# BTISO-NEXT:           nop
+# BTISO: 0000000000010380 func3 at plt:
+# BTISO-NEXT:    10380: adrp    x16, #131072
+# BTISO-NEXT:           ldr     x17, [x16, #1144]
+# BTISO-NEXT:           add     x16, x16, #1144
+# BTISO-NEXT:           br      x17
 
 # SOGOTPLT2: Hex dump of section '.got.plt'
-# SOGOTPLT2-NEXT:  0x00030420 00000000 00000000 00000000 00000000
-# SOGOTPLT2-NEXT:  0x00030430 00000000 00000000 20030100 00000000
+# SOGOTPLT2-NEXT:  0x00030460 00000000 00000000 00000000 00000000
+# SOGOTPLT2-NEXT:  0x00030470 00000000 00000000 60030100 00000000
 
 ## Build an executable with all relocatable inputs having the BTI
 ## .note.gnu.property. We expect a bti c in front of all PLT entries as the
@@ -89,26 +91,26 @@
 # RUN: llvm-objdump -d -mattr=+bti --no-show-raw-insn %t.exe | FileCheck --check-prefix=EXECBTI %s
 
 # EXECBTI: Disassembly of section .text:
-# EXECBTI: 0000000000210310 func1:
-# EXECBTI-NEXT:   210310: bl      #48 <func2 at plt>
-# EXECBTI-NEXT:   210314: ret
+# EXECBTI: 0000000000210348 func1:
+# EXECBTI-NEXT:   210348: bl    #40 <func2 at plt>
+# EXECBTI-NEXT:           ret
 # EXECBTI: Disassembly of section .plt:
-# EXECBTI: 0000000000210320 .plt:
-# EXECBTI-NEXT:   210320: bti     c
-# EXECBTI-NEXT:   210324: stp     x16, x30, [sp, #-16]!
-# EXECBTI-NEXT:   210328: adrp    x16, #131072
-# EXECBTI-NEXT:   21032c: ldr     x17, [x16, #1112]
-# EXECBTI-NEXT:   210330: add     x16, x16, #1112
-# EXECBTI-NEXT:   210334: br      x17
-# EXECBTI-NEXT:   210338: nop
-# EXECBTI-NEXT:   21033c: nop
-# EXECBTI: 0000000000210340 func2 at plt:
-# EXECBTI-NEXT:   210340: bti     c
-# EXECBTI-NEXT:   210344: adrp    x16, #131072
-# EXECBTI-NEXT:   210348: ldr     x17, [x16, #1120]
-# EXECBTI-NEXT:   21034c: add     x16, x16, #1120
-# EXECBTI-NEXT:   210350: br      x17
-# EXECBTI-NEXT:   210354: nop
+# EXECBTI: 0000000000210350 .plt:
+# EXECBTI-NEXT:   210350: bti   c
+# EXECBTI-NEXT:           stp   x16, x30, [sp, #-16]!
+# EXECBTI-NEXT:           adrp  x16, #131072
+# EXECBTI-NEXT:           ldr   x17, [x16, #1160]
+# EXECBTI-NEXT:           add   x16, x16, #1160
+# EXECBTI-NEXT:           br    x17
+# EXECBTI-NEXT:           nop
+# EXECBTI-NEXT:           nop
+# EXECBTI: 0000000000210370 func2 at plt:
+# EXECBTI-NEXT:   210370: bti   c
+# EXECBTI-NEXT:           adrp  x16, #131072
+# EXECBTI-NEXT:           ldr   x17, [x16, #1168]
+# EXECBTI-NEXT:           add   x16, x16, #1168
+# EXECBTI-NEXT:           br    x17
+# EXECBTI-NEXT:           nop
 
 ## We expect the same for PIE, as the address of an ifunc can escape
 # RUN: ld.lld --pie %t.o %t.so %t2.so -o %tpie.exe
@@ -117,26 +119,26 @@
 # RUN: llvm-objdump -d -mattr=+bti --no-show-raw-insn %tpie.exe | FileCheck --check-prefix=PIE %s
 
 # PIE: Disassembly of section .text:
-# PIE: 0000000000010310 func1:
-# PIE-NEXT:    10310: bl      #48 <func2 at plt>
-# PIE-NEXT:    10314: ret
+# PIE: 0000000000010348 func1:
+# PIE-NEXT:    10348: bl     #40 <func2 at plt>
+# PIE-NEXT:           ret
 # PIE: Disassembly of section .plt:
-# PIE: 0000000000010320 .plt:
-# PIE-NEXT:    10320: bti     c
-# PIE-NEXT:    10324: stp     x16, x30, [sp, #-16]!
-# PIE-NEXT:    10328: adrp    x16, #131072
-# PIE-NEXT:    1032c: ldr     x17, [x16, #1112]
-# PIE-NEXT:    10330: add     x16, x16, #1112
-# PIE-NEXT:    10334: br      x17
-# PIE-NEXT:    10338: nop
-# PIE-NEXT:    1033c: nop
-# PIE: 0000000000010340 func2 at plt:
-# PIE-NEXT:    10340: bti     c
-# PIE-NEXT:    10344: adrp    x16, #131072
-# PIE-NEXT:    10348: ldr     x17, [x16, #1120]
-# PIE-NEXT:    1034c: add     x16, x16, #1120
-# PIE-NEXT:    10350: br      x17
-# PIE-NEXT:    10354: nop
+# PIE: 0000000000010350 .plt:
+# PIE-NEXT:    10350: bti    c
+# PIE-NEXT:           stp    x16, x30, [sp, #-16]!
+# PIE-NEXT:           adrp   x16, #131072
+# PIE-NEXT:           ldr    x17, [x16, #1160]
+# PIE-NEXT:           add    x16, x16, #1160
+# PIE-NEXT:           br     x17
+# PIE-NEXT:           nop
+# PIE-NEXT:           nop
+# PIE: 0000000000010370 func2 at plt:
+# PIE-NEXT:    10370: bti    c
+# PIE-NEXT:           adrp   x16, #131072
+# PIE-NEXT:           ldr    x17, [x16, #1168]
+# PIE-NEXT:           add    x16, x16, #1168
+# PIE-NEXT:           br     x17
+# PIE-NEXT:           nop
 
 ## Build and executable with not all relocatable inputs having the BTI
 ## .note.property, expect no bti c and no .note.gnu.property entry
@@ -148,24 +150,24 @@
 # NOEX: Disassembly of section .text:
 # NOEX: 00000000002102e0 func1:
 # NOEX-NEXT:   2102e0: bl      #48 <func2 at plt>
-# NOEX-NEXT:   2102e4: ret
+# NOEX-NEXT:           ret
 # NOEX: 00000000002102e8 func3:
 # NOEX-NEXT:   2102e8: ret
 # NOEX: Disassembly of section .plt:
 # NOEX: 00000000002102f0 .plt:
 # NOEX-NEXT:   2102f0: stp     x16, x30, [sp, #-16]!
-# NOEX-NEXT:   2102f4: adrp    x16, #131072
-# NOEX-NEXT:   2102f8: ldr     x17, [x16, #1024]
-# NOEX-NEXT:   2102fc: add     x16, x16, #1024
-# NOEX-NEXT:   210300: br      x17
-# NOEX-NEXT:   210304: nop
-# NOEX-NEXT:   210308: nop
-# NOEX-NEXT:   21030c: nop
+# NOEX-NEXT:           adrp    x16, #131072
+# NOEX-NEXT:           ldr     x17, [x16, #1024]
+# NOEX-NEXT:           add     x16, x16, #1024
+# NOEX-NEXT:           br      x17
+# NOEX-NEXT:           nop
+# NOEX-NEXT:           nop
+# NOEX-NEXT:           nop
 # NOEX: 0000000000210310 func2 at plt:
 # NOEX-NEXT:   210310: adrp    x16, #131072
-# NOEX-NEXT:   210314: ldr     x17, [x16, #1032]
-# NOEX-NEXT:   210318: add     x16, x16, #1032
-# NOEX-NEXT:   21031c: br      x17
+# NOEX-NEXT:           ldr     x17, [x16, #1032]
+# NOEX-NEXT:           add     x16, x16, #1032
+# NOEX-NEXT:           br      x17
 
 ## Force BTI entries with the --force-bti command line option. Expect a warning
 ## from the file without the .note.gnu.property.
@@ -180,28 +182,28 @@
 # RUN: llvm-objdump -d -mattr=+bti --no-show-raw-insn %tforcebti.exe | FileCheck --check-prefix=FORCE %s
 
 # FORCE: Disassembly of section .text:
-# FORCE: 0000000000210338 func1:
-# FORCE-NEXT:   210338: bl      #56 <func2 at plt>
-# FORCE-NEXT:   21033c: ret
-# FORCE: 0000000000210340 func3:
-# FORCE-NEXT:   210340: ret
+# FORCE: 0000000000210370 func1:
+# FORCE-NEXT:   210370: bl      #48 <func2 at plt>
+# FORCE-NEXT:           ret
+# FORCE: 0000000000210378 func3:
+# FORCE-NEXT:   210378: ret
 # FORCE: Disassembly of section .plt:
-# FORCE: 0000000000210350 .plt:
-# FORCE-NEXT:   210350: bti     c
-# FORCE-NEXT:   210354: stp     x16, x30, [sp, #-16]!
-# FORCE-NEXT:   210358: adrp    x16, #131072
-# FORCE-NEXT:   21035c: ldr     x17, [x16, #1144]
-# FORCE-NEXT:   210360: add     x16, x16, #1144
-# FORCE-NEXT:   210364: br      x17
-# FORCE-NEXT:   210368: nop
-# FORCE-NEXT:   21036c: nop
-# FORCE: 0000000000210370 func2 at plt:
-# FORCE-NEXT:   210370: bti     c
-# FORCE-NEXT:   210374: adrp    x16, #131072
-# FORCE-NEXT:   210378: ldr     x17, [x16, #1152]
-# FORCE-NEXT:   21037c: add     x16, x16, #1152
-# FORCE-NEXT:   210380: br      x17
-# FORCE-NEXT:   210384: nop
+# FORCE: 0000000000210380 .plt:
+# FORCE-NEXT:   210380: bti     c
+# FORCE-NEXT:           stp     x16, x30, [sp, #-16]!
+# FORCE-NEXT:           adrp    x16, #131072
+# FORCE-NEXT:           ldr     x17, [x16, #1192]
+# FORCE-NEXT:           add     x16, x16, #1192
+# FORCE-NEXT:           br      x17
+# FORCE-NEXT:           nop
+# FORCE-NEXT:           nop
+# FORCE: 00000000002103a0 func2 at plt:
+# FORCE-NEXT:   2103a0: bti     c
+# FORCE-NEXT:           adrp    x16, #131072
+# FORCE-NEXT:           ldr     x17, [x16, #1200]
+# FORCE-NEXT:           add     x16, x16, #1200
+# FORCE-NEXT:           br      x17
+# FORCE-NEXT:           nop
 
 .section ".note.gnu.property", "a"
 .long 4

diff  --git a/lld/test/ELF/aarch64-feature-btipac.s b/lld/test/ELF/aarch64-feature-btipac.s
index c1fa4c1d3b28..30e00b2dbbd8 100644
--- a/lld/test/ELF/aarch64-feature-btipac.s
+++ b/lld/test/ELF/aarch64-feature-btipac.s
@@ -15,28 +15,28 @@
 # RUN: llvm-readelf --dynamic-table %t.so | FileCheck --check-prefix BTIPACDYN %s
 
 # BTIPACSO: Disassembly of section .text:
-# BTIPACSO: 0000000000010310 func2:
-# BTIPACSO-NEXT:    10310: bl      #48 <func3 at plt>
-# BTIPACSO-NEXT:    10314: ret
-# BTIPACSO: 0000000000010318 func3:
-# BTIPACSO-NEXT:    10318: ret
+# BTIPACSO: 0000000000010348 func2:
+# BTIPACSO-NEXT:    10348:              bl      #56 <func3 at plt>
+# BTIPACSO-NEXT:                        ret
+# BTIPACSO: 0000000000010350 func3:
+# BTIPACSO-NEXT:    10350:              ret
 # BTIPACSO: Disassembly of section .plt:
-# BTIPACSO: 0000000000010320 .plt:
-# BTIPACSO-NEXT:    10320: bti     c
-# BTIPACSO-NEXT:    10324: stp     x16, x30, [sp, #-16]!
-# BTIPACSO-NEXT:    10328: adrp    x16, #131072
-# BTIPACSO-NEXT:    1032c: ldr     x17, [x16, #1096]
-# BTIPACSO-NEXT:    10330: add     x16, x16, #1096
-# BTIPACSO-NEXT:    10334: br      x17
-# BTIPACSO-NEXT:    10338: nop
-# BTIPACSO-NEXT:    1033c: nop
-# BTIPACSO: 0000000000010340 func3 at plt:
-# BTIPACSO-NEXT:    10340: adrp    x16, #131072
-# BTIPACSO-NEXT:    10344: ldr     x17, [x16, #1104]
-# BTIPACSO-NEXT:    10348: add     x16, x16, #1104
-# BTIPACSO-NEXT:    1034c: autia1716
-# BTIPACSO-NEXT:    10350: br      x17
-# BTIPACSO-NEXT:    10354: nop
+# BTIPACSO: 0000000000010360 .plt:
+# BTIPACSO-NEXT:    10360:              bti     c
+# BTIPACSO-NEXT:                        stp     x16, x30, [sp, #-16]!
+# BTIPACSO-NEXT:                        adrp    x16, #131072
+# BTIPACSO-NEXT:                        ldr     x17, [x16, #1160]
+# BTIPACSO-NEXT:                        add     x16, x16, #1160
+# BTIPACSO-NEXT:                        br      x17
+# BTIPACSO-NEXT:                        nop
+# BTIPACSO-NEXT:                        nop
+# BTIPACSO: 0000000000010380 func3 at plt:
+# BTIPACSO-NEXT:    10380:              adrp    x16, #131072
+# BTIPACSO-NEXT:                        ldr     x17, [x16, #1168]
+# BTIPACSO-NEXT:                        add     x16, x16, #1168
+# BTIPACSO-NEXT:                        autia1716
+# BTIPACSO-NEXT:                        br      x17
+# BTIPACSO-NEXT:                        nop
 
 # BTIPACPROP:    Properties:    aarch64 feature: BTI, PAC
 
@@ -53,29 +53,29 @@
 # RUN: llvm-readelf --dynamic-table %t.exe | FileCheck --check-prefix BTIPACDYN %s
 
 # BTIPACEX: Disassembly of section .text:
-# BTIPACEX: 0000000000210338 func1:
-# BTIPACEX-NEXT:   210338: bl      #56 <func2 at plt>
-# BTIPACEX-NEXT:   21033c: ret
-# BTIPACEX-NEXT:   210340: ret
-# BTIPACEX: 0000000000210344 func3:
-# BTIPACEX-NEXT:   210344: ret
+# BTIPACEX: 0000000000210370 func1:
+# BTIPACEX-NEXT:   210370:              bl      #48 <func2 at plt>
+# BTIPACEX-NEXT:                        ret
+# BTIPACEX-NEXT:                        ret
+# BTIPACEX: 000000000021037c func3:
+# BTIPACEX-NEXT:   21037c:              ret
 # BTIPACEX: Disassembly of section .plt:
-# BTIPACEX: 0000000000210350 .plt:
-# BTIPACEX-NEXT:   210350: bti     c
-# BTIPACEX-NEXT:   210354: stp     x16, x30, [sp, #-16]!
-# BTIPACEX-NEXT:   210358: adrp    x16, #131072
-# BTIPACEX-NEXT:   21035c: ldr     x17, [x16, #1160]
-# BTIPACEX-NEXT:   210360: add     x16, x16, #1160
-# BTIPACEX-NEXT:   210364: br      x17
-# BTIPACEX-NEXT:   210368: nop
-# BTIPACEX-NEXT:   21036c: nop
-# BTIPACEX: 0000000000210370 func2 at plt:
-# BTIPACEX-NEXT:   210370: bti     c
-# BTIPACEX-NEXT:   210374: adrp    x16, #131072
-# BTIPACEX-NEXT:   210378: ldr     x17, [x16, #1168]
-# BTIPACEX-NEXT:   21037c: add     x16, x16, #1168
-# BTIPACEX-NEXT:   210380: autia1716
-# BTIPACEX-NEXT:   210384: br      x17
+# BTIPACEX: 0000000000210380 .plt:
+# BTIPACEX-NEXT:   210380:              bti     c
+# BTIPACEX-NEXT:                        stp     x16, x30, [sp, #-16]!
+# BTIPACEX-NEXT:                        adrp    x16, #131072
+# BTIPACEX-NEXT:                        ldr     x17, [x16, #1208]
+# BTIPACEX-NEXT:                        add     x16, x16, #1208
+# BTIPACEX-NEXT:                        br      x17
+# BTIPACEX-NEXT:                        nop
+# BTIPACEX-NEXT:                        nop
+# BTIPACEX: 00000000002103a0 func2 at plt:
+# BTIPACEX-NEXT:   2103a0:              bti     c
+# BTIPACEX-NEXT:                        adrp    x16, #131072
+# BTIPACEX-NEXT:                        ldr     x17, [x16, #1216]
+# BTIPACEX-NEXT:                        add     x16, x16, #1216
+# BTIPACEX-NEXT:                        autia1716
+# BTIPACEX-NEXT:                        br      x17
 
 ## Check that combinations of BTI+PAC with 0 properties results in standard PLT
 
@@ -86,25 +86,25 @@
 # EX: Disassembly of section .text:
 # EX: 00000000002102e0 func1:
 # EX-NEXT:   2102e0: bl      #48 <func2 at plt>
-# EX-NEXT:   2102e4: ret
-# EX-NEXT:   2102e8: ret
+# EX-NEXT:           ret
+# EX-NEXT:           ret
 # EX: 00000000002102ec func3:
 # EX-NEXT:   2102ec: ret
 # EX: Disassembly of section .plt:
 # EX: 00000000002102f0 .plt:
 # EX-NEXT:   2102f0: stp     x16, x30, [sp, #-16]!
-# EX-NEXT:   2102f4: adrp    x16, #131072
-# EX-NEXT:   2102f8: ldr     x17, [x16, #1024]
-# EX-NEXT:   2102fc: add     x16, x16, #1024
-# EX-NEXT:   210300: br      x17
-# EX-NEXT:   210304: nop
-# EX-NEXT:   210308: nop
-# EX-NEXT:   21030c: nop
+# EX-NEXT:           adrp    x16, #131072
+# EX-NEXT:           ldr     x17, [x16, #1024]
+# EX-NEXT:           add     x16, x16, #1024
+# EX-NEXT:           br      x17
+# EX-NEXT:           nop
+# EX-NEXT:           nop
+# EX-NEXT:           nop
 # EX: 0000000000210310 func2 at plt:
 # EX:        210310: adrp    x16, #131072
-# EX-NEXT:   210314: ldr     x17, [x16, #1032]
-# EX-NEXT:   210318: add     x16, x16, #1032
-# EX-NEXT:   21031c: br      x17
+# EX-NEXT:           ldr     x17, [x16, #1032]
+# EX-NEXT:           add     x16, x16, #1032
+# EX-NEXT:           br      x17
 
 # NODYN-NOT:   0x0000000070000001 (AARCH64_BTI_PLT)
 # NODYN-NOT:   0x0000000070000003 (AARCH64_PAC_PLT)

diff  --git a/lld/test/ELF/aarch64-feature-pac.s b/lld/test/ELF/aarch64-feature-pac.s
index cb0bcee70a8a..7a4f8ee64ffd 100644
--- a/lld/test/ELF/aarch64-feature-pac.s
+++ b/lld/test/ELF/aarch64-feature-pac.s
@@ -15,22 +15,22 @@
 
 # NOPAC: 00000000000102b8 func2:
 # NOPAC-NEXT:    102b8: bl      #56 <func3 at plt>
-# NOPAC-NEXT:    102bc: ret
+# NOPAC-NEXT:           ret
 # NOPAC: Disassembly of section .plt:
 # NOPAC: 00000000000102d0 .plt:
 # NOPAC-NEXT:    102d0: stp     x16, x30, [sp, #-16]!
-# NOPAC-NEXT:    102d4: adrp    x16, #131072
-# NOPAC-NEXT:    102d8: ldr     x17, [x16, #960]
-# NOPAC-NEXT:    102dc: add     x16, x16, #960
-# NOPAC-NEXT:    102e0: br      x17
-# NOPAC-NEXT:    102e4: nop
-# NOPAC-NEXT:    102e8: nop
-# NOPAC-NEXT:    102ec: nop
+# NOPAC-NEXT:           adrp    x16, #131072
+# NOPAC-NEXT:           ldr     x17, [x16, #960]
+# NOPAC-NEXT:           add     x16, x16, #960
+# NOPAC-NEXT:           br      x17
+# NOPAC-NEXT:           nop
+# NOPAC-NEXT:           nop
+# NOPAC-NEXT:           nop
 # NOPAC: 00000000000102f0 func3 at plt:
 # NOPAC-NEXT:    102f0: adrp    x16, #131072
-# NOPAC-NEXT:    102f4: ldr     x17, [x16, #968]
-# NOPAC-NEXT:    102f8: add     x16, x16, #968
-# NOPAC-NEXT:    102fc: br      x17
+# NOPAC-NEXT:           ldr     x17, [x16, #968]
+# NOPAC-NEXT:           add     x16, x16, #968
+# NOPAC-NEXT:           br      x17
 
 # NOPACDYN-NOT:   0x0000000070000001 (AARCH64_BTI_PLT)
 # NOPACDYN-NOT:   0x0000000070000003 (AARCH64_PAC_PLT)
@@ -44,34 +44,36 @@
 ## PAC has no effect on PLT[0], for PLT[N] autia1716 is used to authenticate
 ## the address in x17 (context in x16) before branching to it. The dynamic
 ## loader is responsible for calling pacia1716 on the entry.
-# PACSO: 0000000000010310 func2:
-# PACSO-NEXT:    10310: bl      #48 <func3 at plt>
-# PACSO-NEXT:    10314: ret
+# PACSO: 0000000000010348 func2:
+# PACSO-NEXT:    10348:         bl      #56 <func3 at plt>
+# PACSO-NEXT:                   ret
+# PACSO: 0000000000010350 func3:
+# PACSO-NEXT:    10350:         ret
 # PACSO: Disassembly of section .plt:
-# PACSO: 0000000000010320 .plt:
-# PACSO-NEXT:    10320: stp     x16, x30, [sp, #-16]!
-# PACSO-NEXT:    10324: adrp    x16, #131072
-# PACSO-NEXT:    10328: ldr     x17, [x16, #1080]
-# PACSO-NEXT:    1032c: add     x16, x16, #1080
-# PACSO-NEXT:    10330: br      x17
-# PACSO-NEXT:    10334: nop
-# PACSO-NEXT:    10338: nop
-# PACSO-NEXT:    1033c: nop
-# PACSO: 0000000000010340 func3 at plt:
-# PACSO-NEXT:    10340: adrp    x16, #131072
-# PACSO-NEXT:    10344: ldr     x17, [x16, #1088]
-# PACSO-NEXT:    10348: add     x16, x16, #1088
-# PACSO-NEXT:    1034c: autia1716
-# PACSO-NEXT:    10350: br      x17
-# PACSO-NEXT:    10354: nop
+# PACSO: 0000000000010360 .plt:
+# PACSO-NEXT:    10360:         stp     x16, x30, [sp, #-16]!
+# PACSO-NEXT:                   adrp    x16, #131072
+# PACSO-NEXT:                   ldr     x17, [x16, #1144]
+# PACSO-NEXT:                   add     x16, x16, #1144
+# PACSO-NEXT:                   br      x17
+# PACSO-NEXT:                   nop
+# PACSO-NEXT:                   nop
+# PACSO-NEXT:                   nop
+# PACSO: 0000000000010380 func3 at plt:
+# PACSO-NEXT:    10380:         adrp    x16, #131072
+# PACSO-NEXT:                   ldr     x17, [x16, #1152]
+# PACSO-NEXT:                   add     x16, x16, #1152
+# PACSO-NEXT:                   autia1716
+# PACSO-NEXT:                   br      x17
+# PACSO-NEXT:                   nop
 
 # SOGOTPLT: Hex dump of section '.got.plt':
 # SOGOTPLT-NEXT: 0x000303b0 00000000 00000000 00000000 00000000
 # SOGOTPLT-NEXT: 0x000303c0 00000000 00000000 d0020100 00000000
 
 # SOGOTPLT2: Hex dump of section '.got.plt':
-# SOGOTPLT2-NEXT: 0x00030428 00000000 00000000 00000000 00000000
-# SOGOTPLT2-NEXT: 0x00030438 00000000 00000000 20030100 00000000
+# SOGOTPLT2-NEXT: 0x00030468 00000000 00000000 00000000 00000000
+# SOGOTPLT2-NEXT: 0x00030478 00000000 00000000 60030100 00000000
 
 # PACPROP: Properties:    aarch64 feature: PAC
 
@@ -89,29 +91,28 @@
 # RUN: llvm-objdump -d -mattr=+v8.3a --no-show-raw-insn %tpacplt.exe | FileCheck --check-prefix PACPLT %s
 
 # PACPLT: Disassembly of section .text:
-# PACPLT: 0000000000210338 func1:
-# PACPLT-NEXT:   210338: bl      #56 <func2 at plt>
-# PACPLT-NEXT:   21033c: ret
-# PACPLT: 0000000000210340 func3:
-# PACPLT-NEXT:   210340: ret
+# PACPLT: 0000000000210370 func1:
+# PACPLT-NEXT:   210370:        bl      #48 <func2 at plt>
+# PACPLT-NEXT:                  ret
+# PACPLT: 0000000000210378 func3:
+# PACPLT-NEXT:   210378:        ret
 # PACPLT: Disassembly of section .plt:
-# PACPLT: 0000000000210350 .plt:
-# PACPLT-NEXT:   210350: stp     x16, x30, [sp, #-16]!
-# PACPLT-NEXT:   210354: adrp    x16, #131072
-# PACPLT-NEXT:   210358: ldr     x17, [x16, #1144]
-# PACPLT-NEXT:   21035c: add     x16, x16, #1144
-# PACPLT-NEXT:   210360: br      x17
-# PACPLT-NEXT:   210364: nop
-# PACPLT-NEXT:   210368: nop
-# PACPLT-NEXT:   21036c: nop
-# PACPLT: 0000000000210370 func2 at plt:
-# PACPLT-NEXT:   210370: adrp    x16, #131072
-# PACPLT-NEXT:   210374: ldr     x17, [x16, #1152]
-# PACPLT-NEXT:   210378: add     x16, x16, #1152
-# PACPLT-NEXT:   21037c: autia1716
-# PACPLT-NEXT:   210380: br      x17
-# PACPLT-NEXT:   210384: nop
-
+# PACPLT: 0000000000210380 .plt:
+# PACPLT-NEXT:   210380:        stp     x16, x30, [sp, #-16]!
+# PACPLT-NEXT:                  adrp    x16, #131072
+# PACPLT-NEXT:                  ldr     x17, [x16, #1192]
+# PACPLT-NEXT:                  add     x16, x16, #1192
+# PACPLT-NEXT:                  br      x17
+# PACPLT-NEXT:                  nop
+# PACPLT-NEXT:                  nop
+# PACPLT-NEXT:                  nop
+# PACPLT: 00000000002103a0 func2 at plt:
+# PACPLT-NEXT:   2103a0:        adrp    x16, #131072
+# PACPLT-NEXT:                  ldr     x17, [x16, #1200]
+# PACPLT-NEXT:                  add     x16, x16, #1200
+# PACPLT-NEXT:                  autia1716
+# PACPLT-NEXT:                  br      x17
+# PACPLT-NEXT:                  nop
 
 .section ".note.gnu.property", "a"
 .long 4

diff  --git a/lld/test/ELF/aarch64-ifunc-bti.s b/lld/test/ELF/aarch64-ifunc-bti.s
index 6a50b317ca3d..70369d3e9f81 100644
--- a/lld/test/ELF/aarch64-ifunc-bti.s
+++ b/lld/test/ELF/aarch64-ifunc-bti.s
@@ -4,37 +4,37 @@
 
 # RUN: ld.lld --shared --soname=t1.so %t1.o -o %t1.so
 # RUN: ld.lld --pie %t1.so %t.o -o %t
-# RUN: llvm-objdump -d -mattr=+bti -triple=aarch64-linux-gnu %t | FileCheck %s
+# RUN: llvm-objdump -d --no-show-raw-insn -mattr=+bti -triple=aarch64-linux-gnu %t | FileCheck %s
 
 # When the address of an ifunc is taken using a non-got reference which clang
 # can do, LLD exports a canonical PLT entry that may have its address taken so
 # we must use bti c.
 
 # CHECK: Disassembly of section .plt:
-# CHECK: 0000000000010340 .plt:
-# CHECK-NEXT:    10340: 5f 24 03 d5                     bti     c
-# CHECK-NEXT:    10344: f0 7b bf a9                     stp     x16, x30, [sp, #-16]!
-# CHECK-NEXT:    10348: 10 01 00 90                     adrp    x16, #131072
-# CHECK-NEXT:    1034c: 11 5e 42 f9                     ldr     x17, [x16, #1208]
-# CHECK-NEXT:    10350: 10 e2 12 91                     add     x16, x16, #1208
-# CHECK-NEXT:    10354: 20 02 1f d6                     br      x17
-# CHECK-NEXT:    10358: 1f 20 03 d5                     nop
-# CHECK-NEXT:    1035c: 1f 20 03 d5                     nop
-# CHECK: 0000000000010360 func1 at plt:
-# CHECK-NEXT:    10360: 5f 24 03 d5                     bti     c
-# CHECK-NEXT:    10364: 10 01 00 90                     adrp    x16, #131072
-# CHECK-NEXT:    10368: 11 62 42 f9                     ldr     x17, [x16, #1216]
-# CHECK-NEXT:    1036c: 10 02 13 91                     add     x16, x16, #1216
-# CHECK-NEXT:    10370: 20 02 1f d6                     br      x17
-# CHECK-NEXT:    10374: 1f 20 03 d5                     nop
+# CHECK: 0000000000010380 .plt:
+# CHECK-NEXT:    10380:         bti     c
+# CHECK-NEXT:                   stp     x16, x30, [sp, #-16]!
+# CHECK-NEXT:                   adrp    x16, #131072
+# CHECK-NEXT:                   ldr     x17, [x16, #1272]
+# CHECK-NEXT:                   add     x16, x16, #1272
+# CHECK-NEXT:                   br      x17
+# CHECK-NEXT:                   nop
+# CHECK-NEXT:                   nop
+# CHECK: 00000000000103a0 func1 at plt:
+# CHECK-NEXT:    103a0:         bti     c
+# CHECK-NEXT:                   adrp    x16, #131072
+# CHECK-NEXT:                   ldr     x17, [x16, #1280]
+# CHECK-NEXT:                   add     x16, x16, #1280
+# CHECK-NEXT:                   br      x17
+# CHECK-NEXT:                   nop
 # CHECK-NEXT:           ...
-# CHECK: 0000000000010380 myfunc:
-# CHECK-NEXT:    10380: 5f 24 03 d5                     bti     c
-# CHECK-NEXT:    10384: 10 01 00 90                     adrp    x16, #131072
-# CHECK-NEXT:    10388: 11 66 42 f9                     ldr     x17, [x16, #1224]
-# CHECK-NEXT:    1038c: 10 22 13 91                     add     x16, x16, #1224
-# CHECK-NEXT:    10390: 20 02 1f d6                     br      x17
-# CHECK-NEXT:    10394: 1f 20 03 d5                     nop
+# CHECK: 00000000000103c0 myfunc:
+# CHECK-NEXT:    103c0:         bti     c
+# CHECK-NEXT:                   adrp    x16, #131072
+# CHECK-NEXT:                   ldr     x17, [x16, #1288]
+# CHECK-NEXT:                   add     x16, x16, #1288
+# CHECK-NEXT:                   br      x17
+# CHECK-NEXT:                   nop
 
 .section ".note.gnu.property", "a"
 .long 4

diff  --git a/lld/test/ELF/pt-gnu-property.s b/lld/test/ELF/pt-gnu-property.s
new file mode 100644
index 000000000000..2f7a148123b5
--- /dev/null
+++ b/lld/test/ELF/pt-gnu-property.s
@@ -0,0 +1,45 @@
+# REQUIRES: x86
+# RUN: llvm-mc -filetype=obj -triple=x86_64-linux-gnu %s -o %t.o
+# RUN: ld.lld %t.o -o %t
+# RUN: llvm-readobj --sections --program-headers %t | FileCheck %s
+
+## Test that we generate the PT_GNU_PROPERTY segment type that describes the
+## .note.gnu.property if it is present.
+
+# CHECK:      Name: .note.gnu.property
+# CHECK-NEXT: Type: SHT_NOTE (0x7)
+# CHECK-NEXT: Flags [ (0x2)
+# CHECK-NEXT:   SHF_ALLOC (0x2)
+# CHECK-NEXT: ]
+# CHECK-NEXT: Address: 0x200190
+# CHECK-NEXT: Offset: 0x190
+# CHECK-NEXT: Size: 32
+# CHECK-NEXT: Link: 0
+# CHECK-NEXT: Info: 0
+# CHECK-NEXT: AddressAlignment: 4
+
+# CHECK:      Type: PT_GNU_PROPERTY (0x6474E553)
+# CHECK-NEXT: Offset: 0x190
+# CHECK-NEXT: VirtualAddress: 0x200190
+# CHECK-NEXT: PhysicalAddress: 0x200190
+# CHECK-NEXT: FileSize: 32
+# CHECK-NEXT: MemSize: 32
+# CHECK-NEXT: Flags [ (0x4)
+# CHECK-NEXT:   PF_R (0x4)
+# CHECK-NEXT: ]
+# CHECK-NEXT: Alignment: 4
+
+.section ".note.gnu.property", "a"
+.long 4
+.long 0x10
+.long 0x5
+.asciz "GNU"
+
+.long 0xc0000002 # GNU_PROPERTY_X86_FEATURE_1_AND
+.long 4
+.long 1          # GNU_PROPERTY_X86_FEATURE_1_IBT
+.long 0
+
+.text
+.globl _start
+ ret


        


More information about the llvm-commits mailing list