aboutsummaryrefslogtreecommitdiff
path: root/src/llvm_backend_const.cpp
diff options
context:
space:
mode:
authorFourteenBrush <naessensarthur2@protonmail.com>2024-01-25 10:15:25 +0100
committerFourteenBrush <naessensarthur2@protonmail.com>2024-01-25 10:15:25 +0100
commit967ccfc7ccc0f76c653ff4bb625bac60e89a7904 (patch)
treef989a0f99337c7a0c93ee84249d73ec0c33e306d /src/llvm_backend_const.cpp
parent712ae1c5ac73493498aa8e5076d91a6558337117 (diff)
parent9cfd4a953e2a7d19237891993b643b2d1477f8b3 (diff)
Merge branch 'master' of https://github.com/FourteenBrush/Odin
Diffstat (limited to 'src/llvm_backend_const.cpp')
-rw-r--r--src/llvm_backend_const.cpp41
1 files changed, 37 insertions, 4 deletions
diff --git a/src/llvm_backend_const.cpp b/src/llvm_backend_const.cpp
index 7584df3ee..2291f24ac 100644
--- a/src/llvm_backend_const.cpp
+++ b/src/llvm_backend_const.cpp
@@ -287,11 +287,44 @@ gb_internal lbValue lb_expr_untyped_const_to_typed(lbModule *m, Ast *expr, Type
return lb_const_value(m, t, tv.value);
}
-gb_internal lbValue lb_const_source_code_location_const(lbModule *m, String const &procedure, TokenPos const &pos) {
+gb_internal String lb_obfuscate_string(String const &s, char const *prefix) {
+ if (s.len == 0) {
+ return {};
+ }
+ GB_ASSERT(prefix != nullptr);
+ u64 hash = gb_fnv64a(s.text, s.len);
+ gbString res = gb_string_make(temporary_allocator(), prefix);
+ res = gb_string_append_fmt(res, "x%llx", cast(long long unsigned)hash);
+ return make_string_c(res);
+}
+
+gb_internal i32 lb_obfuscate_i32(i32 i) {
+ i32 x = cast(i32)gb_fnv64a(&i, sizeof(i));
+ if (x < 0) {
+ x = 1-x;
+ }
+ return cast(i32)x;
+}
+
+gb_internal lbValue lb_const_source_code_location_const(lbModule *m, String const &procedure_, TokenPos const &pos) {
+ String file = get_file_path_string(pos.file_id);
+ String procedure = procedure_;
+
+ i32 line = pos.line;
+ i32 column = pos.column;
+
+ if (build_context.obfuscate_source_code_locations) {
+ file = lb_obfuscate_string(file, "F");
+ procedure = lb_obfuscate_string(procedure, "P");
+
+ line = lb_obfuscate_i32(line);
+ column = lb_obfuscate_i32(column);
+ }
+
LLVMValueRef fields[4] = {};
- fields[0]/*file*/ = lb_find_or_add_entity_string(m, get_file_path_string(pos.file_id)).value;
- fields[1]/*line*/ = lb_const_int(m, t_i32, pos.line).value;
- fields[2]/*column*/ = lb_const_int(m, t_i32, pos.column).value;
+ fields[0]/*file*/ = lb_find_or_add_entity_string(m, file).value;
+ fields[1]/*line*/ = lb_const_int(m, t_i32, line).value;
+ fields[2]/*column*/ = lb_const_int(m, t_i32, column).value;
fields[3]/*procedure*/ = lb_find_or_add_entity_string(m, procedure).value;
lbValue res = {};