[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:
George Rimar
2018-06-29 12:19:35 +00:00
parent 07b01ffff2
commit 2f7e39c7d5
6 changed files with 196 additions and 0 deletions

View 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

View 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

View 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

View 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

View 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

View 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