libc: Replace assert() by __ensure()

This commit is contained in:
avdgrinten 2017-05-04 16:48:02 +02:00
parent 4e5246080a
commit cf8a0a5c34
8 changed files with 32 additions and 31 deletions

View file

@ -236,7 +236,7 @@ int pthread_once(pthread_once_t *once, void (*function) (void)) {
return 0;
}else{
// a different thread is currently running the initializer.
assert(expected == onceLocked);
__ensure(expected == onceLocked);
HEL_CHECK(helFutexWait((int *)&once->__mlibc_done, onceLocked));
expected = __atomic_load_n(&once->__mlibc_done, __ATOMIC_ACQUIRE);
}
@ -302,10 +302,10 @@ int pthread_mutex_init(pthread_mutex_t *__restrict mutex,
if(type == PTHREAD_MUTEX_RECURSIVE) {
mutex->__mlibc_flags |= mutexRecursive;
}else{
assert(type == PTHREAD_MUTEX_NORMAL);
__ensure(type == PTHREAD_MUTEX_NORMAL);
}
assert(robust == PTHREAD_MUTEX_STALLED);
__ensure(robust == PTHREAD_MUTEX_STALLED);
return 0;
}
@ -326,7 +326,7 @@ int pthread_mutex_lock(pthread_mutex_t *mutex) {
return 0;
}else{
if(mutex->__mlibc_flags & mutexRecursive)
assert(!"TODO: Implement recursive mutexes");
__ensure(!"TODO: Implement recursive mutexes");
// wait on the futex if the waiters flag is set.
if(expected & waiters) {

View file

@ -29,14 +29,14 @@ struct Queue {
}
void *dequeueSingle() {
assert(_queue);
__ensure(_queue);
auto e = __atomic_load_n(&_queue->kernelState, __ATOMIC_ACQUIRE);
while(true) {
assert(!(e & kHelQueueWantNext));
__ensure(!(e & kHelQueueWantNext));
if(_progress != (e & kHelQueueTail)) {
assert(_progress < (e & kHelQueueTail));
__ensure(_progress < (e & kHelQueueTail));
auto ptr = (char *)_queue + sizeof(HelQueue) + _progress;
auto elem = reinterpret_cast<HelElement *>(ptr);

View file

@ -1,6 +1,7 @@
#include <stdlib.h>
#include <stdint.h>
#include <stdio.h>
#include <string.h>
#include <assert.h>
@ -13,9 +14,9 @@
void __assert_fail(const char *assertion, const char *file, unsigned int line,
const char *function) {
frigg::panicLogger() << "In function " << function
<< ", file " << file << ":" << line << "\n"
<< "assert(" << assertion << ") failed" << frigg::endLog;
fprintf(stderr, "In function %s, file %s:%d: Assertion '%s' failed!\n",
function, file, line, assertion);
abort();
}
void __ensure_fail(const char *assertion, const char *file, unsigned int line,

View file

@ -27,7 +27,7 @@
HelHandle __mlibc_getPassthrough(int fd) {
auto handle = cacheFileTable()[fd];
assert(handle);
__ensure(handle);
return handle;
}
@ -68,13 +68,13 @@ int access(const char *path, int mode) {
errno = ENOENT;
return -1;
}else{
assert(resp.error() == managarm::posix::Errors::SUCCESS);
__ensure(resp.error() == managarm::posix::Errors::SUCCESS);
return 0;
}
}
int stat(const char *__restrict path, struct stat *__restrict result) {
assert(!"Fix this");
__ensure(!"Fix this");
int fd = open(path, O_RDONLY);
if(fd == -1) {
__ensure(errno == ENOENT);
@ -90,7 +90,7 @@ int stat(const char *__restrict path, struct stat *__restrict result) {
}
int fstat(int fd, struct stat *result) {
assert(!"Fix this");
__ensure(!"Fix this");
/* managarm::posix::CntRequest<MemoryAllocator> request(getAllocator());
request.set_request_type(managarm::posix::CntReqType::FSTAT);
request.set_fd(fd);
@ -175,7 +175,7 @@ int open(const char *path, int flags, ...) {
errno = ENOENT;
return -1;
}else{
assert(resp.error() == managarm::posix::Errors::SUCCESS);
__ensure(resp.error() == managarm::posix::Errors::SUCCESS);
return resp.fd();
}
}
@ -187,7 +187,7 @@ ssize_t read(int fd, void *data, size_t max_size){
globalQueue.trim();
auto handle = cacheFileTable()[fd];
assert(handle);
__ensure(handle);
managarm::fs::CntRequest<MemoryAllocator> req(getAllocator());
req.set_req_type(managarm::fs::CntReqType::READ);
@ -230,7 +230,7 @@ ssize_t read(int fd, void *data, size_t max_size){
}else*/ if(resp.error() == managarm::fs::Errors::END_OF_FILE) {
return 0;
}
assert(resp.error() == managarm::fs::Errors::SUCCESS);
__ensure(resp.error() == managarm::fs::Errors::SUCCESS);
return recv_data->length;
}
@ -240,7 +240,7 @@ ssize_t write(int fd, const void *data, size_t size) {
globalQueue.trim();
auto handle = cacheFileTable()[fd];
assert(handle);
__ensure(handle);
// frigg::infoLogger.log() << "write()" << frigg::EndLog();
managarm::fs::CntRequest<MemoryAllocator> req(getAllocator());
@ -277,7 +277,7 @@ ssize_t write(int fd, const void *data, size_t size) {
managarm::fs::SvrResponse<MemoryAllocator> resp(getAllocator());
resp.ParseFromArray(recv_resp->data, recv_resp->length);
assert(resp.error() == managarm::fs::Errors::SUCCESS);
__ensure(resp.error() == managarm::fs::Errors::SUCCESS);
// TODO: implement NO_SUCH_FD
/* if(resp.error() == managarm::fs::Errors::NO_SUCH_FD) {
@ -293,12 +293,12 @@ ssize_t write(int fd, const void *data, size_t size) {
}
off_t lseek(int fd, off_t offset, int whence) {
assert(!"Fix this");
__ensure(!"Fix this");
/*HelAction actions[3];
HelEvent results[3];
auto file_it = getFileMap().get(fd);
assert(file_it);
__ensure(file_it);
managarm::fs::CntRequest<MemoryAllocator> req(getAllocator());
req.set_fd(fd);
@ -356,7 +356,7 @@ HelHandle __raw_map(int fd) {
globalQueue.trim();
auto handle = cacheFileTable()[fd];
assert(handle);
__ensure(handle);
managarm::fs::CntRequest<MemoryAllocator> req(getAllocator());
req.set_req_type(managarm::fs::CntReqType::MMAP);
@ -390,7 +390,7 @@ HelHandle __raw_map(int fd) {
managarm::fs::SvrResponse<MemoryAllocator> resp(getAllocator());
resp.ParseFromArray(recv_resp->data, recv_resp->length);
assert(resp.error() == managarm::fs::Errors::SUCCESS);
__ensure(resp.error() == managarm::fs::Errors::SUCCESS);
return pull_memory->handle;
}
@ -477,7 +477,7 @@ int dup2(int src_fd, int dest_fd) {
managarm::posix::SvrResponse<MemoryAllocator> resp(getAllocator());
resp.ParseFromArray(recv_resp->data, recv_resp->length);
assert(resp.error() == managarm::posix::Errors::SUCCESS);
__ensure(resp.error() == managarm::posix::Errors::SUCCESS);
return dest_fd;
}
@ -487,7 +487,7 @@ int fcntl(int, int, ...) {
}
int isatty(int fd) {
assert(!"Fix this");
__ensure(!"Fix this");
/* managarm::posix::CntRequest<MemoryAllocator> request(getAllocator());
request.set_request_type(managarm::posix::CntReqType::TTY_NAME);
request.set_fd(fd);
@ -520,7 +520,7 @@ int isatty(int fd) {
}
char *ttyname(int fd) {
assert(!"Fix this");
__ensure(!"Fix this");
// TODO: this is not thread-safe.
/* frigg::String<MemoryAllocator> cache(getAllocator());

View file

@ -55,7 +55,7 @@ gid_t getegid(void) {
}
pid_t getpid(void) {
assert(!"Fix this");
__ensure(!"Fix this");
/* managarm::posix::ClientRequest<MemoryAllocator> request(getAllocator());
request.set_request_type(managarm::posix::ClientRequestType::GET_PID);
@ -75,7 +75,7 @@ pid_t getpid(void) {
managarm::posix::ServerResponse<MemoryAllocator> response(getAllocator());
response.ParseFromArray(buffer, length);
assert(response.error() == managarm::posix::Errors::SUCCESS);
__ensure(response.error() == managarm::posix::Errors::SUCCESS);
return response.pid();*/
}
pid_t getppid(void) {

View file

@ -26,7 +26,7 @@ MemoryAllocator &getAllocator() {
// --------------------------------------------------------
uintptr_t VirtualAllocator::map(size_t length) {
assert((length % 0x1000) == 0);
__ensure((length % 0x1000) == 0);
HelHandle memory;
void *actual_ptr;

View file

@ -45,7 +45,7 @@ int mount(const char *source, const char *target,
managarm::posix::SvrResponse<MemoryAllocator> resp(getAllocator());
resp.ParseFromArray(recv_resp->data, recv_resp->length);
assert(resp.error() == managarm::posix::Errors::SUCCESS);
__ensure(resp.error() == managarm::posix::Errors::SUCCESS);
return 0;
}

View file

@ -14,7 +14,7 @@
#include <posix.frigg_pb.hpp>
int connect(int fd, const struct sockaddr *address, socklen_t addr_length) {
assert(!"Fix this");
__ensure(!"Fix this");
/* managarm::posix::ClientRequest<MemoryAllocator> request(getAllocator());
request.set_request_type(managarm::posix::ClientRequestType::CONNECT);
request.set_fd(fd);