Keeping all assembly files?

How do I tell ocamlopt to keep the camlstartup assembly file it places in /tmp rather than deleting it? -S does not seem to work, as I get:

test@ubuntu:~/coq-debian-build-scripts/ocaml-stuff/debian-sources/ocaml-4.11.1/testsuite/_ocamltest/tests/instrumented-runtime/main/ocamlopt.byte$ /home/test/coq-debian-build-scripts/ocaml-stuff/debian-sources/ocaml-4.11.1/runtime/ocamlrun /home/test/coq-debian-build-scripts/ocaml-stuff/debian-sources/ocaml-4.11.1/ocamlopt  -I /home/test/coq-debian-build-scripts/ocaml-stuff/debian-sources/ocaml-4.11.1/runtime  -nostdlib -I /home/test/coq-debian-build-scripts/ocaml-stuff/debian-sources/ocaml-4.11.1/stdlib  -runtime-variant=i     -o /home/test/coq-debian-build-scripts/ocaml-stuff/debian-sources/ocaml-4.11.1/testsuite/_ocamltest/tests/instrumented-runtime/main/ocamlopt.byte/main.opt -verbose main.ml -S
+ i686-linux-gnu-as  -o 'main.o' 'main.s'
+ i686-linux-gnu-as  -o '/tmp/camlstartupd25cd5.o' '/tmp/camlstartupfdecb2.s'
+ i686-linux-gnu-gcc -Wl,-z,notext -std=gnu99 -O2 -fno-strict-aliasing -fwrapv -fno-builtin-memcmp -Wall -Wdeclaration-after-statement -fexcess-precision=standard -fno-tree-vrp -ffunction-sections -D_FILE_OFFSET_BITS=64 -D_REENTRANT -DCAML_NAME_SPACE  -Wl,-E -o '/home/test/coq-debian-build-scripts/ocaml-stuff/debian-sources/ocaml-4.11.1/testsuite/_ocamltest/tests/instrumented-runtime/main/ocamlopt.byte/main.opt'  '-L/home/test/coq-debian-build-scripts/ocaml-stuff/debian-sources/ocaml-4.11.1/runtime' '-L/home/test/coq-debian-build-scripts/ocaml-stuff/debian-sources/ocaml-4.11.1/stdlib'  '/tmp/camlstartupd25cd5.o' '/home/test/coq-debian-build-scripts/ocaml-stuff/debian-sources/ocaml-4.11.1/stdlib/std_exit.o' 'main.o' '/home/test/coq-debian-build-scripts/ocaml-stuff/debian-sources/ocaml-4.11.1/stdlib/stdlib.a' '/home/test/coq-debian-build-scripts/ocaml-stuff/debian-sources/ocaml-4.11.1/runtime/libasmruni.a' -lm -ldl 
/home/test/coq-debian-build-scripts/ocaml-stuff/debian-sources/ocaml-4.11.1/runtime/libasmruni.a(eventlog_ni.o): In function `time_counter':
/home/test/coq-debian-build-scripts/ocaml-stuff/debian-sources/ocaml-4.11.1/runtime/eventlog.c:113: undefined reference to `clock_gettime'
collect2: ld returned 1 exit status
File "caml_startup", line 1:
Error: Error during linking (exit code 1)
test@ubuntu:~/coq-debian-build-scripts/ocaml-stuff/debian-sources/ocaml-4.11.1/testsuite/_ocamltest/tests/instrumented-runtime/main/ocamlopt.byte$ ls /tmp/camlstartupfdecb2.s
ls: cannot access /tmp/camlstartupfdecb2.s: No such file or directory
test@ubuntu:~/coq-debian-build-scripts/ocaml-stuff/debian-sources/ocaml-4.11.1/testsuite/_ocamltest/tests/instrumented-runtime/main/ocamlopt.byte$ 

(Context is ocamlopt is incapable of building files using `clock_gettime` with glibc older than 2.17 · Issue #10329 · ocaml/ocaml · GitHub)

I think you can use ocamlopt -dstartup .... It will output a file ending in startup.s containing the startup code.

Cheers,
Nicolas

1 Like