1 //===-- lldb-types.h --------------------------------------------*- 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 #ifndef LLDB_LLDB_TYPES_H
10 #define LLDB_LLDB_TYPES_H
11 
12 #include "lldb/lldb-enumerations.h"
13 #include "lldb/lldb-forward.h"
14 
15 #include <cstdint>
16 
17 // All host systems must define:
18 //  lldb::rwlock_t          The type representing a read/write lock on the host
19 //  lldb::process_t         The type representing a process on the host
20 //  lldb::thread_t          The native thread type for spawned threads on the
21 //                          host
22 //  lldb::file_t            The type representing a file on the host
23 //  lldb::socket_t          The type representing a socket on the host
24 //  lldb::thread_arg_t      The type of the one and only thread creation
25 //                          argument for the host system
26 //  lldb::thread_result_t   The type that gets returned when a thread finishes
27 //  lldb::thread_func_t     The function prototype used to spawn a thread on the
28 //                          host system.
29 //  lldb::pipe_t            The type representing a pipe on the host
30 //
31 // Additionally, lldb defines a few macros based on these definitions:
32 //  LLDB_INVALID_PROCESS      The value of an invalid lldb::process_t
33 //  LLDB_INVALID_HOST_THREAD  The value of an invalid lldb::thread_t
34 //  LLDB_INVALID_PIPE         The value of an invalid lldb::pipe_t
35 
36 #ifdef _WIN32
37 
38 #include <process.h>
39 
40 namespace lldb {
41 typedef void *rwlock_t;
42 typedef void *process_t;                          // Process type is HANDLE
43 typedef void *thread_t;                           // Host thread type
44 typedef void *file_t;                             // Host file type
45 typedef unsigned int __w64 socket_t;              // Host socket type
46 typedef void *thread_arg_t;                       // Host thread argument type
47 typedef unsigned thread_result_t;                 // Host thread result type
48 typedef thread_result_t (*thread_func_t)(void *); // Host thread function type
49 typedef void *pipe_t;                             // Host pipe type is HANDLE
50 
51 #else
52 
53 #include <pthread.h>
54 
55 namespace lldb {
56 typedef pthread_rwlock_t rwlock_t;
57 typedef uint64_t process_t;             // Process type is just a pid.
58 typedef pthread_t thread_t;             // Host thread type
59 typedef int file_t;                     // Host file type
60 typedef int socket_t;                   // Host socket type
61 typedef void *thread_arg_t;             // Host thread argument type
62 typedef void *thread_result_t;          // Host thread result type
63 typedef void *(*thread_func_t)(void *); // Host thread function type
64 typedef int pipe_t;                     // Host pipe type
65 
66 #endif // _WIN32
67 
68 #define LLDB_INVALID_PROCESS ((lldb::process_t)-1)
69 #define LLDB_INVALID_HOST_THREAD ((lldb::thread_t)NULL)
70 #define LLDB_INVALID_PIPE ((lldb::pipe_t)-1)
71 
72 typedef void (*LogOutputCallback)(const char *, void *baton);
73 typedef bool (*CommandOverrideCallback)(void *baton, const char **argv);
74 typedef bool (*ExpressionCancelCallback)(ExpressionEvaluationPhase phase,
75                                          void *baton);
76 
77 typedef void *ScriptObjectPtr;
78 
79 typedef uint64_t addr_t;
80 typedef uint64_t user_id_t;
81 typedef uint64_t pid_t;
82 typedef uint64_t tid_t;
83 typedef uint64_t offset_t;
84 typedef int32_t break_id_t;
85 typedef int32_t watch_id_t;
86 typedef void *opaque_compiler_type_t;
87 typedef uint64_t queue_id_t;
88 typedef uint32_t cpu_id_t; // CPU core id
89 
90 } // namespace lldb
91 
92 #endif // LLDB_LLDB_TYPES_H
93