LLVM-CXXMAP(1) LLVM LLVM-CXXMAP(1)

llvm-cxxmap - ابزار نگاشت مجدد نام‌های درهم‌ریخته

llvm-cxxmap [گزینه‌ها] symbol-file-1 symbol-file-2

ابزار llvm-cxxmap تطبیق تقریبی (fuzzy matching) نام‌های درهم‌ریختهٔ ++C را بر اساس فایلی انجام می‌دهد که مؤلفه‌های معادل نام‌ها را توصیف می‌کند.

فایل‌های نماد باید شامل فهرستی از نام‌های درهم‌ریختهٔ ++C باشند (یک نام در هر خط). خطوط خالی و خطوطی که با # شروع می‌شوند نادیده گرفته می‌شوند. خروجی، فهرستی از جفت‌نمادهای معادل است (یک جفت در هر خط)، به این صورت:

<symbol-1> <symbol-2>

که در آن <symbol-1> نمادی از symbol-file-1 و <symbol-2> نمادی از symbol-file-2 است. نگاشت‌هایی که در آن‌ها هر دو نماد یکسان باشند حذف می‌شوند.

مشخص کردن فایلی شامل فهرستی از قوانین هم‌ارزی که باید برای تعیین معادل بودن دو نماد استفاده شود. الزامی است. بخش «فایل نگاشت مجدد (REMAPPING FILE)» را ببینید.
مشخص کردن فایلی برای نوشتن فهرست نام‌های تطبیق‌یافته در آن. در صورت عدم تعیین، این فهرست در خروجی استاندارد (stdout) نوشته خواهد شد.
در صورتی که چندین نماد معادل (اما متمایز) در symbol-file-2 وجود داشته باشد، یک هشدار صادر می‌کند.
در صورتی که symbol-file-1 حاوی نمادی باشد که هیچ نماد معادلی برای آن در symbol-file-2 وجود ندارد، یک هشدار صادر می‌کند.

فایل نگاشت مجدد یک فایل متنی شامل خطوطی با ساختار زیر است:

fragmentkind fragment1 fragment2

که در آن fragmentkind یکی از مقادیر name، type یا encoding است که مشخص می‌کند آیا قطعات نام درهم‌ریختهٔ بعدی به ترتیب از نوع <name http://itanium-cxx-abi.github.io/cxx-abi/abi.html#mangle.name>، <type http://itanium-cxx-abi.github.io/cxx-abi/abi.html#mangle.type> یا <encoding http://itanium-cxx-abi.github.io/cxx-abi/abi.html#mangle.encoding> هستند یا خیر. خطوط خالی و خطوطی که با # شروع می‌شوند نادیده گرفته می‌شوند.

نام‌های C درهم‌ریخته‌نشده (Unmangled) را می‌توان به صورت یک encoding که یک <source-name http://itanium-cxx-abi.github.io/cxx-abi/abi.html#mangle.source-name> (دارای پیشوند طول) است بیان کرد:

# C function "void foo_bar()" is remapped to C++ function "void foo::bar()".
encoding 7foo_bar _Z3foo3barv

برای سهولت کار، جایگزینی‌های درونی (built-in <substitution>s) مانند St و Ss به عنوان <name> پذیرفته می‌شوند (اگرچه از نظر فنی <name> نیستند).

به عنوان مثال، برای مشخص کردن اینکه absl::string_view و std::string_view باید معادل یکدیگر در نظر گرفته شوند، می‌توان از فایل نگاشت مجدد زیر استفاده کرد:

# absl::string_view is considered equivalent to std::string_view
type N4absl11string_viewE St17basic_string_viewIcSt11char_traitsIcEE
# std:: might be std::__1:: in libc++ or std::__cxx11:: in libstdc++
name St St3__1
name St St7__cxx11

نکته:

نگاشت مجدد نمادها در حال حاضر فقط برای نام‌های درهم‌ریختهٔ ++C که از طرح درهم‌ریزی Itanium C++ ABI پیروی می‌کنند پشتیبانی می‌شود. این شامل تمام مقصدهای ++C پشتیبانی‌شده توسط Clang به‌جز مقصدهای ویندوز است.

توسعه و نگهداری توسط تیم LLVM (https://llvm.org).

2003-2026, پروژه LLVM

2026-07-15 22