Skip to content

مترجم: مدمج عنوان_رمز — أخذ عنوان رمز الرابط (اللبنة 3.13، إطفاء C)#224

Merged
SalehKadah merged 1 commit into
devfrom
feat/symbol-addr
Jul 21, 2026
Merged

مترجم: مدمج عنوان_رمز — أخذ عنوان رمز الرابط (اللبنة 3.13، إطفاء C)#224
SalehKadah merged 1 commit into
devfrom
feat/symbol-addr

Conversation

@SalehKadah

Copy link
Copy Markdown
Collaborator

ملخّص

مدمج جديد عنوان_رمز("اسم") يعيد عنوان رمز رابط خارجيّ (دالّة/بيانات/رمز .ld)
كـرقم (i64). ينفّذ RFC عنوان_رمز (sadlang/rfcs#38)، اللبنة 3.13 من موجة «إطفاء C»
في نواة النحلة. يُطفئ نمط الجالب *_addr (~25 دالّة C غلافًا للعنونة) ويصل إلى رموز
الرابط البحتة (_kernel_start/_stk) التي لا مخزن C لها.

التصميم

  • الخفض: يُعاد استخدام أيّ تصريح سابق للرمز (getNamedValue، دالّة أو عالميّ)
    وإلّا getOrInsertGlobal(sym, i8) بربط خارجيّ، ثمّ CreatePtrToInt ⇒ i64. على
    i686 المؤشّر 32-بت ⇒ توسيع أصفار (يضمنه LangRef) يطابق عقد الجالبات
    (unsigned int)&sym كـunsigned long long.
  • الوضعان: يقبله المترجم (حرّ + مستضاف FFI).
  • خطأ SEM021 SEM_SYMBOL_ADDR_ARG للوسيط غير الثابت/الفارغ (اسم الرمز يجب أن
    يُعرَف وقت الترجمة لإصدار relocation).

نقاط التماسّ (6، تحاكي اقرأ_سجل_تحكم + emitPtrToInt)

compiler_os_core.yaml (CPUCTL_20) → توليد الكتالوج → LOWLEVEL_SYMBOL_ADDR
فرع frontend → case توجيه → emitLowlevelSymbolAddr + خطأ SEM021 (yaml+تعداد+توليد).

الاختبار والمراجعة

  • 9 حالات انحدار جديدة (test_symbol_addr.py): حرّ+مستضاف، ptrtoint، تصريح
    خارجيّ، إعادة استخدام رمز دالّة، رفض غير ثابت/رقميّ/فارغ، لا ازدواج. 17/17 أخضر
    للمجموعة الحرّة كاملة (صفر انحدار على 3.12).
  • gen --check أخضر (اتّساق SoT).
  • مراجعة أميليا: صفر خطأ صحّة؛ ZExt مؤكَّد عبر LangRef؛ تحسينات مطبَّقة
    (getNamedValue ضدّ تصادم ترتيب التصريح، تمييز رسالة الرمز الفارغ، حالات اختبار
    إضافيّة، سطر قيد النطاق «رموز خارجيّة حصرًا، بلا رصد أخطاء مطبعيّة»).

التوافق الخلفي

مدمج جديد باسم غير مستعمَل ⇒ لا كسر.

🤖 Generated with Claude Code

… إطفاء C)

عنوان_رمز("اسم") يعيد عنوان رمز رابط خارجيّ (دالّة/بيانات/رمز .ld) كـرقم i64.
الخفض: يُعاد استخدام أيّ تصريح سابق (getNamedValue) وإلّا getOrInsertGlobal(sym,i8)
بربط خارجيّ، ثمّ ptrtoint ⇒ i64. على i686 المؤشّر 32-بت ⇒ توسيع أصفار (LangRef
يضمنه) يطابق عقد الجالبات (unsigned int)&sym كـu64. يعمل في الوضعين؛ الوسيط غير
الثابت/الفارغ يُرفَض بخطأ SEM021 (اسم الرمز يجب أن يُعرَف وقت الترجمة لإصدار
relocation). يُطفئ نمط الجالب *_addr (~25 دالّة C في نواة النحلة).

6 نقاط تماسّ تحاكي اقرأ_سجل_تحكم + emitPtrToInt:
- SoT: compiler_os_core.yaml CPUCTL_20 = عنوان_رمز (+ توليد الكتالوج)
- SIROpcode LOWLEVEL_SYMBOL_ADDR
- frontend: فرع CPUCTL_20 (وسيط ConstantString)
- backend: case + emitLowlevelSymbolAddr
- خطأ SEM021 SEM_SYMBOL_ADDR_ARG (yaml + تعداد + توليد)
- اختبار انحدار 9 حالات (حرّ+مستضاف+إعادة استخدام+رفض غير ثابت/رقميّ/فارغ+لا ازدواج)

منفّذ RFC عنوان_رمز (sadlang/rfcs#38). مراجعة أميليا: صفر خطأ صحّة، ZExt مؤكَّد
عبر LangRef، تحسينات مطبَّقة (getNamedValue ضدّ تصادم الترتيب، تمييز رسالة الرمز
الفارغ، 4 حالات اختبار إضافيّة، سطر قيد النطاق). 17/17 اختبار حرّ أخضر، gen --check
أخضر.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@github-actions

Copy link
Copy Markdown

📚 تذكير مزامنة دليل المطوّرين

هذا الـPR يلمس مصادر موثَّقة في دليل المطوّرين. راجع الفصول الآتية وحدّثها إن تغيّر سلوكها، ثم ثبّت البصمات هناك (python scripts/check_sync.py --update):

بندٌ في معيار الإنجاز. تذكيرٌ آليّ — لا يحجب الدمج.

@SalehKadah
SalehKadah merged commit c34b5f8 into dev Jul 21, 2026
18 checks passed
@SalehKadah
SalehKadah deleted the feat/symbol-addr branch July 21, 2026 01:38
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant