From 2f7e39c7d5d7c19ec9529f2a2e7992bcb432751a Mon Sep 17 00:00:00 2001 From: George Rimar Date: Fri, 29 Jun 2018 12:19:35 +0000 Subject: [PATCH] [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 --- lld/test/ELF/eh-frame-value-format1.s | 35 +++++++++++++++++++++++++++ lld/test/ELF/eh-frame-value-format2.s | 35 +++++++++++++++++++++++++++ lld/test/ELF/eh-frame-value-format3.s | 28 +++++++++++++++++++++ lld/test/ELF/eh-frame-value-format4.s | 28 +++++++++++++++++++++ lld/test/ELF/eh-frame-value-format5.s | 35 +++++++++++++++++++++++++++ lld/test/ELF/eh-frame-value-format6.s | 35 +++++++++++++++++++++++++++ 6 files changed, 196 insertions(+) create mode 100644 lld/test/ELF/eh-frame-value-format1.s create mode 100644 lld/test/ELF/eh-frame-value-format2.s create mode 100644 lld/test/ELF/eh-frame-value-format3.s create mode 100644 lld/test/ELF/eh-frame-value-format4.s create mode 100644 lld/test/ELF/eh-frame-value-format5.s create mode 100644 lld/test/ELF/eh-frame-value-format6.s diff --git a/lld/test/ELF/eh-frame-value-format1.s b/lld/test/ELF/eh-frame-value-format1.s new file mode 100644 index 000000000000..1190244afbae --- /dev/null +++ b/lld/test/ELF/eh-frame-value-format1.s @@ -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 diff --git a/lld/test/ELF/eh-frame-value-format2.s b/lld/test/ELF/eh-frame-value-format2.s new file mode 100644 index 000000000000..988d5088116e --- /dev/null +++ b/lld/test/ELF/eh-frame-value-format2.s @@ -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 diff --git a/lld/test/ELF/eh-frame-value-format3.s b/lld/test/ELF/eh-frame-value-format3.s new file mode 100644 index 000000000000..dd0d853aa5b5 --- /dev/null +++ b/lld/test/ELF/eh-frame-value-format3.s @@ -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 diff --git a/lld/test/ELF/eh-frame-value-format4.s b/lld/test/ELF/eh-frame-value-format4.s new file mode 100644 index 000000000000..404a86050248 --- /dev/null +++ b/lld/test/ELF/eh-frame-value-format4.s @@ -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 diff --git a/lld/test/ELF/eh-frame-value-format5.s b/lld/test/ELF/eh-frame-value-format5.s new file mode 100644 index 000000000000..ef48087c3ec3 --- /dev/null +++ b/lld/test/ELF/eh-frame-value-format5.s @@ -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 diff --git a/lld/test/ELF/eh-frame-value-format6.s b/lld/test/ELF/eh-frame-value-format6.s new file mode 100644 index 000000000000..ef48087c3ec3 --- /dev/null +++ b/lld/test/ELF/eh-frame-value-format6.s @@ -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