mirror of
https://github.com/Zenithsiz/ftmemsim-valgrind.git
synced 2026-02-04 02:18:37 +00:00
60 lines
1.4 KiB
C
60 lines
1.4 KiB
C
#include <string.h>
|
|
#include <stdlib.h>
|
|
#include <unistd.h>
|
|
#include <sys/types.h>
|
|
#include <sys/stat.h>
|
|
#include <fcntl.h>
|
|
#include <sys/time.h>
|
|
|
|
// For some reason, the stack frame below __GI_write is disappearing.
|
|
// Therefore, if I don't want the write errors to be merged, I have to
|
|
// ensure they have a different stack trace. I do this by using this
|
|
// function. Weird.
|
|
__attribute__((noinline))
|
|
void mywrite(char* buf, int len)
|
|
{
|
|
write(-1, buf, len);
|
|
}
|
|
|
|
__attribute__((noinline))
|
|
void mygetitimer(long arg1, struct itimerval* itval)
|
|
{
|
|
getitimer(arg1, itval);
|
|
}
|
|
|
|
__attribute__((noinline))
|
|
void myopen(char* name, long flags)
|
|
{
|
|
open(name, flags);
|
|
}
|
|
|
|
int main(void)
|
|
{
|
|
char *buf = malloc(sizeof(char)*6), *buf2 = malloc(sizeof(char)*6);
|
|
struct itimerval* itval = malloc(sizeof(struct itimerval) - 1);
|
|
int diff = buf2 - buf;
|
|
buf[0] = 'h';
|
|
buf[1] = 'e';
|
|
buf[2] = 'l';
|
|
buf[3] = 'l';
|
|
buf[4] = 'o';
|
|
buf[5] = 'x';
|
|
|
|
// error (read) (will fail due to -1, as we want -- don't want any
|
|
// unpredictable output to foul up the test)
|
|
mywrite(buf+3, 5); // error (read)
|
|
mywrite(buf-1, 5); // error (read)
|
|
mywrite(buf+1, diff); // error (read)
|
|
myopen(buf+3, 0x0); // error (read_asciiz)
|
|
|
|
mygetitimer(0, itval); // error (write)
|
|
|
|
//----
|
|
free(buf);
|
|
mywrite(buf, 5); // error
|
|
mywrite(buf+3, 5); // error
|
|
mywrite(buf+1, diff); // error (read)
|
|
|
|
return 0;
|
|
}
|