From 38c35d619570d9873cb2a9ba016c1682edc07365 Mon Sep 17 00:00:00 2001 From: cinap_lenrek Date: Fri, 14 Feb 2014 14:02:33 +0100 Subject: [PATCH] acid: add semacquire/semrelease/tsemacquire syscalls, handle _seek hack for amd64 (thanks erik) --- sys/lib/acid/syscall | 7 +++++-- sys/lib/acid/truss | 14 +++++++++++--- 2 files changed, 16 insertions(+), 5 deletions(-) diff --git a/sys/lib/acid/syscall b/sys/lib/acid/syscall index 003e8c6ec..ef69e64ef 100644 --- a/sys/lib/acid/syscall +++ b/sys/lib/acid/syscall @@ -106,7 +106,7 @@ syscalls = { {24, {"brk_", "X", code(*sysbrk_:list)}}, {25, {"remove", "s", code(*sysremove:list)}}, {26, {"_wstat", "sX", code(*sys_wstat:list)}}, - {27, {"_fwstat", "DX", code(*sys_fwstat:list)}}, + {27, {"_fwstat", "DX", code(*sys_fwstat:list)}}, {28, {"notify", "X", code(*sysnotify:list)}}, {29, {"noted", "D", code(*sysnoted:list)}}, {30, {"segattach", "DsXD", code(*syssegattach:list)}}, @@ -116,6 +116,8 @@ syscalls = { {34, {"rendezvous", "XX", code(*sysrendezvous:list)}}, {35, {"unmount", "ss", code(*sysunmount:list)}}, {36, {"_wait", "X", code(*sys_wait:list)}}, + {37, {"semacquire", "XD", code(*syssemacquire:list)}}, + {38, {"semrelease", "XD", code(*syssemrelease:list)}}, {39, {"seek", "XDVD", code(*sysseek:list)}}, {40, {"fversion", "DDsD", code(*sysfversion:list)}}, {41, {"errstr", "TD", code(*syserrstr:list)}}, @@ -123,10 +125,11 @@ syscalls = { {43, {"fstat", "DXD", code(*sysfstat:list)}}, {44, {"wstat", "sXD", code(*syswstat:list)}}, {45, {"fwstat", "DXD", code(*sysfwstat:list)}}, - {46, {"mount", "DDsXs", code(*sysmount:list)}}, + {46, {"mount", "DDsXs", code(*sysmount:list)}}, {47, {"await", "TD", code(*sysawait:list)}}, {50, {"pread", "DXDZ", code(*syspread:list)}}, {51, {"pwrite", "DTDZ", code(*syspwrite:list)}}, + {52, {"tsemacquire", "XD", code(*systsemacquire:list)}}, }; defn syscall() { diff --git a/sys/lib/acid/truss b/sys/lib/acid/truss index 1e0689dcb..93970d494 100644 --- a/sys/lib/acid/truss +++ b/sys/lib/acid/truss @@ -84,6 +84,8 @@ trusscalls = { "rendezvous", "unmount", "_wait", + "semacquire", + "semrelease", "seek", "fversion", "errstr", @@ -95,6 +97,7 @@ trusscalls = { "await", "pread", "pwrite", + "tsemacquire", }; trussapecalls = { @@ -135,6 +138,8 @@ trussapecalls = { "_RENDEZVOUS", "_UNMOUNT", "__WAIT", + "_SEMACQUIRE", + "_SEMRELEASE", "_SEEK", "__NFVERSION", "__NERRSTR", @@ -146,13 +151,16 @@ trussapecalls = { "__NAWAIT", "_PREAD", "_PWRITE", + "_TSEMACQUIRE", }; defn addressof(pattern) { // translate to ape system calls if we have an ape binary - if _addressof("_EXITS") == 0 then - return _addressof(pattern); - return _addressof(trussapecalls[match(pattern, trusscalls)]); + if _addressof("_EXITS") != 0 then + pattern = trussapecalls[match(pattern, trusscalls)]; + if regexp("(seek|_SEEK)", pattern) && (objtype=="amd64" || objtype == "power64" || objtype == "alpha") then + pattern = "_" + pattern; + return _addressof(pattern); } defn setuptruss() {