Improved Windows support

This commit is contained in:
2024-08-13 19:34:54 +02:00
parent 7b1a293cd0
commit e818e5b907
16 changed files with 142 additions and 57 deletions

View File

@ -9,6 +9,9 @@ import (
"git.akyoto.dev/cli/q/src/arch/x64"
"git.akyoto.dev/cli/q/src/config"
"git.akyoto.dev/cli/q/src/os/common"
"git.akyoto.dev/cli/q/src/os/linux/elf"
"git.akyoto.dev/cli/q/src/os/mac/macho"
"git.akyoto.dev/cli/q/src/os/windows/pe"
"git.akyoto.dev/cli/q/src/sizeof"
)
@ -337,8 +340,26 @@ restart:
}
data, dataLabels = a.Data.Finalize()
dataStart := config.BaseAddress + config.CodeOffset + Address(len(code))
dataStart += int32(common.Padding(int64(dataStart), config.Align))
var (
codeOffset Address
align Address
)
switch config.TargetOS {
case "linux":
codeOffset = elf.CodeOffset
align = elf.Align
case "mac":
codeOffset = macho.CodeOffset
align = macho.Align
case "windows":
codeOffset = pe.CodeOffset
align = pe.Align
}
dataStart := Address(config.BaseAddress) + codeOffset + Address(len(code))
dataStart += int32(common.Padding(dataStart, align))
for _, pointer := range dataPointers {
address := dataStart + pointer.Resolve()