1 //===- llvm/unittest/Object/Disassembler.cpp ------------------------------===//
3 // The LLVM Compiler Infrastructure
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
8 //===----------------------------------------------------------------------===//
10 #include "llvm-c/Disassembler.h"
11 #include "llvm/Support/TargetSelect.h"
12 #include "gtest/gtest.h"
16 static const char *symbolLookupCallback(void *DisInfo
, uint64_t ReferenceValue
,
17 uint64_t *ReferenceType
,
19 const char **ReferenceName
) {
20 *ReferenceType
= LLVMDisassembler_ReferenceType_InOut_None
;
24 TEST(Disassembler
, X86Test
) {
25 llvm::InitializeAllTargetInfos();
26 llvm::InitializeAllTargetMCs();
27 llvm::InitializeAllDisassemblers();
29 uint8_t Bytes
[] = {0x90, 0x90, 0xeb, 0xfd};
30 uint8_t *BytesP
= Bytes
;
31 const char OutStringSize
= 100;
32 char OutString
[OutStringSize
];
33 LLVMDisasmContextRef DCR
= LLVMCreateDisasm("x86_64-pc-linux", nullptr, 0,
34 nullptr, symbolLookupCallback
);
39 unsigned NumBytes
= sizeof(Bytes
);
42 InstSize
= LLVMDisasmInstruction(DCR
, BytesP
, NumBytes
, PC
, OutString
,
44 EXPECT_EQ(InstSize
, 1U);
45 EXPECT_EQ(StringRef(OutString
), "\tnop");
50 InstSize
= LLVMDisasmInstruction(DCR
, BytesP
, NumBytes
, PC
, OutString
,
52 EXPECT_EQ(InstSize
, 1U);
53 EXPECT_EQ(StringRef(OutString
), "\tnop");
58 InstSize
= LLVMDisasmInstruction(DCR
, BytesP
, NumBytes
, PC
, OutString
,
60 EXPECT_EQ(InstSize
, 2U);
61 EXPECT_EQ(StringRef(OutString
), "\tjmp\t0x1");
63 LLVMDisasmDispose(DCR
);
66 TEST(Disassembler
, WebAssemblyTest
) {
67 llvm::InitializeAllTargetInfos();
68 llvm::InitializeAllTargetMCs();
69 llvm::InitializeAllDisassemblers();
71 uint8_t Bytes
[] = {0x6a, 0x42, 0x7F, 0x35, 0x01, 0x10};
72 uint8_t *BytesP
= Bytes
;
73 const char OutStringSize
= 100;
74 char OutString
[OutStringSize
];
75 LLVMDisasmContextRef DCR
= LLVMCreateDisasm("wasm32-unknown-unknown", nullptr,
76 0, nullptr, symbolLookupCallback
);
81 unsigned NumBytes
= sizeof(Bytes
);
84 InstSize
= LLVMDisasmInstruction(DCR
, BytesP
, NumBytes
, PC
, OutString
,
86 EXPECT_EQ(InstSize
, 1U);
87 EXPECT_EQ(StringRef(OutString
), "\ti32.add ");
92 InstSize
= LLVMDisasmInstruction(DCR
, BytesP
, NumBytes
, PC
, OutString
,
94 EXPECT_EQ(InstSize
, 2U);
95 EXPECT_EQ(StringRef(OutString
), "\ti64.const\t-1");
101 InstSize
= LLVMDisasmInstruction(DCR
, BytesP
, NumBytes
, PC
, OutString
,
103 EXPECT_EQ(InstSize
, 3U);
104 EXPECT_EQ(StringRef(OutString
), "\ti64.load32_u\t16:p2align=1");
106 LLVMDisasmDispose(DCR
);