Merge r6092 and some of r6093:
AIX5 kernel-interface stuff.
git-svn-id: svn://svn.valgrind.org/valgrind/trunk@6245 a5019735-40e9-0310-863c-91ae7b9d1cf9
diff --git a/auxprogs/aix5_VKI_info.c b/auxprogs/aix5_VKI_info.c
new file mode 100644
index 0000000..e597b6f
--- /dev/null
+++ b/auxprogs/aix5_VKI_info.c
@@ -0,0 +1,340 @@
+
+/* Used to generate include/vki/vki-ppc{32,64}-aix5.h. */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <sys/statfs.h>
+#include <fcntl.h>
+#include <unistd.h>
+#include <sys/mman.h>
+#include <errno.h>
+#include <string.h>
+#include <time.h>
+#include <sys/ptrace.h>
+#include <sys/uio.h>
+#include <sys/ioctl.h>
+
+#undef offsetof
+
+/* This is so useful it should be visible absolutely everywhere. */
+#if !defined(offsetof)
+# define offsetof(type,memb) ((int)&((type*)0)->memb)
+#endif
+
+
+int main ( void )
+{
+ printf ("aix5_VKI_info: sizeof(void*) = %d\n", (int)sizeof(void*));
+
+ printf("/* ---------------- Errors ---------------- */\n");
+ printf("\n");
+ printf("#define VKI_EINVAL %d\n", EINVAL);
+ printf("#define VKI_EINTR %d\n", EINTR);
+ printf("#define VKI_ENOSYS %d\n", ENOSYS);
+ printf("#define VKI_EAGAIN %d\n", EAGAIN);
+ printf("#define VKI_ENOMEM %d\n", ENOMEM);
+ printf("#define VKI_EACCES %d\n", EACCES);
+ printf("#define VKI_EEXIST %d\n", EEXIST);
+ printf("#define VKI_EPERM %d\n", EPERM);
+ printf("#define VKI_ENOENT %d\n", ENOENT);
+ printf("#define VKI_ESRCH %d\n", ESRCH);
+ printf("#define VKI_EBADF %d\n", EBADF);
+ printf("#define VKI_EFAULT %d\n", EFAULT);
+ printf("#define VKI_EMFILE %d\n", EMFILE);
+ printf("#define VKI_ECHILD %d\n", ECHILD);
+ printf("#define VKI_EOVERFLOW %d\n", EOVERFLOW);
+ printf("\n");
+ printf("/* ---------------- File I/O ---------------- */\n");
+ printf("\n");
+ printf("#define VKI_O_WRONLY 0x%08x\n", O_WRONLY);
+ printf("#define VKI_O_RDONLY 0x%08x\n", O_RDONLY);
+ printf("#define VKI_O_APPEND 0x%08x\n", O_APPEND);
+ printf("#define VKI_O_CREAT 0x%08x\n", O_CREAT);
+ printf("#define VKI_O_RDWR 0x%08x\n", O_RDWR);
+ printf("#define VKI_O_EXCL 0x%08x\n", O_EXCL);
+ printf("#define VKI_O_TRUNC 0x%08x\n", O_TRUNC);
+ printf("\n");
+ printf("#define VKI_S_IRUSR 0x%08x\n", S_IRUSR);
+ printf("#define VKI_S_IXUSR 0x%08x\n", S_IXUSR);
+ printf("#define VKI_S_IXGRP 0x%08x\n", S_IXGRP);
+ printf("#define VKI_S_IXOTH 0x%08x\n", S_IXOTH);
+ printf("#define VKI_S_IWUSR 0x%08x\n", S_IWUSR);
+ printf("#define VKI_S_ISUID 0x%08x\n", S_ISUID);
+ printf("#define VKI_S_ISGID 0x%08x\n", S_ISGID);
+ printf("#define VKI_S_IFMT 0x%08x\n", S_IFMT);
+ printf("#define VKI_S_IFDIR 0x%08x\n", S_IFDIR);
+ printf("#define VKI_S_IFCHR 0x%08x\n", S_IFCHR);
+ printf("#define VKI_S_IFBLK 0x%08x\n", S_IFBLK);
+ printf("\n");
+ printf("#define VKI_F_DUPFD 0x%08x\n", F_DUPFD);
+ printf("#define VKI_F_SETFD 0x%08x\n", F_SETFD);
+ printf("#define VKI_FD_CLOEXEC 0x%08x\n", FD_CLOEXEC);
+ printf("\n");
+ printf("#define VKI_R_OK 0x%08x\n", R_OK);
+ printf("#define VKI_W_OK 0x%08x\n", W_OK);
+ printf("#define VKI_X_OK 0x%08x\n", X_OK);
+
+ /* info about struct stat */
+ struct stat st;
+ printf("\nsizeof(struct stat) = %d\n", (int)sizeof(struct stat));
+
+ printf(" st_size: off %2d sz %d\n",
+ offsetof(struct stat, st_size),
+ (int)sizeof(st.st_size));
+
+ printf(" st_mode: off %2d sz %d\n",
+ offsetof(struct stat, st_mode),
+ (int)sizeof(st.st_mode));
+
+ printf(" st_uid: off %2d sz %d\n",
+ offsetof(struct stat, st_uid),
+ (int)sizeof(st.st_uid));
+
+ printf(" st_gid: off %2d sz %d\n",
+ offsetof(struct stat, st_gid),
+ (int)sizeof(st.st_gid));
+
+ printf(" st_dev: off %2d sz %d\n",
+ offsetof(struct stat, st_dev),
+ (int)sizeof(st.st_dev));
+
+ printf(" st_ino: off %2d sz %d\n",
+ offsetof(struct stat, st_ino),
+ (int)sizeof(st.st_ino));
+
+ printf("\n");
+ printf("#define VKI_STX_NORMAL %d\n", (int)STX_NORMAL);
+ printf("\n");
+ printf("sizeof(size_t) = %d\n", (int)sizeof(size_t) );
+ printf("\n");
+ printf("#define VKI_SEEK_SET %d\n", SEEK_SET);
+ printf("#define VKI_PATH_MAX %d\n", PATH_MAX);
+
+ /* info about struct iovec */
+ struct iovec iov;
+ printf("\nsizeof(struct iovec) = %d\n", (int)sizeof(struct iovec));
+ printf(" iov_base: off %2d sz %d\n",
+ offsetof(struct iovec, iov_base),
+ (int)sizeof(iov.iov_base));
+ printf(" iov_len: off %2d sz %d\n",
+ offsetof(struct iovec, iov_len),
+ (int)sizeof(iov.iov_len));
+
+ printf("\n");
+ printf("#define _VKI_IOC_NONE %d\n", 3 & (IOC_VOID >> 30));
+ printf("#define _VKI_IOC_READ %d\n", 3 & (IOC_OUT >> 30));
+ printf("#define _VKI_IOC_WRITE %d\n", 3 & (IOC_IN >> 30));
+ printf("\n");
+ printf("/* ---------------- MMappery ---------------- */\n");
+ printf("\n");
+ printf("#define VKI_PAGE_SIZE %d\n", (int)sysconf(_SC_PAGESIZE));
+ printf("\n");
+ printf("#define VKI_PROT_NONE 0x%08x\n", PROT_NONE);
+ printf("#define VKI_PROT_READ 0x%08x\n", PROT_READ);
+ printf("#define VKI_PROT_WRITE 0x%08x\n", PROT_WRITE);
+ printf("#define VKI_PROT_EXEC 0x%08x\n", PROT_EXEC);
+ printf("\n");
+ printf("#define VKI_MAP_FIXED 0x%08x\n", MAP_FIXED);
+ printf("#define VKI_MAP_PRIVATE 0x%08x\n", MAP_PRIVATE);
+ printf("#define VKI_MAP_ANONYMOUS 0x%08x\n", MAP_ANONYMOUS);
+ printf("\n");
+ printf("/* ---------------- RLimitery ---------------- */\n");
+ printf("\n");
+ printf("#define VKI_RLIMIT_DATA 0x%08x\n", RLIMIT_DATA);
+ printf("#define VKI_RLIMIT_NOFILE 0x%08x\n", RLIMIT_NOFILE);
+ printf("#define VKI_RLIMIT_STACK 0x%08x\n", RLIMIT_STACK);
+ printf("#define VKI_RLIMIT_CORE 0x%08x\n", RLIMIT_CORE);
+
+ /* info about struct rlimit */
+ struct rlimit rl;
+ printf("\nsizeof(struct rlimit) = %d\n", (int)sizeof(struct rlimit));
+ printf(" rlim_cur: off %2d sz %d\n",
+ offsetof(struct rlimit, rlim_cur),
+ (int)sizeof(rl.rlim_cur));
+ printf(" rlim_max: off %2d sz %d\n",
+ offsetof(struct rlimit, rlim_max),
+ (int)sizeof(rl.rlim_max));
+ printf("\n");
+ printf("/* ---------------- Time ---------------- */\n");
+ printf("\n");
+
+ /* print info about struct timeval */
+ struct timeval tv;
+ printf("sizeof(struct timeval) = %d\n", (int)sizeof(struct timeval));
+ printf(" tv_sec: off %2d sz %d\n",
+ offsetof(struct timeval, tv_sec),
+ (int)sizeof(tv.tv_sec));
+ printf(" tv_usec: off %2d sz %d\n",
+ offsetof(struct timeval, tv_usec),
+ (int)sizeof(tv.tv_usec));
+
+ /* print info about struct timespec */
+ struct timespec ts;
+ printf("\nsizeof(struct timespec) = %d\n", (int)sizeof(struct timespec));
+ printf(" tv_sec: off %2d sz %d\n",
+ offsetof(struct timespec, tv_sec),
+ (int)sizeof(ts.tv_sec));
+ printf(" tv_nsec: off %2d sz %d\n",
+ offsetof(struct timespec, tv_nsec),
+ (int)sizeof(ts.tv_nsec));
+
+ printf("\n");
+ printf("/* ---------------- Signals ---------------- */\n");
+ printf("\n");
+ printf("#define _VKI_NSIG %ld\n", 8 * sizeof(sigset_t) );
+ printf("\n");
+ printf("#define VKI_SIGSEGV %d\n", SIGSEGV);
+ printf("#define VKI_SIGBUS %d\n", SIGBUS);
+ printf("#define VKI_SIGFPE %d\n", SIGFPE);
+ printf("#define VKI_SIGHUP %d\n", SIGHUP);
+ printf("#define VKI_SIGINT %d\n", SIGINT);
+ printf("#define VKI_SIGQUIT %d\n", SIGQUIT);
+ printf("#define VKI_SIGABRT %d\n", SIGABRT);
+ printf("#define VKI_SIGUSR1 %d\n", SIGUSR1);
+ printf("#define VKI_SIGUSR2 %d\n", SIGUSR2);
+ printf("#define VKI_SIGPIPE %d\n", SIGPIPE);
+ printf("#define VKI_SIGALRM %d\n", SIGALRM);
+ printf("#define VKI_SIGTERM %d\n", SIGTERM);
+ printf("/* VKI_SIGSTKFLT does not exist on AIX 5.2 */\n");
+ printf("#define VKI_SIGTTIN %d\n", SIGTTIN);
+ printf("#define VKI_SIGTTOU %d\n", SIGTTOU);
+ printf("#define VKI_SIGXCPU %d\n", SIGXCPU);
+ printf("#define VKI_SIGXFSZ %d\n", SIGXFSZ);
+ printf("#define VKI_SIGVTALRM %d\n", SIGVTALRM);
+ printf("#define VKI_SIGPROF %d\n", SIGPROF);
+ printf("#define VKI_SIGIO %d\n", SIGIO);
+ printf("#define VKI_SIGPWR %d\n", SIGPWR);
+ printf("/* VKI_SIGUNUSED does not exist on AIX 5.2 */\n");
+ printf("#define VKI_SIGRTMIN %d\n", SIGRTMIN);
+ printf("#define VKI_SIGRTMAX %d\n", SIGRTMAX);
+ printf("#define VKI_SIGTRAP %d\n", SIGTRAP);
+ printf("#define VKI_SIGCONT %d\n", SIGCONT);
+ printf("#define VKI_SIGCHLD %d\n", SIGCHLD);
+ printf("#define VKI_SIGWINCH %d\n", SIGWINCH);
+ printf("#define VKI_SIGURG %d\n", SIGURG);
+ printf("#define VKI_SIGILL %d\n", SIGILL);
+ printf("#define VKI_SIGSTOP %d\n", SIGSTOP);
+ printf("#define VKI_SIGKILL %d\n", SIGKILL);
+ printf("#define VKI_SIGTSTP %d\n", SIGTSTP);
+ printf("#define VKI_SIGSYS %d\n", SIGSYS);
+
+ /* print info about struct sigaction */
+ struct sigaction sa;
+ printf("\n");
+ printf("sizeof(struct sigaction) = %d\n", (int)sizeof(struct sigaction));
+ printf(" sa_handler: off %2d sz %d\n",
+ offsetof(struct sigaction, sa_handler),
+ (int)sizeof(sa.sa_handler));
+ printf(" sa_mask: off %2d sz %d\n",
+ offsetof(struct sigaction, sa_mask),
+ (int)sizeof(sa.sa_mask));
+ printf(" sa_flags: off %2d sz %d\n",
+ offsetof(struct sigaction, sa_flags),
+ (int)sizeof(sa.sa_flags));
+ printf("sa_sigaction: off %2d sz %d\n",
+ offsetof(struct sigaction, sa_sigaction),
+ (int)sizeof(sa.sa_sigaction));
+ printf("\n");
+ printf("#define VKI_SA_ONSTACK %d\n",SA_ONSTACK );
+ printf("#define VKI_SA_RESTART %d\n",SA_RESTART );
+ printf("#define VKI_SA_RESETHAND %d\n",SA_RESETHAND );
+ printf("#define VKI_SA_SIGINFO %d\n",SA_SIGINFO);
+ printf("#define VKI_SA_NODEFER %d\n",SA_NODEFER );
+ // printf("#define VKI_SA_NOMASK %d\n",SA_NOMASK ) ;
+ // printf("#define VKI_SA_ONESHOT %d\n",SA_ONESHOT );
+ printf("#define VKI_SA_NOCLDSTOP %d\n",SA_NOCLDSTOP );
+ printf("#define VKI_SA_NOCLDWAIT %d\n",SA_NOCLDWAIT );
+ // printf("#define VKI_SA_RESTORER %d\n",SA_RESTORER );
+ printf("\n");
+ printf("#define VKI_SS_ONSTACK %d\n",SS_ONSTACK );
+ printf("#define VKI_SS_DISABLE %d\n",SS_DISABLE );
+ printf("\n");
+ printf("#define VKI_MINSIGSTKSZ %ld\n",MINSIGSTKSZ );
+ printf("\n");
+ printf("#define VKI_SI_USER %d\n",SI_USER );
+ printf("\n");
+ printf("#define VKI_SIG_BLOCK %d\n",SIG_BLOCK );
+ printf("#define VKI_SIG_SETMASK %d\n",SIG_SETMASK );
+ printf("#define VKI_SIG_UNBLOCK %d\n",SIG_UNBLOCK );
+ printf("#define VKI_SIG_IGN (void*)%d\n",(int)SIG_IGN );
+ printf("#define VKI_SIG_DFL (void*)%d\n",(int)SIG_DFL );
+ printf("\n");
+ // printf("#define VKI_SI_TKILL %d\n",SI_TKILL );
+ printf("#define VKI_SI_USER %d\n",SI_USER );
+ printf("\n");
+ printf("#define VKI_SEGV_ACCERR %d\n", SEGV_ACCERR);
+ printf("#define VKI_SEGV_MAPERR %d\n", SEGV_MAPERR);
+ printf("\n");
+ printf("#define VKI_TRAP_TRACE %d\n", TRAP_TRACE);
+ printf("#define VKI_BUS_OBJERR %d\n", BUS_OBJERR);
+ printf("#define VKI_BUS_ADRERR %d\n", BUS_ADRERR);
+ printf("#define VKI_BUS_ADRALN %d\n", BUS_ADRALN);
+ printf("#define VKI_FPE_FLTSUB %d\n", FPE_FLTSUB);
+ printf("#define VKI_FPE_FLTINV %d\n", FPE_FLTINV);
+ printf("#define VKI_FPE_FLTRES %d\n", FPE_FLTRES);
+ printf("#define VKI_FPE_FLTUND %d\n", FPE_FLTUND);
+ printf("#define VKI_FPE_FLTOVF %d\n", FPE_FLTOVF);
+ printf("#define VKI_FPE_FLTDIV %d\n", FPE_FLTDIV);
+ printf("#define VKI_FPE_INTOVF %d\n", FPE_INTOVF);
+ printf("#define VKI_FPE_INTDIV %d\n", FPE_INTDIV);
+ printf("\n");
+ printf("#define VKI_ILL_BADSTK %d\n", ILL_BADSTK);
+ printf("#define VKI_ILL_COPROC %d\n", ILL_COPROC);
+ printf("#define VKI_ILL_PRVREG %d\n", ILL_PRVREG);
+ printf("#define VKI_ILL_PRVOPC %d\n", ILL_PRVOPC);
+ printf("#define VKI_ILL_ILLTRP %d\n", ILL_ILLTRP);
+ printf("#define VKI_ILL_ILLADR %d\n", ILL_ILLADR);
+ printf("#define VKI_ILL_ILLOPN %d\n", ILL_ILLOPN);
+ printf("#define VKI_ILL_ILLOPC %d\n", ILL_ILLOPC);
+
+ /* info about siginfo_t */
+ siginfo_t si;
+ printf("\nsizeof(siginfo_t) = %d\n", (int)sizeof(siginfo_t));
+ printf(" si_signo: off %2d sz %d\n",
+ offsetof(siginfo_t, si_signo),
+ (int)sizeof(si.si_signo));
+ printf(" si_code: off %2d sz %d\n",
+ offsetof(siginfo_t, si_code),
+ (int)sizeof(si.si_code));
+ printf(" si_pid: off %2d sz %d\n",
+ offsetof(siginfo_t, si_pid),
+ (int)sizeof(si.si_pid));
+ printf(" si_addr: off %2d sz %d\n",
+ offsetof(siginfo_t, si_addr),
+ (int)sizeof(si.si_addr));
+
+ /* info about sigaltstack */
+ stack_t ss;
+ printf("\nsizeof(stack_t) = %d\n", (int)sizeof(stack_t));
+ printf(" ss_sp: off %2d sz %d\n",
+ offsetof(stack_t, ss_sp),
+ (int)sizeof(ss.ss_sp));
+ printf(" ss_size: off %2d sz %d\n",
+ offsetof(stack_t, ss_size),
+ (int)sizeof(ss.ss_size));
+ printf(" ss_flags: off %2d sz %d\n",
+ offsetof(stack_t, ss_flags),
+ (int)sizeof(ss.ss_flags));
+
+ printf("\n");
+ printf("/* ---------------- Misc ---------------- */\n");
+ printf("\n");
+ printf("#define VKI_PTRACE_TRACEME %d\n", PT_TRACE_ME);
+ printf("#define VKI_PTRACE_DETACH %d\n", PT_DETACH);
+ printf("\n");
+
+#if 0
+ printf("#define VKI_ %d\n", );
+ printf("#define VKI_ %d\n", );
+ printf("#define VKI_ %d\n", );
+ printf("#define VKI_ %d\n", );
+
+ printf("#define VKI_ 0x%08x\n", );
+ printf("#define VKI_ 0x%08x\n", );
+ printf("#define VKI_ 0x%08x\n", );
+ printf("#define VKI_ 0x%08x\n", );
+#endif
+ return 0;
+}