diff options
author | Philip Herron <philip.herron@embecosm.com> | 2021-05-07 16:53:17 +0100 |
---|---|---|
committer | Philip Herron <philip.herron@embecosm.com> | 2021-05-11 18:09:57 +0100 |
commit | 58e108c7c6d0fa3c9ebc7eeb681851924e22ddd5 (patch) | |
tree | 95c03868e9d05a84000e29187e2e5ccba431cd35 /gcc/rust/backend/rust-compile-item.h | |
parent | c04343dbab902e5b8a5f047266645a5e7d40a5ed (diff) | |
download | gcc-58e108c7c6d0fa3c9ebc7eeb681851924e22ddd5.zip gcc-58e108c7c6d0fa3c9ebc7eeb681851924e22ddd5.tar.gz gcc-58e108c7c6d0fa3c9ebc7eeb681851924e22ddd5.tar.bz2 |
Implement basic rustc legacy symbol mangling
Rust supports two different symbol mangling methods legacy and V0. V0 is
the goal but its not yet stable. This implements the legacy method but
with a dummy hash value since it requires a sip128 implementation to
generate the apropriate hash which can be done in a sperate change.
This change allows us to actually assemble generic functions and avoid
bad symbol duplications.
Addresses #305
Diffstat (limited to 'gcc/rust/backend/rust-compile-item.h')
-rw-r--r-- | gcc/rust/backend/rust-compile-item.h | 21 |
1 files changed, 5 insertions, 16 deletions
diff --git a/gcc/rust/backend/rust-compile-item.h b/gcc/rust/backend/rust-compile-item.h index 2bbfe4c..5a7d846 100644 --- a/gcc/rust/backend/rust-compile-item.h +++ b/gcc/rust/backend/rust-compile-item.h @@ -53,8 +53,7 @@ public: Bexpression *value = CompileExpr::Compile (var.get_expr (), ctx); std::string name = var.get_identifier (); - // FIXME need name mangling - std::string asm_name = "__" + var.get_identifier (); + std::string asm_name = ctx->mangle_item (name); bool is_external = false; bool is_hidden = false; @@ -147,21 +146,11 @@ public: std::string ir_symbol_name = function.get_function_name (); std::string asm_name = function.get_function_name (); - if (!is_main_fn) - { - // FIXME need name mangling - if (concrete == nullptr) - asm_name = "__" + function.get_function_name (); - else - { - ir_symbol_name - = function.get_function_name () + fntype->subst_as_string (); - asm_name = "__" + function.get_function_name (); - for (auto &sub : fntype->get_substs ()) - asm_name += "G" + sub.as_string (); - } - } + // we don't mangle the main fn since we haven't implemented the main shim + // yet + if (!is_main_fn) + asm_name = ctx->mangle_item (ir_symbol_name); Bfunction *fndecl = ctx->get_backend ()->function (compiled_fn_type, ir_symbol_name, |