Skip to content

Commit 5f8541e

Browse files
arrowdccadar
authored andcommitted
More FreeBSD related fixes to POSIX runtime.
1 parent e5743af commit 5f8541e

5 files changed

Lines changed: 43 additions & 9 deletions

File tree

runtime/POSIX/FreeBSD.h

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,8 @@
1515

1616
#define stat64 stat
1717

18+
#include <sys/syscall.h>
19+
1820
struct rlimit64;
1921

2022
#define __NR_syscall SYS_syscall
@@ -134,9 +136,17 @@ struct rlimit64;
134136
#define __NR_setgid SYS_setgid
135137
#define __NR_setegid SYS_setegid
136138
#define __NR_seteuid SYS_seteuid
139+
#ifdef SYS_stat
137140
#define __NR_stat SYS_stat
141+
#else
142+
#define __NR_stat SYS_freebsd11_stat
143+
#endif
138144
#define __NR_fstat SYS_fstat
145+
#ifdef SYS_lstat
139146
#define __NR_lstat SYS_lstat
147+
#else
148+
#define __NR_lstat SYS_freebsd11_lstat
149+
#endif
140150
#define __NR_pathconf SYS_pathconf
141151
#define __NR_fpathconf SYS_fpathconf
142152
#define __NR_getrlimit SYS_getrlimit
@@ -183,8 +193,13 @@ struct rlimit64;
183193
#define __NR_aio_read SYS_aio_read
184194
#define __NR_aio_write SYS_aio_write
185195
#define __NR_lio_listio SYS_lio_listio
196+
#ifdef SYS_getdents
186197
#define __NR_getdents SYS_getdents
187198
#define __NR_getdents64 SYS_getdents
199+
#else
200+
#define __NR_getdents SYS_freebsd11_getdents
201+
#define __NR_getdents64 SYS_freebsd11_getdents
202+
#endif
188203
#define __NR_lchmod SYS_lchmod
189204
#define __NR_netbsd_lchown SYS_netbsd_lchown
190205
#define __NR_lutimes SYS_lutimes

runtime/POSIX/fd_32.c

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@ int open(const char *pathname, int flags, ...) {
7171
/* get mode */
7272
va_list ap;
7373
va_start(ap, flags);
74-
mode = va_arg(ap, mode_t);
74+
mode = va_arg(ap, int);
7575
va_end(ap);
7676
}
7777

@@ -85,7 +85,7 @@ int openat(int fd, const char *pathname, int flags, ...) {
8585
/* get mode */
8686
va_list ap;
8787
va_start(ap, flags);
88-
mode = va_arg(ap, mode_t);
88+
mode = va_arg(ap, int);
8989
va_end(ap);
9090
}
9191

@@ -170,7 +170,7 @@ int statfs(const char *path, struct statfs *buf32) {
170170
#ifndef __FreeBSD__
171171
ssize_t getdents(int fd, struct dirent *dirp, size_t nbytes) {
172172
#else
173-
int getdents(int fd, char *dirp, int nbytes) {
173+
ssize_t getdents(int fd, char *dirp, size_t nbytes) {
174174
#endif
175175
struct dirent64 *dp64 = (struct dirent64*) dirp;
176176
ssize_t res = __fd_getdents(fd, dp64, nbytes);
@@ -179,7 +179,7 @@ int getdents(int fd, char *dirp, int nbytes) {
179179
struct dirent64 *end = (struct dirent64*) ((char*) dp64 + res);
180180
while (dp64 < end) {
181181
struct dirent *dp = (struct dirent *) dp64;
182-
size_t name_len = (dp64->d_reclen -
182+
size_t name_len = (dp64->d_reclen -
183183
(size_t) &((struct dirent64*) 0)->d_name);
184184
dp->d_ino = dp64->d_ino;
185185
#ifdef _DIRENT_HAVE_D_OFF
@@ -206,7 +206,7 @@ __attribute__((weak)) int open64(const char *pathname, int flags, ...) {
206206
/* get mode */
207207
va_list ap;
208208
va_start(ap, flags);
209-
mode = va_arg(ap, mode_t);
209+
mode = va_arg(ap, int);
210210
va_end(ap);
211211
}
212212

runtime/POSIX/fd_64.c

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -46,12 +46,12 @@
4646

4747
int open(const char *pathname, int flags, ...) {
4848
mode_t mode = 0;
49-
49+
5050
if (flags & O_CREAT) {
5151
/* get mode */
5252
va_list ap;
5353
va_start(ap, flags);
54-
mode = va_arg(ap, mode_t);
54+
mode = va_arg(ap, int);
5555
va_end(ap);
5656
}
5757

@@ -60,12 +60,12 @@ int open(const char *pathname, int flags, ...) {
6060

6161
int openat(int fd, const char *pathname, int flags, ...) {
6262
mode_t mode = 0;
63-
63+
6464
if (flags & O_CREAT) {
6565
/* get mode */
6666
va_list ap;
6767
va_start(ap, flags);
68-
mode = va_arg(ap, mode_t);
68+
mode = va_arg(ap, int);
6969
va_end(ap);
7070
}
7171

runtime/POSIX/illegal.c

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,8 +25,13 @@ int kill(pid_t pid, int sig) {
2525
return -1;
2626
}
2727

28+
#ifndef __FreeBSD__
2829
int _setjmp (struct __jmp_buf_tag __env[1]) __attribute__((weak));
2930
int _setjmp (struct __jmp_buf_tag __env[1]) {
31+
#else
32+
int _setjmp (jmp_buf env) __returns_twice;
33+
int _setjmp (jmp_buf env) {
34+
#endif
3035
klee_warning_once("ignoring");
3136
return 0;
3237
}

runtime/POSIX/stubs.c

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,9 @@
1919
#include <time.h>
2020
#include <unistd.h>
2121
#include <utime.h>
22+
#ifndef __FreeBSD__
2223
#include <utmp.h>
24+
#endif
2325
#include <sys/mman.h>
2426
#include <sys/resource.h>
2527
#include <sys/stat.h>
@@ -484,8 +486,13 @@ int setpgrp(pid_t a, pid_t b) {
484486
return -1;
485487
}
486488

489+
#ifndef __FreeBSD__
487490
int setpriority(__priority_which_t which, id_t who, int prio) __attribute__((weak));
488491
int setpriority(__priority_which_t which, id_t who, int prio) {
492+
#else
493+
int setpriority(int which, int who, int prio) __attribute__((weak));
494+
int setpriority(int which, int who, int prio) {
495+
#endif
489496
klee_warning("ignoring (EPERM)");
490497
errno = EPERM;
491498
return -1;
@@ -505,19 +512,26 @@ int setresuid(uid_t ruid, uid_t euid, uid_t suid) {
505512
return -1;
506513
}
507514

515+
#ifndef __FreeBSD__
508516
int setrlimit(__rlimit_resource_t resource, const struct rlimit *rlim) __attribute__((weak));
509517
int setrlimit(__rlimit_resource_t resource, const struct rlimit *rlim) {
518+
#else
519+
int setrlimit(int resource, const struct rlimit *rlp) __attribute__((weak));
520+
int setrlimit(int resource, const struct rlimit *rlp) {
521+
#endif
510522
klee_warning("ignoring (EPERM)");
511523
errno = EPERM;
512524
return -1;
513525
}
514526

527+
#ifndef __FreeBSD__
515528
int setrlimit64(__rlimit_resource_t resource, const struct rlimit64 *rlim) __attribute__((weak));
516529
int setrlimit64(__rlimit_resource_t resource, const struct rlimit64 *rlim) {
517530
klee_warning("ignoring (EPERM)");
518531
errno = EPERM;
519532
return -1;
520533
}
534+
#endif
521535

522536
pid_t setsid(void) __attribute__((weak));
523537
pid_t setsid(void) {

0 commit comments

Comments
 (0)