Skip to content

Commit 2dac175

Browse files
author
vasko
committed
[abseil-cpp] patch for FreeRTOS support
upstream PR: <abseil/abseil-cpp#2053> commit_hash:8d417015d44451b26fd3aac8f33b0f5ad2164210
1 parent 4f3d8ac commit 2dac175

6 files changed

Lines changed: 110 additions & 3 deletions

File tree

contrib/restricted/abseil-cpp/absl/base/internal/sysinfo.cc

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,10 @@
5050
#include <zircon/process.h>
5151
#endif
5252

53+
#if defined(__FREERTOS__)
54+
#include <task.h>
55+
#endif
56+
5357
#include <string.h>
5458

5559
#include <cassert>
@@ -466,6 +470,12 @@ pid_t GetTID() {
466470
return static_cast<pid_t>(zx_thread_self());
467471
}
468472

473+
#elif defined(__FREERTOS__)
474+
475+
pid_t GetTID() {
476+
return static_cast<pid_t>(uxTaskGetTaskNumber(xTaskGetCurrentTaskHandle()));
477+
}
478+
469479
#else
470480

471481
// Fallback implementation of `GetTID` using `pthread_self`.

contrib/restricted/abseil-cpp/absl/debugging/internal/elf_mem_image.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@
3535
#if defined(__ELF__) && !defined(__OpenBSD__) && !defined(__QNX__) && \
3636
!defined(__asmjs__) && !defined(__wasm__) && !defined(__HAIKU__) && \
3737
!defined(__sun) && !defined(__VXWORKS__) && !defined(__hexagon__) && \
38-
!defined(__XTENSA__)
38+
!defined(__XTENSA__) && !defined(__FREERTOS__)
3939
#define ABSL_HAVE_ELF_MEM_IMAGE 1
4040
#endif
4141

contrib/restricted/abseil-cpp/absl/log/internal/log_message.cc

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -221,13 +221,13 @@ LogMessage::LogMessageData::LogMessageData(absl::string_view file,
221221
void LogMessage::LogMessageData::InitializeEncodingAndFormat() {
222222
EncodeStringTruncate(EventTag::kFileName, entry.source_filename(),
223223
&encoded_remaining());
224-
EncodeVarint(EventTag::kFileLine, entry.source_line(), &encoded_remaining());
224+
EncodeVarint(EventTag::kFileLine, static_cast<int32_t>(entry.source_line()), &encoded_remaining());
225225
EncodeVarint(EventTag::kTimeNsecs, absl::ToUnixNanos(entry.timestamp()),
226226
&encoded_remaining());
227227
EncodeVarint(EventTag::kSeverity,
228228
ProtoSeverity(entry.log_severity(), entry.verbosity()),
229229
&encoded_remaining());
230-
EncodeVarint(EventTag::kThreadId, entry.tid(), &encoded_remaining());
230+
EncodeVarint(EventTag::kThreadId, static_cast<int32_t>(entry.tid()), &encoded_remaining());
231231
}
232232

233233
void LogMessage::LogMessageData::FinalizeEncodingAndFormat() {

contrib/restricted/abseil-cpp/absl/log/internal/proto.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,9 @@ inline bool EncodeVarint(uint64_t tag, uint32_t value, absl::Span<char> *buf) {
7979
inline bool EncodeVarint(uint64_t tag, int32_t value, absl::Span<char> *buf) {
8080
return EncodeVarint(tag, static_cast<uint64_t>(value), buf);
8181
}
82+
inline bool EncodeVarint(uint64_t tag, bool value, absl::Span<char> *buf) {
83+
return EncodeVarint(tag, static_cast<uint64_t>(value), buf);
84+
}
8285

8386
// Encodes the specified integer as a varint field using ZigZag encoding and
8487
// returns true if it fits.

contrib/restricted/abseil-cpp/absl/time/internal/cctz/src/time_zone_libc.cc

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,15 @@ auto tm_zone(const std::tm& tm) -> decltype(tzname[0]) {
8181
const bool is_dst = tm.tm_isdst > 0;
8282
return tzname[is_dst];
8383
}
84+
#elif defined(__FREERTOS__)
85+
long int tm_gmtoff(const std::tm& tm) {
86+
(void)tm;
87+
return 0;
88+
}
89+
const char* tm_zone(const std::tm& tm) {
90+
(void)tm;
91+
return "UTC";
92+
}
8493
#else
8594
// Adapt to different spellings of the struct std::tm extension fields.
8695
#if defined(tm_gmtoff)
Lines changed: 85 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,85 @@
1+
--- contrib/restricted/abseil-cpp/absl/base/internal/sysinfo.cc (index)
2+
+++ contrib/restricted/abseil-cpp/absl/base/internal/sysinfo.cc (working tree)
3+
@@ -50,6 +50,10 @@
4+
#include <zircon/process.h>
5+
#endif
6+
7+
+#if defined(__FREERTOS__)
8+
+#include <task.h>
9+
+#endif
10+
+
11+
#include <string.h>
12+
13+
#include <cassert>
14+
@@ -466,6 +470,12 @@ pid_t GetTID() {
15+
return static_cast<pid_t>(zx_thread_self());
16+
}
17+
18+
+#elif defined(__FREERTOS__)
19+
+
20+
+pid_t GetTID() {
21+
+ return static_cast<pid_t>(uxTaskGetTaskNumber(xTaskGetCurrentTaskHandle()));
22+
+}
23+
+
24+
#else
25+
26+
// Fallback implementation of `GetTID` using `pthread_self`.
27+
--- contrib/restricted/abseil-cpp/absl/debugging/internal/elf_mem_image.h (index)
28+
+++ contrib/restricted/abseil-cpp/absl/debugging/internal/elf_mem_image.h (working tree)
29+
@@ -35,7 +35,7 @@
30+
#if defined(__ELF__) && !defined(__OpenBSD__) && !defined(__QNX__) && \
31+
!defined(__asmjs__) && !defined(__wasm__) && !defined(__HAIKU__) && \
32+
!defined(__sun) && !defined(__VXWORKS__) && !defined(__hexagon__) && \
33+
- !defined(__XTENSA__)
34+
+ !defined(__XTENSA__) && !defined(__FREERTOS__)
35+
#define ABSL_HAVE_ELF_MEM_IMAGE 1
36+
#endif
37+
38+
--- contrib/restricted/abseil-cpp/absl/log/internal/log_message.cc (index)
39+
+++ contrib/restricted/abseil-cpp/absl/log/internal/log_message.cc (working tree)
40+
@@ -221,13 +221,13 @@ LogMessage::LogMessageData::LogMessageData(absl::string_view file,
41+
void LogMessage::LogMessageData::InitializeEncodingAndFormat() {
42+
EncodeStringTruncate(EventTag::kFileName, entry.source_filename(),
43+
&encoded_remaining());
44+
- EncodeVarint(EventTag::kFileLine, entry.source_line(), &encoded_remaining());
45+
+ EncodeVarint(EventTag::kFileLine, static_cast<int32_t>(entry.source_line()), &encoded_remaining());
46+
EncodeVarint(EventTag::kTimeNsecs, absl::ToUnixNanos(entry.timestamp()),
47+
&encoded_remaining());
48+
EncodeVarint(EventTag::kSeverity,
49+
ProtoSeverity(entry.log_severity(), entry.verbosity()),
50+
&encoded_remaining());
51+
- EncodeVarint(EventTag::kThreadId, entry.tid(), &encoded_remaining());
52+
+ EncodeVarint(EventTag::kThreadId, static_cast<int32_t>(entry.tid()), &encoded_remaining());
53+
}
54+
55+
void LogMessage::LogMessageData::FinalizeEncodingAndFormat() {
56+
--- contrib/restricted/abseil-cpp/absl/log/internal/proto.h (index)
57+
+++ contrib/restricted/abseil-cpp/absl/log/internal/proto.h (working tree)
58+
@@ -79,6 +79,9 @@ inline bool EncodeVarint(uint64_t tag, uint32_t value, absl::Span<char> *buf) {
59+
inline bool EncodeVarint(uint64_t tag, int32_t value, absl::Span<char> *buf) {
60+
return EncodeVarint(tag, static_cast<uint64_t>(value), buf);
61+
}
62+
+inline bool EncodeVarint(uint64_t tag, bool value, absl::Span<char> *buf) {
63+
+ return EncodeVarint(tag, static_cast<uint64_t>(value), buf);
64+
+}
65+
66+
// Encodes the specified integer as a varint field using ZigZag encoding and
67+
// returns true if it fits.
68+
--- contrib/restricted/abseil-cpp/absl/time/internal/cctz/src/time_zone_libc.cc (index)
69+
+++ contrib/restricted/abseil-cpp/absl/time/internal/cctz/src/time_zone_libc.cc (working tree)
70+
@@ -81,6 +81,15 @@ auto tm_zone(const std::tm& tm) -> decltype(tzname[0]) {
71+
const bool is_dst = tm.tm_isdst > 0;
72+
return tzname[is_dst];
73+
}
74+
+#elif defined(__FREERTOS__)
75+
+long int tm_gmtoff(const std::tm& tm) {
76+
+ (void)tm;
77+
+ return 0;
78+
+}
79+
+const char* tm_zone(const std::tm& tm) {
80+
+ (void)tm;
81+
+ return "UTC";
82+
+}
83+
#else
84+
// Adapt to different spellings of the struct std::tm extension fields.
85+
#if defined(tm_gmtoff)

0 commit comments

Comments
 (0)