Many thanks! Yes, a static binary is perfectly fine at this time :) A couple of follow-up questions, if y'all would please indulge me:
1. Now that I am reminded of this handy new `readelf` tool, I go running it on the new static executable I just generated. ``` $ cat exit.s # repeating for your convenience # https://web.archive.org/web/20120509101207/http://lucifer.phiral.net/openbsdasm.htm .section ".note.openbsd.ident", "a" .p2align 2 .long 0x8 .long 0x4 .long 0x1 .ascii "OpenBSD\0" .long 0x .p2align 2 .section .text .globl _start _start: xorl %eax, %eax pushl %eax # exit status pushl %eax # extra long for C ABI movl $1, %eax # exit syscall int $0x80 $ as exit.s -o exit.o $ ld exit.o -static -o exit $ ./exit $ echo $? 0 # success! $ readelf -l ./exit Elf file type is DYN (Shared object file) ... ``` Why is the file type showing up as a shared object file in spite of it being a statically compiled binary? 2. I tried running the above file in a 64-bit OpenBSD, and got a couple of reasonable looking errors: ``` $ uname -a OpenBSD x.my.domain 5.9 GENERIC#1761 amd64 $ as exit.s -o exit.o exit.s: Assembler messages: exit.s:17: Error: suffix or operands invalid for `push' exit.s:18: Error: suffix or operands invalid for `push' ``` In response I tried some ham-handed modifications, basically replacing the registers with 64-bit variants, and letting the assembler figure out operand-size suffixes. ``` $ cat exit64.s .section ".note.openbsd.ident", "a" .p2align 2 .long 0x8 .long 0x4 .long 0x1 .ascii "OpenBSD\0" .long 0x .p2align 2 .section .text .globl _start _start: xor %rax, %rax push %rax # exit status push %rax # extra long for C ABI mov $1, %rax # exit syscall int $0x80 ``` Could you please point me at why this fails? ``` $ as exit64.s -o exit64.o $ ld exit64.o -static -o exit64 $ ./exit64 zsh: bus error (core dumped) ./exit64 ```

