1 //===-- DWARFDefines.cpp ----------------------------------------*- C++ -*-===// 2 // 3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4 // See https://llvm.org/LICENSE.txt for license information. 5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6 // 7 //===----------------------------------------------------------------------===// 8 9 #include "DWARFDefines.h" 10 #include "lldb/Utility/ConstString.h" 11 #include <cstdio> 12 #include <cstring> 13 #include <string> 14 15 namespace lldb_private { 16 17 const char *DW_TAG_value_to_name(uint32_t val) { 18 static char invalid[100]; 19 20 if (val == 0) 21 return "NULL"; 22 23 llvm::StringRef llvmstr = llvm::dwarf::TagString(val); 24 if (llvmstr.empty()) { 25 snprintf(invalid, sizeof(invalid), "Unknown DW_TAG constant: 0x%x", val); 26 return invalid; 27 } 28 return llvmstr.data(); 29 } 30 31 const char *DW_AT_value_to_name(uint32_t val) { 32 static char invalid[100]; 33 llvm::StringRef llvmstr = llvm::dwarf::AttributeString(val); 34 if (llvmstr.empty()) { 35 snprintf(invalid, sizeof(invalid), "Unknown DW_AT constant: 0x%x", val); 36 return invalid; 37 } 38 return llvmstr.data(); 39 } 40 41 const char *DW_FORM_value_to_name(uint32_t val) { 42 static char invalid[100]; 43 llvm::StringRef llvmstr = llvm::dwarf::FormEncodingString(val); 44 if (llvmstr.empty()) { 45 snprintf(invalid, sizeof(invalid), "Unknown DW_FORM constant: 0x%x", val); 46 return invalid; 47 } 48 return llvmstr.data(); 49 } 50 51 const char *DW_OP_value_to_name(uint32_t val) { 52 static char invalid[100]; 53 llvm::StringRef llvmstr = llvm::dwarf::OperationEncodingString(val); 54 if (llvmstr.empty()) { 55 snprintf(invalid, sizeof(invalid), "Unknown DW_OP constant: 0x%x", val); 56 return invalid; 57 } 58 return llvmstr.data(); 59 } 60 61 DRC_class DW_OP_value_to_class(uint32_t val) { 62 // FIXME: If we just used llvm's DWARFExpression printer, we could delete 63 // all this code (and more in lldb's DWARFExpression.cpp). 64 switch (val) { 65 case 0x03: 66 return DRC_ONEOPERAND; 67 case 0x06: 68 return DRC_ZEROOPERANDS; 69 case 0x08: 70 return DRC_ONEOPERAND; 71 case 0x09: 72 return DRC_ONEOPERAND; 73 case 0x0a: 74 return DRC_ONEOPERAND; 75 case 0x0b: 76 return DRC_ONEOPERAND; 77 case 0x0c: 78 return DRC_ONEOPERAND; 79 case 0x0d: 80 return DRC_ONEOPERAND; 81 case 0x0e: 82 return DRC_ONEOPERAND; 83 case 0x0f: 84 return DRC_ONEOPERAND; 85 case 0x10: 86 return DRC_ONEOPERAND; 87 case 0x11: 88 return DRC_ONEOPERAND; 89 case 0x12: 90 return DRC_ZEROOPERANDS; 91 case 0x13: 92 return DRC_ZEROOPERANDS; 93 case 0x14: 94 return DRC_ZEROOPERANDS; 95 case 0x15: 96 return DRC_ONEOPERAND; 97 case 0x16: 98 return DRC_ZEROOPERANDS; 99 case 0x17: 100 return DRC_ZEROOPERANDS; 101 case 0x18: 102 return DRC_ZEROOPERANDS; 103 case 0x19: 104 return DRC_ZEROOPERANDS; 105 case 0x1a: 106 return DRC_ZEROOPERANDS; 107 case 0x1b: 108 return DRC_ZEROOPERANDS; 109 case 0x1c: 110 return DRC_ZEROOPERANDS; 111 case 0x1d: 112 return DRC_ZEROOPERANDS; 113 case 0x1e: 114 return DRC_ZEROOPERANDS; 115 case 0x1f: 116 return DRC_ZEROOPERANDS; 117 case 0x20: 118 return DRC_ZEROOPERANDS; 119 case 0x21: 120 return DRC_ZEROOPERANDS; 121 case 0x22: 122 return DRC_ZEROOPERANDS; 123 case 0x23: 124 return DRC_ONEOPERAND; 125 case 0x24: 126 return DRC_ZEROOPERANDS; 127 case 0x25: 128 return DRC_ZEROOPERANDS; 129 case 0x26: 130 return DRC_ZEROOPERANDS; 131 case 0x27: 132 return DRC_ZEROOPERANDS; 133 case 0x2f: 134 return DRC_ONEOPERAND; 135 case 0x28: 136 return DRC_ONEOPERAND; 137 case 0x29: 138 return DRC_ZEROOPERANDS; 139 case 0x2a: 140 return DRC_ZEROOPERANDS; 141 case 0x2b: 142 return DRC_ZEROOPERANDS; 143 case 0x2c: 144 return DRC_ZEROOPERANDS; 145 case 0x2d: 146 return DRC_ZEROOPERANDS; 147 case 0x2e: 148 return DRC_ZEROOPERANDS; 149 case 0x30: 150 return DRC_ZEROOPERANDS; 151 case 0x31: 152 return DRC_ZEROOPERANDS; 153 case 0x32: 154 return DRC_ZEROOPERANDS; 155 case 0x33: 156 return DRC_ZEROOPERANDS; 157 case 0x34: 158 return DRC_ZEROOPERANDS; 159 case 0x35: 160 return DRC_ZEROOPERANDS; 161 case 0x36: 162 return DRC_ZEROOPERANDS; 163 case 0x37: 164 return DRC_ZEROOPERANDS; 165 case 0x38: 166 return DRC_ZEROOPERANDS; 167 case 0x39: 168 return DRC_ZEROOPERANDS; 169 case 0x3a: 170 return DRC_ZEROOPERANDS; 171 case 0x3b: 172 return DRC_ZEROOPERANDS; 173 case 0x3c: 174 return DRC_ZEROOPERANDS; 175 case 0x3d: 176 return DRC_ZEROOPERANDS; 177 case 0x3e: 178 return DRC_ZEROOPERANDS; 179 case 0x3f: 180 return DRC_ZEROOPERANDS; 181 case 0x40: 182 return DRC_ZEROOPERANDS; 183 case 0x41: 184 return DRC_ZEROOPERANDS; 185 case 0x42: 186 return DRC_ZEROOPERANDS; 187 case 0x43: 188 return DRC_ZEROOPERANDS; 189 case 0x44: 190 return DRC_ZEROOPERANDS; 191 case 0x45: 192 return DRC_ZEROOPERANDS; 193 case 0x46: 194 return DRC_ZEROOPERANDS; 195 case 0x47: 196 return DRC_ZEROOPERANDS; 197 case 0x48: 198 return DRC_ZEROOPERANDS; 199 case 0x49: 200 return DRC_ZEROOPERANDS; 201 case 0x4a: 202 return DRC_ZEROOPERANDS; 203 case 0x4b: 204 return DRC_ZEROOPERANDS; 205 case 0x4c: 206 return DRC_ZEROOPERANDS; 207 case 0x4d: 208 return DRC_ZEROOPERANDS; 209 case 0x4e: 210 return DRC_ZEROOPERANDS; 211 case 0x4f: 212 return DRC_ZEROOPERANDS; 213 case 0x50: 214 return DRC_ZEROOPERANDS; 215 case 0x51: 216 return DRC_ZEROOPERANDS; 217 case 0x52: 218 return DRC_ZEROOPERANDS; 219 case 0x53: 220 return DRC_ZEROOPERANDS; 221 case 0x54: 222 return DRC_ZEROOPERANDS; 223 case 0x55: 224 return DRC_ZEROOPERANDS; 225 case 0x56: 226 return DRC_ZEROOPERANDS; 227 case 0x57: 228 return DRC_ZEROOPERANDS; 229 case 0x58: 230 return DRC_ZEROOPERANDS; 231 case 0x59: 232 return DRC_ZEROOPERANDS; 233 case 0x5a: 234 return DRC_ZEROOPERANDS; 235 case 0x5b: 236 return DRC_ZEROOPERANDS; 237 case 0x5c: 238 return DRC_ZEROOPERANDS; 239 case 0x5d: 240 return DRC_ZEROOPERANDS; 241 case 0x5e: 242 return DRC_ZEROOPERANDS; 243 case 0x5f: 244 return DRC_ZEROOPERANDS; 245 case 0x60: 246 return DRC_ZEROOPERANDS; 247 case 0x61: 248 return DRC_ZEROOPERANDS; 249 case 0x62: 250 return DRC_ZEROOPERANDS; 251 case 0x63: 252 return DRC_ZEROOPERANDS; 253 case 0x64: 254 return DRC_ZEROOPERANDS; 255 case 0x65: 256 return DRC_ZEROOPERANDS; 257 case 0x66: 258 return DRC_ZEROOPERANDS; 259 case 0x67: 260 return DRC_ZEROOPERANDS; 261 case 0x68: 262 return DRC_ZEROOPERANDS; 263 case 0x69: 264 return DRC_ZEROOPERANDS; 265 case 0x6a: 266 return DRC_ZEROOPERANDS; 267 case 0x6b: 268 return DRC_ZEROOPERANDS; 269 case 0x6c: 270 return DRC_ZEROOPERANDS; 271 case 0x6d: 272 return DRC_ZEROOPERANDS; 273 case 0x6e: 274 return DRC_ZEROOPERANDS; 275 case 0x6f: 276 return DRC_ZEROOPERANDS; 277 case 0x70: 278 return DRC_ONEOPERAND; 279 case 0x71: 280 return DRC_ONEOPERAND; 281 case 0x72: 282 return DRC_ONEOPERAND; 283 case 0x73: 284 return DRC_ONEOPERAND; 285 case 0x74: 286 return DRC_ONEOPERAND; 287 case 0x75: 288 return DRC_ONEOPERAND; 289 case 0x76: 290 return DRC_ONEOPERAND; 291 case 0x77: 292 return DRC_ONEOPERAND; 293 case 0x78: 294 return DRC_ONEOPERAND; 295 case 0x79: 296 return DRC_ONEOPERAND; 297 case 0x7a: 298 return DRC_ONEOPERAND; 299 case 0x7b: 300 return DRC_ONEOPERAND; 301 case 0x7c: 302 return DRC_ONEOPERAND; 303 case 0x7d: 304 return DRC_ONEOPERAND; 305 case 0x7e: 306 return DRC_ONEOPERAND; 307 case 0x7f: 308 return DRC_ONEOPERAND; 309 case 0x80: 310 return DRC_ONEOPERAND; 311 case 0x81: 312 return DRC_ONEOPERAND; 313 case 0x82: 314 return DRC_ONEOPERAND; 315 case 0x83: 316 return DRC_ONEOPERAND; 317 case 0x84: 318 return DRC_ONEOPERAND; 319 case 0x85: 320 return DRC_ONEOPERAND; 321 case 0x86: 322 return DRC_ONEOPERAND; 323 case 0x87: 324 return DRC_ONEOPERAND; 325 case 0x88: 326 return DRC_ONEOPERAND; 327 case 0x89: 328 return DRC_ONEOPERAND; 329 case 0x8a: 330 return DRC_ONEOPERAND; 331 case 0x8b: 332 return DRC_ONEOPERAND; 333 case 0x8c: 334 return DRC_ONEOPERAND; 335 case 0x8d: 336 return DRC_ONEOPERAND; 337 case 0x8e: 338 return DRC_ONEOPERAND; 339 case 0x8f: 340 return DRC_ONEOPERAND; 341 case 0x90: 342 return DRC_ONEOPERAND; 343 case 0x91: 344 return DRC_ONEOPERAND; 345 case 0x92: 346 return DRC_TWOOPERANDS; 347 case 0x93: 348 return DRC_ONEOPERAND; 349 case 0x94: 350 return DRC_ONEOPERAND; 351 case 0x95: 352 return DRC_ONEOPERAND; 353 case 0x96: 354 return DRC_ZEROOPERANDS; 355 case 0x97: 356 return DRC_DWARFv3 | DRC_ZEROOPERANDS; 357 case 0x98: 358 return DRC_DWARFv3 | DRC_ONEOPERAND; 359 case 0x99: 360 return DRC_DWARFv3 | DRC_ONEOPERAND; 361 case 0x9a: 362 return DRC_DWARFv3 | DRC_ONEOPERAND; 363 case 0xa3: /* DW_OP_entry_value */ 364 return DRC_TWOOPERANDS; 365 case 0xf0: 366 return DRC_ZEROOPERANDS; /* DW_OP_APPLE_uninit */ 367 case 0xe0: 368 return 0; 369 case 0xff: 370 return 0; 371 default: 372 return 0; 373 } 374 } 375 376 const char *DW_ATE_value_to_name(uint32_t val) { 377 static char invalid[100]; 378 llvm::StringRef llvmstr = llvm::dwarf::AttributeEncodingString(val); 379 if (llvmstr.empty()) { 380 snprintf(invalid, sizeof(invalid), "Unknown DW_ATE constant: 0x%x", val); 381 return invalid; 382 } 383 return llvmstr.data(); 384 } 385 386 const char *DW_LANG_value_to_name(uint32_t val) { 387 static char invalid[100]; 388 llvm::StringRef llvmstr = llvm::dwarf::LanguageString(val); 389 if (llvmstr.empty()) { 390 snprintf(invalid, sizeof(invalid), "Unknown DW_LANG constant: 0x%x", val); 391 return invalid; 392 } 393 return llvmstr.data(); 394 } 395 396 const char *DW_LNS_value_to_name(uint32_t val) { 397 static char invalid[100]; 398 llvm::StringRef llvmstr = llvm::dwarf::LNStandardString(val); 399 if (llvmstr.empty()) { 400 snprintf(invalid, sizeof(invalid), "Unknown DW_LNS constant: 0x%x", val); 401 return invalid; 402 } 403 return llvmstr.data(); 404 } 405 406 } // namespace lldb_private 407