diff --git a/gcc/rust/expand/rust-proc-macro.cc b/gcc/rust/expand/rust-proc-macro.cc
index 2fdfcb20b19..e8618485b71 100644
--- a/gcc/rust/expand/rust-proc-macro.cc
+++ b/gcc/rust/expand/rust-proc-macro.cc
@@ -14,12 +14,14 @@
// along with GCC; see the file COPYING3. If not see
// .
+#include "rust-system.h"
#include "rust-diagnostics.h"
#include "rust-proc-macro.h"
#include "rust-session-manager.h"
#include "rust-lex.h"
#include "rust-token-converter.h"
#include "rust-attributes.h"
+
#ifndef _WIN32
#include
#endif
@@ -45,8 +47,6 @@ CustomDeriveProcMacro::CustomDeriveProcMacro (ProcMacro::CustomDerive macro)
macro (macro.macro)
{}
-const std::string PROC_MACRO_DECL_PREFIX = "__gccrs_proc_macro_decls_";
-
namespace {
ProcMacro::Literal
@@ -150,8 +150,10 @@ load_macros_array (std::string path)
// FIXME: Add CrateStableId handling, right now all versions may be loaded,
// even incompatible ones.
+ auto symbol_name = generate_proc_macro_decls_symbol (0 /* FIXME */);
+
return *reinterpret_cast (
- dlsym (handle, PROC_MACRO_DECL_PREFIX.c_str ()));
+ dlsym (handle, symbol_name.c_str ()));
#else
rust_sorry_at (UNDEF_LOCATION,
"Procedural macros are not yet supported on windows host");
@@ -175,4 +177,14 @@ load_macros (std::string path)
array->macros + array->length);
}
+std::string
+generate_proc_macro_decls_symbol (std::uint32_t stable_crate_id)
+{
+ std::ostringstream stream;
+ stream << "__gccrs_proc_macro_decls_" << std::setfill ('0') << std::hex
+ << std::setw (8) << stable_crate_id << "__";
+
+ return stream.str ();
+}
+
} // namespace Rust
diff --git a/gcc/rust/expand/rust-proc-macro.h b/gcc/rust/expand/rust-proc-macro.h
index d994ed9bf5e..6ffaaf6c099 100644
--- a/gcc/rust/expand/rust-proc-macro.h
+++ b/gcc/rust/expand/rust-proc-macro.h
@@ -85,6 +85,9 @@ public:
const std::vector
load_macros (std::string path);
+std::string
+generate_proc_macro_decls_symbol (std::uint32_t stable_crate_id);
+
} // namespace Rust
#endif /* ! RUST_PROC_MACRO_H */
diff --git a/gcc/rust/rust-system.h b/gcc/rust/rust-system.h
index 5d08411063f..88d6c1095e6 100644
--- a/gcc/rust/rust-system.h
+++ b/gcc/rust/rust-system.h
@@ -54,6 +54,7 @@
* before the macro magic of safe-ctype.h, which is included by
* system.h. */
#include
+#include
#include "system.h"
#include "ansidecl.h"