| 1 | module c |
| 2 | |
| 3 | import os |
| 4 | |
| 5 | const test_vexe = os.quoted_path(@VEXE) |
| 6 | |
| 7 | fn test_freestanding_i386_c_output_uses_int80_and_static_memdup_decl() { |
| 8 | workdir := os.join_path(os.vtmp_dir(), 'v_freestanding_i386_${os.getpid()}') |
| 9 | os.mkdir_all(workdir)! |
| 10 | defer { |
| 11 | os.rmdir_all(workdir) or {} |
| 12 | } |
| 13 | main_v := os.join_path(workdir, 'main.v') |
| 14 | out_c := os.join_path(workdir, 'main.c') |
| 15 | os.write_file(main_v, "module main |
| 16 | |
| 17 | @[export: 'kmain'] |
| 18 | pub fn kmain() { |
| 19 | for {} |
| 20 | } |
| 21 | ")! |
| 22 | cmd := '${test_vexe} -cc gcc -gc none -no-skip-unused -freestanding -no-std -is_o -m32 -o ${os.quoted_path(out_c)} ${os.quoted_path(main_v)}' |
| 23 | res := os.execute(cmd) |
| 24 | assert res.exit_code == 0, '${cmd}\n${res.output}' |
| 25 | generated := os.read_file(out_c)! |
| 26 | assert generated.contains('VV_LOC voidptr builtin__memdup(voidptr src, isize size);') |
| 27 | assert !generated.contains('\nvoidptr builtin__memdup(voidptr src, isize size);\n') |
| 28 | assert generated.contains('int $0x80') |
| 29 | assert !generated.contains('"syscall \\n\\t"') |
| 30 | assert !generated.contains('mov %[arg4], %%r10') |
| 31 | assert !generated.contains('typedef long unsigned int size_t;') |
| 32 | } |
| 33 | |