Commit Diff


commit - 0d5c96955f59b6fb70627e1304cf72616bbf6a15
commit + d16df18ad08ef14d266d6f205f87f7783845916f
blob - fa382a2a320de0cf405d98cf848b7da12a465248
blob + 3dd27e9235eed6f88fb86e6f656762362d5c03f7
--- capsule/esoteric/gnu_as_hello_world.gmi
+++ capsule/esoteric/gnu_as_hello_world.gmi
@@ -26,7 +26,8 @@ main:
 А с другой я никогда "руками" (ну точнее с помощью ld) не собирал работоспособные динамически скомпонованные ELF'ы. Оказалось это тот ещё геморрой с указанием crt и интерпретатора-компоновщика на разных платформах: Debian, Alpine и OpenBSD. Плюнул и для кросс-платформенной сборки использую cc (содержимое hello.s приведено в ассемблерном листинге выше):
 
 ```
-$ as -o hello.o hello.s && cc -l c -o hello hello.o
+$ as -o hello.o hello.s
+$ cc -l c -o hello hello.o
 ```
 
 ## Платформозависимый путь (добавлено 2024-11-09)
@@ -59,13 +60,15 @@ _my_start:
 * Debian
 
 ```
-$ as -o hello.o hello.s && ld -e _my_start -dynamic-linker /lib64/ld-linux-x86-64.so.2 -o hello -lc hello.o
+$ as -o hello.o hello.s
+$ ld -e _my_start -dynamic-linker /lib64/ld-linux-x86-64.so.2 -o hello -lc hello.o
 ```
 
 * Alpine
 
 ```
-$ as -o hello.o hello.s && ld -e _my_start -dynamic-linker /lib/ld-musl-x86_64.so.1 -o hello -lc hello.o
+$ as -o hello.o hello.s
+$ ld -e _my_start -dynamic-linker /lib/ld-musl-x86_64.so.1 -o hello -lc hello.o
 ```
 
 ### OpenBSD
@@ -73,7 +76,8 @@ $ as -o hello.o hello.s && ld -e _my_start -dynamic-li
 Сходу не смог полностью избавиться от crt:
 
 ```
-$ as -o hello.o hello.s && ld -e _my_start -dynamic-linker /usr/libexec/ld.so -o hello /usr/lib/crtbegin.o -L/usr/lib -lc hello.o
+$ as -o hello.o hello.s
+$ ld -e _my_start -dynamic-linker /usr/libexec/ld.so -o hello /usr/lib/crtbegin.o -L/usr/lib -lc hello.o
 ```
 
 Без /usr/lib/crtbegin.o результирующий ELF файл hello собирается, но не запускается.
@@ -116,7 +120,8 @@ _my_start:
 А собирается такой листинг (hello.s) в исполняемый ELF hello на OpenBSD следующей командой:
 
 ```
-as -o hello.o hello.s && ld -e _my_start -dynamic-linker /usr/libexec/ld.so -o hello -L/usr/lib -lc hello.o
+$ as -o hello.o hello.s
+$ ld -e _my_start -dynamic-linker /usr/libexec/ld.so -o hello -L/usr/lib -lc hello.o
 ```
 
 По сравнению со сборкой с crtbegin.o ELF "похудел" более чем на два килобайта.
@@ -124,3 +129,7 @@ as -o hello.o hello.s && ld -e _my_start -dynamic-link
 Ссылки по теме:
 => https://astharoshe.net/2020-06-28-Hello_assembler.html Hello assembler!
 => https://nechtan.io/articles/openbsd_assembly/ Assembly language on OpenBSD (amd64 && arm64)
+
+C исходном коде OpenBSD:
+=> https://cvsweb.openbsd.org/cgi-bin/cvsweb/src/lib/csu/os-note-elf.h?rev=1.5 os-note-elf.h
+=> https://cvsweb.openbsd.org/cgi-bin/cvsweb/src/lib/csu/crtbegin.c?rev=1.26 crtbegin.c (включает os-note-elf.h)