.\" Man page generated from reStructuredText .\" by the Docutils 0.23 manpage writer. . . .nr rst2man-indent-level 0 . .de1 rstReportMargin \\$1 \\n[an-margin] level \\n[rst2man-indent-level] level margin: \\n[rst2man-indent\\n[rst2man-indent-level]] - \\n[rst2man-indent0] \\n[rst2man-indent1] \\n[rst2man-indent2] .. .de1 INDENT .\" .rstReportMargin pre: . RS \\$1 . nr rst2man-indent\\n[rst2man-indent-level] \\n[an-margin] . nr rst2man-indent-level +1 .\" .rstReportMargin post: .. .de UNINDENT . RE .\" indent \\n[an-margin] .\" old: \\n[rst2man-indent\\n[rst2man-indent-level]] .nr rst2man-indent-level -1 .\" new: \\n[rst2man-indent\\n[rst2man-indent-level]] .in \\n[rst2man-indent\\n[rst2man-indent-level]]u .. .TH "LLVM-IFS" "1" "2026-07-15" "22" "LLVM" .SH "نام (NAME)" llvm\-ifs \- ابزار ساخت جانشین (stub) برای شیء اشتراکی .SH "خلاصه دستور (SYNOPSIS)" .sp \fBllvm\-ifs\fP [\fIoptions\fP] \fIinputs\fP .SH "توضیحات (DESCRIPTION)" .sp دستور \fBllvm\-ifs\fP ابزاری است که به‌طور هم‌زمان جانشین‌های متنی انسان‌خوان (فایل‌های \&.ifs) را برای اشیاء اشتراکی و جانشین‌های شیء اشتراکیِ قابل پیوند (فایل‌های \&.so) را از روی اشیاء اشتراکی ELF یا جانشین‌های متنی تولید می‌کند. جانشین‌های متنی برای پایش تغییرات ABI در شیء اشتراکی مفید هستند. از جانشین‌های شیء اشتراکی قابل پیوند می‌توان برای جلوگیری از پیوند مجدد (relink) غیرضروری در مواقعی که ABI کتابخانه‌های اشتراکی تغییر نکرده است، استفاده کرد. .SH "قالب‌های IFS (IFS FORMATS)" .sp در ادامه نمونه‌ای از نمایش متنی (IFS) یک شیء اشتراکی تولیدشده توسط \fBllvm\-ifs\fP آمده است: .INDENT 0.0 .INDENT 3.5 .sp .EX \-\-\- !ifs\-v1 IFSVersion: 3.0 SoName: libtest.so /* Optional */ Target: x86_64\-unknown\-linux\-gnu /* Optional, format 1, same format as llvm target triple */ Target: { Arch: x86_64, Endianness: little, Bitwidth: 64 } /* Optional, format 2 */ NeededLibs: \- libc.so.6 Symbols: \- { Name: sym0, Type: Notype } \- { Name: sym1, Type: Object, Size: 0 } \- { Name: sym2, Type: Func, Weak: false } \- { Name: sym3, Type: TLS } \- { Name: sym4, Type: Unknown, Warning: foo } \&... .EE .UNINDENT .UNINDENT .INDENT 0.0 .IP \(bu 2 \fBIFSVersion\fP: نسخهٔ فایل IFS برای سازگاری خواننده. .IP \(bu 2 \fBSoName\fP (اختیاری): نام فایل شیء اشتراکی که برای آن جانشین ساخته می‌شود. .IP \(bu 2 \fBTarget\fP (اختیاری): اطلاعات معماری، ترتیب بایت‌ها (endianness) و عرض بیتیِ این شیء اشتراکی. این فیلد می‌تواند در قالب صریح یا در قالب ضمنی سه‌گانهٔ (triple) در LLVM باشد. این مورد اختیاری است و می‌توان آن را از طریق گزینه‌های خط فرمان بازنویسی کرد. .IP \(bu 2 \fBNeededLibs\fP: فهرست اشیاء اشتراکی خارجی که این کتابخانه به آن‌ها وابسته است. .IP \(bu 2 \fBSymbols\fP: مجموعه‌ای از تمامی داده‌های مورد نیاز برای پیوند اشیاء برای هر نماد، که بر اساس نام به ترتیب صعودی مرتب شده‌اند. .INDENT 2.0 .IP \(bu 2 \fBName\fP: نام نماد. .IP \(bu 2 \fBType\fP: مشخص‌کنندهٔ این‌که نماد از نوع شیء (object)، تابع (function)، بدون نوع (no\-type)، حافظهٔ محلی رشته (thread local storage) یا ناشناخته (unknown) است. انواع نمادهایی که به‌صراحت پشتیبانی نمی‌شوند، برای بهبود نسبت سیگنال به نویز به عنوان ناشناخته نگاشت می‌شوند. .IP \(bu 2 \fBSize\fP: اندازهٔ نماد مورد نظر؛ برای توابع اعمال نمی‌شود و برای نمادهای NoType اختیاری است. .IP \(bu 2 \fBUndefined\fP: این‌که آیا نماد در این فایل شیء اشتراکی تعریف شده است یا خیر. .IP \(bu 2 \fBWeak\fP: این‌که آیا باید با نماد به عنوان نماد ضعیف (weak) رفتار شود یا خیر. .IP \(bu 2 \fBWarning\fP (اختیاری): متن هشداری که در هنگام پیوند با این نماد در خروجی نمایش داده می‌شود. .UNINDENT .UNINDENT .sp این قالب متنی مبتنی بر YAML شامل تمام مواردی است که برای تولید یک شیء اشتراکی ELF قابل پیوند و همچنین یک فایل با قالب Apple TAPI مورد نیاز است. ترتیب نمادها مرتب شده است، بنابراین این فایل‌ها را می‌توان به‌آسانی با استفاده از ابزارهای diff مقایسه کرد. اگر محتوای فایل تغییر کند، نشان‌دهندهٔ یک تغییر بالقوه ناسازگار با ABI (تغییر شکنندهٔ ABI) است. .SH "قالب جانشین ELF (ELF STUB FORMAT)" .sp یک فایل کمینهٔ ELF که می‌تواند توسط پیونددهنده (linker) استفاده شود، باید بخش‌های زیر را به‌درستی مقداردهی کرده باشد: .INDENT 0.0 .IP \(bu 2 سرآیند ELF. .IP \(bu 2 سرآیندهای بخش (Section headers). .IP \(bu 2 جدول نمادهای پویا (بخش \fB\&.dynsym\fP). .IP \(bu 2 جدول رشته‌های پویا (بخش \fB\&.dynstr\fP). .IP \(bu 2 جدول پویا (بخش \fB\&.dynamic\fP). .INDENT 2.0 .IP \(bu 2 مدخل \fBDT_SYMTAB\fP. .IP \(bu 2 مدخل \fBDT_STRTAB\fP. .IP \(bu 2 مدخل \fBDT_STRSZ\fP. .IP \(bu 2 مدخل‌های \fBDT_NEEDED\fP (اختیاری). .IP \(bu 2 مدخل \fBDT_SONAME\fP (اختیاری). .UNINDENT .IP \(bu 2 جدول رشته‌های سرآیند بخش (بخش \fB\&.shstrtab\fP). .UNINDENT .sp این فایل ELF ممکن است با ابزارهای تحلیل ELF که به سرآیندهای برنامه (program headers) اتکا دارند، مشکلات سازگاری داشته باشد. پیونددهنده‌هایی مانند LLD بدون هیچ خطایی با چنین فایل ELF کمینه‌ای کار می‌کنند. .SH "گزینه‌ها (OPTIONS)" .INDENT 0.0 .TP .B \-\-input\-format=[IFS|ELF|OtherObjectFileFormats] تعیین قالب فایل ورودی. در حال حاضر فقط فایل‌های متنی IFS و فایل‌های شیء اشتراکی ELF پشتیبانی می‌شوند. این پرچم اختیاری است، زیرا قالب ورودی می‌تواند به‌طور خودکار استنباط شود. .UNINDENT .INDENT 0.0 .TP .B \-\-output\-elf= تعیین فایل خروجی برای جانشین شیء اشتراکی ELF. .UNINDENT .INDENT 0.0 .TP .B \-\-output\-ifs= تعیین فایل خروجی برای IFS متنی. .UNINDENT .INDENT 0.0 .TP .B \-\-output\-tbd= تعیین فایل خروجی برای Apple TAPI tbd. .UNINDENT .INDENT 0.0 .TP .B \-\-arch=[x86_64|AArch64|...] این پرچم اختیاری است و فقط باید هنگام خواندن فایل IFS استفاده شود که \fBArch\fP (معماری) در آن تعریف نشده باشد. این پرچم معماری فایل خروجی را تعیین می‌کند و می‌تواند هر رشته‌ای باشد که توسط فیلد \(aqe_machine\(aq در ELF پشتیبانی می‌شود. اگر این مقدار با فایل IFS در تعارض باشد، خطایی گزارش شده و اجرای برنامه متوقف می‌شود. .UNINDENT .INDENT 0.0 .TP .B \-\-endianness=[little|big] این پرچم اختیاری است و فقط باید هنگام خواندن فایل IFS استفاده شود که \fBEndianness\fP در آن تعریف نشده باشد. این پرچم ترتیب بایت‌های فایل خروجی را تعیین می‌کند. اگر این مقدار با فایل IFS در تعارض باشد، خطایی گزارش شده و اجرای برنامه متوقف می‌شود. .UNINDENT .INDENT 0.0 .TP .B \-\-bitwidth=[32|64] این پرچم اختیاری است و فقط باید هنگام خواندن فایل IFS استفاده شود که \fBBitWidth\fP در آن تعریف نشده باشد. این پرچم عرض بیتیِ فایل خروجی را تعیین می‌کند. اگر این مقدار با فایل IFS ورودی در تعارض باشد، خطایی گزارش شده و اجرای برنامه متوقف می‌شود. .UNINDENT .INDENT 0.0 .TP .B \-\-target= این پرچم اختیاری است و فقط باید هنگام خواندن فایل IFS استفاده شود که هیچ اطلاعات هدفی در آن تعریف نشده باشد. این پرچم با استفاده از سه‌گانهٔ هدف (target triple) در LLVM، معماری، ترتیب بایت‌ها و عرض بیتی فایل خروجی را تعیین می‌کند. از این پرچم نمی‌توان به‌طور هم‌زمان با سایر پرچم‌های مرتبط با هدف استفاده کرد. .UNINDENT .INDENT 0.0 .TP .B \-\-hint\-ifs\-target= این پرچم اختیاری است و فقط باید هنگام خواندن شیء اشتراکی ELF و تولید فایل IFS استفاده شود. به‌طور پیش‌فرض، \fBllvm\-ifs\fP از فیلدهای \(aq\fBArch\fP\fR،\fP \fBEndianness\fP و \fBBitWidth\fP\(aq برای بازتاب اطلاعات هدف از فایل شیء ورودی استفاده می‌کند. استفاده از این پرچم به \fBllvm\-ifs\fP اعلام می‌کند که سه‌گانهٔ هدف مورد انتظار در فایل IFS خروجی چیست. اگر این مقدار با اطلاعات هدف برگرفته از فایل شیء همخوانی داشته باشد، در فیلد \(aqTarget:\(aq فایل IFS تولیدشده قرار می‌گیرد. اگر با فایل شیء ورودی در تعارض باشد، خطایی گزارش شده و اجرای برنامه متوقف خواهد شد. .UNINDENT .INDENT 0.0 .TP .B \-\-hint\-ifs\-target این پرچم اختیاری است و فقط باید هنگام خروجی گرفتن فایل IFS استفاده شود. این پرچم فیلد \fBArch\fP را از فایل IFS حذف می‌کند تا بتوان بعداً آن را بازنویسی کرد. .UNINDENT .INDENT 0.0 .TP .B \-\-strip\-ifs\-endianness این پرچم اختیاری است و فقط باید هنگام خروجی گرفتن فایل IFS استفاده شود. این پرچم فیلد \fBEndianness\fP را از فایل IFS حذف می‌کند تا بتوان بعداً آن را بازنویسی کرد. .UNINDENT .INDENT 0.0 .TP .B \-\-strip\-ifs\-bitwidth این پرچم اختیاری است و فقط باید هنگام خروجی گرفتن فایل IFS استفاده شود. این پرچم فیلد \fBBitWidth\fP را از فایل IFS حذف می‌کند تا بتوان بعداً آن را بازنویسی کرد. .UNINDENT .INDENT 0.0 .TP .B \-\-strip\-ifs\-target این پرچم اختیاری است و فقط باید هنگام خروجی گرفتن فایل IFS استفاده شود. این پرچم فیلد \fBTarget\fP را از فایل IFS حذف می‌کند تا بتوان بعداً آن را بازنویسی کرد. .UNINDENT .INDENT 0.0 .TP .B \-\-write\-if\-changed هنگامی که این پرچم تنظیم شود، \fBllvm\-ifs\fP تنها در صورتی فایل خروجی را می‌نویسد که از پیش وجود نداشته باشد یا محتوای آن با فایل موجود متفاوت باشد. .UNINDENT .INDENT 0.0 .TP .B \-\-strip\-size هنگامی که این پرچم تنظیم شود، \fBllvm\-ifs\fP فیلد اندازه (size) را از فایل ifs خروجی حذف خواهد کرد. این ویژگی برای اشیاء اشتراکی مفید است که تنها قصد دارند با کدهای مستقل از موقعیت (position independent code) که نیازی به بازنشانی‌های رونویسی (copy relocations) ندارند پیوند بخورند، یا جاهایی که اندازهٔ یک شیء بخش مفیدی از ABI برای پایش به شمار نمی‌رود. .UNINDENT .SH "وضعیت خروج (EXIT STATUS)" .sp در صورت موفقیت، \fBllvm\-ifs\fP با مقدار 0 خارج می‌شود. در غیر این صورت، در صورت وقوع خطا، با مقداری غیر صفر خارج خواهد شد. .SH "نویسندگان (AUTHORS)" توسط تیم LLVM نگهداری می‌شود (). .SH "کپی‌رایت و تکثیر (COPYRIGHT)" 2003-2026, LLVM Project .\" End of generated man page.