Home | History | Annotate | Download | only in darwin
      1 // Small test program to demonstrate Valgrind bug.
      2 // https://bugs.kde.org/show_bug.cgi?id=254164
      3 
      4 
      5 #include <stdio.h>
      6 #include <sys/resource.h>
      7 
      8 #include <unistd.h>
      9 #include <stdio.h>
     10 #include <stdlib.h>
     11 #include <sys/types.h>
     12 #include <sys/sysctl.h>
     13 #include <mach/task.h>
     14 #include <mach/mach_init.h>
     15 
     16 void getres(task_t task, unsigned int *rss, unsigned int *vs)
     17 {
     18     struct task_basic_info t_info;
     19     mach_msg_type_number_t t_info_count = TASK_BASIC_INFO_COUNT;
     20 
     21     task_info(task, TASK_BASIC_INFO, (task_info_t)&t_info, &t_info_count);
     22     *rss = t_info.resident_size;
     23     *vs = t_info.virtual_size;
     24 }
     25 
     26 /** It appears task_set_info() is a deprecated interface on modern Darwin
     27   * Per comments in osfmk/kern/task.c:
     28   *
     29   *   This routine was added, pretty much exclusively, for registering the
     30   *   RPC glue vector for in-kernel short circuited tasks. Rather than
     31   *   removing it completely, I have only disabled that feature (which was
     32   *   the only feature at the time).
     33   */
     34 /**
     35 void setres(task_t task)
     36 {
     37     struct task_trace_memory_info t_info;
     38     mach_msg_type_number_t t_info_count = TASK_TRACE_MEMORY_INFO_COUNT;
     39 
     40     t_info.user_memory_address = NULL;
     41     t_info.buffer_size = 0;
     42     t_info.mailbox_array_size = 0;
     43 
     44     task_set_info(task, TASK_TRACE_MEMORY_INFO, (task_info_t)&t_info, &t_info_count);
     45 }
     46  */
     47 
     48 int main(void)
     49 {
     50     unsigned int rss, vs;
     51     task_t task = MACH_PORT_NULL;
     52 
     53     if (task_for_pid(current_task(), getpid(), &task) != KERN_SUCCESS)
     54         abort();
     55 
     56     getres(task, &rss, &vs);
     57     //setres(task);
     58 
     59     return 0;
     60 }
     61 
     62