Skip to content

Commit 30e62ef

Browse files
authored
Merge pull request #21 from fneddy/initial_sunos
Initial sunos
2 parents fbf6b52 + 3c4f9bf commit 30e62ef

File tree

12 files changed

+146
-105
lines changed

12 files changed

+146
-105
lines changed

VERSION.md

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,12 @@
1-
1.2.56
1+
1.2.57
22

33
# Change log
4+
## 1.2.57
5+
- refactor: move linux userspace abstraction to unix userspace abstraction
6+
- fix: prevent complex_cpp to run if encounter known bad compiler
7+
- fix: illumos wrap gettid for illumos
8+
- fix: illumos do not generate _Generic case for iint8_t on non linux
9+
- fix: illumos change file api to use posix instead of linux extension
410
## 1.2.56
511
- cmd: fix gzip-to-stdout closing fd 1 on destruction (dup before gzdopen)
612
- cmd: fix silent truncation of gzip output lines longer than 8 KB

examples/complex_cpp/complex_cpp.cpp

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -177,6 +177,11 @@ void typedef_example(void)
177177
CLLTK_TRACEPOINT(COMPLEX_CPP, "%u", value);
178178
}
179179

180+
#if defined(__GNUC__) && (__GNUC__ < 15)
181+
void inline_functions(void)
182+
{ /* not working with gcc < 15 */
183+
}
184+
#else
180185
CLLTK_TRACEBUFFER(INLINE_FUNCTIONS_CPP, 4096);
181186
inline void inline_func(void)
182187
{
@@ -213,6 +218,7 @@ void inline_functions(void)
213218
inline_func();
214219
static_inline_func();
215220
}
221+
#endif
216222

217223
CLLTK_TRACEBUFFER(NAMESPACE_FUNCTIONS, 4096);
218224
namespace test

examples/process_threads/process_threads.cpp

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,14 +6,22 @@
66
#include <stdint.h>
77
#include <string>
88
#include <sys/wait.h>
9-
#include <syscall.h>
109
#include <thread>
1110
#include <unistd.h>
1211

12+
#ifdef __linux__
13+
#include <syscall.h>
1314
pid_t gettid(void)
1415
{
1516
return (pid_t)syscall(SYS_gettid);
1617
}
18+
#elif defined(__illumos__)
19+
#include <sys/lwp.h>
20+
pid_t gettid(void)
21+
{
22+
return (pid_t)_lwp_self();
23+
}
24+
#endif
1725

1826
CLLTK_TRACEBUFFER(ProcessAndThread, 256 * 1024);
1927

tracing_library/CMakeLists.txt

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -115,10 +115,13 @@ foreach(LIB_NAME clltk_tracing_static clltk_tracing_shared)
115115
${clltk_private_compiler_flags}
116116
)
117117

118-
target_link_options(${LIB_NAME}
119-
PRIVATE
120-
-Wl,--gc-sections
121-
)
118+
119+
if(CMAKE_SYSTEM_NAME STREQUAL "Linux")
120+
target_link_options(${LIB_NAME}
121+
PRIVATE
122+
-Wl,--gc-sections
123+
)
124+
endif()
122125
endforeach()
123126

124127
set_target_properties(clltk_tracing_static

tracing_library/include/CommonLowLevelTracingKit/tracing/_arguments.h

Lines changed: 82 additions & 82 deletions
Original file line numberDiff line numberDiff line change
@@ -52,50 +52,50 @@ struct _clltk_argument_types_t {
5252
/// supported c type to clltk type enum
5353
#ifndef CLLTK_FOR_CPP // for c
5454
#ifdef __KERNEL__
55-
#define _CLLTK_TYPE_TO_TYPE(_I_, _X_) \
56-
_Generic((_X_), \
57-
_CLLTK_GENERIC_CASE(bool, _clltk_argument_uint8), \
58-
_CLLTK_GENERIC_CASE(char, _clltk_argument_sint8), \
59-
_CLLTK_GENERIC_CASE(uint8_t, _clltk_argument_uint8), \
60-
_CLLTK_GENERIC_CASE(int8_t, _clltk_argument_sint8), \
61-
_CLLTK_GENERIC_CASE(uint16_t, _clltk_argument_uint16), \
62-
_CLLTK_GENERIC_CASE(int16_t, _clltk_argument_sint16), \
63-
_CLLTK_GENERIC_CASE(uint32_t, _clltk_argument_uint32), \
64-
_CLLTK_GENERIC_CASE(int32_t, _clltk_argument_sint32), \
65-
_CLLTK_GENERIC_CASE(uint64_t, _clltk_argument_uint64), \
66-
_CLLTK_GENERIC_CASE(int64_t, _clltk_argument_sint64), \
67-
_CLLTK_GENERIC_CASE(__uint128_t, _clltk_argument_uint128), \
68-
_CLLTK_GENERIC_CASE(__int128_t, _clltk_argument_sint128), \
69-
_CLLTK_GENERIC_CASE(float, _clltk_argument_float), \
70-
_CLLTK_GENERIC_CASE(double, _clltk_argument_double), \
71-
_CLLTK_GENERIC_CASE(void *, _clltk_argument_pointer), \
72-
_CLLTK_GENERIC_CASE(char *, _clltk_argument_string), \
73-
_CLLTK_GENERIC_CASE(const void *, _clltk_argument_pointer), \
74-
_CLLTK_GENERIC_CASE(const char *, _clltk_argument_string), \
55+
#define _CLLTK_TYPE_TO_TYPE(_I_, _X_) \
56+
_Generic((_X_), \
57+
_CLLTK_GENERIC_CASE(bool, _clltk_argument_uint8), \
58+
_CLLTK_GENERIC_CASE(char, _clltk_argument_sint8), \
59+
_CLLTK_GENERIC_CASE(uint8_t, _clltk_argument_uint8), \
60+
_CLLTK_ONLY_LINUX(_CLLTK_GENERIC_CASE(int8_t, _clltk_argument_sint8), ) \
61+
_CLLTK_GENERIC_CASE(uint16_t, _clltk_argument_uint16), \
62+
_CLLTK_GENERIC_CASE(int16_t, _clltk_argument_sint16), \
63+
_CLLTK_GENERIC_CASE(uint32_t, _clltk_argument_uint32), \
64+
_CLLTK_GENERIC_CASE(int32_t, _clltk_argument_sint32), \
65+
_CLLTK_GENERIC_CASE(uint64_t, _clltk_argument_uint64), \
66+
_CLLTK_GENERIC_CASE(int64_t, _clltk_argument_sint64), \
67+
_CLLTK_GENERIC_CASE(__uint128_t, _clltk_argument_uint128), \
68+
_CLLTK_GENERIC_CASE(__int128_t, _clltk_argument_sint128), \
69+
_CLLTK_GENERIC_CASE(float, _clltk_argument_float), \
70+
_CLLTK_GENERIC_CASE(double, _clltk_argument_double), \
71+
_CLLTK_GENERIC_CASE(void *, _clltk_argument_pointer), \
72+
_CLLTK_GENERIC_CASE(char *, _clltk_argument_string), \
73+
_CLLTK_GENERIC_CASE(const void *, _clltk_argument_pointer), \
74+
_CLLTK_GENERIC_CASE(const char *, _clltk_argument_string), \
7575
default: _clltk_argument_pointer) // everything else as (void*)
7676
#else
77-
#define _CLLTK_TYPE_TO_TYPE(_I_, _X_) \
78-
_Generic((_X_), \
79-
_CLLTK_GENERIC_CASE(bool, _clltk_argument_uint8), \
80-
_CLLTK_GENERIC_CASE(char, _clltk_argument_sint8), \
81-
_CLLTK_GENERIC_CASE(uint8_t, _clltk_argument_uint8), \
82-
_CLLTK_GENERIC_CASE(int8_t, _clltk_argument_sint8), \
83-
_CLLTK_GENERIC_CASE(uint16_t, _clltk_argument_uint16), \
84-
_CLLTK_GENERIC_CASE(int16_t, _clltk_argument_sint16), \
85-
_CLLTK_GENERIC_CASE(uint32_t, _clltk_argument_uint32), \
86-
_CLLTK_GENERIC_CASE(int32_t, _clltk_argument_sint32), \
87-
_CLLTK_GENERIC_CASE(uint64_t, _clltk_argument_uint64), \
88-
_CLLTK_GENERIC_CASE(int64_t, _clltk_argument_sint64), \
89-
_CLLTK_GENERIC_CASE(unsigned long long, _clltk_argument_uint64), \
90-
_CLLTK_GENERIC_CASE(signed long long, _clltk_argument_sint64), \
91-
_CLLTK_GENERIC_CASE(__uint128_t, _clltk_argument_uint128), \
92-
_CLLTK_GENERIC_CASE(__int128_t, _clltk_argument_sint128), \
93-
_CLLTK_GENERIC_CASE(float, _clltk_argument_float), \
94-
_CLLTK_GENERIC_CASE(double, _clltk_argument_double), \
95-
_CLLTK_GENERIC_CASE(void *, _clltk_argument_pointer), \
96-
_CLLTK_GENERIC_CASE(char *, _clltk_argument_string), \
97-
_CLLTK_GENERIC_CASE(const void *, _clltk_argument_pointer), \
98-
_CLLTK_GENERIC_CASE(const char *, _clltk_argument_string), \
77+
#define _CLLTK_TYPE_TO_TYPE(_I_, _X_) \
78+
_Generic((_X_), \
79+
_CLLTK_GENERIC_CASE(bool, _clltk_argument_uint8), \
80+
_CLLTK_GENERIC_CASE(char, _clltk_argument_sint8), \
81+
_CLLTK_GENERIC_CASE(uint8_t, _clltk_argument_uint8), \
82+
_CLLTK_ONLY_LINUX(_CLLTK_GENERIC_CASE(int8_t, _clltk_argument_sint8), ) \
83+
_CLLTK_GENERIC_CASE(uint16_t, _clltk_argument_uint16), \
84+
_CLLTK_GENERIC_CASE(int16_t, _clltk_argument_sint16), \
85+
_CLLTK_GENERIC_CASE(uint32_t, _clltk_argument_uint32), \
86+
_CLLTK_GENERIC_CASE(int32_t, _clltk_argument_sint32), \
87+
_CLLTK_GENERIC_CASE(uint64_t, _clltk_argument_uint64), \
88+
_CLLTK_GENERIC_CASE(int64_t, _clltk_argument_sint64), \
89+
_CLLTK_GENERIC_CASE(unsigned long long, _clltk_argument_uint64), \
90+
_CLLTK_GENERIC_CASE(signed long long, _clltk_argument_sint64), \
91+
_CLLTK_GENERIC_CASE(__uint128_t, _clltk_argument_uint128), \
92+
_CLLTK_GENERIC_CASE(__int128_t, _clltk_argument_sint128), \
93+
_CLLTK_GENERIC_CASE(float, _clltk_argument_float), \
94+
_CLLTK_GENERIC_CASE(double, _clltk_argument_double), \
95+
_CLLTK_GENERIC_CASE(void *, _clltk_argument_pointer), \
96+
_CLLTK_GENERIC_CASE(char *, _clltk_argument_string), \
97+
_CLLTK_GENERIC_CASE(const void *, _clltk_argument_pointer), \
98+
_CLLTK_GENERIC_CASE(const char *, _clltk_argument_string), \
9999
default: _clltk_argument_pointer) // everything else as (void*)
100100
#endif
101101

@@ -175,48 +175,48 @@ template <typename T> static CONST_INLINE constexpr _clltk_argument_t _CLLTK_TYP
175175
/// supported c type to clltk type enum
176176
#ifndef CLLTK_FOR_CPP // for c
177177
#ifdef __KERNEL__
178-
#define _CLLTK_TYPE_IS_FLEX(_I_, _X_) \
179-
_Generic((_X_), \
180-
_CLLTK_GENERIC_CASE(char, false), \
181-
_CLLTK_GENERIC_CASE(uint8_t, false), \
182-
_CLLTK_GENERIC_CASE(int8_t, false), \
183-
_CLLTK_GENERIC_CASE(uint16_t, false), \
184-
_CLLTK_GENERIC_CASE(int16_t, false), \
185-
_CLLTK_GENERIC_CASE(uint32_t, false), \
186-
_CLLTK_GENERIC_CASE(int32_t, false), \
187-
_CLLTK_GENERIC_CASE(uint64_t, false), \
188-
_CLLTK_GENERIC_CASE(int64_t, false), \
189-
_CLLTK_GENERIC_CASE(__uint128_t, false), \
190-
_CLLTK_GENERIC_CASE(__int128_t, false), \
191-
_CLLTK_GENERIC_CASE(float, false), \
192-
_CLLTK_GENERIC_CASE(double, false), \
193-
_CLLTK_GENERIC_CASE(void *, false), \
194-
_CLLTK_GENERIC_CASE(char *, true), \
195-
_CLLTK_GENERIC_CASE(const void *, false), \
196-
_CLLTK_GENERIC_CASE(const char *, true), \
178+
#define _CLLTK_TYPE_IS_FLEX(_I_, _X_) \
179+
_Generic((_X_), \
180+
_CLLTK_GENERIC_CASE(char, false), \
181+
_CLLTK_GENERIC_CASE(uint8_t, false), \
182+
_CLLTK_ONLY_LINUX(_CLLTK_GENERIC_CASE(int8_t, _clltk_argument_sint8), ) \
183+
_CLLTK_GENERIC_CASE(uint16_t, false), \
184+
_CLLTK_GENERIC_CASE(int16_t, false), \
185+
_CLLTK_GENERIC_CASE(uint32_t, false), \
186+
_CLLTK_GENERIC_CASE(int32_t, false), \
187+
_CLLTK_GENERIC_CASE(uint64_t, false), \
188+
_CLLTK_GENERIC_CASE(int64_t, false), \
189+
_CLLTK_GENERIC_CASE(__uint128_t, false), \
190+
_CLLTK_GENERIC_CASE(__int128_t, false), \
191+
_CLLTK_GENERIC_CASE(float, false), \
192+
_CLLTK_GENERIC_CASE(double, false), \
193+
_CLLTK_GENERIC_CASE(void *, false), \
194+
_CLLTK_GENERIC_CASE(char *, true), \
195+
_CLLTK_GENERIC_CASE(const void *, false), \
196+
_CLLTK_GENERIC_CASE(const char *, true), \
197197
default: false)
198198
#else
199-
#define _CLLTK_TYPE_IS_FLEX(_I_, _X_) \
200-
_Generic((_X_), \
201-
_CLLTK_GENERIC_CASE(char, false), \
202-
_CLLTK_GENERIC_CASE(uint8_t, false), \
203-
_CLLTK_GENERIC_CASE(int8_t, false), \
204-
_CLLTK_GENERIC_CASE(uint16_t, false), \
205-
_CLLTK_GENERIC_CASE(int16_t, false), \
206-
_CLLTK_GENERIC_CASE(uint32_t, false), \
207-
_CLLTK_GENERIC_CASE(int32_t, false), \
208-
_CLLTK_GENERIC_CASE(uint64_t, false), \
209-
_CLLTK_GENERIC_CASE(int64_t, false), \
210-
_CLLTK_GENERIC_CASE(signed long long, false), \
211-
_CLLTK_GENERIC_CASE(unsigned long long, false), \
212-
_CLLTK_GENERIC_CASE(__uint128_t, false), \
213-
_CLLTK_GENERIC_CASE(__int128_t, false), \
214-
_CLLTK_GENERIC_CASE(float, false), \
215-
_CLLTK_GENERIC_CASE(double, false), \
216-
_CLLTK_GENERIC_CASE(void *, false), \
217-
_CLLTK_GENERIC_CASE(char *, true), \
218-
_CLLTK_GENERIC_CASE(const void *, false), \
219-
_CLLTK_GENERIC_CASE(const char *, true), \
199+
#define _CLLTK_TYPE_IS_FLEX(_I_, _X_) \
200+
_Generic((_X_), \
201+
_CLLTK_GENERIC_CASE(char, false), \
202+
_CLLTK_GENERIC_CASE(uint8_t, false), \
203+
_CLLTK_ONLY_LINUX(_CLLTK_GENERIC_CASE(int8_t, _clltk_argument_sint8), ) \
204+
_CLLTK_GENERIC_CASE(uint16_t, false), \
205+
_CLLTK_GENERIC_CASE(int16_t, false), \
206+
_CLLTK_GENERIC_CASE(uint32_t, false), \
207+
_CLLTK_GENERIC_CASE(int32_t, false), \
208+
_CLLTK_GENERIC_CASE(uint64_t, false), \
209+
_CLLTK_GENERIC_CASE(int64_t, false), \
210+
_CLLTK_GENERIC_CASE(signed long long, false), \
211+
_CLLTK_GENERIC_CASE(unsigned long long, false), \
212+
_CLLTK_GENERIC_CASE(__uint128_t, false), \
213+
_CLLTK_GENERIC_CASE(__int128_t, false), \
214+
_CLLTK_GENERIC_CASE(float, false), \
215+
_CLLTK_GENERIC_CASE(double, false), \
216+
_CLLTK_GENERIC_CASE(void *, false), \
217+
_CLLTK_GENERIC_CASE(char *, true), \
218+
_CLLTK_GENERIC_CASE(const void *, false), \
219+
_CLLTK_GENERIC_CASE(const char *, true), \
220220
default: false)
221221
#endif
222222

tracing_library/include/CommonLowLevelTracingKit/tracing/_macros.h

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -131,6 +131,12 @@ __attribute__((always_inline)) static inline constexpr auto _clltk_cast(T value)
131131
_VALUE_
132132
#endif
133133

134+
#ifdef __linux__
135+
#define _CLLTK_ONLY_LINUX(...) __VA_ARGS__
136+
#else
137+
#define _CLLTK_ONLY_LINUX(...)
138+
#endif
139+
134140
#define _CLLTK_STR_INTERNAL(...) #__VA_ARGS__
135141
#define _CLLTK_STR(...) _CLLTK_STR_INTERNAL(__VA_ARGS__)
136142

tracing_library/source/abstraction/CMakeLists.txt

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7,13 +7,13 @@ target_include_directories(clltk_tracing_abstraction_interface
77

88
find_package(Threads REQUIRED)
99

10-
if(CMAKE_SYSTEM_NAME STREQUAL "Linux")
10+
if(CMAKE_SYSTEM_NAME STREQUAL "Linux" OR CMAKE_SYSTEM_NAME STREQUAL "SunOS")
1111
add_library(clltk_tracing_abstraction OBJECT
12-
linux_user_space/file.c
13-
linux_user_space/sync.c
14-
linux_user_space/info.c
15-
linux_user_space/error.c
16-
linux_user_space/memory.c
12+
unix_user_space/file.c
13+
unix_user_space/sync.c
14+
unix_user_space/info.c
15+
unix_user_space/error.c
16+
unix_user_space/memory.c
1717
)
1818
target_link_libraries(clltk_tracing_abstraction
1919
PRIVATE

tracing_library/source/abstraction/linux_user_space/error.c renamed to tracing_library/source/abstraction/unix_user_space/error.c

File renamed without changes.

tracing_library/source/abstraction/linux_user_space/file.c renamed to tracing_library/source/abstraction/unix_user_space/file.c

Lines changed: 16 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
#include <sys/stat.h>
1818

1919
#include <dirent.h>
20+
#include <limits.h>
2021
#include <unistd.h>
2122

2223
#include <inttypes.h>
@@ -231,9 +232,11 @@ file_t *file_create_temp(const char *final_name, const size_t file_size)
231232
ERROR_AND_EXIT("fail to mmap temp file %s with %s", file->path, strerror(errno));
232233
}
233234

235+
#ifdef __linux__
234236
if (madvise(file->mmapped.ptr, file_size, MADV_DODUMP) == -1) {
235237
ERROR_AND_EXIT("fail to madvise temp file %s with %s", file->path, strerror(errno));
236238
}
239+
#endif
237240

238241
file->mmapped.size = file_size;
239242

@@ -332,7 +335,7 @@ file_t *file_temp_to_final(file_t **temp_file)
332335
snprintf(path, sizeof(path), "%s/%.*s" EXTENSION, get_root_path(), name_len, name);
333336

334337
// rename file to final name
335-
if (linkat(AT_FDCWD, old_file->path, AT_FDCWD, path, 0) == -1) {
338+
if (linkat((int)AT_FDCWD, old_file->path, (int)AT_FDCWD, path, 0) == -1) {
336339
if (errno != EEXIST) {
337340
ERROR_AND_EXIT("renameing failed with \"%s\"(%d) for file %s to %s", strerror(errno),
338341
errno, old_file->path, path);
@@ -369,18 +372,20 @@ void file_reset(void)
369372
return;
370373
}
371374
struct dirent *iterator = NULL;
372-
375+
struct stat file_stat;
373376
// loop over all files in path
374377
while ((iterator = readdir(directory)) != NULL) {
375-
if (iterator->d_type != DT_REG)
376-
continue;
377-
const char *name = iterator->d_name;
378-
const char *ending = strrchr(name, '.');
379-
if (ending && !strcmp(ending, EXTENSION)) {
380-
char path[PATH_MAX];
381-
snprintf(path, sizeof(path), "%s/%s", root, name);
382-
if (0 != unlink(path))
383-
ERROR_AND_EXIT("remove %s at %s failed", name, root);
378+
if (fstatat(dirfd(directory), iterator->d_name, &file_stat, AT_SYMLINK_NOFOLLOW) == 0) {
379+
if (S_ISDIR(file_stat.st_mode))
380+
continue;
381+
const char *name = iterator->d_name;
382+
const char *ending = strrchr(name, '.');
383+
if (ending && !strcmp(ending, EXTENSION)) {
384+
char path[PATH_MAX];
385+
snprintf(path, sizeof(path), "%s/%s", root, name);
386+
if (0 != unlink(path))
387+
ERROR_AND_EXIT("remove %s at %s failed", name, root);
388+
}
384389
}
385390
}
386391
closedir(directory);

tracing_library/source/abstraction/linux_user_space/info.c renamed to tracing_library/source/abstraction/unix_user_space/info.c

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,9 @@
88
#include <sys/syscall.h>
99
#include <time.h>
1010
#include <unistd.h>
11+
#ifdef __illumos__
12+
#include <sys/lwp.h>
13+
#endif
1114

1215
__thread _Atomic uint32_t cached_pid;
1316
__thread _Atomic uint32_t cached_tid;
@@ -19,7 +22,11 @@ void update_cache(void)
1922
atomic_store(&cached_pid, value);
2023
}
2124
{
25+
#ifdef __linux__
2226
const uint32_t value = (uint32_t)syscall(SYS_gettid);
27+
#elif defined(__illumos__)
28+
const uint32_t value = (uint32_t)_lwp_self();
29+
#endif
2330
atomic_store(&cached_tid, value);
2431
}
2532
}

0 commit comments

Comments
 (0)