What is your Standard Library Doing?
Pure Assembly
Standard C
dynamically linked
statically linked
Haskell
dynamically
static
Rust
dynamic
static
section .data
msg db "hello, world!"
section .text
global _start
_start:
mov rax , 1
mov rdi , 1
mov rsi , msg
mov rdx , 13
syscall
mov rax , 60
mov rdi , 0
syscall
$ strace ./quick
execve("./quick", ["./quick"], [/* 45 vars */]) = 0
write(1, "hello, world!", 13hello, world!) = 13
exit(0) = ?
+++ exited with 0 +++
#include <stdio.h>
int main () {
printf ("hello world" );
}
Standard C Library, dynamically linked
$ gcc -o hello_world hello_world.c
$ strace ./hello_world
execve("./hello_world", ["./hello_world"], [/* 45 vars */]) = 0
brk(NULL) = 0x19d0000
access("/etc/ld.so.nohwcap", F_OK) = -1 ENOENT (No such file or directory)
mmap(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f31308c3000
access("/etc/ld.so.preload", R_OK) = -1 ENOENT (No such file or directory)
open("/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3
fstat(3, {st_mode=S_IFREG|0644, st_size=108213, ...}) = 0
mmap(NULL, 108213, PROT_READ, MAP_PRIVATE, 3, 0) = 0x7f31308a8000
close(3) = 0
access("/etc/ld.so.nohwcap", F_OK) = -1 ENOENT (No such file or directory)
open("/lib/x86_64-linux-gnu/libc.so.6", O_RDONLY|O_CLOEXEC) = 3
read(3, "\177ELF\2\1\1\3\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0P\t\2\0\0\0\0\0"..., 832) = 832
fstat(3, {st_mode=S_IFREG|0755, st_size=1864888, ...}) = 0
mmap(NULL, 3967392, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x7f31302d7000
mprotect(0x7f3130496000, 2097152, PROT_NONE) = 0
mmap(0x7f3130696000, 24576, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x1bf000) = 0x7f3130696000
mmap(0x7f313069c000, 14752, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x7f313069c000
close(3) = 0
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f31308a7000
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f31308a6000
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f31308a5000
arch_prctl(ARCH_SET_FS, 0x7f31308a6700) = 0
mprotect(0x7f3130696000, 16384, PROT_READ) = 0
mprotect(0x600000, 4096, PROT_READ) = 0
mprotect(0x7f31308c5000, 4096, PROT_READ) = 0
munmap(0x7f31308a8000, 108213) = 0
fstat(1, {st_mode=S_IFCHR|0620, st_rdev=makedev(136, 0), ...}) = 0
brk(NULL) = 0x19d0000
brk(0x19f1000) = 0x19f1000
write(1, "hello world", 11hello world) = 11
exit_group(0) = ?
+++ exited with 0 +++
Standard C, statically linked
$ gcc -o hello_world_static hello_world.c -static
$ strace ./hello_world_static
execve("./hello_world_static", ["./hello_world_static"], [/* 45 vars */]) = 0
uname({sysname="Linux", nodename="chris-VirtualBox", ...}) = 0
brk(NULL) = 0x13a6000
brk(0x13a71c0) = 0x13a71c0
arch_prctl(ARCH_SET_FS, 0x13a6880) = 0
readlink("/proc/self/exe", "/home/chris/test/llvm/hello_worl"..., 4096) = 40
brk(0x13c81c0) = 0x13c81c0
brk(0x13c9000) = 0x13c9000
access("/etc/ld.so.nohwcap", F_OK) = -1 ENOENT (No such file or directory)
fstat(1, {st_mode=S_IFCHR|0620, st_rdev=makedev(136, 0), ...}) = 0
write(1, "hello world", 11hello world) = 11
exit_group(0) = ?
+++ exited with 0 +++
$ cat hask_hello_world.hs
main = putStrLn " Hello world"
$ ghc hask_hello_world.hs
$ strace ./hask_hello_world
execve("./hask_hello_world", ["./hask_hello_world"], [/* 45 vars */]) = 0
brk(NULL) = 0x1b1d000
access("/etc/ld.so.nohwcap", F_OK) = -1 ENOENT (No such file or directory)
mmap(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7efc0e546000
access("/etc/ld.so.preload", R_OK) = -1 ENOENT (No such file or directory)
open("/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3
fstat(3, {st_mode=S_IFREG|0644, st_size=108213, ...}) = 0
mmap(NULL, 108213, PROT_READ, MAP_PRIVATE, 3, 0) = 0x7efc0e52b000
close(3) = 0
access("/etc/ld.so.nohwcap", F_OK) = -1 ENOENT (No such file or directory)
open("/usr/lib/x86_64-linux-gnu/libgmp.so.10", O_RDONLY|O_CLOEXEC) = 3
read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\300\223\0\0\0\0\0\0"..., 832) = 832
fstat(3, {st_mode=S_IFREG|0644, st_size=522664, ...}) = 0
mmap(NULL, 2617792, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x7efc0e0a3000
mprotect(0x7efc0e122000, 2093056, PROT_NONE) = 0
mmap(0x7efc0e321000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x7e000) = 0x7efc0e321000
close(3) = 0
access("/etc/ld.so.nohwcap", F_OK) = -1 ENOENT (No such file or directory)
open("/lib/x86_64-linux-gnu/libm.so.6", O_RDONLY|O_CLOEXEC) = 3
read(3, "\177ELF\2\1\1\3\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\0V\0\0\0\0\0\0"..., 832) = 832
fstat(3, {st_mode=S_IFREG|0644, st_size=1088952, ...}) = 0
mmap(NULL, 3178744, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x7efc0dd9a000
mprotect(0x7efc0dea2000, 2093056, PROT_NONE) = 0
mmap(0x7efc0e0a1000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x107000) = 0x7efc0e0a1000
close(3) = 0
access("/etc/ld.so.nohwcap", F_OK) = -1 ENOENT (No such file or directory)
open("/lib/x86_64-linux-gnu/librt.so.1", O_RDONLY|O_CLOEXEC) = 3
read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\0!\0\0\0\0\0\0"..., 832) = 832
fstat(3, {st_mode=S_IFREG|0644, st_size=31712, ...}) = 0
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7efc0e52a000
mmap(NULL, 2128832, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x7efc0db92000
mprotect(0x7efc0db99000, 2093056, PROT_NONE) = 0
mmap(0x7efc0dd98000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x6000) = 0x7efc0dd98000
close(3) = 0
access("/etc/ld.so.nohwcap", F_OK) = -1 ENOENT (No such file or directory)
open("/lib/x86_64-linux-gnu/libdl.so.2", O_RDONLY|O_CLOEXEC) = 3
read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\240\r\0\0\0\0\0\0"..., 832) = 832
fstat(3, {st_mode=S_IFREG|0644, st_size=14608, ...}) = 0
mmap(NULL, 2109680, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x7efc0d98e000
mprotect(0x7efc0d991000, 2093056, PROT_NONE) = 0
mmap(0x7efc0db90000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x2000) = 0x7efc0db90000
close(3) = 0
access("/etc/ld.so.nohwcap", F_OK) = -1 ENOENT (No such file or directory)
open("/usr/lib/x86_64-linux-gnu/libffi.so.6", O_RDONLY|O_CLOEXEC) = 3
read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\360\27\0\0\0\0\0\0"..., 832) = 832
fstat(3, {st_mode=S_IFREG|0644, st_size=31104, ...}) = 0
mmap(NULL, 2127368, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x7efc0d786000
mprotect(0x7efc0d78d000, 2093056, PROT_NONE) = 0
mmap(0x7efc0d98c000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x6000) = 0x7efc0d98c000
close(3) = 0
access("/etc/ld.so.nohwcap", F_OK) = -1 ENOENT (No such file or directory)
open("/lib/x86_64-linux-gnu/libc.so.6", O_RDONLY|O_CLOEXEC) = 3
read(3, "\177ELF\2\1\1\3\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0P\t\2\0\0\0\0\0"..., 832) = 832
fstat(3, {st_mode=S_IFREG|0755, st_size=1864888, ...}) = 0
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7efc0e529000
mmap(NULL, 3967392, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x7efc0d3bd000
mprotect(0x7efc0d57c000, 2097152, PROT_NONE) = 0
mmap(0x7efc0d77c000, 24576, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x1bf000) = 0x7efc0d77c000
mmap(0x7efc0d782000, 14752, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x7efc0d782000
close(3) = 0
access("/etc/ld.so.nohwcap", F_OK) = -1 ENOENT (No such file or directory)
open("/lib/x86_64-linux-gnu/libpthread.so.0", O_RDONLY|O_CLOEXEC) = 3
read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\260`\0\0\0\0\0\0"..., 832) = 832
fstat(3, {st_mode=S_IFREG|0755, st_size=138696, ...}) = 0
mmap(NULL, 2212904, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x7efc0d1a0000
mprotect(0x7efc0d1b8000, 2093056, PROT_NONE) = 0
mmap(0x7efc0d3b7000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x17000) = 0x7efc0d3b7000
mmap(0x7efc0d3b9000, 13352, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x7efc0d3b9000
close(3) = 0
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7efc0e528000
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7efc0e527000
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7efc0e526000
arch_prctl(ARCH_SET_FS, 0x7efc0e527700) = 0
mprotect(0x7efc0d77c000, 16384, PROT_READ) = 0
mprotect(0x7efc0d3b7000, 4096, PROT_READ) = 0
mprotect(0x7efc0d98c000, 4096, PROT_READ) = 0
mprotect(0x7efc0db90000, 4096, PROT_READ) = 0
mprotect(0x7efc0dd98000, 4096, PROT_READ) = 0
mprotect(0x7efc0e0a1000, 4096, PROT_READ) = 0
mprotect(0x7efc0e321000, 4096, PROT_READ) = 0
mprotect(0x6b7000, 4096, PROT_READ) = 0
mprotect(0x7efc0e548000, 4096, PROT_READ) = 0
munmap(0x7efc0e52b000, 108213) = 0
set_tid_address(0x7efc0e5279d0) = 4378
set_robust_list(0x7efc0e5279e0, 24) = 0
rt_sigaction(SIGRTMIN, {0x7efc0d1a5b50, [], SA_RESTORER|SA_SIGINFO, 0x7efc0d1b1390}, NULL, 8) = 0
rt_sigaction(SIGRT_1, {0x7efc0d1a5be0, [], SA_RESTORER|SA_RESTART|SA_SIGINFO, 0x7efc0d1b1390}, NULL, 8) = 0
rt_sigprocmask(SIG_UNBLOCK, [RTMIN RT_1], NULL, 8) = 0
getrlimit(RLIMIT_STACK, {rlim_cur=8192*1024, rlim_max=RLIM64_INFINITY}) = 0
brk(NULL) = 0x1b1d000
brk(0x1b3e000) = 0x1b3e000
open("/usr/lib/locale/locale-archive", O_RDONLY|O_CLOEXEC) = 3
fstat(3, {st_mode=S_IFREG|0644, st_size=2981280, ...}) = 0
mmap(NULL, 2981280, PROT_READ, MAP_PRIVATE, 3, 0) = 0x7efc0cec8000
close(3) = 0
clock_gettime(CLOCK_PROCESS_CPUTIME_ID, {0, 639572}) = 0
sysinfo({uptime=445, loads=[3360, 1472, 192], totalram=2097475584, freeram=1389854720, sharedram=3710976, bufferram=37650432, totalswap=2145382400, freeswap=2145382400, procs=166, totalhigh=0, freehigh=0, mem_unit=1}) = 0
mmap(NULL, 2097152, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7efc0ccc8000
munmap(0x7efc0ccc8000, 229376) = 0
munmap(0x7efc0ce00000, 819200) = 0
timer_create(CLOCK_MONOTONIC, {sigev_signo=SIGVTALRM, sigev_notify=SIGEV_SIGNAL}, [0]) = 0
rt_sigaction(SIGVTALRM, {0x46e0a0, [], SA_RESTORER|SA_RESTART, 0x7efc0d3f24b0}, NULL, 8) = 0
timer_settime(0, 0, {it_interval={0, 10000000}, it_value={0, 10000000}}, NULL) = 0
rt_sigaction(SIGINT, {0x474290, [], SA_RESTORER, 0x7efc0d3f24b0}, {SIG_DFL, [], 0}, 8) = 0
rt_sigaction(SIGINT, NULL, {0x474290, [], SA_RESTORER, 0x7efc0d3f24b0}, 8) = 0
rt_sigaction(SIGINT, {0x474290, [], SA_RESTORER, 0x7efc0d3f24b0}, NULL, 8) = 0
rt_sigaction(SIGPIPE, {0x474220, [], SA_RESTORER, 0x7efc0d3f24b0}, {SIG_DFL, [], 0}, 8) = 0
rt_sigaction(SIGTSTP, {0x4742b0, [], SA_RESTORER, 0x7efc0d3f24b0}, NULL, 8) = 0
clock_gettime(CLOCK_PROCESS_CPUTIME_ID, {0, 700330}) = 0
rt_sigprocmask(SIG_BLOCK, [INT], [], 8) = 0
rt_sigaction(SIGINT, {0x474330, [], SA_RESTORER|SA_RESETHAND|SA_SIGINFO, 0x7efc0d3f24b0}, NULL, 8) = 0
rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0
ioctl(1, TCGETS, {B38400 opost isig icanon echo ...}) = 0
select(2, [], [1], NULL, {0, 0}) = 1 (out [1], left {0, 0})
write(1, "Hello world\n", 12Hello world
) = 12
clock_gettime(CLOCK_PROCESS_CPUTIME_ID, {0, 761556}) = 0
rt_sigprocmask(SIG_BLOCK, [INT], [], 8) = 0
clock_gettime(CLOCK_PROCESS_CPUTIME_ID, {0, 769120}) = 0
rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0
timer_settime(0, 0, {it_interval={0, 0}, it_value={0, 0}}, NULL) = 0
rt_sigaction(SIGVTALRM, {SIG_IGN, [], SA_RESTORER|SA_INTERRUPT|SA_NODEFER|SA_RESETHAND, 0x7efc0d3f24b0}, {0x46e0a0, [], SA_RESTORER|SA_RESTART, 0x7efc0d3f24b0}, 8) = 0
timer_delete(0) = 0
rt_sigprocmask(SIG_BLOCK, [TTOU], [], 8) = 0
rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0
rt_sigaction(SIGINT, {SIG_DFL, [], SA_RESTORER, 0x7efc0d3f24b0}, NULL, 8) = 0
rt_sigaction(SIGPIPE, {SIG_DFL, [], SA_RESTORER, 0x7efc0d3f24b0}, NULL, 8) = 0
rt_sigaction(SIGTSTP, {SIG_DFL, [], SA_RESTORER, 0x7efc0d3f24b0}, NULL, 8) = 0
clock_gettime(CLOCK_PROCESS_CPUTIME_ID, {0, 833348}) = 0
exit_group(0) = ?
+++ exited with 0 +++
ghc -optl-static -optl-pthread hask_hello_world.hs -o hask_hello_world_static
$ strace ./hask_hello_world_static
execve("./hask_hello_world_static", ["./hask_hello_world_static"], [/* 45 vars */]) = 0
uname({sysname="Linux", nodename="chris-VirtualBox", ...}) = 0
brk(NULL) = 0x20a7000
brk(0x20a8200) = 0x20a8200
arch_prctl(ARCH_SET_FS, 0x20a78c0) = 0
set_tid_address(0x20a7b90) = 8799
set_robust_list(0x20a7ba0, 24) = 0
rt_sigaction(SIGRTMIN, {0x48ecb0, [], SA_RESTORER|SA_SIGINFO, 0x493ca0}, NULL, 8) = 0
rt_sigaction(SIGRT_1, {0x48ed40, [], SA_RESTORER|SA_RESTART|SA_SIGINFO, 0x493ca0}, NULL, 8) = 0
rt_sigprocmask(SIG_UNBLOCK, [RTMIN RT_1], NULL, 8) = 0
getrlimit(RLIMIT_STACK, {rlim_cur=8192*1024, rlim_max=RLIM64_INFINITY}) = 0
readlink("/proc/self/exe", "/home/chris/test/llvm/hask_hello"..., 4096) = 45
brk(0x20c9200) = 0x20c9200
brk(0x20ca000) = 0x20ca000
access("/etc/ld.so.nohwcap", F_OK) = -1 ENOENT (No such file or directory)
open("/usr/lib/locale/locale-archive", O_RDONLY|O_CLOEXEC) = 3
fstat(3, {st_mode=S_IFREG|0644, st_size=2981280, ...}) = 0
mmap(NULL, 2981280, PROT_READ, MAP_PRIVATE, 3, 0) = 0x7f5a5818a000
close(3) = 0
clock_gettime(CLOCK_PROCESS_CPUTIME_ID, {0, 201710}) = 0
clock_gettime(CLOCK_MONOTONIC, {2729, 481636141}) = 0
sysinfo({uptime=2730, loads=[0, 0, 0], totalram=2097475584, freeram=507777024, sharedram=18710528, bufferram=47132672, totalswap=2145382400, freeswap=2145382400, procs=214, totalhigh=0, freehigh=0, mem_unit=1}) = 0
mmap(NULL, 2097152, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f5a57f8a000
munmap(0x7f5a57f8a000, 483328) = 0
munmap(0x7f5a58100000, 565248) = 0
timer_create(CLOCK_MONOTONIC, {sigev_signo=SIGVTALRM, sigev_notify=SIGEV_SIGNAL}, [0]) = 0
rt_sigaction(SIGVTALRM, {0x46c470, [], SA_RESTORER|SA_RESTART, 0x493ca0}, NULL, 8) = 0
timer_settime(0, 0, {it_interval={0, 10000000}, it_value={0, 10000000}}, NULL) = 0
rt_sigaction(SIGINT, {0x472660, [], SA_RESTORER, 0x493ca0}, {SIG_DFL, [], 0}, 8) = 0
rt_sigaction(SIGINT, NULL, {0x472660, [], SA_RESTORER, 0x493ca0}, 8) = 0
rt_sigaction(SIGINT, {0x472660, [], SA_RESTORER, 0x493ca0}, NULL, 8) = 0
rt_sigaction(SIGPIPE, {0x4725f0, [], SA_RESTORER, 0x493ca0}, {SIG_DFL, [], 0}, 8) = 0
rt_sigaction(SIGTSTP, {0x472680, [], SA_RESTORER, 0x493ca0}, NULL, 8) = 0
clock_gettime(CLOCK_PROCESS_CPUTIME_ID, {0, 256410}) = 0
clock_gettime(CLOCK_MONOTONIC, {2729, 482203169}) = 0
rt_sigprocmask(SIG_BLOCK, [INT], [], 8) = 0
rt_sigaction(SIGINT, {0x472700, [], SA_RESTORER|SA_RESETHAND|SA_SIGINFO, 0x493ca0}, NULL, 8) = 0
rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0
ioctl(1, TCGETS, {B38400 opost isig icanon echo ...}) = 0
select(2, [], [1], NULL, {0, 0}) = 1 (out [1], left {0, 0})
write(1, "Hello world\n", 12Hello world
) = 12
clock_gettime(CLOCK_PROCESS_CPUTIME_ID, {0, 316080}) = 0
clock_gettime(CLOCK_MONOTONIC, {2729, 482559025}) = 0
rt_sigprocmask(SIG_BLOCK, [INT], [], 8) = 0
clock_gettime(CLOCK_PROCESS_CPUTIME_ID, {0, 335864}) = 0
clock_gettime(CLOCK_MONOTONIC, {2729, 482670696}) = 0
rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0
timer_settime(0, 0, {it_interval={0, 0}, it_value={0, 0}}, NULL) = 0
rt_sigaction(SIGVTALRM, {SIG_IGN, [], SA_RESTORER|SA_INTERRUPT|SA_NODEFER|SA_RESETHAND, 0x493ca0}, {0x46c470, [], SA_RESTORER|SA_RESTART, 0x493ca0}, 8) = 0
timer_delete(0) = 0
rt_sigprocmask(SIG_BLOCK, [TTOU], [], 8) = 0
rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0
rt_sigaction(SIGINT, {SIG_DFL, [], SA_RESTORER, 0x493ca0}, NULL, 8) = 0
rt_sigaction(SIGPIPE, {SIG_DFL, [], SA_RESTORER, 0x493ca0}, NULL, 8) = 0
rt_sigaction(SIGTSTP, {SIG_DFL, [], SA_RESTORER, 0x493ca0}, NULL, 8) = 0
clock_gettime(CLOCK_PROCESS_CPUTIME_ID, {0, 433936}) = 0
clock_gettime(CLOCK_MONOTONIC, {2729, 482926876}) = 0
exit_group(0) = ?
+++ exited with 0 +++
$ cat rust_hello_world.rs
fn main ( ) {
println ! ( "Hello World!" ) ;
}
$ strace ./rust_hello_world
execve(" ./rust_hello_world" , [" ./rust_hello_world" ], [/* 45 vars * /]) = 0
brk(NULL) = 0x55c536ce8000
access(" /etc/ld.so.nohwcap" , F_OK) = -1 ENOENT (No such file or directory)
mmap(NULL, 8192, PROT_READ| PROT_WRITE, MAP_PRIVATE| MAP_ANONYMOUS, -1, 0) = 0x7f202089c000
access(" /etc/ld.so.preload" , R_OK) = -1 ENOENT (No such file or directory)
open(" /etc/ld.so.cache" , O_RDONLY| O_CLOEXEC) = 3
fstat(3, {st_mode=S_IFREG| 0644, st_size=108213, ...}) = 0
mmap(NULL, 108213, PROT_READ, MAP_PRIVATE, 3, 0) = 0x7f2020881000
close(3) = 0
access(" /etc/ld.so.nohwcap" , F_OK) = -1 ENOENT (No such file or directory)
open(" /lib/x86_64-linux-gnu/libdl.so.2" , O_RDONLY| O_CLOEXEC) = 3
read(3, " \177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\240\r\0\0\0\0\0\0" ..., 832) = 832
fstat(3, {st_mode=S_IFREG| 0644, st_size=14608, ...}) = 0
mmap(NULL, 2109680, PROT_READ| PROT_EXEC, MAP_PRIVATE| MAP_DENYWRITE, 3, 0) = 0x7f2020475000
mprotect(0x7f2020478000, 2093056, PROT_NONE) = 0
mmap(0x7f2020677000, 8192, PROT_READ| PROT_WRITE, MAP_PRIVATE| MAP_FIXED| MAP_DENYWRITE, 3, 0x2000) = 0x7f2020677000
close(3) = 0
access(" /etc/ld.so.nohwcap" , F_OK) = -1 ENOENT (No such file or directory)
open(" /lib/x86_64-linux-gnu/librt.so.1" , O_RDONLY| O_CLOEXEC) = 3
read(3, " \177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\0!\0\0\0\0\0\0" ..., 832) = 832
fstat(3, {st_mode=S_IFREG| 0644, st_size=31712, ...}) = 0
mmap(NULL, 2128832, PROT_READ| PROT_EXEC, MAP_PRIVATE| MAP_DENYWRITE, 3, 0) = 0x7f202026d000
mprotect(0x7f2020274000, 2093056, PROT_NONE) = 0
mmap(0x7f2020473000, 8192, PROT_READ| PROT_WRITE, MAP_PRIVATE| MAP_FIXED| MAP_DENYWRITE, 3, 0x6000) = 0x7f2020473000
close(3) = 0
access(" /etc/ld.so.nohwcap" , F_OK) = -1 ENOENT (No such file or directory)
open(" /lib/x86_64-linux-gnu/libpthread.so.0" , O_RDONLY| O_CLOEXEC) = 3
read(3, " \177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\260` \0\0\0\0\0\0 " ..., 832) = 832
fstat(3, {st_mode=S_IFREG|0755, st_size=138696, ...}) = 0
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f2020880000
mmap(NULL, 2212904, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x7f2020050000
mprotect(0x7f2020068000, 2093056, PROT_NONE) = 0
mmap(0x7f2020267000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x17000) = 0x7f2020267000
mmap(0x7f2020269000, 13352, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x7f2020269000
close(3) = 0
access(" /etc/ld.so.nohwcap" , F_OK) = -1 ENOENT (No such file or directory)
open(" /lib/x86_64-linux-gnu/libgcc_s.so.1" , O_RDONLY|O_CLOEXEC) = 3
read(3, " \1 77ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0 > \0\1\0\0\0 p* \0\0\0\0\0\0 " ..., 832) = 832
fstat(3, {st_mode=S_IFREG|0644, st_size=89696, ...}) = 0
mmap(NULL, 2185488, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x7f201fe3a000
mprotect(0x7f201fe50000, 2093056, PROT_NONE) = 0
mmap(0x7f202004f000, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x15000) = 0x7f202004f000
close(3) = 0
access(" /etc/ld.so.nohwcap" , F_OK) = -1 ENOENT (No such file or directory)
open(" /lib/x86_64-linux-gnu/libc.so.6" , O_RDONLY|O_CLOEXEC) = 3
read(3, " \1 77ELF\2\1\1\3\0\0\0\0\0\0\0\0\3\0 > \0\1\0\0\0 P\t\2\0\0\0\0\0 " ..., 832) = 832
fstat(3, {st_mode=S_IFREG|0755, st_size=1864888, ...}) = 0
mmap(NULL, 3967392, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x7f201fa71000
mprotect(0x7f201fc30000, 2097152, PROT_NONE) = 0
mmap(0x7f201fe30000, 24576, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x1bf000) = 0x7f201fe30000
mmap(0x7f201fe36000, 14752, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x7f201fe36000
close(3) = 0
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f202087f000
mmap(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f202087d000
arch_prctl(ARCH_SET_FS, 0x7f202087d800) = 0
mprotect(0x7f201fe30000, 16384, PROT_READ) = 0
mprotect(0x7f2020267000, 4096, PROT_READ) = 0
mprotect(0x7f2020473000, 4096, PROT_READ) = 0
mprotect(0x7f2020677000, 4096, PROT_READ) = 0
mprotect(0x55c535ab6000, 16384, PROT_READ) = 0
mprotect(0x7f202089e000, 4096, PROT_READ) = 0
munmap(0x7f2020881000, 108213) = 0
set_tid_address(0x7f202087dad0) = 5787
set_robust_list(0x7f202087dae0, 24) = 0
rt_sigaction(SIGRTMIN, {0x7f2020055b50, [], SA_RESTORER|SA_SIGINFO, 0x7f2020061390}, NULL, 8) = 0
rt_sigaction(SIGRT_1, {0x7f2020055be0, [], SA_RESTORER|SA_RESTART|SA_SIGINFO, 0x7f2020061390}, NULL, 8) = 0
rt_sigprocmask(SIG_UNBLOCK, [RTMIN RT_1], NULL, 8) = 0
getrlimit(RLIMIT_STACK, {rlim_cur=8192*1024, rlim_max=RLIM64_INFINITY}) = 0
readlink(" /etc/malloc.conf" , 0x7ffc2f1ee1b0, 4096) = -1 ENOENT (No such file or directory)
brk(NULL) = 0x55c536ce8000
mmap(NULL, 2097152, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f201f871000
munmap(0x7f201f871000, 2097152) = 0
mmap(NULL, 4190208, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f201f672000
munmap(0x7f201f672000, 1630208) = 0
munmap(0x7f201fa00000, 462848) = 0
open(" /sys/devices/system/cpu/online" , O_RDONLY|O_CLOEXEC) = 3
read(3, " 0\n " , 8192) = 2
close(3) = 0
rt_sigaction(SIGPIPE, {SIG_IGN, [PIPE], SA_RESTORER|SA_RESTART, 0x7f201faa64b0}, {SIG_DFL, [], 0}, 8) = 0
mmap(NULL, 2097152, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f201f600000
open(" /proc/self/maps" , O_RDONLY|O_CLOEXEC) = 3
getrlimit(RLIMIT_STACK, {rlim_cur=8192*1024, rlim_max=RLIM64_INFINITY}) = 0
fstat(3, {st_mode=S_IFREG|0444, st_size=0, ...}) = 0
read(3, " 55c53586c000-55c5358b7000 r-xp 0" ..., 1024) = 1024
read(3, " 7f201fe50000-7f202004f000 ---p 0" ..., 1024) = 1024
read(3, " 4-linux-gnu/librt-2.23.so\n 7f2020" ..., 1024) = 1024
read(3, " 00 00:00 0 \n 7ffc2f1d0000-7ffc2f1" ..., 1024) = 337
close(3) = 0
sched_getaffinity(5787, 32, [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]) = 32
mmap(0x7ffc2e9f1000, 4096, PROT_NONE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x7ffc2e9f1000
rt_sigaction(SIGSEGV, {0x55c53587c450, [], SA_RESTORER|SA_STACK|SA_SIGINFO, 0x7f2020061390}, NULL, 8) = 0
rt_sigaction(SIGBUS, {0x55c53587c450, [], SA_RESTORER|SA_STACK|SA_SIGINFO, 0x7f2020061390}, NULL, 8) = 0
sigaltstack(NULL, {ss_sp=NULL, ss_flags=SS_DISABLE, ss_size=0}) = 0
mmap(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f202089a000
sigaltstack({ss_sp=0x7f202089a000, ss_flags=0, ss_size=8192}, NULL) = 0
write(1, " Hello World! \n " , 13Hello World!
) = 13
sigaltstack({ss_sp=NULL, ss_flags=SS_DISABLE, ss_size=8192}, NULL) = 0
munmap(0x7f202089a000, 8192) = 0
exit_group(0) = ?
+++ exited with 0 +++
$ rustup target add x86_64-unknown-linux-musl
$ rustc --target=x86_64-unknown-linux-musl rust_hello_world.rs
$ strace ./rust_hello_world_static
execve("./rust_hello_world_static", ["./rust_hello_world_static"], [/* 45 vars */]) = 0
mmap(NULL, 592, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7fb6e13c5000
arch_prctl(ARCH_SET_FS, 0x7fb6e13c5100) = 0
set_tid_address(0x7fb6e13c5138) = 17939
readlink("/etc/malloc.conf", 0x7ffcdc11f400, 4096) = -1 ENOENT (No such file or directory)
brk(NULL) = 0x190d000
mmap(NULL, 2097152, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7fb6e11c5000
munmap(0x7fb6e11c5000, 2097152) = 0
mmap(NULL, 4190208, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7fb6e0fc6000
munmap(0x7fb6e0fc6000, 237568) = 0
munmap(0x7fb6e1200000, 1855488) = 0
sched_getaffinity(0, 128, [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 426486, 0, 0, a000, 7fb6e1000000, 400320, 0, 0, 426486, 0, 2, 0, 434ef1, 7fb600000000, 8dd222dbc0647901, ...]) = 64
mmap(NULL, 2097152, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7fb6e0e00000
rt_sigaction(SIGPIPE, {SIG_IGN, [], SA_RESTORER|SA_RESTART, 0x43c8d4}, {SIG_DFL, [], 0}, 8) = 0
rt_sigprocmask(SIG_UNBLOCK, [RT_1 RT_2], NULL, 8) = 0
rt_sigaction(SIGSEGV, {0x409b50, [], SA_RESTORER|SA_STACK|SA_SIGINFO, 0x43c8d4}, NULL, 8) = 0
rt_sigaction(SIGBUS, {0x409b50, [], SA_RESTORER|SA_STACK|SA_SIGINFO, 0x43c8d4}, NULL, 8) = 0
sigaltstack(NULL, {ss_sp=NULL, ss_flags=SS_DISABLE, ss_size=0}) = 0
mmap(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7fb6e13c3000
sigaltstack({ss_sp=0x7fb6e13c3000, ss_flags=0, ss_size=8192}, NULL) = 0
write(1, "Hello World!\n", 13Hello World!
) = 13
sigaltstack({ss_sp=NULL, ss_flags=SS_DISABLE, ss_size=8192}, NULL) = 0
munmap(0x7fb6e13c3000, 8192) = 0
exit_group(0) = ?
+++ exited with 0 +++