Skip to content

Commit 7027037

Browse files
authored
Merge pull request #4053 from nanolith/openbsd_compatibility
OpenBSD compatibility
2 parents a86a434 + 3236da7 commit 7027037

File tree

4 files changed

+81
-12
lines changed

4 files changed

+81
-12
lines changed

src/ansi-c/c_preprocess.cpp

Lines changed: 42 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -589,19 +589,39 @@ bool c_preprocess_gcc_clang(
589589
switch(config.cpp.cpp_standard)
590590
{
591591
case configt::cppt::cpp_standardt::CPP98:
592-
argv.push_back("-std=gnu++98");
592+
#if defined(__OpenBSD__)
593+
if(preprocessor == configt::ansi_ct::preprocessort::CLANG)
594+
argv.push_back("-std=c++98");
595+
else
596+
#endif
597+
argv.push_back("-std=gnu++98");
593598
break;
594599

595600
case configt::cppt::cpp_standardt::CPP03:
596-
argv.push_back("-std=gnu++03");
601+
#if defined(__OpenBSD__)
602+
if(preprocessor == configt::ansi_ct::preprocessort::CLANG)
603+
argv.push_back("-std=c++03");
604+
else
605+
#endif
606+
argv.push_back("-std=gnu++03");
597607
break;
598608

599609
case configt::cppt::cpp_standardt::CPP11:
600-
argv.push_back("-std=gnu++11");
610+
#if defined(__OpenBSD__)
611+
if(preprocessor == configt::ansi_ct::preprocessort::CLANG)
612+
argv.push_back("-std=c++11");
613+
else
614+
#endif
615+
argv.push_back("-std=gnu++11");
601616
break;
602617

603618
case configt::cppt::cpp_standardt::CPP14:
604-
argv.push_back("-std=gnu++14");
619+
#if defined(__OpenBSD__)
620+
if(preprocessor == configt::ansi_ct::preprocessort::CLANG)
621+
argv.push_back("-std=c++14");
622+
else
623+
#endif
624+
argv.push_back("-std=gnu++14");
605625
break;
606626
}
607627
}
@@ -610,15 +630,30 @@ bool c_preprocess_gcc_clang(
610630
switch(config.ansi_c.c_standard)
611631
{
612632
case configt::ansi_ct::c_standardt::C89:
613-
argv.push_back("-std=gnu89");
633+
#if defined(__OpenBSD__)
634+
if(preprocessor == configt::ansi_ct::preprocessort::CLANG)
635+
argv.push_back("-std=c89");
636+
else
637+
#endif
638+
argv.push_back("-std=gnu89");
614639
break;
615640

616641
case configt::ansi_ct::c_standardt::C99:
617-
argv.push_back("-std=gnu99");
642+
#if defined(__OpenBSD__)
643+
if(preprocessor == configt::ansi_ct::preprocessort::CLANG)
644+
argv.push_back("-std=c99");
645+
else
646+
#endif
647+
argv.push_back("-std=gnu99");
618648
break;
619649

620650
case configt::ansi_ct::c_standardt::C11:
621-
argv.push_back("-std=gnu11");
651+
#if defined(__OpenBSD__)
652+
if(preprocessor == configt::ansi_ct::preprocessort::CLANG)
653+
argv.push_back("-std=c11");
654+
else
655+
#endif
656+
argv.push_back("-std=gnu11");
622657
break;
623658
}
624659
}

src/ansi-c/library/pthread_lib.c

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -731,7 +731,8 @@ int pthread_spin_trylock(pthread_spinlock_t *lock)
731731
int __VERIFIER_nondet_int();
732732

733733
// no pthread_barrier_t on the Mac
734-
#ifndef __APPLE__
734+
// slightly different declaration on OpenBSD
735+
#if !defined(__APPLE__) && !defined(__OpenBSD__)
735736
inline int pthread_barrier_init(
736737
pthread_barrier_t *restrict barrier,
737738
const pthread_barrierattr_t *restrict attr, unsigned count)
@@ -751,6 +752,28 @@ inline int pthread_barrier_init(
751752
}
752753
#endif
753754

755+
// pthread_barrier_init has a slightly different decl on OpenBSD
756+
#if defined(__OpenBSD__)
757+
inline int pthread_barrier_init(
758+
pthread_barrier_t *restrict barrier,
759+
pthread_barrierattr_t *restrict attr,
760+
unsigned count)
761+
{
762+
__CPROVER_HIDE:;
763+
(void)barrier;
764+
(void)attr;
765+
(void)count;
766+
767+
#ifdef __CPROVER_CUSTOM_BITVECTOR_ANALYSIS
768+
__CPROVER_set_must(barrier, "barrier-init");
769+
__CPROVER_clear_may(barrier, "barrier-destroyed");
770+
#endif
771+
772+
int result = __VERIFIER_nondet_int();
773+
return result;
774+
}
775+
#endif
776+
754777
/* FUNCTION: pthread_barrier_destroy */
755778

756779
#ifndef __CPROVER_PTHREAD_H_INCLUDED

src/ansi-c/library/stdio.c

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,16 @@
66
#define __CPROVER_STDIO_H_INCLUDED
77
#endif
88

9+
/* undefine macros in OpenBSD's stdio.h that are problematic to the checker. */
10+
#if defined(__OpenBSD__)
11+
#undef getchar
12+
#undef putchar
13+
#undef getc
14+
#undef feof
15+
#undef ferror
16+
#undef fileno
17+
#endif
18+
919
__CPROVER_bool __VERIFIER_nondet___CPROVER_bool();
1020

1121
inline int putchar(int c)

src/util/config.cpp

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -674,16 +674,17 @@ void configt::ansi_ct::set_arch_spec_sh4()
674674

675675
configt::ansi_ct::c_standardt configt::ansi_ct::default_c_standard()
676676
{
677-
#if defined(__APPLE__)
677+
#if defined(__APPLE__)
678678
// By default, clang on the Mac builds C code in GNU C11
679679
return c_standardt::C11;
680-
#elif defined(__FreeBSD__)
680+
#elif defined(__FreeBSD__) || defined(__OpenBSD__)
681681
// By default, clang on FreeBSD builds C code in GNU C99
682+
// By default, clang on OpenBSD builds C code in C99
682683
return c_standardt::C99;
683-
#else
684+
#else
684685
// By default, gcc 5.4 or higher use gnu11; older versions use gnu89
685686
return c_standardt::C11;
686-
#endif
687+
#endif
687688
}
688689

689690
configt::cppt::cpp_standardt configt::cppt::default_cpp_standard()

0 commit comments

Comments
 (0)