1/* Ensure we get syscall declared. */ 2#define _DEFAULT_SOURCE 3 4#include <unistd.h> 5#include <link.h> 6#include <syscall.h> 7 8#define STRING_COMMA_LEN(STR) (STR), (sizeof (STR) - 1) 9 10int 11main (int argc, char **argv) 12{ 13 char **ev = &argv[argc + 1]; 14 char **evp = ev; 15 ElfW(auxv_t) *av; 16 const ElfW(Phdr) *phdr = NULL; 17 size_t phnum = 0; 18 size_t loadnum = 0; 19 int fd = STDOUT_FILENO; 20 size_t i; 21 22 while (*evp++ != NULL) 23 ; 24 25 av = (ElfW(auxv_t) *) evp; 26 27 for (; av->a_type != AT_NULL; ++av) 28 switch (av->a_type) 29 { 30 case AT_PHDR: 31 phdr = (const void *) av->a_un.a_val; 32 break; 33 case AT_PHNUM: 34 phnum = av->a_un.a_val; 35 break; 36 } 37 38 for (i = 0; i < phnum; i++, phdr++) 39 if (phdr->p_type == PT_LOAD) 40 loadnum++; 41 42 syscall (SYS_write, fd, STRING_COMMA_LEN ("PASS\n")); 43 44 syscall (SYS_exit, !loadnum); 45 return 0; 46} 47