mirror of
https://github.com/RKX1209/nsemu.git
synced 2024-06-22 06:02:21 -04:00
Fixed some bugs
This commit is contained in:
parent
5752d2fd74
commit
3af589503c
|
@ -1962,9 +1962,11 @@ static void Handle3SamePair(uint32_t insn, int is_q, bool u, unsigned int opcode
|
|||
int ebytes = 1 << size;
|
||||
int elements = (is_q ? 128 : 64) / (8 << size);
|
||||
for (int e = 0; e < elements; e++) {
|
||||
unsigned int reg_idx = e < (ebytes / 2) ? rn : rm;
|
||||
cb->ReadVecElem(GPR_DUMMY, reg_idx, e, size);
|
||||
cb->ReadVecElem(GPR_DUMMY2, reg_idx, e + 1, size);
|
||||
unsigned int reg_idx = e < (elements / 2) ? rn : rm;
|
||||
int base = e < (elements / 2) ? e : (e - elements / 2);
|
||||
//ns_print("ADDP V[%u][%u] = V[%u][%u] + V[%u][%u]\n", rd, e, reg_idx, 2 * e, reg_idx, 2 * e + 1);
|
||||
cb->ReadVecElem(GPR_DUMMY, reg_idx, 2 * base, size);
|
||||
cb->ReadVecElem(GPR_DUMMY2, reg_idx, 2 * base + 1, size);
|
||||
switch (opcode) {
|
||||
case 0x17: /* ADDP */
|
||||
cb->AddReg (GPR_DUMMY, GPR_DUMMY, GPR_DUMMY2, false, true);
|
||||
|
@ -1985,8 +1987,13 @@ static void Handle3SamePair(uint32_t insn, int is_q, bool u, unsigned int opcode
|
|||
UnsupportedOp ("FMINP");
|
||||
break;
|
||||
}
|
||||
cb->WriteVecElem(rd, GPR_DUMMY, e, size);
|
||||
cb->WriteVecElem(VREG_DUMMY, GPR_DUMMY, e, size);
|
||||
}
|
||||
// V[rd] = V[dummy] XXX: More optimize
|
||||
cb->ReadVecElem(GPR_DUMMY, VREG_DUMMY, 0, 3);
|
||||
cb->WriteVecElem(rd, GPR_DUMMY, 0, 3);
|
||||
cb->ReadVecElem(GPR_DUMMY, VREG_DUMMY, 1, 3);
|
||||
cb->WriteVecElem(rd, GPR_DUMMY, 1, 3);
|
||||
}
|
||||
|
||||
static void DisasSimd3SameLogic(uint32_t insn, DisasCallback *cb) {
|
||||
|
|
|
@ -1160,28 +1160,16 @@ void IntprCallback::WriteVecElem(unsigned int vd_idx, unsigned int rn_idx, unsig
|
|||
|
||||
template<typename T>
|
||||
static void _CompareTest(T *res, T arg1, T arg2, bool and_test) {
|
||||
T onflag = ~(T)0;
|
||||
if (and_test) {
|
||||
*res = (arg1 & arg2 != 0);
|
||||
*res = (arg1 & arg2 != 0 ? onflag : 0);
|
||||
} else {
|
||||
*res = (arg1 == arg2);
|
||||
*res = (arg1 == arg2 ? onflag : 0);
|
||||
}
|
||||
}
|
||||
|
||||
/* Compare Bit wise equal */
|
||||
void IntprCallback::CompareEqualVec(unsigned int vd_idx, unsigned int vn_idx, unsigned int vm_idx, int index, int size) {
|
||||
if (size == 0) {
|
||||
_CompareTest(&VREG(vd_idx).b[index], VREG(vn_idx).b[index], VREG(vm_idx).b[index], true);
|
||||
} else if (size == 1) {
|
||||
_CompareTest(&VREG(vd_idx).h[index], VREG(vn_idx).h[index], VREG(vm_idx).h[index], true);
|
||||
} else if (size == 2) {
|
||||
_CompareTest(&VREG(vd_idx).s[index], VREG(vn_idx).s[index], VREG(vm_idx).s[index], true);
|
||||
} else if (size == 3) {
|
||||
_CompareTest(&VREG(vd_idx).d[index], VREG(vn_idx).d[index], VREG(vm_idx).d[index], true);
|
||||
}
|
||||
}
|
||||
|
||||
/* Compare Bit wise test bits nonzero */
|
||||
void IntprCallback::CompareTestBitsVec(unsigned int vd_idx, unsigned int vn_idx, unsigned int vm_idx, int index, int size) {
|
||||
if (size == 0) {
|
||||
_CompareTest(&VREG(vd_idx).b[index], VREG(vn_idx).b[index], VREG(vm_idx).b[index], false);
|
||||
} else if (size == 1) {
|
||||
|
@ -1192,3 +1180,16 @@ void IntprCallback::CompareTestBitsVec(unsigned int vd_idx, unsigned int vn_idx,
|
|||
_CompareTest(&VREG(vd_idx).d[index], VREG(vn_idx).d[index], VREG(vm_idx).d[index], false);
|
||||
}
|
||||
}
|
||||
|
||||
/* Compare Bit wise test bits nonzero */
|
||||
void IntprCallback::CompareTestBitsVec(unsigned int vd_idx, unsigned int vn_idx, unsigned int vm_idx, int index, int size) {
|
||||
if (size == 0) {
|
||||
_CompareTest(&VREG(vd_idx).b[index], VREG(vn_idx).b[index], VREG(vm_idx).b[index], true);
|
||||
} else if (size == 1) {
|
||||
_CompareTest(&VREG(vd_idx).h[index], VREG(vn_idx).h[index], VREG(vm_idx).h[index], true);
|
||||
} else if (size == 2) {
|
||||
_CompareTest(&VREG(vd_idx).s[index], VREG(vn_idx).s[index], VREG(vm_idx).s[index], true);
|
||||
} else if (size == 3) {
|
||||
_CompareTest(&VREG(vd_idx).d[index], VREG(vn_idx).d[index], VREG(vm_idx).d[index], true);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -102,7 +102,7 @@ def formatParam(param, input, i):
|
|||
else:
|
||||
arrspec = ''
|
||||
|
||||
return '%s%s %s%s%s' % (type, '&' if not input and (not type.endswith('*') and not arrspec) else '', name, arrspec, ', unsigned int %s_size' % name if hasSize else '')
|
||||
return '%s%s %s%s%s' % (type, '&' if not input and not arrspec else '', name, arrspec, ', unsigned int %s_size' % name if hasSize else '')
|
||||
|
||||
def generatePrototype(func):
|
||||
return ', '.join([formatParam(x, True, i) for i, x in enumerate(func['inputs'])] + [formatParam(x, False, i + len(func['inputs'])) for i, x in enumerate(func['outputs'])])
|
||||
|
@ -141,14 +141,14 @@ def generateCaller(qname, fname, func):
|
|||
an, sn, bn = tempname(), tempname(), tempname()
|
||||
yield 'unsigned int %s;' % sn
|
||||
yield 'auto %s = req->GetBuffer(%s, %i, %s);' % (an, emitInt(rest[1]), cbo, sn)
|
||||
yield 'auto %s = new uint8_t[%s];' % (bn, sn)
|
||||
yield 'ARMv8::ReadBytes(%s, %s, %s);' % (an, bn, sn)
|
||||
params.append('(%s *) %s' % (retype(rest[0]), bn))
|
||||
yield '%s* %s = (%s *) new uint8_t[%s];' % (retype(rest[0]), bn, retype(rest[0]), sn)
|
||||
yield 'ARMv8::ReadBytes(%s, (uint8_t *)%s, %s);' % (an, bn, sn)
|
||||
params.append('%s' % (bn))
|
||||
params.append(sn)
|
||||
logFmt.append('%s *%s= buffer<0x%%lx>' % (retype(rest[0]), '%s ' % name if name else ''))
|
||||
logElems.append(sn)
|
||||
bufSizes += 1
|
||||
yield AFTER, 'delete[] %s;' % bn
|
||||
yield AFTER, 'delete[] (uint8_t *) %s;' % bn
|
||||
elif type == 'object':
|
||||
params.append('IPC::GetHandle<%s*>(req->GetMoved(%i))' % (rest[0][0], objOff))
|
||||
logFmt.append('%s %s= 0x%%x' % (rest[0][0], '%s ' % name if name else ''))
|
||||
|
@ -202,12 +202,12 @@ def generateCaller(qname, fname, func):
|
|||
an, sn, bn = tempname(), tempname(), tempname()
|
||||
yield 'unsigned int %s;' % sn
|
||||
yield 'auto %s = req->GetBuffer(%s, %i, %s);' % (an, emitInt(rest[1]), cbo, sn)
|
||||
yield 'auto %s = new uint8_t[%s];' % (bn, sn)
|
||||
params.append('(%s *) %s' % (retype(rest[0]), bn))
|
||||
yield '%s* %s = (%s *) new uint8_t[%s];' % (retype(rest[0]), bn, retype(rest[0]), sn)
|
||||
params.append('%s' % (bn))
|
||||
params.append(sn)
|
||||
bufSizes += 1
|
||||
yield AFTER, 'ARMv8::WriteBytes(%s, %s, %s);' % (an, bn, sn)
|
||||
yield AFTER, 'delete[] %s;' % bn
|
||||
yield AFTER, 'ARMv8::WriteBytes(%s, (uint8_t *) %s, %s);' % (an, bn, sn)
|
||||
yield AFTER, 'delete[] (uint8_t *)%s;' % bn
|
||||
elif type == 'object':
|
||||
tn = tempname()
|
||||
yield '%s* %s;' % (rest[0][0], tn)
|
||||
|
|
2
Ipc.cpp
2
Ipc.cpp
|
@ -50,11 +50,11 @@ void IpcMessage::GenBuf(unsigned int _move_cnt, unsigned int _copy_cnt, unsigned
|
|||
copy_cnt = _copy_cnt;
|
||||
uint32_t *obuf = (uint32_t *) raw_ptr;
|
||||
obuf[0] = 0;
|
||||
ns_print("is_domain: %u, move: %u, copy: %u, bytes: %u\n", is_domainobj, move_cnt, copy_cnt, data_bytes);
|
||||
if(move_cnt != 0 || copy_cnt != 0) {
|
||||
obuf[1] = ((move_cnt != 0 && !is_domainobj) || copy_cnt != 0) ? (1U << 31) : 0;
|
||||
obuf[2] = (copy_cnt << 1) | ((is_domainobj ? 0 : move_cnt) << 5);
|
||||
}
|
||||
|
||||
auto pos = 2 + (((move_cnt != 0 && !is_domainobj) || copy_cnt != 0) ? (1 + move_cnt + copy_cnt) : 0);
|
||||
auto start = pos;
|
||||
if(pos & 3)
|
||||
|
|
|
@ -57,7 +57,7 @@ static RAMBlock* FindRamBlock(uint64_t addr, size_t len) {
|
|||
}
|
||||
|
||||
static void AddAnonStraight(uint64_t addr, size_t len, int perm) {
|
||||
//ns_print("Add anonymous fixed region [0x%lx, %d]\n", addr, len);
|
||||
ns_print("Add anonymous fixed region [0x%lx, %d]\n", addr, len);
|
||||
RAMBlock *new_ram = new RAMBlock("[anon]", addr, len, perm) ;
|
||||
regions.push_back(new_ram);
|
||||
}
|
||||
|
@ -68,7 +68,7 @@ static void AddAnonRamBlock(uint64_t addr, size_t len, int perm) {
|
|||
ns_abort("Failed to allocate new RAM Block\n");
|
||||
}
|
||||
RAMBlock *new_ram = new RAMBlock("[anon]", addr, len, raw, perm);
|
||||
debug_print("Add anonymous region [0x%lx, %d]\n", new_ram->addr, new_ram->length);
|
||||
ns_print("Add anonymous region [0x%lx, %d]\n", new_ram->addr, new_ram->length);
|
||||
regions.push_back(new_ram);
|
||||
}
|
||||
|
||||
|
@ -118,7 +118,7 @@ std::list<std::tuple<uint64_t,uint64_t, int>> GetRegions() {
|
|||
temp.push_back(make_tuple(addr, addr + length));
|
||||
}
|
||||
temp.sort([](auto a, auto b) { auto [ab, _] = a; auto [bb, __] = b; return ab < bb; });
|
||||
uint64_t last;
|
||||
uint64_t last = 0;
|
||||
for(auto [begin, end] : temp) {
|
||||
if(last != begin)
|
||||
ret.push_back(make_tuple(last, begin - 1, -1));
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
#include "Nsemu.hpp"
|
||||
#include "IpcStubs.hpp"
|
||||
|
||||
uint32_t nn::socket::sf::IClient::Accept(uint32_t socket, int32_t& ret, uint32_t& bsd_errno, uint32_t& sockaddr_len, sockaddr *_addr, unsigned _size) {
|
||||
uint32_t nn::socket::sf::IClient::Accept(uint32_t socket, int32_t& ret, uint32_t& bsd_errno, uint32_t& sockaddr_len, sockaddr*& _addr, unsigned _size) {
|
||||
ns_print("nn::socket::sf::IClient::accept\n");
|
||||
struct sockaddr *addr = (struct sockaddr *) _addr;
|
||||
socklen_t size = (uint32_t) _size;
|
||||
|
@ -37,7 +37,7 @@ uint32_t nn::socket::sf::IClient::Connect(uint32_t socket, sockaddr * _addr, uns
|
|||
bsd_errno = errno;
|
||||
return 0;
|
||||
}
|
||||
uint32_t nn::socket::sf::IClient::GetSockName(uint32_t socket, int32_t& ret, uint32_t& bsd_errno, uint32_t& sockaddr_len, sockaddr * _addr, unsigned _size) {
|
||||
uint32_t nn::socket::sf::IClient::GetSockName(uint32_t socket, int32_t& ret, uint32_t& bsd_errno, uint32_t& sockaddr_len, sockaddr*& _addr, unsigned _size) {
|
||||
ns_print("nn::socket::sf::IClient::getsockname\n");
|
||||
|
||||
struct sockaddr *addr = (struct sockaddr *) _addr;
|
||||
|
@ -56,7 +56,7 @@ uint32_t nn::socket::sf::IClient::Listen(uint32_t socket, uint32_t backlog, int3
|
|||
return 0;
|
||||
}
|
||||
|
||||
uint32_t nn::socket::sf::IClient::Recv(uint32_t socket, uint32_t flags, int32_t& ret, uint32_t& bsd_errno, int8_t * buf, unsigned _size) {
|
||||
uint32_t nn::socket::sf::IClient::Recv(uint32_t socket, uint32_t flags, int32_t& ret, uint32_t& bsd_errno, int8_t*& buf, unsigned _size) {
|
||||
ns_print("nn::socket::sf::IClient::recv\n");
|
||||
|
||||
ret = (int32_t) ::recv(socket, buf, _size, flags);
|
||||
|
@ -64,7 +64,7 @@ uint32_t nn::socket::sf::IClient::Recv(uint32_t socket, uint32_t flags, int32_t&
|
|||
return 0;
|
||||
}
|
||||
|
||||
uint32_t nn::socket::sf::IClient::Send(uint32_t socket, uint32_t flags, int8_t * buf, unsigned _size, int32_t& ret, uint32_t& bsd_errno) {
|
||||
uint32_t nn::socket::sf::IClient::Send(uint32_t socket, uint32_t flags, int8_t* buf, unsigned _size, int32_t& ret, uint32_t& bsd_errno) {
|
||||
ns_print("nn::socket::sf::IClient::send\n");
|
||||
|
||||
ret = (uint32_t) ::send(socket, buf, (size_t) _size, flags);
|
||||
|
@ -72,7 +72,7 @@ uint32_t nn::socket::sf::IClient::Send(uint32_t socket, uint32_t flags, int8_t *
|
|||
return 0;
|
||||
}
|
||||
|
||||
uint32_t nn::socket::sf::IClient::SendTo(uint32_t socket, uint32_t flags, int8_t * buf, unsigned _size, sockaddr * _addr, unsigned _addr_size, int32_t& ret, uint32_t& bsd_errno) {
|
||||
uint32_t nn::socket::sf::IClient::SendTo(uint32_t socket, uint32_t flags, int8_t* buf, unsigned _size, sockaddr* _addr, unsigned _addr_size, int32_t& ret, uint32_t& bsd_errno) {
|
||||
ns_print("nn::socket::sf::IClient::sendto\n");
|
||||
|
||||
struct sockaddr *addr = (struct sockaddr *) _addr;
|
||||
|
@ -82,7 +82,7 @@ uint32_t nn::socket::sf::IClient::SendTo(uint32_t socket, uint32_t flags, int8_t
|
|||
return 0;
|
||||
}
|
||||
|
||||
uint32_t nn::socket::sf::IClient::SetSockOpt(uint32_t socket, uint32_t level, uint32_t option_name, uint8_t * optval, unsigned _opt_size, int32_t& ret, uint32_t& bsd_errno) {
|
||||
uint32_t nn::socket::sf::IClient::SetSockOpt(uint32_t socket, uint32_t level, uint32_t option_name, uint8_t* optval, unsigned _opt_size, int32_t& ret, uint32_t& bsd_errno) {
|
||||
ns_print("nn::socket::sf::IClient::setsockopt\n");
|
||||
return 0;
|
||||
}
|
||||
|
|
|
@ -2,13 +2,13 @@
|
|||
#include "Nsemu.hpp"
|
||||
#include "IpcStubs.hpp"
|
||||
|
||||
uint32_t nn::fssrv::sf::IFileSystemProxy::OpenBisPartition(nn::fssrv::sf::Partition partitionID, nn::fssrv::sf::IStorage* BisPartition) {
|
||||
uint32_t nn::fssrv::sf::IFileSystemProxy::OpenBisPartition(nn::fssrv::sf::Partition partitionID, nn::fssrv::sf::IStorage*& BisPartition) {
|
||||
ns_print("Stub implementation for nn::fssrv::sf::IFileSystemProxy::OpenBisPartition\n");
|
||||
//BisPartition = buildInterface(nn::fssrv::sf::IStorage, "bis.istorage");
|
||||
return 0x0;
|
||||
}
|
||||
|
||||
uint32_t nn::fssrv::sf::IFileSystemProxy::OpenDataStorageByApplicationId(nn::ApplicationId tid, nn::fssrv::sf::IStorage* dataStorage) {
|
||||
uint32_t nn::fssrv::sf::IFileSystemProxy::OpenDataStorageByApplicationId(nn::ApplicationId tid, nn::fssrv::sf::IStorage*& dataStorage) {
|
||||
ns_print("Stub implementation for nn::fssrv::sf::IFileSystemProxy::OpenDataStorageByApplicationId 0x%lx\n", tid);
|
||||
std::stringstream ss;
|
||||
ss << "tid_archives_" << hex << tid << ".istorage";
|
||||
|
@ -16,13 +16,13 @@ uint32_t nn::fssrv::sf::IFileSystemProxy::OpenDataStorageByApplicationId(nn::App
|
|||
return 0;
|
||||
}
|
||||
|
||||
uint32_t nn::fssrv::sf::IFileSystemProxy::OpenDataStorageByCurrentProcess(nn::fssrv::sf::IStorage* dataStorage) {
|
||||
uint32_t nn::fssrv::sf::IFileSystemProxy::OpenDataStorageByCurrentProcess(nn::fssrv::sf::IStorage*& dataStorage) {
|
||||
ns_print("Stub implementation for nn::fssrv::sf::IFileSystemProxy::OpenDataStorageByCurrentProcess\n");
|
||||
//dataStorage = buildInterface(nn::fssrv::sf::IStorage, "");
|
||||
return 0;
|
||||
}
|
||||
|
||||
uint32_t nn::fssrv::sf::IFileSystemProxy::OpenDataStorageByDataId(nn::ApplicationId tid, uint8_t storageId, nn::fssrv::sf::IStorage* dataStorage) {
|
||||
uint32_t nn::fssrv::sf::IFileSystemProxy::OpenDataStorageByDataId(nn::ApplicationId tid, uint8_t storageId, nn::fssrv::sf::IStorage*& dataStorage) {
|
||||
ns_print("Stub implementation for nn::fssrv::sf::IFileSystemProxy::OpenDataStorageByDataId 0x%lx\n", 0x0100000000000800+(uint64_t)storageId);
|
||||
std::stringstream ss;
|
||||
ss << "archives/" << hex << setw(16) << setfill('0') << 0x0100000000000800+(uint64_t)storageId << ".istorage";
|
||||
|
@ -30,13 +30,13 @@ uint32_t nn::fssrv::sf::IFileSystemProxy::OpenDataStorageByDataId(nn::Applicatio
|
|||
return 0;
|
||||
}
|
||||
|
||||
uint32_t nn::fssrv::sf::IFileSystemProxy::OpenGameCardPartition(nn::fssrv::sf::Partition partitionID, uint32_t _1, nn::fssrv::sf::IStorage* gameCardFs) {
|
||||
uint32_t nn::fssrv::sf::IFileSystemProxy::OpenGameCardPartition(nn::fssrv::sf::Partition partitionID, uint32_t _1, nn::fssrv::sf::IStorage*& gameCardFs) {
|
||||
ns_print("Stub implementation for nn::fssrv::sf::IFileSystemProxy::OpenGameCardPartition\n");
|
||||
//gameCardFs = buildInterface(nn::fssrv::sf::IStorage, "GamePartition.istorage");
|
||||
return 0;
|
||||
}
|
||||
|
||||
uint32_t nn::fssrv::sf::IFileSystemProxy::OpenRomStorage(nn::fssrv::sf::IStorage* _0) {
|
||||
uint32_t nn::fssrv::sf::IFileSystemProxy::OpenRomStorage(nn::fssrv::sf::IStorage*& _0) {
|
||||
ns_print("Stub implementation for nn::fssrv::sf::IFileSystemProxy::OpenRomStorage\n");
|
||||
//_0 = buildInterface(nn::fssrv::sf::IStorage, "RomStorage.istorage");
|
||||
return 0;
|
||||
|
|
|
@ -5,18 +5,18 @@ uint32_t SmService::Initialize() {
|
|||
return 0;
|
||||
}
|
||||
|
||||
uint32_t SmService::GetService(ServiceName _name, IpcService *service) {
|
||||
uint32_t SmService::GetService(ServiceName _name, IpcService*& service) {
|
||||
std::string name = (char *) _name;
|
||||
if (IPC::services.find(name) == IPC::services.end()) {
|
||||
ns_print("Unknown service name %s\n", name.c_str());
|
||||
return 0xC15; //error code
|
||||
}
|
||||
service = IPC::services[name];
|
||||
ns_print("Found: %s\n", name.c_str());
|
||||
ns_print("Found: %s => %p\n", name.c_str(), (void *)service);
|
||||
return 0;
|
||||
}
|
||||
|
||||
uint32_t SmService::RegisterService(ServiceName _name, IpcService *service) {
|
||||
uint32_t SmService::RegisterService(ServiceName _name, IpcService*& service) {
|
||||
std::string name = (char *) _name;
|
||||
IpcService *new_srv = new IpcService();
|
||||
debug_print("Registering service %s\n", _name);
|
||||
|
|
3
Svc.cpp
3
Svc.cpp
|
@ -149,8 +149,9 @@ typedef struct {
|
|||
std::tuple<uint64_t, uint64_t> QueryMemory(uint64_t meminfo, uint64_t pageinfo, uint64_t addr) {
|
||||
ns_print("QueryMemory 0x%lx\n", addr);
|
||||
for(auto [begin, end, perm] : Memory::GetRegions()) {
|
||||
//ns_print("Region [0x%lx, 0x%lx %d]\n", begin, end, perm);
|
||||
if (begin <= addr && addr <= end) {
|
||||
ns_print("found region at 0x%lx, 0x%lx\n", begin, end);
|
||||
//ns_print("found region at 0x%lx, 0x%lx\n", begin, end);
|
||||
MemInfo minfo;
|
||||
minfo.begin = begin;
|
||||
minfo.size = end - begin + 1;
|
||||
|
|
|
@ -79,13 +79,15 @@ public:
|
|||
void SetErrorCode(uint32_t error_code);
|
||||
void ParseMessage();
|
||||
void SetMove(int offset, uint32_t handler) {
|
||||
if (!raw_ptr) {
|
||||
return;
|
||||
}
|
||||
if(is_domainobj)
|
||||
raw_ptr[(payload_off >> 2) + 4 + offset] = handler;
|
||||
else
|
||||
raw_ptr[3 + copy_cnt + offset] = handler;
|
||||
uint32_t *buf = (uint32_t *) raw_ptr;
|
||||
if (!raw_ptr) {
|
||||
return;
|
||||
}
|
||||
ns_print("SetMove (0x%x)\n", handler);
|
||||
if(is_domainobj)
|
||||
buf[(payload_off >> 2) + 4 + offset] = handler;
|
||||
else
|
||||
buf[3 + copy_cnt + offset] = handler;
|
||||
}
|
||||
void SetCopy(int offset, uint32_t handler) {
|
||||
if (!raw_ptr) {
|
||||
|
|
7538
include/IpcStubs.hpp
7538
include/IpcStubs.hpp
File diff suppressed because it is too large
Load diff
Loading…
Reference in a new issue