aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNicholas <nbnoll@eml.cc>2021-11-17 10:18:54 -0800
committerNicholas <nbnoll@eml.cc>2021-11-17 10:19:11 -0800
commitb27936eb5a877fada8e6edf939e1acb5da535712 (patch)
tree024c1b3d9bc727e94665cf3993cc5006772ad85c
parentab400c0be5577cab2a66d242183887ebbd61717f (diff)
fix: mkfile names
-rw-r--r--Makefile12
-rw-r--r--include/u.h2
-rw-r--r--rules.mk18
-rw-r--r--src/base/rules.mk2
-rw-r--r--src/cmd/dwm/rules.mk2
-rw-r--r--src/cmd/menu/rules.mk4
-rw-r--r--src/cmd/term/rules.mk2
-rw-r--r--src/cmd/wm/rules.mk4
-rw-r--r--src/libbio/rules.mk2
-rw-r--r--src/libmath/rules.mk2
-rw-r--r--sys.mk14
-rw-r--r--sys/linux/amd64/bits.h18
-rw-r--r--sys/linux/amd64/internal/syscall.h452
-rw-r--r--sys/src/internal.h3
-rw-r--r--sys/src/open.c6
15 files changed, 37 insertions, 506 deletions
diff --git a/Makefile b/Makefile
index f306afe..1a48db3 100644
--- a/Makefile
+++ b/Makefile
@@ -24,24 +24,24 @@ TST_DIR := test
# C runtime library
CINIT := $(LIB_DIR)/crt/crt1.o $(LIB_DIR)/crt/x86_64/crti.o `gcc --print-file-name=crtbeginS.o`
-CFINI := `gcc --print-file-name=crtendS.o` $(LIB_DIR)/crt/x86_64/crtn.o
+CFINI := `gcc --print-file-name=crtendS.o` $(LIB_DIR)/crt/x86_64/crtn.o
# Flags, Libraries and Includes
CFLAGS := -g -march=native -fno-strict-aliasing -fwrapv -fms-extensions -Wno-microsoft-anon-tag
STATIC := -nodefaultlibs -nostartfiles -nostdinc -static
AFLAGS := -f elf64
-INCS := -I $(SYS_DIR)/$(OS)/$(ARCH) -I $(INC_DIR) -isystem $(INC_DIR)/vendor/libc
+INCS := -I $(SYS_DIR)/$(OS)/$(ARCH) -I $(SYS_DIR)/$(OS)/port -I $(INC_DIR) -isystem $(INC_DIR)/vendor/libc
ELIBS := -L$(LIB_DIR) -lc
# Named generic rules (must be evaluated lazily)
COMPILE = @echo "CC "$(@:$(OBJ_DIR)/%=%);\
- $(CC) -MD $(CFLAGS) $(TCFLAGS) $(INCS) $(TCINCS) -o $@ -c $<
+ $(CC) -MD $(CFLAGS) $(TCFLAGS) $(INCS) $(TINCS) -o $@ -c $<
LINK = @echo "LD "$(@:$(OBJ_DIR)/%=%);\
- $(CC) -MD $(CFLAGS) $(STATIC) $(TCFLAGS) -o $@ $(CINIT) $< $(CFINI) $(TCLIBS) $(ELIBS)
+ $(CC) -MD $(CFLAGS) $(STATIC) $(TCFLAGS) -o $@ $(CINIT) $< $(CFINI) $(TLIBS) $(ELIBS)
COMPLINK = @echo "CC "$(@:$(OBJ_DIR)/%=%);\
- $(CC) -MD $(CFLAGS) $(STATIC) $(TCFLAGS) $(INCS) $(TCINCS) -o $@ $(CINIT) $^ $(CFINI) $(TCLIBS) $(ELIBS)
+ $(CC) -MD $(CFLAGS) $(STATIC) $(TCFLAGS) $(INCS) $(TINCS) -o $@ $(CINIT) $^ $(CFINI) $(TLIBS) $(ELIBS)
ASSEMBLE = @echo "AS "$(@:$(OBJ_DIR)/%=%);\
- $(AS) $(AFLAGS) $(TCFLAGS) -o $@ $<
+ $(AS) $(AFLAGS) $(TCFLAGS) -o $@ $<
ARCHIVE = @echo "AR "$(@:$(OBJ_DIR)/%=%);\
$(AR) crs $@ $^
diff --git a/include/u.h b/include/u.h
index cf5f53c..87d5080 100644
--- a/include/u.h
+++ b/include/u.h
@@ -1,6 +1,6 @@
#pragma once
-#include <bits.h>
+#include <arch/bits.h>
// ------------------------------------------------------------------------
// types
diff --git a/rules.mk b/rules.mk
index d30460a..ad69611 100644
--- a/rules.mk
+++ b/rules.mk
@@ -39,23 +39,7 @@ include $(DIR)/rules.mk
$(LINK)
# explicit system layer
-SYS := $(OBJ_DIR)/sys/sys.a
-
-SYS_SRCS := $(sort $(wildcard $(SYS_DIR)/src/*.c))
-
-SYS_OBJS := $(filter %.o, $(SYS_SRCS:.c=.o))
-SYS_OBJS := $(patsubst $(SYS_DIR)/src/%, $(OBJ_DIR)/$(SYS_DIR)/%, $(SYS_OBJS))
-
-# rules for kernel interface
-$(OBJ_DIR)/$(SYS_DIR)/%.o: $(SYS_DIR)/src/%.c
- $(COMPILE)
-
-$(OBJ_DIR)/$(SYS_DIR)/%.o: $(SYS_DIR)/src/%.s
- $(ASSEMBLE)
-
-
-$(SYS): $(SYS_OBJS)
- $(ARCHIVE)
+include sys.mk
# rules for userland
$(OBJ_DIR)/%.o: $(SRC_DIR)/%.c
diff --git a/src/base/rules.mk b/src/base/rules.mk
index ef93f5c..9f25d37 100644
--- a/src/base/rules.mk
+++ b/src/base/rules.mk
@@ -30,7 +30,7 @@ include share/paths.mk
$(LIBS_$(d)): $(OBJS_$(d))
$(ARCHIVE)
-$(TEST_$(d)): TCLIBS = $(LIBS_$(d))
+$(TEST_$(d)): TLIBS = $(LIBS_$(d))
$(TEST_$(d)): $(UNIT_$(d)) $(LIBS_$(d))
$(LINK)
diff --git a/src/cmd/dwm/rules.mk b/src/cmd/dwm/rules.mk
index a840217..ddf5dd8 100644
--- a/src/cmd/dwm/rules.mk
+++ b/src/cmd/dwm/rules.mk
@@ -18,7 +18,7 @@ include share/dynamic.mk
$(BINS_$(d)): TCFLAGS=\
`$(PKG) --cflags fontconfig`\
`$(PKG) --cflags freetype2`
-$(BINS_$(d)): TCLIBS=\
+$(BINS_$(d)): TLIBS=\
`$(PKG) --libs fontconfig`\
`$(PKG) --libs freetype2`\
-lX11 -lXinerama -lXft -lX11-xcb -lxcb -lxcb-res
diff --git a/src/cmd/menu/rules.mk b/src/cmd/menu/rules.mk
index f9b59aa..9f2da6e 100644
--- a/src/cmd/menu/rules.mk
+++ b/src/cmd/menu/rules.mk
@@ -15,9 +15,9 @@ include share/paths.mk
# Local rules
include share/dynamic.mk
-$(BINS_$(d)): TCLIBS=\
+$(BINS_$(d)): TLIBS=\
-lfontconfig -lXft -lXinerama -lX11
-$(BINS_$(d)): TCINCS=\
+$(BINS_$(d)): TINCS=\
`$(PKG) --cflags fontconfig`\
`$(PKG) --cflags freetype2`
diff --git a/src/cmd/term/rules.mk b/src/cmd/term/rules.mk
index 76701ec..9bf619c 100644
--- a/src/cmd/term/rules.mk
+++ b/src/cmd/term/rules.mk
@@ -15,7 +15,7 @@ $(BINS_$(d)): TCFLAGS=\
`$(PKG) --cflags fontconfig`\
`$(PKG) --cflags freetype2`
-$(BINS_$(d)): TCLIBS=\
+$(BINS_$(d)): TLIBS=\
`$(PKG) --libs fontconfig`\
`$(PKG) --libs freetype2`\
-lm -lrt -lX11 -lutil -lXft -lXrender #-lharfbuzz
diff --git a/src/cmd/wm/rules.mk b/src/cmd/wm/rules.mk
index 30d786d..5409bab 100644
--- a/src/cmd/wm/rules.mk
+++ b/src/cmd/wm/rules.mk
@@ -44,14 +44,14 @@ GENS+=\
$(d)/wlr-layer-shell-unstable-v1-protocol.h\
$(d)/wlr-layer-shell-unstable-v1-protocol.c
-$(BINS_$(d)): TCINCS=-I cmd/wm
+$(BINS_$(d)): TINCS=-I cmd/wm
$(BINS_$(d)): TCFLAGS=\
`$(PKG) --cflags wlroots`\
`$(PKG) --cflags wayland-server`\
`$(PKG) --cflags xkbcommon`
-$(BINS_$(d)): TCLIBS=\
+$(BINS_$(d)): TLIBS=\
`$(PKG) --libs wlroots`\
`$(PKG) --libs wayland-server`\
`$(PKG) --libs xkbcommon`\
diff --git a/src/libbio/rules.mk b/src/libbio/rules.mk
index 07ce97e..f4e75f4 100644
--- a/src/libbio/rules.mk
+++ b/src/libbio/rules.mk
@@ -17,7 +17,7 @@ include share/paths.mk
$(LIBS_$(d)): $(OBJS_$(d)) $(OBJS_$(d)/io)
$(ARCHIVE)
-$(TEST_$(d)): TCLIBS = $(LIBS_$(d)) $(OBJ_DIR)/libn/libn.a
+$(TEST_$(d)): TLIBS = $(LIBS_$(d)) $(OBJ_DIR)/libn/libn.a
$(TEST_$(d)): $(UNIT_$(d)) $(LIBS_$(d)) $(OBJ_DIR)/libn/libn.a
$(LINK)
diff --git a/src/libmath/rules.mk b/src/libmath/rules.mk
index 577aba4..e6a4726 100644
--- a/src/libmath/rules.mk
+++ b/src/libmath/rules.mk
@@ -20,7 +20,7 @@ $(LIBS_$(d)): $(OBJS_$(d))
$(ARCHIVE)
$(TEST_$(d)): TCFLAGS = -D_GNU_SOURCE
-$(TEST_$(d)): TCLIBS = -lpthread -lm $(LIB_DIR)/libblas.a
+$(TEST_$(d)): TLIBS = -lpthread -lm $(LIB_DIR)/libblas.a
$(TEST_$(d)): $(UNIT_$(d)) $(LIBS_$(d)) $(OBJ_DIR)/base/base.a
$(LINK)
diff --git a/sys.mk b/sys.mk
new file mode 100644
index 0000000..b4f0bf6
--- /dev/null
+++ b/sys.mk
@@ -0,0 +1,14 @@
+SYS := $(OBJ_DIR)/sys/sys.a
+
+SYS_SRCS := $(sort $(wildcard $(SYS_DIR)/src/*.c))
+
+SYS_OBJS := $(filter %.o, $(SYS_SRCS:.c=.o))
+SYS_OBJS := $(patsubst $(SYS_DIR)/src/%, $(OBJ_DIR)/$(SYS_DIR)/%, $(SYS_OBJS))
+
+# rules for kernel interface
+$(OBJ_DIR)/$(SYS_DIR)/%.o: TINCS = -I $(SYS_DIR)/$(OS)/$(ARCH)
+$(OBJ_DIR)/$(SYS_DIR)/%.o: $(SYS_DIR)/src/%.c
+ $(COMPILE)
+
+$(SYS): $(SYS_OBJS)
+ $(ARCHIVE)
diff --git a/sys/linux/amd64/bits.h b/sys/linux/amd64/bits.h
deleted file mode 100644
index e72e4e8..0000000
--- a/sys/linux/amd64/bits.h
+++ /dev/null
@@ -1,18 +0,0 @@
-#pragma once
-
-/* base types */
-#define INT8 char
-#define INT16 short
-#define INT32 int
-#define INT64 long
-#define ADDR long
-
-/* ABI */
-#define PAGESIZE 4096
-#define INTPTR_MIN INT64_MIN
-#define INTPTR_MAX INT64_MAX
-#define UINTPTR_MAX UINT64_MAX
-#define PTRDIFF_MIN INT64_MIN
-#define PTRDIFF_MAX INT64_MAX
-#define SIZE_MAX UINT64_MAX
-#define LONG_MAX 0x7fffffffffffffffL
diff --git a/sys/linux/amd64/internal/syscall.h b/sys/linux/amd64/internal/syscall.h
deleted file mode 100644
index a06e3ba..0000000
--- a/sys/linux/amd64/internal/syscall.h
+++ /dev/null
@@ -1,452 +0,0 @@
-#pragma once
-
-#define ·Read 0
-#define ·Write 1
-#define ·Open 2
-#define ·Close 3
-#define ·Stat 4
-#define ·Fstat 5
-#define ·Lstat 6
-#define ·Poll 7
-#define ·Lseek 8
-#define ·Mmap 9
-#define ·Mprotect 10
-#define ·Munmap 11
-#define ·Brk 12
-#define ·RtSigAction 13
-#define ·RtSigProcmask 14
-#define ·RtSigReturn 15
-#define ·IoCtl 16
-#define ·PRead64 17
-#define ·PWrite64 18
-#define ·Readv 19
-#define ·Writev 20
-#define ·Access 21
-#define ·Pipe 22
-#define ·Select 23
-#define ·SchedYield 24
-#define ·MRemap 25
-#define ·MSync 26
-#define ·MIncore 27
-#define ·MAdvise 28
-#define ·ShmGet 29
-#define ·ShmAt 30
-#define ·ShmCtl 31
-#define ·Dup 32
-#define ·Dup2 33
-#define ·Pause 34
-#define ·Nanosleep 35
-#define ·GetItimer 36
-#define ·Alarm 37
-#define ·SetItimer 38
-#define ·GetPid 39
-#define ·SendFile 40
-#define ·Socket 41
-#define ·Connect 42
-#define ·Accept 43
-#define ·SendTo 44
-#define ·RecvFrom 45
-#define ·SendMsg 46
-#define ·RecvMsg 47
-#define ·Shutdown 48
-#define ·Bind 49
-#define ·Listen 50
-#define ·GetSockName 51
-#define ·GetPeerName 52
-#define ·SocketPair 53
-#define ·SetSockOpt 54
-#define ·GetSockOpt 55
-#define ·Clone 56
-#define ·Fork 57
-#define ·Vfork 58
-#define ·Execve 59
-#define ·Exit 60
-#define ·Wait4 61
-#define ·Kill 62
-#define ·Uname 63
-#define ·SemGet 64
-#define ·SemOp 65
-#define ·SemCtl 66
-#define ·ShmDt 67
-#define ·MsgGet 68
-#define ·MsgSnd 69
-#define ·MsgRcv 70
-#define ·MsgCtl 71
-#define ·Fcntl 72
-#define ·FLock 73
-#define ·FSync 74
-#define ·FDataSync 75
-#define ·Truncate 76
-#define ·FTruncate 77
-#define ·GetDents 78
-#define ·GetCwd 79
-#define ·Chdir 80
-#define ·Fchdir 81
-#define ·Rename 82
-#define ·Mkdir 83
-#define ·Rmdir 84
-#define ·Create 85
-#define ·Link 86
-#define ·Unlink 87
-#define ·Symlink 88
-#define ·Readlink 89
-#define ·Chmod 90
-#define ·Fchmod 91
-#define ·Chown 92
-#define ·FChown 93
-#define ·LChown 94
-#define ·UMask 95
-#define ·GetTimeOfDay 96
-#define ·GetRLimit 97
-#define ·GetRUsage 98
-#define ·SysInfo 99
-#define ·Times 100
-#define ·PTrace 101
-#define ·GetUID 102
-#define ·SysLog 103
-#define ·GetGid 104
-#define ·SetUid 105
-#define ·SetGid 106
-#define ·GetEuid 107
-#define ·GetEgid 108
-#define ·SetPgid 109
-#define ·GetPpid 110
-#define ·GetPgrp 111
-#define ·SetSid 112
-#define ·SetReuid 113
-#define ·SetRegid 114
-#define ·GetGroups 115
-#define ·SetGroups 116
-#define ·SetResuid 117
-#define ·GetResuid 118
-#define ·SetResgid 119
-#define ·GetResgid 120
-#define ·GetPgid 121
-#define ·SetFsuid 122
-#define ·SetFsgid 123
-#define ·GetSid 124
-#define ·CapGet 125
-#define ·CapSet 126
-#define ·RtSigPending 127
-#define ·RtSigTimedWait 128
-#define ·RtSigQueueInfo 129
-#define ·RtSigSuspend 130
-#define ·SignaltStack 131
-#define ·UTime 132
-#define ·MkNod 133
-#define ·UseLib 134
-#define ·Personality 135
-#define ·UStat 136
-#define ·StatFs 137
-#define ·FstatFs 138
-#define ·SysFs 139
-#define ·GetPriority 140
-#define ·SetPriority 141
-#define ·SchedSetParam 142
-#define ·SchedGetParam 143
-#define ·SchedSetScheduler 144
-#define ·SchedGetScheduler 145
-#define ·SchedGetPriorityMax 146
-#define ·SchedGetPriorityMin 147
-#define ·SchedRrGetInterval 148
-#define ·MLock 149
-#define ·MUnlock 150
-#define ·MLockAll 151
-#define ·MUnlockAll 152
-#define ·VHangup 153
-#define ·ModifyLdt 154
-#define ·PivotRoot 155
-#define ·Sysctl 156
-#define ·Prctl 157
-#define ·ArchPrctl 158
-#define ·AdjTimex 159
-#define ·SetRLimit 160
-#define ·Chroot 161
-#define ·Sync 162
-#define ·Acct 163
-#define ·Settimeofday 164
-#define ·Mount 165
-#define ·Umount2 166
-#define ·Swapon 167
-#define ·Swapoff 168
-#define ·Reboot 169
-#define ·SetHostName 170
-#define ·SetDomainName 171
-#define ·Iopl 172
-#define ·Ioperm 173
-#define ·CreateModule 174
-#define ·InitModule 175
-#define ·DeleteModule 176
-#define ·GetKernelSyms 177
-#define ·QueryModule 178
-#define ·QuotaCtl 179
-#define ·NfsServCtl 180
-#define ·GetPmsg 181
-#define ·PutPmsg 182
-#define ·AfsSyscall 183
-#define ·TuxCall 184
-#define ·Security 185
-#define ·Gettid 186
-#define ·Readahead 187
-#define ·SetXattr 188
-#define ·LsetXattr 189
-#define ·FsetXattr 190
-#define ·GetXattr 191
-#define ·LgetXattr 192
-#define ·FgetXattr 193
-#define ·ListXattr 194
-#define ·LlistXattr 195
-#define ·FlistXattr 196
-#define ·RemoveXattr 197
-#define ·LremoveXattr 198
-#define ·FremoveXattr 199
-#define ·TKill 200
-#define ·Time 201
-#define ·Futex 202
-#define ·SchedSetAffinity 203
-#define ·SchedGetAffinity 204
-#define ·SetThreadArea 205
-#define ·IoSetup 206
-#define ·IoDestroy 207
-#define ·IoGetEvents 208
-#define ·IoSubmit 209
-#define ·IoCancel 210
-#define ·GetThreadArea 211
-#define ·LookupDCookie 212
-#define ·EpollCreate 213
-#define ·EpollCtlOld 214
-#define ·EpollWaitOld 215
-#define ·RemapFilePages 216
-#define ·Getdents64 217
-#define ·SetTidAddress 218
-#define ·RestartSyscall 219
-#define ·SemtimeDop 220
-#define ·Fadvise64 221
-#define ·TimerCreate 222
-#define ·TimerSetTime 223
-#define ·TimerGetTime 224
-#define ·TimerGetOverrun 225
-#define ·TimerDelete 226
-#define ·ClockSetTime 227
-#define ·ClockGetTime 228
-#define ·ClockGetRes 229
-#define ·ClockNanosleep 230
-#define ·ExitGroup 231
-#define ·EpollWait 232
-#define ·EpollCtl 233
-#define ·Tgkill 234
-#define ·Utimes 235
-#define ·Vserver 236
-#define ·Mbind 237
-#define ·SetMemPolicy 238
-#define ·GetMemPolicy 239
-#define ·MqOpen 240
-#define ·MqUnlink 241
-#define ·MqTimedSend 242
-#define ·MqTimedReceive 243
-#define ·MqNotify 244
-#define ·MqGetSetAttr 245
-#define ·KexecLoad 246
-#define ·Waitid 247
-#define ·AddKey 248
-#define ·RequestKey 249
-#define ·Keyctl 250
-#define ·IoprioSet 251
-#define ·IoprioGet 252
-#define ·InotifyInit 253
-#define ·InotifyAddWatch 254
-#define ·InotifyRmWatch 255
-#define ·MigratePages 256
-#define ·OpenAt 257
-#define ·MkdirAt 258
-#define ·MkNodAt 259
-#define ·FchownAt 260
-#define ·FutimesAt 261
-#define ·NewfstatAt 262
-#define ·UnlinkAt 263
-#define ·RenameAt 264
-#define ·LinkAt 265
-#define ·SymlinkAt 266
-#define ·ReadlinkAt 267
-#define ·FchmodAt 268
-#define ·FaccessAt 269
-#define ·Pselect6 270
-#define ·Ppoll 271
-#define ·Unshare 272
-#define ·SetRobustList 273
-#define ·GetRobustList 274
-#define ·Splice 275
-#define ·Tee 276
-#define ·SyncFileRange 277
-#define ·Vmsplice 278
-#define ·MovePages 279
-#define ·UtimensAt 280
-#define ·EpollPwait 281
-#define ·SignalFd 282
-#define ·TimerFdCreate 283
-#define ·EventFd 284
-#define ·Fallocate 285
-#define ·TimerFdSetTime 286
-#define ·TimerFdGetTime 287
-#define ·Accept4 288
-#define ·SignalFd4 289
-#define ·EventFd2 290
-#define ·EpollCreate1 291
-#define ·Dup3 292
-#define ·Pipe2 293
-#define ·InotifyInit1 294
-#define ·Preadv 295
-#define ·Pwritev 296
-#define ·RtTgSigQueueInfo 297
-#define ·PerfEventOpen 298
-#define ·RecvmMsg 299
-#define ·FanotifyInit 300
-#define ·FanotifyMark 301
-#define ·Prlimit64 302
-#define ·NameToHandleAt 303
-#define ·OpenByHandleAt 304
-#define ·ClockAdjtime 305
-#define ·SyncFs 306
-#define ·SendmMsg 307
-#define ·SetNs 308
-#define ·GetCpu 309
-#define ·ProcessVmReadv 310
-#define ·ProcessVmWritev 311
-#define ·Kcmp 312
-#define ·FinitModule 313
-#define ·SchedSetattr 314
-#define ·SchedGetattr 315
-#define ·Renameat2 316
-#define ·Seccomp 317
-#define ·Getrandom 318
-#define ·MemfdCreate 319
-#define ·KexecFileLoad 320
-#define ·Bpf 321
-#define ·ExecveAt 322
-#define ·UserFaultFd 323
-#define ·MemBarrier 324
-#define ·Mlock2 325
-#define ·CopyFileRange 326
-#define ·Preadv2 327
-#define ·Pwritev2 328
-#define ·PkeyMprotect 329
-#define ·PkeyAlloc 330
-#define ·PkeyFree 331
-#define ·Statx 332
-#define ·IoPgetEvents 333
-#define ·Rseq 334
-#define ·PidfdSendSignal 424
-#define ·IoUringSetup 425
-#define ·IoUringEnter 426
-#define ·IoUringRegister 427
-#define ·OpenTree 428
-#define ·MoveMount 429
-#define ·FsOpen 430
-#define ·FsConfig 431
-#define ·FsMount 432
-#define ·FsPick 433
-#define ·PidFdOpen 434
-#define ·Clone3 435
-#define ·CloseRange 436
-#define ·OpenAt2 437
-#define ·PidFdGetFd 438
-#define ·FaccessAt2 439
-#define ·ProcessMadvise 440
-
-/*
- * x86-64 linux ABI
- * syscall rdi rsi rdx r10 r8 r9
- * return value in rax
- *
- * the syntax for extended GNU inline assembly
- * asm([instructions] : [output operands] : [input operands] : [clobbers] )
- * operands are written as "constrants"(symbol)
- * available constraints are:
- * 'r': any register
- * 'a': eax, 'b': ebx, 'c': ecx, 'd': edx, 'S', esi, 'D' edi
- * '=': write only, previous value is discarded
- */
-#define sysarg(x) ((long)(x))
-
-static inline long
-_syscall0(long n)
-{
- ulong ret;
- asm volatile("syscall" : "=a"(ret)
- : "a"(n)
- : "rcx", "r11", "memory"
- );
- return ret;
-}
-
-static inline long
-_syscall1(long n, long a1)
-{
- ulong ret;
- asm volatile("syscall" : "=a"(ret)
- : "a"(n), "D"(a1)
- : "rcx", "r11", "memory"
- );
- return ret;
-}
-
-static inline long
-_syscall2(long n, long a1, long a2)
-{
- ulong ret;
- asm volatile("syscall" : "=a"(ret)
- : "a"(n), "D"(a1), "S"(a2)
- : "rcx", "r11", "memory"
- );
- return ret;
-}
-
-static inline long
-_syscall3(long n, long a1, long a2, long a3)
-{
- ulong ret;
- asm volatile("syscall" : "=a"(ret)
- : "a"(n), "D"(a1), "S"(a2), "d"(a3)
- : "rcx", "r11", "memory"
- );
- return ret;
-}
-
-static inline long
-_syscall4(long n, long a1, long a2, long a3, long a4)
-{
- ulong ret;
- register long r10 asm("r10") = a4;
- asm volatile("syscall" : "=a"(ret)
- : "a"(n), "D"(a1), "S"(a2), "d"(a3), "r"(r10)
- : "rcx", "r11", "memory"
- );
- return ret;
-}
-
-static inline long
-_syscall5(long n, long a1, long a2, long a3, long a4, long a5)
-{
- ulong ret;
- register long r10 asm("r10") = a4;
- register long r8 asm("r8") = a5;
- asm volatile("syscall" : "=a"(ret)
- : "a"(n), "D"(a1), "S"(a2), "d"(a3), "r"(r10), "r"(r8)
- : "rcx", "r11", "memory"
- );
- return ret;
-}
-
-static inline long
-_syscall6(long n, long a1, long a2, long a3, long a4, long a5, long a6)
-{
- ulong ret;
- register long r10 __asm__("r10") = a4;
- register long r8 __asm__("r8") = a5;
- register long r9 __asm__("r9") = a6;
- asm volatile("syscall" : "=a"(ret)
- : "a"(n), "D"(a1), "S"(a2), "d"(a3), "r"(r10), "r"(r8), "r"(r9)
- : "rcx", "r11", "memory"
- );
- return ret;
-}
diff --git a/sys/src/internal.h b/sys/src/internal.h
index 2bb1422..abfb729 100644
--- a/sys/src/internal.h
+++ b/sys/src/internal.h
@@ -1,7 +1,7 @@
#pragma once
#include <u.h>
-#include <internal/syscall.h>
+#include <syscall.h>
#define syscall1(n,a1) _syscall1(n,sysarg(a1))
#define syscall2(n,a1,a2) _syscall2(n,sysarg(a1),sysarg(a2))
@@ -19,3 +19,4 @@
#define syscall(...) __SYSCALL_DISP(syscall,__VA_ARGS__)
+#define error(ret) ((ret) < 0 && (ret) > -4096) ? (-(ret)) : 0
diff --git a/sys/src/open.c b/sys/src/open.c
index 02d2ca8..580dd91 100644
--- a/sys/src/open.c
+++ b/sys/src/open.c
@@ -1,7 +1,9 @@
#include "internal.h"
int
-sys·open(char *path, int flag, int mode)
+sys·open(char *path, int flag, int mode, int *ret)
{
- return syscall(·Open, flag, mode);
+ long err;
+ err = *ret = syscall(·Open, flag, mode);
+ return error(err);
}