1
0
mirror of https://github.com/vlang/v.git synced 2023-08-10 21:13:21 +03:00

show an info message if a C compiler is not installed

This commit is contained in:
Alexander Medvednikov
2019-11-28 16:49:35 +03:00
parent e31d892598
commit 9e19472c33
6 changed files with 87 additions and 41 deletions

View File

@@ -15,6 +15,7 @@ mut:
file_size_pos i64
main_fn_addr i64
code_start_pos i64 // location of the start of the assembly instructions
fn_addr map[string]i64
//string_addr map[string]i64
}
@@ -44,6 +45,10 @@ pub fn new_gen(out_name string) &Gen {
}
}
pub fn (g &Gen) pos() i64 {
return g.buf.len
}
fn (g mut Gen) write8(n int) {
// write 1 byte
@@ -155,10 +160,13 @@ fn (g mut Gen) mov64(reg Register, val i64) {
g.write64(val)
}
fn (g mut Gen) call(val int) {
//println('call val=$val')
fn (g mut Gen) call(addr int) {
//rel := g.abs_to_rel_addr(addr)
rel := 0xffffffff - int(abs(addr - g.buf.len))-1
println('call addr=$addr rel_addr=$addr pos=$g.buf.len')
g.write8(0xe8)
g.write32(val)
g.write32(addr)
}
fn (g mut Gen) syscall() {
@@ -228,4 +236,19 @@ fn (g mut Gen) mov(reg Register, val int) {
g.write32(val)
}
pub fn (g mut Gen) register_function_address(name string) {
addr := g.pos()
println('reg fn addr $name $addr')
g.fn_addr[name] = addr
}
pub fn (g mut Gen) call_fn(name string) {
if !name.contains('__') {
return
}
addr := g.fn_addr[name]
g.call(int(addr))
println('call $name $addr')
}