mirror of
https://github.com/intel/llvm.git
synced 2026-01-17 23:45:25 +08:00
[ELF] - EhFrame.cpp: cover personality encoding handling code with the test cases.
CIEs augmentation string can have 'P' character, what means the next byte is the personality encoding, a DW_EH_PE_xxx value. This is followed by a pointer to the personality function. We had the support of the different encodings earlier, but had no test cases. This change adds coverage of DW_EH_PE_absptr/DW_EH_PE_signed/DW_EH_PE_udata2/DW_EH_PE_sdata2 and DW_EH_PE_udata8/DW_EH_PE_sdata8 cases for place below: https://github.com/llvm-mirror/lld/blob/master/ELF/EhFrame.cpp#L123 llvm-svn: 335969
This commit is contained in:
35
lld/test/ELF/eh-frame-value-format1.s
Normal file
35
lld/test/ELF/eh-frame-value-format1.s
Normal file
@@ -0,0 +1,35 @@
|
||||
# REQUIRES: x86
|
||||
|
||||
# RUN: llvm-mc -filetype=obj -triple=x86_64-pc-linux %s -o %t
|
||||
# RUN: ld.lld --eh-frame-hdr %t -o %t2
|
||||
|
||||
.section .eh_frame
|
||||
.byte 0x14
|
||||
.byte 0x00
|
||||
.byte 0x00
|
||||
.byte 0x00
|
||||
.byte 0x00
|
||||
.byte 0x00
|
||||
.byte 0x00
|
||||
.byte 0x00
|
||||
.byte 0x01
|
||||
|
||||
.byte 0x50 # Augmentation string: 'P','\0'
|
||||
.byte 0x00
|
||||
|
||||
.byte 0x01
|
||||
|
||||
.byte 0x01 # LEB128
|
||||
.byte 0x01 # LEB128
|
||||
|
||||
.byte 0x04 # DW_EH_PE_udata8
|
||||
.byte 0xFF
|
||||
.byte 0xFF
|
||||
.byte 0xFF
|
||||
.byte 0xFF
|
||||
.byte 0xFF
|
||||
.byte 0xFF
|
||||
.byte 0xFF
|
||||
.byte 0xFF
|
||||
|
||||
.byte 0xFF
|
||||
35
lld/test/ELF/eh-frame-value-format2.s
Normal file
35
lld/test/ELF/eh-frame-value-format2.s
Normal file
@@ -0,0 +1,35 @@
|
||||
# REQUIRES: x86
|
||||
|
||||
# RUN: llvm-mc -filetype=obj -triple=x86_64-pc-linux %s -o %t
|
||||
# RUN: ld.lld --eh-frame-hdr %t -o %t2
|
||||
|
||||
.section .eh_frame
|
||||
.byte 0x14
|
||||
.byte 0x00
|
||||
.byte 0x00
|
||||
.byte 0x00
|
||||
.byte 0x00
|
||||
.byte 0x00
|
||||
.byte 0x00
|
||||
.byte 0x00
|
||||
.byte 0x01
|
||||
|
||||
.byte 0x50 # Augmentation string: 'P','\0'
|
||||
.byte 0x00
|
||||
|
||||
.byte 0x01
|
||||
|
||||
.byte 0x01 # LEB128
|
||||
.byte 0x01 # LEB128
|
||||
|
||||
.byte 0x04 # DW_EH_PE_sdata8
|
||||
.byte 0xFF
|
||||
.byte 0xFF
|
||||
.byte 0xFF
|
||||
.byte 0xFF
|
||||
.byte 0xFF
|
||||
.byte 0xFF
|
||||
.byte 0xFF
|
||||
.byte 0xFF
|
||||
|
||||
.byte 0xFF
|
||||
28
lld/test/ELF/eh-frame-value-format3.s
Normal file
28
lld/test/ELF/eh-frame-value-format3.s
Normal file
@@ -0,0 +1,28 @@
|
||||
# REQUIRES: x86
|
||||
|
||||
# RUN: llvm-mc -filetype=obj -triple=x86_64-pc-linux %s -o %t
|
||||
# RUN: ld.lld --eh-frame-hdr %t -o %t2
|
||||
|
||||
.section .eh_frame
|
||||
.byte 0x0E
|
||||
.byte 0x00
|
||||
.byte 0x00
|
||||
.byte 0x00
|
||||
.byte 0x00
|
||||
.byte 0x00
|
||||
.byte 0x00
|
||||
.byte 0x00
|
||||
.byte 0x01
|
||||
|
||||
.byte 0x50 # Augmentation string: 'P','\0'
|
||||
.byte 0x00
|
||||
|
||||
.byte 0x01
|
||||
|
||||
.byte 0x01 # LEB128
|
||||
.byte 0x01 # LEB128
|
||||
|
||||
.byte 0x0A # DW_EH_PE_sdata2
|
||||
.byte 0xFF
|
||||
.byte 0xFF
|
||||
.byte 0xFF
|
||||
28
lld/test/ELF/eh-frame-value-format4.s
Normal file
28
lld/test/ELF/eh-frame-value-format4.s
Normal file
@@ -0,0 +1,28 @@
|
||||
# REQUIRES: x86
|
||||
|
||||
# RUN: llvm-mc -filetype=obj -triple=x86_64-pc-linux %s -o %t
|
||||
# RUN: ld.lld --eh-frame-hdr %t -o %t2
|
||||
|
||||
.section .eh_frame
|
||||
.byte 0x0E
|
||||
.byte 0x00
|
||||
.byte 0x00
|
||||
.byte 0x00
|
||||
.byte 0x00
|
||||
.byte 0x00
|
||||
.byte 0x00
|
||||
.byte 0x00
|
||||
.byte 0x01
|
||||
|
||||
.byte 0x50 # Augmentation string: 'P','\0'
|
||||
.byte 0x00
|
||||
|
||||
.byte 0x01
|
||||
|
||||
.byte 0x01 # LEB128
|
||||
.byte 0x01 # LEB128
|
||||
|
||||
.byte 0x02 # DW_EH_PE_udata2
|
||||
.byte 0xFF
|
||||
.byte 0xFF
|
||||
.byte 0xFF
|
||||
35
lld/test/ELF/eh-frame-value-format5.s
Normal file
35
lld/test/ELF/eh-frame-value-format5.s
Normal file
@@ -0,0 +1,35 @@
|
||||
# REQUIRES: x86
|
||||
|
||||
# RUN: llvm-mc -filetype=obj -triple=x86_64-pc-linux %s -o %t
|
||||
# RUN: ld.lld --eh-frame-hdr %t -o %t2
|
||||
|
||||
.section .eh_frame
|
||||
.byte 0x14
|
||||
.byte 0x00
|
||||
.byte 0x00
|
||||
.byte 0x00
|
||||
.byte 0x00
|
||||
.byte 0x00
|
||||
.byte 0x00
|
||||
.byte 0x00
|
||||
.byte 0x01
|
||||
|
||||
.byte 0x50 # Augmentation string: 'P','\0'
|
||||
.byte 0x00
|
||||
|
||||
.byte 0x01
|
||||
|
||||
.byte 0x01 # LEB128
|
||||
.byte 0x01 # LEB128
|
||||
|
||||
.byte 0x08 # DW_EH_PE_signed
|
||||
.byte 0xFF
|
||||
.byte 0xFF
|
||||
.byte 0xFF
|
||||
.byte 0xFF
|
||||
.byte 0xFF
|
||||
.byte 0xFF
|
||||
.byte 0xFF
|
||||
.byte 0xFF
|
||||
|
||||
.byte 0xFF
|
||||
35
lld/test/ELF/eh-frame-value-format6.s
Normal file
35
lld/test/ELF/eh-frame-value-format6.s
Normal file
@@ -0,0 +1,35 @@
|
||||
# REQUIRES: x86
|
||||
|
||||
# RUN: llvm-mc -filetype=obj -triple=x86_64-pc-linux %s -o %t
|
||||
# RUN: ld.lld --eh-frame-hdr %t -o %t2
|
||||
|
||||
.section .eh_frame
|
||||
.byte 0x14
|
||||
.byte 0x00
|
||||
.byte 0x00
|
||||
.byte 0x00
|
||||
.byte 0x00
|
||||
.byte 0x00
|
||||
.byte 0x00
|
||||
.byte 0x00
|
||||
.byte 0x01
|
||||
|
||||
.byte 0x50 # Augmentation string: 'P','\0'
|
||||
.byte 0x00
|
||||
|
||||
.byte 0x01
|
||||
|
||||
.byte 0x01 # LEB128
|
||||
.byte 0x01 # LEB128
|
||||
|
||||
.byte 0x08 # DW_EH_PE_signed
|
||||
.byte 0xFF
|
||||
.byte 0xFF
|
||||
.byte 0xFF
|
||||
.byte 0xFF
|
||||
.byte 0xFF
|
||||
.byte 0xFF
|
||||
.byte 0xFF
|
||||
.byte 0xFF
|
||||
|
||||
.byte 0xFF
|
||||
Reference in New Issue
Block a user