[ELF] - EhFrame.cpp: cover personality encoding handling code with the test cases.
authorGeorge Rimar <grimar@accesssoftek.com>
Fri, 29 Jun 2018 12:19:35 +0000 (12:19 +0000)
committerGeorge Rimar <grimar@accesssoftek.com>
Fri, 29 Jun 2018 12:19:35 +0000 (12:19 +0000)
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 [new file with mode: 0644]
lld/test/ELF/eh-frame-value-format2.s [new file with mode: 0644]
lld/test/ELF/eh-frame-value-format3.s [new file with mode: 0644]
lld/test/ELF/eh-frame-value-format4.s [new file with mode: 0644]
lld/test/ELF/eh-frame-value-format5.s [new file with mode: 0644]
lld/test/ELF/eh-frame-value-format6.s [new file with mode: 0644]

diff --git a/lld/test/ELF/eh-frame-value-format1.s b/lld/test/ELF/eh-frame-value-format1.s
new file mode 100644 (file)
index 0000000..1190244
--- /dev/null
@@ -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 (file)
index 0000000..988d508
--- /dev/null
@@ -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 (file)
index 0000000..dd0d853
--- /dev/null
@@ -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 (file)
index 0000000..404a860
--- /dev/null
@@ -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 (file)
index 0000000..ef48087
--- /dev/null
@@ -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 (file)
index 0000000..ef48087
--- /dev/null
@@ -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