Skip to content

خلفيّة سياديّة م١: محرّك x86-64 (variable) + كاتب ELF64 ⇒ «خروج ٤٢» بلا clang/lld/as - #320

Merged
SalehKadah merged 1 commit into
devfrom
feat/native-backend-m1-encoder
Jul 30, 2026
Merged

خلفيّة سياديّة م١: محرّك x86-64 (variable) + كاتب ELF64 ⇒ «خروج ٤٢» بلا clang/lld/as#320
SalehKadah merged 1 commit into
devfrom
feat/native-backend-m1-encoder

Conversation

@SalehKadah

Copy link
Copy Markdown
Collaborator

الغرض

أوّلُ كودٍ C++ فعليّ للخلفيّة الأصليّة بلا LLVM (RFC rfcs #57، بعد م٠ #318 والهدف الثاني #319): محرّكُ ترميز x86-64 (عائلة variable) + كاتبُ ELF64 ساكن ⇒ ثنائيّ «خروج ٤٢» يعمل على Linux بلا clang ولا lld ولا as.

header-only ⇒ لا يمسّ مكتبةَ المصرّف (أدنى مخاطرة بناء).

المُضاف

الملفّ المحتوى
compiler/include/backend/native/x86_variable_encoder.h محرّكٌ عامٌّ يقرأ مواصفةَ ترميز (تُرآي encode في instructions.yaml) ويُخرج بايتات؛ المنطق الضيّق (REX 0100·WRXB + ModRM) مرّةً، والفرق بيانات (EncSpec)
compiler/include/backend/native/elf64_writer.h ثنائيّ ELF64 ساكن (رأس ٦٤ + PT_LOAD R+X + .text)، دخول vbase+0x78، كتابة LE يدويّة مستقلّة عن المضيف
compiler/tests/test_native_backend_m1.cpp ١٠ اختبارات
scripts/native_backend/prove_m1_exit42.sh برهان التشغيل الحيّ

البوّابة التفاضليّة (بايت-ببايت ضدّ llvm-mc)

٧ ترميزات مُتحقَّقة حرفيًّا ضدّ مخرَج llvm-mc-18 --show-encoding:

التعليمة الترميز ملاحظة
mov edi, 42 bf2a000000 opcode+reg، بلا REX
mov eax, 60 b83c000000
syscall 0f05 أوپكود بايتين
mov rax, rbx 4889d8 REX.W + ModRM
add rax, rbx 4801d8
mov r8, r9 4d89c8 REX.WRB (امتداد السجلّات)
ret c3

البرهان الحيّ 🎯

الثنائيّ ELF64 الساكن (تسلسل mov edi,42; mov eax,60; syscall) نُفِّذ على Linux (WSL2، نواة ٦٫١٨) وخرج برمز ٤٢ — بلا أيّ أداةٍ أجنبيّة:

رمز الخروج / exit code = 42 (المتوقَّع / expected 42)
PASS: الثنائيّ السياديّ خرج بـ42 بلا أدواتٍ أجنبيّة

التحقّق

  • ١٠/١٠ PASS (٧ ترميزات + تسلسل خروج + سلامة رأس ELF + كتابة الملفّ).
  • معيار قبول م١+م٢ في الـRFC محقَّق: ترميزٌ يطابق llvm-mc بايت-ببايت + ELF ساكن يعمل ويخرج بلا clang/lld/as.
  • أميليا CLEAR: كلّ بتٍّ محسوبٌ يدويًّا، ELF سليم (p_vaddr≡p_offset mod p_align)، معزول (header-only، لا target_link_libraries)، LE مستقلّ عن المضيف. أُضيف فحصُ حدودِ المعاملات (تحصينٌ لتوصيتها قبل قراءة YAML في م٣).
  • معزول: كتلة CMake if(EXISTS) لا تكسر البناء الرئيس؛ أثر الاختبار sad_m1_exit42 في .gitignore.

🤖 Generated with Claude Code

…لا clang/lld/as

أوّلُ كودٍ C++ فعليّ للخلفيّة الأصليّة (RFC rfcs #57): محرّكُ ترميز x86-64 عائلة variable
(بادئة REX + ModRM + أوپكود + فوريّ) + كاتبُ ELF64 ساكن — header-only، لا يمسّ مكتبة
المصرّف (أدنى مخاطرة بناء).

المُضاف:
• compiler/include/backend/native/x86_variable_encoder.h: محرّكٌ عامٌّ واحد يقرأ مواصفةَ
  ترميز (تُرآي encode في instructions.yaml) ويُخرج بايتات؛ المنطقُ الضيّق لعائلة x86
  (REX 0100·WRXB، ModRM mod·reg·rm) مكتوبٌ مرّةً، والفرقُ بيانات (EncSpec). المجموعة الدنيا:
  mov r32,imm32 / mov r/m64,r64 / add r/m64,r64 / syscall / ret + فحص حدود المعاملات.
• compiler/include/backend/native/elf64_writer.h: ثنائيّ ELF64 تنفيذيّ ساكن (رأس ٦٤ + PT_LOAD
  R+X + .text)، نقطة الدخول vbase+0x78، كتابة LE يدويّة (مستقلّة عن ترتيب بايتات المضيف).
• compiler/tests/test_native_backend_m1.cpp: ١٠ اختبارات — ٧ ترميزات مُتحقَّقة بايتًا ببايت
  ضدّ مخرَج llvm-mc-18 (bf2a000000/b83c000000/0f05/4889d8/4801d8/4d89c8/c3) + تسلسل خروج ٤٢
  + سلامة رأس ELF + كتابة الملفّ. ١٠/١٠ PASS.
• scripts/native_backend/prove_m1_exit42.sh: برهانُ التشغيل الحيّ.
• كتلة CMake معزولة (if EXISTS، بلا target_link_libraries) تحاكي test_docs_emitter.

البرهان الحيّ: الثنائيّ الساكن نُفِّذ على Linux (WSL2 نواة ٦٫١٨) وخرج برمز ٤٢ — بلا clang
ولا lld ولا as. معيار قبول م١+م٢ في rfcs #57 محقَّق (بايت-ببايت ضدّ llvm-mc + ELF يعمل).
أميليا CLEAR (كلّ بت محسوب يدويًّا، ELF سليم، معزول، LE مستقلّ عن المضيف).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@SalehKadah
SalehKadah merged commit 48b7fa3 into dev Jul 30, 2026
18 checks passed
@SalehKadah
SalehKadah deleted the feat/native-backend-m1-encoder branch July 30, 2026 11:19
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