mirror of
https://github.com/Zenithsiz/ftmemsim-valgrind.git
synced 2026-02-09 13:18:15 +00:00
Also now checking the return value of every syscall in scalar, to make sure that they (mostly) fail as expected. Because occasionally one would succeed unexpectedly and unaddressable memory would be marked as addressable, and things would go haywire. (The fact that the wrapper sets the memory as addressable in these cases is a bug with the relevant wrappers; I'll fix them later.) git-svn-id: svn://svn.valgrind.org/valgrind/trunk@3023
50 lines
1.5 KiB
C
50 lines
1.5 KiB
C
// XXX: x86-specific, so these should be in x86/, or something
|
|
#include "../../coregrind/x86-linux/vki_unistd.h"
|
|
|
|
#include <assert.h>
|
|
#include <errno.h>
|
|
#include <fcntl.h>
|
|
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
#include <sys/syscall.h>
|
|
#include <sys/stat.h>
|
|
#include <sys/ptrace.h>
|
|
#include <sys/types.h>
|
|
|
|
// Since we use vki_unistd.h, we can't include <unistd.h>. So we have to
|
|
// declare this ourselves.
|
|
extern long int syscall (long int __sysno, ...) __THROW;
|
|
|
|
// Thorough syscall scalar arg checking. Also serves as thorough checking
|
|
// for (very) basic syscall use. Generally not trying to do anything
|
|
// meaningful with the syscalls.
|
|
|
|
#define GO(__NR_xxx, s) \
|
|
fprintf(stderr, "-----------------------------------------------------\n" \
|
|
"%3d:%20s %s\n" \
|
|
"-----------------------------------------------------\n", \
|
|
__NR_xxx, #__NR_xxx, s);
|
|
|
|
#define SY res = syscall
|
|
|
|
#define FAIL assert(-1 == res);
|
|
#define SUCC assert(-1 != res);
|
|
#define SUCC_OR_FAIL /* no test */
|
|
|
|
#define FAILx(E) \
|
|
do { \
|
|
int myerrno = errno; \
|
|
if (-1 == res) { \
|
|
if (E == myerrno) { \
|
|
/* as expected */ \
|
|
} else { \
|
|
fprintf(stderr, "Expected error %s (%d), got %d\n", #E, E, myerrno); \
|
|
exit(1); \
|
|
} \
|
|
} else { \
|
|
fprintf(stderr, "Expected error %s (%d), got success\n", #E, E); \
|
|
exit(1); \
|
|
} \
|
|
} while (0);
|
|
|