This commit is contained in:
parent
3ae47f93eb
commit
cc2e98ca49
26 changed files with 541 additions and 11 deletions
50
src/linker/WriteExecutable.go
Normal file
50
src/linker/WriteExecutable.go
Normal file
|
@ -0,0 +1,50 @@
|
|||
package linker
|
||||
|
||||
import (
|
||||
"encoding/binary"
|
||||
"os"
|
||||
|
||||
"git.urbach.dev/cli/q/src/arm"
|
||||
"git.urbach.dev/cli/q/src/build"
|
||||
"git.urbach.dev/cli/q/src/core"
|
||||
"git.urbach.dev/cli/q/src/elf"
|
||||
"git.urbach.dev/cli/q/src/x86"
|
||||
)
|
||||
|
||||
// WriteExecutable writes an executable file to disk.
|
||||
func WriteExecutable(b *build.Build, result *core.Environment) error {
|
||||
executable := b.Executable()
|
||||
file, err := os.Create(executable)
|
||||
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
code := []byte{}
|
||||
data := []byte{}
|
||||
|
||||
switch b.Arch {
|
||||
case build.ARM:
|
||||
code = arm.MoveRegisterNumber(code, arm.X8, 93)
|
||||
code = arm.MoveRegisterNumber(code, arm.X0, 0)
|
||||
code = binary.LittleEndian.AppendUint32(code, arm.Syscall())
|
||||
|
||||
case build.X86:
|
||||
code = x86.MoveRegisterNumber(code, x86.R0, 60)
|
||||
code = x86.MoveRegisterNumber(code, x86.R7, 0)
|
||||
code = x86.Syscall(code)
|
||||
}
|
||||
|
||||
switch b.OS {
|
||||
case build.Linux:
|
||||
elf.Write(file, b, code, data)
|
||||
}
|
||||
|
||||
err = file.Close()
|
||||
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return os.Chmod(executable, 0755)
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue