end;\r
 \r
 \r
+{$ifdef bsd}\r
+function arc4random: cardinal; cdecl; external 'c' name 'arc4random';\r
+procedure arc4random_buf(buf: Pointer; nbytes: SizeUInt); cdecl; external 'c' name 'arc4random_buf';\r
+function arc4random_uniform(upper_bound: cardinal): cardinal; cdecl; external 'c' name 'arc4random_uniform';\r
+{$endif}\r
+\r
+\r
 {$ifdef linux}\r
  {$ifdef i386}\r
   const sys_getrandom = 355;\r
   a := do_syscall(sys_getrandom,tsysparam(@l.devrnd),sizeof(l.devrnd),0);\r
   {$endif}\r
 \r
+  {$ifdef bsd}\r
+  a := sizeof(l.devrnd);\r
+  arc4random_buf(@l.devrnd, a);\r
+  {$endif}\r
+\r
   if (a < sizeof(l.devrnd)) then begin\r
     {if syscall misses or fails, fall back to /dev/urandom}\r
     assignfile(f,'/dev/urandom');\r