OLD | NEW |
(Empty) | |
| 1 ; RUN: not pnacl-abicheck < %s | FileCheck %s |
| 2 ; RUN: not pnacl-abicheck -pnaclabi-allow-debug-metadata < %s | \ |
| 3 ; RUN: FileCheck %s --check-prefix=DBG |
| 4 |
| 5 ; Test that only white-listed intrinsics are allowed. |
| 6 |
| 7 ; =================================== |
| 8 ; Always allowed intrinsics. |
| 9 |
| 10 declare void @llvm.memcpy.p0i8.p0i8.i32(i8* %dest, i8* %src, |
| 11 i32 %len, i32 %align, i1 %isvolatile) |
| 12 declare void @llvm.memmove.p0i8.p0i8.i32(i8* %dest, i8* %src, |
| 13 i32 %len, i32 %align, i1 %isvolatile) |
| 14 declare void @llvm.memset.p0i8.i32(i8* %dest, i8 %val, |
| 15 i32 %len, i32 %align, i1 %isvolatile) |
| 16 |
| 17 declare i8* @llvm.nacl.read.tp() |
| 18 |
| 19 declare i8 @llvm.nacl.atomic.load.i8(i8*, i32) |
| 20 declare i16 @llvm.nacl.atomic.load.i16(i16*, i32) |
| 21 declare i32 @llvm.nacl.atomic.load.i32(i32*, i32) |
| 22 declare i64 @llvm.nacl.atomic.load.i64(i64*, i32) |
| 23 declare void @llvm.nacl.atomic.store.i8(i8, i8*, i32) |
| 24 declare void @llvm.nacl.atomic.store.i16(i16, i16*, i32) |
| 25 declare void @llvm.nacl.atomic.store.i32(i32, i32*, i32) |
| 26 declare void @llvm.nacl.atomic.store.i64(i64, i64*, i32) |
| 27 declare i8 @llvm.nacl.atomic.rmw.i8(i32, i8*, i8, i32) |
| 28 declare i16 @llvm.nacl.atomic.rmw.i16(i32, i16*, i16, i32) |
| 29 declare i32 @llvm.nacl.atomic.rmw.i32(i32, i32*, i32, i32) |
| 30 declare i64 @llvm.nacl.atomic.rmw.i64(i32, i64*, i64, i32) |
| 31 declare i8 @llvm.nacl.atomic.cmpxchg.i8(i8*, i8, i8, i32, i32) |
| 32 declare i16 @llvm.nacl.atomic.cmpxchg.i16(i16*, i16, i16, i32, i32) |
| 33 declare i32 @llvm.nacl.atomic.cmpxchg.i32(i32*, i32, i32, i32, i32) |
| 34 declare i64 @llvm.nacl.atomic.cmpxchg.i64(i64*, i64, i64, i32, i32) |
| 35 declare void @llvm.nacl.atomic.fence(i32) |
| 36 declare void @llvm.nacl.atomic.fence.all() |
| 37 declare i1 @llvm.nacl.atomic.is.lock.free(i32, i8*) |
| 38 |
| 39 declare i16 @llvm.bswap.i16(i16) |
| 40 declare i32 @llvm.bswap.i32(i32) |
| 41 declare i64 @llvm.bswap.i64(i64) |
| 42 |
| 43 declare i32 @llvm.cttz.i32(i32, i1) |
| 44 declare i64 @llvm.cttz.i64(i64, i1) |
| 45 |
| 46 declare i32 @llvm.ctlz.i32(i32, i1) |
| 47 declare i64 @llvm.ctlz.i64(i64, i1) |
| 48 |
| 49 declare i32 @llvm.ctpop.i32(i32) |
| 50 declare i64 @llvm.ctpop.i64(i64) |
| 51 |
| 52 declare void @llvm.trap() |
| 53 |
| 54 declare float @llvm.fabs.f32(float) |
| 55 declare double @llvm.fabs.f64(double) |
| 56 declare <4 x float> @llvm.fabs.v4f32(<4 x float>) |
| 57 |
| 58 declare float @llvm.sqrt.f32(float) |
| 59 declare double @llvm.sqrt.f64(double) |
| 60 |
| 61 declare i8* @llvm.stacksave() |
| 62 declare void @llvm.stackrestore(i8*) |
| 63 |
| 64 declare void @llvm.nacl.longjmp(i8*, i32) |
| 65 declare i32 @llvm.nacl.setjmp(i8*) |
| 66 |
| 67 ; CHECK-NOT: disallowed |
| 68 |
| 69 ; =================================== |
| 70 ; Always disallowed intrinsics. |
| 71 |
| 72 ; CHECK: Function llvm.adjust.trampoline is a disallowed LLVM intrinsic |
| 73 ; DBG: Function llvm.adjust.trampoline is a disallowed LLVM intrinsic |
| 74 declare i8* @llvm.adjust.trampoline(i8*) |
| 75 |
| 76 ; CHECK: Function llvm.init.trampoline is a disallowed LLVM intrinsic |
| 77 ; DBG: Function llvm.init.trampoline is a disallowed LLVM intrinsic |
| 78 declare void @llvm.init.trampoline(i8*, i8*, i8*) |
| 79 |
| 80 ; CHECK: Function llvm.x86.aesni.aeskeygenassist is a disallowed LLVM intrinsic |
| 81 ; DBG: Function llvm.x86.aesni.aeskeygenassist is a disallowed LLVM intrinsic |
| 82 declare <2 x i64> @llvm.x86.aesni.aeskeygenassist(<2 x i64>, i8) |
| 83 |
| 84 ; CHECK: Function llvm.va_copy is a disallowed LLVM intrinsic |
| 85 ; DBG: Function llvm.va_copy is a disallowed LLVM intrinsic |
| 86 declare void @llvm.va_copy(i8*, i8*) |
| 87 |
| 88 ; CHECK: Function llvm.bswap.i1 is a disallowed LLVM intrinsic |
| 89 declare i1 @llvm.bswap.i1(i1) |
| 90 |
| 91 ; CHECK: Function llvm.bswap.i8 is a disallowed LLVM intrinsic |
| 92 declare i8 @llvm.bswap.i8(i8) |
| 93 |
| 94 ; CHECK: Function llvm.ctlz.i16 is a disallowed LLVM intrinsic |
| 95 declare i16 @llvm.ctlz.i16(i16, i1) |
| 96 |
| 97 ; CHECK: Function llvm.cttz.i16 is a disallowed LLVM intrinsic |
| 98 declare i16 @llvm.cttz.i16(i16, i1) |
| 99 |
| 100 ; CHECK: Function llvm.ctpop.i16 is a disallowed LLVM intrinsic |
| 101 declare i16 @llvm.ctpop.i16(i16) |
| 102 |
| 103 ; CHECK: Function llvm.lifetime.start is a disallowed LLVM intrinsic |
| 104 declare void @llvm.lifetime.start(i64, i8* nocapture) |
| 105 |
| 106 ; CHECK: Function llvm.lifetime.end is a disallowed LLVM intrinsic |
| 107 declare void @llvm.lifetime.end(i64, i8* nocapture) |
| 108 |
| 109 ; CHECK: Function llvm.frameaddress is a disallowed LLVM intrinsic |
| 110 declare i8* @llvm.frameaddress(i32 %level) |
| 111 |
| 112 ; CHECK: Function llvm.returnaddress is a disallowed LLVM intrinsic |
| 113 declare i8* @llvm.returnaddress(i32 %level) |
| 114 |
| 115 ; CHECK: Function llvm.fabs.f16 is a disallowed LLVM intrinsic |
| 116 declare half @llvm.fabs.f16(half) |
| 117 |
| 118 ; CHECK: Function llvm.fabs.v2f16 is a disallowed LLVM intrinsic |
| 119 declare <2 x half> @llvm.fabs.v2f16(<2 x half>) |
| 120 ; CHECK: Function llvm.fabs.v4f16 is a disallowed LLVM intrinsic |
| 121 declare <4 x half> @llvm.fabs.v4f16(<4 x half>) |
| 122 ; CHECK: Function llvm.fabs.v8f16 is a disallowed LLVM intrinsic |
| 123 declare <8 x half> @llvm.fabs.v8f16(<8 x half>) |
| 124 |
| 125 ; CHECK: Function llvm.fabs.v2f32 is a disallowed LLVM intrinsic |
| 126 declare <2 x float> @llvm.fabs.v2f32(<2 x float>) |
| 127 ; CHECK: Function llvm.fabs.v8f32 is a disallowed LLVM intrinsic |
| 128 declare <8 x float> @llvm.fabs.v8f32(<8 x float>) |
| 129 |
| 130 ; CHECK: Function llvm.fabs.v2f64 is a disallowed LLVM intrinsic |
| 131 declare <2 x double> @llvm.fabs.v2f64(<2 x double>) |
| 132 ; CHECK: Function llvm.fabs.v4f64 is a disallowed LLVM intrinsic |
| 133 declare <4 x double> @llvm.fabs.v4f64(<4 x double>) |
| 134 ; CHECK: Function llvm.fabs.v8f64 is a disallowed LLVM intrinsic |
| 135 declare <8 x double> @llvm.fabs.v8f64(<8 x double>) |
| 136 |
| 137 ; CHECK: Function llvm.sqrt.fp128 is a disallowed LLVM intrinsic |
| 138 declare fp128 @llvm.sqrt.fp128(fp128) |
| 139 |
| 140 ; The variants with 64-bit %len arguments are disallowed. |
| 141 ; CHECK: Function llvm.memcpy.p0i8.p0i8.i64 is a disallowed LLVM intrinsic |
| 142 declare void @llvm.memcpy.p0i8.p0i8.i64(i8* %dest, i8* %src, |
| 143 i64 %len, i32 %align, i1 %isvolatile) |
| 144 ; CHECK: Function llvm.memmove.p0i8.p0i8.i64 is a disallowed LLVM intrinsic |
| 145 declare void @llvm.memmove.p0i8.p0i8.i64(i8* %dest, i8* %src, |
| 146 i64 %len, i32 %align, i1 %isvolatile) |
| 147 ; CHECK: Function llvm.memset.p0i8.i64 is a disallowed LLVM intrinsic |
| 148 declare void @llvm.memset.p0i8.i64(i8* %dest, i8 %val, |
| 149 i64 %len, i32 %align, i1 %isvolatile) |
| 150 |
| 151 ; Test that the ABI checker checks the full function name. |
| 152 ; CHECK: Function llvm.memset.foo is a disallowed LLVM intrinsic |
| 153 declare void @llvm.memset.foo(i8* %dest, i8 %val, |
| 154 i64 %len, i32 %align, i1 %isvolatile) |
| 155 |
| 156 ; A debuginfo version is required. |
| 157 !llvm.module.flags = !{!0} |
| 158 !0 = metadata !{i32 1, metadata !"Debug Info Version", i32 2} |
| 159 |
| 160 ; =================================== |
| 161 ; Debug info intrinsics, which are disallowed by default. |
| 162 |
| 163 ; CHECK: Function llvm.dbg.value is a disallowed LLVM intrinsic |
| 164 ; DBG-NOT: Function llvm.dbg.value is a disallowed LLVM intrinsic |
| 165 declare void @llvm.dbg.value(metadata, i64, metadata, metadata) |
| 166 ; CHECK: Function llvm.dbg.declare is a disallowed LLVM intrinsic |
| 167 ; DBG-NOT: Function llvm.dbg.declare is a disallowed LLVM intrinsic |
| 168 declare void @llvm.dbg.declare(metadata, metadata, metadata) |
OLD | NEW |