[sanitizer] Improve FreeBSD ASLR detection
[llvm-project.git] / lldb / unittests / Utility / StringExtractorGDBRemoteTest.cpp
blob88362c028a9db4a95aa6615463c75be741bb023b
1 #include "gmock/gmock.h"
2 #include "gtest/gtest.h"
3 #include <limits.h>
5 #include "lldb/Utility/StringExtractorGDBRemote.h"
6 #include "lldb/lldb-defines.h"
8 TEST(StringExtractorGDBRemoteTest, GetPidTid) {
9 StringExtractorGDBRemote ex("");
10 EXPECT_EQ(ex.GetPidTid(0), llvm::None);
12 // invalid/short values
14 ex.Reset("narf");
15 EXPECT_EQ(ex.GetPidTid(0), llvm::None);
17 ex.Reset(";1234");
18 EXPECT_EQ(ex.GetPidTid(0), llvm::None);
20 ex.Reset(".1234");
21 EXPECT_EQ(ex.GetPidTid(0), llvm::None);
23 ex.Reset("p");
24 EXPECT_EQ(ex.GetPidTid(0), llvm::None);
26 ex.Reset("pnarf");
27 EXPECT_EQ(ex.GetPidTid(0), llvm::None);
29 ex.Reset("p;1234");
30 EXPECT_EQ(ex.GetPidTid(0), llvm::None);
32 ex.Reset("p.1234");
33 EXPECT_EQ(ex.GetPidTid(0), llvm::None);
35 ex.Reset("p1234.");
36 EXPECT_EQ(ex.GetPidTid(0), llvm::None);
38 EXPECT_EQ(ex.GetPidTid(0), llvm::None);
40 ex.Reset("p1234.;1234");
41 EXPECT_EQ(ex.GetPidTid(0), llvm::None);
43 ex.Reset("-2");
44 EXPECT_EQ(ex.GetPidTid(0), llvm::None);
46 ex.Reset("p1234.-2");
47 EXPECT_EQ(ex.GetPidTid(0), llvm::None);
49 ex.Reset("p-2");
50 EXPECT_EQ(ex.GetPidTid(0), llvm::None);
52 ex.Reset("p-2.1234");
53 EXPECT_EQ(ex.GetPidTid(0), llvm::None);
55 // overflow
57 ex.Reset("p10000000000000000");
58 EXPECT_EQ(ex.GetPidTid(0), llvm::None);
60 ex.Reset("p10000000000000000.0");
61 EXPECT_EQ(ex.GetPidTid(0), llvm::None);
63 ex.Reset("10000000000000000");
64 EXPECT_EQ(ex.GetPidTid(0), llvm::None);
66 ex.Reset("p0.10000000000000000");
67 EXPECT_EQ(ex.GetPidTid(0), llvm::None);
69 ex.Reset("p10000000000000000.10000000000000000");
70 EXPECT_EQ(ex.GetPidTid(0), llvm::None);
72 // invalid: all processes but specific thread
74 ex.Reset("p-1.0");
75 EXPECT_EQ(ex.GetPidTid(100), llvm::None);
77 ex.Reset("p-1.1234");
78 EXPECT_EQ(ex.GetPidTid(100), llvm::None);
80 ex.Reset("p-1.123456789ABCDEF0");
81 EXPECT_EQ(ex.GetPidTid(100), llvm::None);
83 // unsupported: pid/tid 0
85 ex.Reset("0");
86 EXPECT_EQ(ex.GetPidTid(100), llvm::None);
88 ex.Reset("p0");
89 EXPECT_EQ(ex.GetPidTid(100), llvm::None);
91 ex.Reset("p0.0");
92 EXPECT_EQ(ex.GetPidTid(100), llvm::None);
94 ex.Reset("p0.-1");
95 EXPECT_EQ(ex.GetPidTid(100), llvm::None);
97 ex.Reset("p0.1234");
98 EXPECT_EQ(ex.GetPidTid(100), llvm::None);
100 ex.Reset("p0.123456789ABCDEF0");
101 EXPECT_EQ(ex.GetPidTid(100), llvm::None);
103 ex.Reset("p1234.0");
104 EXPECT_EQ(ex.GetPidTid(100), llvm::None);
106 ex.Reset("p123456789ABCDEF0.0");
107 EXPECT_EQ(ex.GetPidTid(100), llvm::None);
109 // pure thread id
111 ex.Reset("-1");
112 EXPECT_THAT(ex.GetPidTid(100).getValue(),
113 ::testing::Pair(100, StringExtractorGDBRemote::AllThreads));
115 ex.Reset("1234");
116 EXPECT_THAT(ex.GetPidTid(100).getValue(), ::testing::Pair(100, 0x1234ULL));
118 ex.Reset("123456789ABCDEF0");
119 EXPECT_THAT(ex.GetPidTid(100).getValue(),
120 ::testing::Pair(100, 0x123456789ABCDEF0ULL));
122 // pure process id
124 ex.Reset("p-1");
125 EXPECT_THAT(ex.GetPidTid(100).getValue(),
126 ::testing::Pair(StringExtractorGDBRemote::AllProcesses,
127 StringExtractorGDBRemote::AllThreads));
129 ex.Reset("p1234");
130 EXPECT_THAT(ex.GetPidTid(100).getValue(),
131 ::testing::Pair(0x1234ULL, StringExtractorGDBRemote::AllThreads));
133 ex.Reset("p123456789ABCDEF0");
134 EXPECT_THAT(ex.GetPidTid(100).getValue(),
135 ::testing::Pair(0x123456789ABCDEF0ULL,
136 StringExtractorGDBRemote::AllThreads));
138 ex.Reset("pFFFFFFFFFFFFFFFF");
139 EXPECT_THAT(ex.GetPidTid(100).getValue(),
140 ::testing::Pair(StringExtractorGDBRemote::AllProcesses,
141 StringExtractorGDBRemote::AllThreads));
143 // combined thread id + process id
145 ex.Reset("p-1.-1");
146 EXPECT_THAT(ex.GetPidTid(100).getValue(),
147 ::testing::Pair(StringExtractorGDBRemote::AllProcesses,
148 StringExtractorGDBRemote::AllThreads));
150 ex.Reset("p1234.-1");
151 EXPECT_THAT(ex.GetPidTid(100).getValue(),
152 ::testing::Pair(0x1234ULL, StringExtractorGDBRemote::AllThreads));
154 ex.Reset("p1234.123456789ABCDEF0");
155 EXPECT_THAT(ex.GetPidTid(100).getValue(),
156 ::testing::Pair(0x1234ULL, 0x123456789ABCDEF0ULL));
158 ex.Reset("p123456789ABCDEF0.-1");
159 EXPECT_THAT(ex.GetPidTid(100).getValue(),
160 ::testing::Pair(0x123456789ABCDEF0ULL,
161 StringExtractorGDBRemote::AllThreads));
163 ex.Reset("p123456789ABCDEF0.1234");
164 EXPECT_THAT(ex.GetPidTid(100).getValue(),
165 ::testing::Pair(0x123456789ABCDEF0ULL, 0x1234ULL));
167 ex.Reset("p123456789ABCDEF0.123456789ABCDEF0");
168 EXPECT_THAT(ex.GetPidTid(100).getValue(),
169 ::testing::Pair(0x123456789ABCDEF0ULL, 0x123456789ABCDEF0ULL));
171 ex.Reset("p123456789ABCDEF0.123456789ABCDEF0");
172 EXPECT_THAT(ex.GetPidTid(100).getValue(),
173 ::testing::Pair(0x123456789ABCDEF0ULL, 0x123456789ABCDEF0ULL));
176 TEST(StringExtractorGDBRemoteTest, GetPidTidMultipleValues) {
177 StringExtractorGDBRemote ex("1234;p12;p1234.-1");
178 ASSERT_THAT(ex.GetPidTid(100).getValue(), ::testing::Pair(100, 0x1234ULL));
179 ASSERT_EQ(ex.GetChar(), ';');
180 ASSERT_THAT(ex.GetPidTid(100).getValue(),
181 ::testing::Pair(0x12ULL, StringExtractorGDBRemote::AllThreads));
182 ASSERT_EQ(ex.GetChar(), ';');
183 ASSERT_THAT(ex.GetPidTid(100).getValue(),
184 ::testing::Pair(0x1234ULL, StringExtractorGDBRemote::AllThreads));