summaryrefslogtreecommitdiff
path: root/euler/source
diff options
context:
space:
mode:
Diffstat (limited to 'euler/source')
-rw-r--r--euler/source/entry.cpp2
-rw-r--r--euler/source/std/cstdio.cpp1
-rw-r--r--euler/source/std/string.cpp6
-rw-r--r--euler/source/stream.cpp1
-rw-r--r--euler/source/syscall.cpp13
5 files changed, 21 insertions, 2 deletions
diff --git a/euler/source/entry.cpp b/euler/source/entry.cpp
index e79209c..ab721f1 100644
--- a/euler/source/entry.cpp
+++ b/euler/source/entry.cpp
@@ -6,6 +6,8 @@ int main(int argc, char **argv);
extern "C" [[noreturn]] void _start() {
+ //TODO: call static initializers
+
auto argc_raw = euler::syscall::try_get_environment_variable("ARGC");
int argc = argc_raw.has_value() ? std::stoi(argc_raw.value()) : 0;
diff --git a/euler/source/std/cstdio.cpp b/euler/source/std/cstdio.cpp
index 8c12a7c..485efc3 100644
--- a/euler/source/std/cstdio.cpp
+++ b/euler/source/std/cstdio.cpp
@@ -1,4 +1,5 @@
#include <cstdio>
+#include <string>
extern "C" FILE *fopen(const char *filename, const char *mode) {
diff --git a/euler/source/std/string.cpp b/euler/source/std/string.cpp
index 31c47a5..ae397b1 100644
--- a/euler/source/std/string.cpp
+++ b/euler/source/std/string.cpp
@@ -44,6 +44,7 @@ namespace std {
value = value * base + c - 'A' + 10;
else
break;
+ ++i;
}
if (pos != 0)
@@ -75,10 +76,11 @@ namespace std {
}
std::string operator +(std::string &&lhs, std::string &&rhs) {
+ size_t og_lhs_s = lhs.size();
std::string s = std::move(lhs);
- s.resize(lhs.size() + rhs.size());
+ s.resize(og_lhs_s + rhs.size());
for (size_t i = 0; i < rhs.size(); ++i)
- s[lhs.size() + i] = rhs[i];
+ s[og_lhs_s + i] = rhs[i];
rhs.clear();
return s;
}
diff --git a/euler/source/stream.cpp b/euler/source/stream.cpp
index faf2907..da973ba 100644
--- a/euler/source/stream.cpp
+++ b/euler/source/stream.cpp
@@ -1,4 +1,5 @@
#include <euler/stream.hpp>
+#include <algorithm>
#include <cstring>
namespace euler {
diff --git a/euler/source/syscall.cpp b/euler/source/syscall.cpp
index b3ed3a8..0d30c4a 100644
--- a/euler/source/syscall.cpp
+++ b/euler/source/syscall.cpp
@@ -1,4 +1,6 @@
#include <euler/syscall.hpp>
+#include <string>
+#include <vector>
extern "C" void __euler_do_syscall(
uint64_t &rax, uint64_t &rdi, uint64_t &rsi, uint64_t &rdx);
@@ -394,4 +396,15 @@ namespace euler::syscall {
}
+ void set_thread_name(const std::string &name) {
+
+ uint64_t rax = 24;
+ uint64_t rdi = (uint64_t)name.data();
+ uint64_t rsi = name.size();
+ uint64_t rdx;
+
+ __euler_do_syscall(rax, rdi, rsi, rdx);
+
+ }
+
}