Rizin
unix-like reverse engineering framework and cli tools
qnx.c
Go to the documentation of this file.
1 /* Copyright libuv contributors. All rights reserved.
2  *
3  * Permission is hereby granted, free of charge, to any person obtaining a copy
4  * of this software and associated documentation files (the "Software"), to
5  * deal in the Software without restriction, including without limitation the
6  * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
7  * sell copies of the Software, and to permit persons to whom the Software is
8  * furnished to do so, subject to the following conditions:
9  *
10  * The above copyright notice and this permission notice shall be included in
11  * all copies or substantial portions of the Software.
12  *
13  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16  * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
18  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
19  * IN THE SOFTWARE.
20  */
21 
22 #include "uv.h"
23 #include "internal.h"
24 
25 #include <string.h>
26 #include <sys/process.h>
27 #include <sys/neutrino.h>
28 #include <sys/memmsg.h>
29 #include <sys/syspage.h>
30 #include <sys/procfs.h>
31 
32 static void
33 get_mem_info(uint64_t* totalmem, uint64_t* freemem) {
34  mem_info_t msg;
35 
36  memset(&msg, 0, sizeof(msg));
37  msg.i.type = _MEM_INFO;
38  msg.i.fd = -1;
39 
40  if (MsgSend(MEMMGR_COID, &msg.i, sizeof(msg.i), &msg.o, sizeof(msg.o))
41  != -1) {
42  *totalmem = msg.o.info.__posix_tmi_total;
43  *freemem = msg.o.info.posix_tmi_length;
44  } else {
45  *totalmem = 0;
46  *freemem = 0;
47  }
48 }
49 
50 
51 void uv_loadavg(double avg[3]) {
52  avg[0] = 0.0;
53  avg[1] = 0.0;
54  avg[2] = 0.0;
55 }
56 
57 
58 int uv_exepath(char* buffer, size_t* size) {
59  char path[PATH_MAX];
60  if (buffer == NULL || size == NULL || *size == 0)
61  return UV_EINVAL;
62 
63  realpath(_cmdname(NULL), path);
64  strlcpy(buffer, path, *size);
65  *size = strlen(buffer);
66  return 0;
67 }
68 
69 
71  uint64_t totalmem;
72  uint64_t freemem;
73  get_mem_info(&totalmem, &freemem);
74  return freemem;
75 }
76 
77 
79  uint64_t totalmem;
80  uint64_t freemem;
81  get_mem_info(&totalmem, &freemem);
82  return totalmem;
83 }
84 
85 
87  return 0;
88 }
89 
90 
91 int uv_resident_set_memory(size_t* rss) {
92  int fd;
93  procfs_asinfo asinfo;
94 
95  fd = uv__open_cloexec("/proc/self/ctl", O_RDONLY);
96  if (fd == -1)
97  return UV__ERR(errno);
98 
99  if (devctl(fd, DCMD_PROC_ASINFO, &asinfo, sizeof(asinfo), 0) == -1) {
100  uv__close(fd);
101  return UV__ERR(errno);
102  }
103 
104  uv__close(fd);
105  *rss = asinfo.rss;
106  return 0;
107 }
108 
109 
110 int uv_uptime(double* uptime) {
111  struct qtime_entry* qtime = _SYSPAGE_ENTRY(_syspage_ptr, qtime);
112  *uptime = (qtime->nsec / 1000000000.0);
113  return 0;
114 }
115 
116 
117 int uv_cpu_info(uv_cpu_info_t** cpu_infos, int* count) {
118  struct cpuinfo_entry* cpuinfo =
119  (struct cpuinfo_entry*)_SYSPAGE_ENTRY(_syspage_ptr, new_cpuinfo);
120  size_t cpuinfo_size = _SYSPAGE_ELEMENT_SIZE(_syspage_ptr, cpuinfo);
121  struct strings_entry* strings = _SYSPAGE_ENTRY(_syspage_ptr, strings);
122  int num_cpus = _syspage_ptr->num_cpu;
123  int i;
124 
125  *count = num_cpus;
126  *cpu_infos = uv__malloc(num_cpus * sizeof(**cpu_infos));
127  if (*cpu_infos == NULL)
128  return UV_ENOMEM;
129 
130  for (i = 0; i < num_cpus; i++) {
131  (*cpu_infos)[i].model = strdup(&strings->data[cpuinfo->name]);
132  (*cpu_infos)[i].speed = cpuinfo->speed;
133  SYSPAGE_ARRAY_ADJ_OFFSET(cpuinfo, cpuinfo, cpuinfo_size);
134  }
135 
136  return 0;
137 }
lzma_index ** i
Definition: index.h:629
#define NULL
Definition: cris-opc.c:27
static static fork const void static count static fd const char const char static newpath const char static path const char path
Definition: sflib.h:35
static static sync static getppid static getegid const char static filename char static len const char char static bufsiz static mask static vfork const void static prot static getpgrp const char static swapflags static arg static fd static protocol static who struct sockaddr static addrlen static backlog struct timeval struct timezone static tz const struct iovec static count static mode const void const struct sockaddr static tolen const char static pathname void count
Definition: sflib.h:98
#define UV__ERR(x)
Definition: errno.h:29
checking print the parsed form of the magic use in n conjunction with m to debug a new magic file n before installing it n output MIME type strings(--mime-type and\n" " --mime-encoding)\n") OPT('s'
voidpf void uLong size
Definition: ioapi.h:138
return memset(p, 0, total)
return strdup("=SP r13\n" "=LR r14\n" "=PC r15\n" "=A0 r0\n" "=A1 r1\n" "=A2 r2\n" "=A3 r3\n" "=ZF zf\n" "=SF nf\n" "=OF vf\n" "=CF cf\n" "=SN or0\n" "gpr lr .32 56 0\n" "gpr pc .32 60 0\n" "gpr cpsr .32 64 0 ____tfiae_________________qvczn\n" "gpr or0 .32 68 0\n" "gpr tf .1 64.5 0 thumb\n" "gpr ef .1 64.9 0 endian\n" "gpr jf .1 64.24 0 java\n" "gpr qf .1 64.27 0 sticky_overflow\n" "gpr vf .1 64.28 0 overflow\n" "gpr cf .1 64.29 0 carry\n" "gpr zf .1 64.30 0 zero\n" "gpr nf .1 64.31 0 negative\n" "gpr itc .4 64.10 0 if_then_count\n" "gpr gef .4 64.16 0 great_or_equal\n" "gpr r0 .32 0 0\n" "gpr r1 .32 4 0\n" "gpr r2 .32 8 0\n" "gpr r3 .32 12 0\n" "gpr r4 .32 16 0\n" "gpr r5 .32 20 0\n" "gpr r6 .32 24 0\n" "gpr r7 .32 28 0\n" "gpr r8 .32 32 0\n" "gpr r9 .32 36 0\n" "gpr r10 .32 40 0\n" "gpr r11 .32 44 0\n" "gpr r12 .32 48 0\n" "gpr r13 .32 52 0\n" "gpr r14 .32 56 0\n" "gpr r15 .32 60 0\n" "gpr r16 .32 64 0\n" "gpr r17 .32 68 0\n")
uint64_t uv_get_total_memory(void)
Definition: qnx.c:78
void uv_loadavg(double avg[3])
Definition: qnx.c:51
uint64_t uv_get_free_memory(void)
Definition: qnx.c:70
static void get_mem_info(uint64_t *totalmem, uint64_t *freemem)
Definition: qnx.c:33
int uv_uptime(double *uptime)
Definition: qnx.c:110
int uv_cpu_info(uv_cpu_info_t **cpu_infos, int *count)
Definition: qnx.c:117
uint64_t uv_get_constrained_memory(void)
Definition: qnx.c:86
int uv_exepath(char *buffer, size_t *size)
Definition: qnx.c:58
int uv_resident_set_memory(size_t *rss)
Definition: qnx.c:91
static struct sockaddr static addrlen static backlog const void msg
Definition: sfsocketcall.h:119
#define O_RDONLY
Definition: sftypes.h:486
unsigned long uint64_t
Definition: sftypes.h:28
Definition: buffer.h:15
int uv__open_cloexec(const char *path, int flags)
Definition: core.c:1003
int uv__close(int fd)
Definition: core.c:569
void * uv__malloc(size_t size)
Definition: uv-common.c:75
static const z80_opcode fd[]
Definition: z80_tab.h:997