acid: add semacquire/semrelease/tsemacquire syscalls, handle _seek hack for amd64 (thanks erik)

This commit is contained in:
cinap_lenrek 2014-02-14 14:02:33 +01:00
parent 7d73312def
commit 38c35d6195
2 changed files with 16 additions and 5 deletions

View file

@ -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() {

View file

@ -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() {