diff --git a/compiler/syscall.go b/compiler/syscall.go index a4b6e4ce..0c5f1246 100644 --- a/compiler/syscall.go +++ b/compiler/syscall.go @@ -16,20 +16,7 @@ import ( func (b *builder) createRawSyscall(call *ssa.CallCommon) (llvm.Value, error) { num := b.getValue(call.Args[0]) switch { - case b.GOARCH == "amd64": - if b.GOOS == "darwin" { - // Darwin adds this magic number to system call numbers: - // - // > Syscall classes for 64-bit system call entry. - // > For 64-bit users, the 32-bit syscall number is partitioned - // > with the high-order bits representing the class and low-order - // > bits being the syscall number within that class. - // > The high-order 32-bits of the 64-bit syscall number are unused. - // > All system classes enter the kernel via the syscall instruction. - // - // Source: https://opensource.apple.com/source/xnu/xnu-792.13.8/osfmk/mach/i386/syscall_sw.h - num = b.CreateOr(num, llvm.ConstInt(b.uintptrType, 0x2000000, false), "") - } + case b.GOARCH == "amd64" && b.GOOS == "linux": // Sources: // https://stackoverflow.com/a/2538212 // https://en.wikibooks.org/wiki/X86_Assembly/Interfacing_with_Linux#syscall @@ -179,26 +166,6 @@ func (b *builder) createSyscall(call *ssa.CallCommon) (llvm.Value, error) { retval = b.CreateInsertValue(retval, zero, 1, "") retval = b.CreateInsertValue(retval, errResult, 2, "") return retval, nil - case "darwin": - syscallResult, err := b.createRawSyscall(call) - if err != nil { - return syscallResult, err - } - // Return values: r0, r1 uintptr, err Errno - // Pseudocode: - // var err uintptr - // if syscallResult != 0 { - // err = syscallResult - // } - // return syscallResult, 0, err - zero := llvm.ConstInt(b.uintptrType, 0, false) - hasError := b.CreateICmp(llvm.IntNE, syscallResult, llvm.ConstInt(b.uintptrType, 0, false), "") - errResult := b.CreateSelect(hasError, syscallResult, zero, "syscallError") - retval := llvm.Undef(b.ctx.StructType([]llvm.Type{b.uintptrType, b.uintptrType, b.uintptrType}, false)) - retval = b.CreateInsertValue(retval, syscallResult, 0, "") - retval = b.CreateInsertValue(retval, zero, 1, "") - retval = b.CreateInsertValue(retval, errResult, 2, "") - return retval, nil case "windows": // On Windows, syscall.Syscall* is basically just a function pointer // call. This is complicated in gc because of stack switching and the