[llvm] r337181 - [cfi-verify] Abort on unsupported targets

Joel Galenson via llvm-commits llvm-commits at lists.llvm.org
Mon Jul 16 08:26:44 PDT 2018


Author: jgalenson
Date: Mon Jul 16 08:26:44 2018
New Revision: 337181

URL: http://llvm.org/viewvc/llvm-project?rev=337181&view=rev
Log:
[cfi-verify] Abort on unsupported targets

As suggested in the review for r337007, this makes cfi-verify abort on unsupported targets instead of producing incorrect results.  It also updates the design document to reflect this.

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

Added:
    llvm/trunk/test/tools/llvm-cfi-verify/Unsupported/
    llvm/trunk/test/tools/llvm-cfi-verify/Unsupported/arm-protected-lineinfo.s
    llvm/trunk/test/tools/llvm-cfi-verify/Unsupported/lit.local.cfg
Modified:
    llvm/trunk/docs/CFIVerify.rst
    llvm/trunk/tools/llvm-cfi-verify/lib/FileAnalysis.cpp

Modified: llvm/trunk/docs/CFIVerify.rst
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/docs/CFIVerify.rst?rev=337181&r1=337180&r2=337181&view=diff
==============================================================================
--- llvm/trunk/docs/CFIVerify.rst (original)
+++ llvm/trunk/docs/CFIVerify.rst Mon Jul 16 08:26:44 2018
@@ -86,6 +86,8 @@ Only machine code sections that are mark
 analysis. Non-executable sections do not require analysis as any execution
 present in these sections has already violated the control flow integrity.
 
-Suitable extensions may be made at a later date to include anaylsis for indirect
+Suitable extensions may be made at a later date to include analysis for indirect
 control flow operations across DSO boundaries. Currently, these CFI features are
 only experimental with an unstable ABI, making them unsuitable for analysis.
+
+The tool currently only supports the x86, x86_64, and AArch64 architectures.

Added: llvm/trunk/test/tools/llvm-cfi-verify/Unsupported/arm-protected-lineinfo.s
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/llvm-cfi-verify/Unsupported/arm-protected-lineinfo.s?rev=337181&view=auto
==============================================================================
--- llvm/trunk/test/tools/llvm-cfi-verify/Unsupported/arm-protected-lineinfo.s (added)
+++ llvm/trunk/test/tools/llvm-cfi-verify/Unsupported/arm-protected-lineinfo.s Mon Jul 16 08:26:44 2018
@@ -0,0 +1,232 @@
+# RUN: llvm-mc %s -filetype obj -triple armv7a-- -o %t.o
+# RUN: not llvm-cfi-verify %t.o 2>&1 | FileCheck %s
+
+# CHECK: Could not initialise disassembler: Unsupported architecture.
+
+# Source (tiny.cc):
+#   int a() { return 42; }
+#   int b() { return 137; }
+#   int main(int argc, char** argv) {
+#     int(*ptr)();
+#     if (argc == 1)
+#       ptr = &a;
+#     else
+#       ptr = &b;
+#     return ptr();
+#   }
+	.text
+	.syntax unified
+	.eabi_attribute	67, "2.09"
+	.eabi_attribute	6, 2
+	.eabi_attribute	8, 1
+	.eabi_attribute	9, 1
+	.eabi_attribute	34, 1
+	.eabi_attribute	15, 1
+	.eabi_attribute	16, 1
+	.eabi_attribute	17, 2
+	.eabi_attribute	20, 1
+	.eabi_attribute	21, 1
+	.eabi_attribute	23, 3
+	.eabi_attribute	24, 1
+	.eabi_attribute	25, 1
+	.eabi_attribute	38, 1
+	.eabi_attribute	18, 4
+	.eabi_attribute	26, 2
+	.eabi_attribute	14, 0
+	.file	"ld-temp.o"
+	.p2align	2
+	.type	_Z1av.cfi,%function
+	.code	32
+_Z1av.cfi:
+.Lfunc_begin0:
+	.file	1 "tiny.cc"
+	.loc	1 1 0
+	.fnstart
+	.cfi_sections .debug_frame
+	.cfi_startproc
+	.loc	1 1 11 prologue_end
+	mov	r0, #42
+	bx	lr
+.Ltmp0:
+.Lfunc_end0:
+	.size	_Z1av.cfi, .Lfunc_end0-_Z1av.cfi
+	.cfi_endproc
+	.cantunwind
+	.fnend
+
+	.p2align	2
+	.type	_Z1bv.cfi,%function
+	.code	32
+_Z1bv.cfi:
+.Lfunc_begin1:
+	.loc	1 2 0
+	.fnstart
+	.cfi_startproc
+	.loc	1 2 11 prologue_end
+	mov	r0, #137
+	bx	lr
+.Ltmp1:
+.Lfunc_end1:
+	.size	_Z1bv.cfi, .Lfunc_end1-_Z1bv.cfi
+	.cfi_endproc
+	.cantunwind
+	.fnend
+
+	.p2align	2
+	.type	main,%function
+	.code	32
+main:
+.Lfunc_begin2:
+	.loc	1 3 0
+	.fnstart
+	.cfi_startproc
+	.save	{r11, lr}
+	push	{r11, lr}
+	.cfi_def_cfa_offset 8
+	.cfi_offset lr, -4
+	.cfi_offset r11, -8
+	.setfp	r11, sp
+	mov	r11, sp
+	.cfi_def_cfa_register r11
+	.pad	#16
+	sub	sp, sp, #16
+	mov	r2, #0
+	str	r2, [r11, #-4]
+	str	r0, [sp, #8]
+	str	r1, [sp, #4]
+.Ltmp2:
+	.loc	1 5 7 prologue_end
+	ldr	r0, [sp, #8]
+	cmp	r0, #1
+	bne	.LBB2_2
+	b	.LBB2_1
+.LBB2_1:
+	.loc	1 6 9
+	ldr	r0, .LCPI2_0
+.LPC2_0:
+	add	r0, pc, r0
+	str	r0, [sp]
+	.loc	1 6 5 is_stmt 0
+	b	.LBB2_3
+.LBB2_2:
+	.loc	1 8 9 is_stmt 1
+	ldr	r0, .LCPI2_1
+.LPC2_1:
+	add	r0, pc, r0
+	str	r0, [sp]
+	b	.LBB2_3
+.LBB2_3:
+	.loc	1 9 10
+	ldr	r1, [sp]
+	ldr	r0, .LCPI2_2
+.LPC2_2:
+	add	r0, pc, r0
+	sub	r0, r1, r0
+	ror	r0, r0, #2
+	cmp	r0, #2
+	blo	.LBB2_5
+	b	.LBB2_4
+.LBB2_4:
+	.inst	0xe7ffdefe
+.LBB2_5:
+	mov	lr, pc
+	bx	r1
+	.loc	1 9 3 is_stmt 0
+	mov	sp, r11
+	pop	{r11, lr}
+	bx	lr
+.Ltmp3:
+	.p2align	2
+	.loc	1 0 3
+.LCPI2_0:
+	.long	_Z1av-(.LPC2_0+8)
+.LCPI2_1:
+	.long	_Z1bv-(.LPC2_1+8)
+.LCPI2_2:
+	.long	.L.cfi.jumptable-(.LPC2_2+8)
+.Lfunc_end2:
+	.size	main, .Lfunc_end2-main
+	.cfi_endproc
+	.fnend
+
+	.p2align	2
+	.type	.L.cfi.jumptable,%function
+	.code	32
+.L.cfi.jumptable:
+.Lfunc_begin3:
+	.fnstart
+	.cfi_startproc
+	@APP
+	b	_Z1av.cfi
+	b	_Z1bv.cfi
+
+	@NO_APP
+.Lfunc_end3:
+	.size	.L.cfi.jumptable, .Lfunc_end3-.L.cfi.jumptable
+	.cfi_endproc
+	.cantunwind
+	.fnend
+
+	.type	.L__unnamed_1,%object
+	.section	.rodata,"a",%progbits
+.L__unnamed_1:
+	.size	.L__unnamed_1, 0
+
+	.section	.debug_str,"MS",%progbits,1
+.Linfo_string0:
+	.asciz	"clang version 7.0.0 (trunk 336681) (llvm/trunk 336683)"
+.Linfo_string1:
+	.asciz	"tiny.cc"
+.Linfo_string2:
+	.asciz	""
+	.section	.debug_abbrev,"",%progbits
+	.byte	1
+	.byte	17
+	.byte	0
+	.byte	37
+	.byte	14
+	.byte	19
+	.byte	5
+	.byte	3
+	.byte	14
+	.byte	16
+	.byte	23
+	.byte	27
+	.byte	14
+	.byte	17
+	.byte	1
+	.byte	18
+	.byte	6
+	.byte	0
+	.byte	0
+	.byte	0
+	.section	.debug_info,"",%progbits
+.Lcu_begin0:
+	.long	34
+	.short	4
+	.long	.debug_abbrev
+	.byte	4
+	.byte	1
+	.long	.Linfo_string0
+	.short	4
+	.long	.Linfo_string1
+	.long	.Lline_table_start0
+	.long	.Linfo_string2
+	.long	.Lfunc_begin0
+	.long	.Lfunc_end2-.Lfunc_begin0
+	.section	.debug_ranges,"",%progbits
+	.section	.debug_macinfo,"",%progbits
+	.byte	0
+
+	.globl	__typeid__ZTSFivE_global_addr
+	.hidden	__typeid__ZTSFivE_global_addr
+.set __typeid__ZTSFivE_global_addr, .L.cfi.jumptable
+	.size	__typeid__ZTSFivE_global_addr, 1
+	.type	_Z1av,%function
+.set _Z1av, .L.cfi.jumptable
+	.type	_Z1bv,%function
+.set _Z1bv, .L.cfi.jumptable+4
+	.ident	"clang version 7.0.0 (trunk 336681) (llvm/trunk 336683)"
+	.section	".note.GNU-stack","",%progbits
+	.section	.debug_line,"",%progbits
+.Lline_table_start0:

Added: llvm/trunk/test/tools/llvm-cfi-verify/Unsupported/lit.local.cfg
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/llvm-cfi-verify/Unsupported/lit.local.cfg?rev=337181&view=auto
==============================================================================
--- llvm/trunk/test/tools/llvm-cfi-verify/Unsupported/lit.local.cfg (added)
+++ llvm/trunk/test/tools/llvm-cfi-verify/Unsupported/lit.local.cfg Mon Jul 16 08:26:44 2018
@@ -0,0 +1,2 @@
+if not 'ARM' in config.root.targets:
+    config.unsupported = True

Modified: llvm/trunk/tools/llvm-cfi-verify/lib/FileAnalysis.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-cfi-verify/lib/FileAnalysis.cpp?rev=337181&r1=337180&r2=337181&view=diff
==============================================================================
--- llvm/trunk/tools/llvm-cfi-verify/lib/FileAnalysis.cpp (original)
+++ llvm/trunk/tools/llvm-cfi-verify/lib/FileAnalysis.cpp Mon Jul 16 08:26:44 2018
@@ -85,6 +85,16 @@ Expected<FileAnalysis> FileAnalysis::Cre
   if (!Analysis.Object)
     return make_error<UnsupportedDisassembly>("Failed to cast object");
 
+  switch (Analysis.Object->getArch()) {
+    case Triple::x86:
+    case Triple::x86_64:
+    case Triple::aarch64:
+    case Triple::aarch64_be:
+      break;
+    default:
+      return make_error<UnsupportedDisassembly>("Unsupported architecture.");
+  }
+
   Analysis.ObjectTriple = Analysis.Object->makeTriple();
   Analysis.Features = Analysis.Object->getFeatures();
 




More information about the llvm-commits mailing list