[rtems-libbsd commit] bin/openssl: Port to RTEMS.

Christian Mauderer christianm at rtems.org
Thu Mar 28 06:03:52 UTC 2019


Module:    rtems-libbsd
Branch:    master
Commit:    d1dac7891cd3234c935ce7e4d742b6f87663a5e1
Changeset: http://git.rtems.org/rtems-libbsd/commit/?id=d1dac7891cd3234c935ce7e4d742b6f87663a5e1

Author:    Christian Mauderer <christian.mauderer at embedded-brains.de>
Date:      Tue Mar 26 11:08:47 2019 +0100

bin/openssl: Port to RTEMS.

---

 buildset/default.ini                               |   1 +
 buildset/minimal.ini                               |   1 +
 freebsd/crypto/openssl/apps/app_rand.c             |   7 +
 freebsd/crypto/openssl/apps/apps.c                 |  15 +
 freebsd/crypto/openssl/apps/asn1pars.c             |   7 +
 freebsd/crypto/openssl/apps/bf_prefix.c            |   7 +
 freebsd/crypto/openssl/apps/ca.c                   |   7 +
 freebsd/crypto/openssl/apps/ciphers.c              |   7 +
 freebsd/crypto/openssl/apps/cms.c                  |   7 +
 freebsd/crypto/openssl/apps/crl.c                  |   7 +
 freebsd/crypto/openssl/apps/crl2p7.c               |   7 +
 freebsd/crypto/openssl/apps/dgst.c                 |   7 +
 freebsd/crypto/openssl/apps/dhparam.c              |   7 +
 freebsd/crypto/openssl/apps/dsa.c                  |   7 +
 freebsd/crypto/openssl/apps/dsaparam.c             |   7 +
 freebsd/crypto/openssl/apps/ec.c                   |   7 +
 freebsd/crypto/openssl/apps/ecparam.c              |   7 +
 freebsd/crypto/openssl/apps/enc.c                  |  12 +
 freebsd/crypto/openssl/apps/engine.c               |   7 +
 freebsd/crypto/openssl/apps/errstr.c               |   7 +
 freebsd/crypto/openssl/apps/gendsa.c               |   7 +
 freebsd/crypto/openssl/apps/genpkey.c              |   7 +
 freebsd/crypto/openssl/apps/genrsa.c               |   7 +
 freebsd/crypto/openssl/apps/nseq.c                 |   7 +
 freebsd/crypto/openssl/apps/ocsp.c                 |   7 +
 freebsd/crypto/openssl/apps/openssl.c              |  40 ++
 freebsd/crypto/openssl/apps/opt.c                  |   7 +
 freebsd/crypto/openssl/apps/passwd.c               |  12 +
 freebsd/crypto/openssl/apps/pkcs12.c               |   7 +
 freebsd/crypto/openssl/apps/pkcs7.c                |   7 +
 freebsd/crypto/openssl/apps/pkcs8.c                |   7 +
 freebsd/crypto/openssl/apps/pkey.c                 |   7 +
 freebsd/crypto/openssl/apps/pkeyparam.c            |   7 +
 freebsd/crypto/openssl/apps/pkeyutl.c              |   7 +
 freebsd/crypto/openssl/apps/prime.c                |   7 +
 freebsd/crypto/openssl/apps/progs.h                |   2 +
 freebsd/crypto/openssl/apps/rand.c                 |   7 +
 freebsd/crypto/openssl/apps/rehash.c               |  13 +
 freebsd/crypto/openssl/apps/req.c                  |   7 +
 freebsd/crypto/openssl/apps/rsa.c                  |   7 +
 freebsd/crypto/openssl/apps/rsautl.c               |   7 +
 .../openssl/apps/rtems-bsd-openssl-app_rand-data.h |   5 +
 .../openssl/apps/rtems-bsd-openssl-apps-data.h     |  10 +
 .../openssl/apps/rtems-bsd-openssl-asn1pars-data.h |   4 +
 .../apps/rtems-bsd-openssl-bf_prefix-data.h        |   5 +
 .../openssl/apps/rtems-bsd-openssl-ca-data.h       |   8 +
 .../openssl/apps/rtems-bsd-openssl-ciphers-data.h  |   4 +
 .../openssl/apps/rtems-bsd-openssl-cms-data.h      |   5 +
 .../openssl/apps/rtems-bsd-openssl-crl-data.h      |   4 +
 .../openssl/apps/rtems-bsd-openssl-crl2p7-data.h   |   4 +
 .../crypto/openssl/apps/rtems-bsd-openssl-data.h   |  62 +++
 .../openssl/apps/rtems-bsd-openssl-dgst-data.h     |   4 +
 .../openssl/apps/rtems-bsd-openssl-dhparam-data.h  |   4 +
 .../openssl/apps/rtems-bsd-openssl-dsa-data.h      |   4 +
 .../openssl/apps/rtems-bsd-openssl-dsaparam-data.h |   4 +
 .../openssl/apps/rtems-bsd-openssl-ec-data.h       |   6 +
 .../openssl/apps/rtems-bsd-openssl-ecparam-data.h  |   6 +
 .../openssl/apps/rtems-bsd-openssl-enc-data.h      |   5 +
 .../openssl/apps/rtems-bsd-openssl-engine-data.h   |   4 +
 .../openssl/apps/rtems-bsd-openssl-errstr-data.h   |   4 +
 .../openssl/apps/rtems-bsd-openssl-gendsa-data.h   |   4 +
 .../openssl/apps/rtems-bsd-openssl-genpkey-data.h  |   4 +
 .../openssl/apps/rtems-bsd-openssl-genrsa-data.h   |   4 +
 .../openssl/apps/rtems-bsd-openssl-namespace.h     | 248 +++++++++++
 .../openssl/apps/rtems-bsd-openssl-nseq-data.h     |   4 +
 .../openssl/apps/rtems-bsd-openssl-ocsp-data.h     |   8 +
 .../openssl/apps/rtems-bsd-openssl-openssl-data.h  |   7 +
 .../openssl/apps/rtems-bsd-openssl-opt-data.h      |  14 +
 .../openssl/apps/rtems-bsd-openssl-passwd-data.h   |   5 +
 .../openssl/apps/rtems-bsd-openssl-pkcs12-data.h   |   4 +
 .../openssl/apps/rtems-bsd-openssl-pkcs7-data.h    |   4 +
 .../openssl/apps/rtems-bsd-openssl-pkcs8-data.h    |   4 +
 .../openssl/apps/rtems-bsd-openssl-pkey-data.h     |   4 +
 .../apps/rtems-bsd-openssl-pkeyparam-data.h        |   4 +
 .../openssl/apps/rtems-bsd-openssl-pkeyutl-data.h  |   4 +
 .../openssl/apps/rtems-bsd-openssl-prime-data.h    |   4 +
 .../openssl/apps/rtems-bsd-openssl-rand-data.h     |   4 +
 .../openssl/apps/rtems-bsd-openssl-rehash-data.h   |  13 +
 .../openssl/apps/rtems-bsd-openssl-req-data.h      |   7 +
 .../openssl/apps/rtems-bsd-openssl-rsa-data.h      |   4 +
 .../openssl/apps/rtems-bsd-openssl-rsautl-data.h   |   4 +
 .../openssl/apps/rtems-bsd-openssl-s_cb-data.h     |  15 +
 .../openssl/apps/rtems-bsd-openssl-s_client-data.h |  21 +
 .../openssl/apps/rtems-bsd-openssl-s_server-data.h |  35 ++
 .../openssl/apps/rtems-bsd-openssl-s_socket-data.h |   4 +
 .../openssl/apps/rtems-bsd-openssl-s_time-data.h   |   4 +
 .../openssl/apps/rtems-bsd-openssl-sess_id-data.h  |   4 +
 .../openssl/apps/rtems-bsd-openssl-smime-data.h    |   4 +
 .../openssl/apps/rtems-bsd-openssl-speed-data.h    |  58 +++
 .../openssl/apps/rtems-bsd-openssl-spkac-data.h    |   4 +
 .../openssl/apps/rtems-bsd-openssl-srp-data.h      |   4 +
 .../openssl/apps/rtems-bsd-openssl-ts-data.h       |   5 +
 .../openssl/apps/rtems-bsd-openssl-verify-data.h   |   6 +
 .../openssl/apps/rtems-bsd-openssl-version-data.h  |   4 +
 .../openssl/apps/rtems-bsd-openssl-x509-data.h     |   4 +
 freebsd/crypto/openssl/apps/s_cb.c                 |  12 +
 freebsd/crypto/openssl/apps/s_client.c             |  28 ++
 freebsd/crypto/openssl/apps/s_server.c             |  13 +
 freebsd/crypto/openssl/apps/s_socket.c             |   7 +
 freebsd/crypto/openssl/apps/s_time.c               |   7 +
 freebsd/crypto/openssl/apps/sess_id.c              |   7 +
 freebsd/crypto/openssl/apps/smime.c                |   7 +
 freebsd/crypto/openssl/apps/speed.c                |  22 +
 freebsd/crypto/openssl/apps/spkac.c                |   7 +
 freebsd/crypto/openssl/apps/srp.c                  |   7 +
 freebsd/crypto/openssl/apps/storeutl.c             | 475 ---------------------
 freebsd/crypto/openssl/apps/ts.c                   |   7 +
 freebsd/crypto/openssl/apps/verify.c               |   7 +
 freebsd/crypto/openssl/apps/version.c              |   7 +
 freebsd/crypto/openssl/apps/x509.c                 |   7 +
 libbsd.py                                          |  92 ++++
 rtemsbsd/include/machine/rtems-bsd-commands.h      |   2 +
 rtemsbsd/include/rtems/netcmds-config.h            |   1 +
 rtemsbsd/rtems/rtems-bsd-shell-openssl.c           |  40 ++
 testsuite/openssl02/test_main.c                    | 135 ++++++
 115 files changed, 1424 insertions(+), 475 deletions(-)

diff --git a/buildset/default.ini b/buildset/default.ini
index caafb57..f25fe9a 100644
--- a/buildset/default.ini
+++ b/buildset/default.ini
@@ -57,5 +57,6 @@ tests = on
 tty = on
 user_space = on
 user_space_wlanstats = off
+usr_bin_openssl = on
 usr_sbin_tcpdump = on
 usr_sbin_wpa_supplicant = off
diff --git a/buildset/minimal.ini b/buildset/minimal.ini
index c5ad821..03dd96b 100644
--- a/buildset/minimal.ini
+++ b/buildset/minimal.ini
@@ -20,3 +20,4 @@ extends = default.ini
 [modules]
 crypto_openssl = off
 netinet6 = off
+usr_bin_openssl = off
diff --git a/freebsd/crypto/openssl/apps/app_rand.c b/freebsd/crypto/openssl/apps/app_rand.c
index 072dfa4..cf2fbb4 100644
--- a/freebsd/crypto/openssl/apps/app_rand.c
+++ b/freebsd/crypto/openssl/apps/app_rand.c
@@ -1,4 +1,8 @@
 #include <machine/rtems-bsd-user-space.h>
+#ifdef __rtems__
+#include <machine/rtems-bsd-program.h>
+#include "rtems-bsd-openssl-namespace.h"
+#endif /* __rtems__ */
 
 /*
  * Copyright 1995-2018 The OpenSSL Project Authors. All Rights Reserved.
@@ -93,3 +97,6 @@ int opt_rand(int opt)
     }
     return 1;
 }
+#ifdef __rtems__
+#include "rtems-bsd-openssl-app_rand-data.h"
+#endif /* __rtems__ */
diff --git a/freebsd/crypto/openssl/apps/apps.c b/freebsd/crypto/openssl/apps/apps.c
index 9a7dce8..834d39f 100644
--- a/freebsd/crypto/openssl/apps/apps.c
+++ b/freebsd/crypto/openssl/apps/apps.c
@@ -1,4 +1,11 @@
 #include <machine/rtems-bsd-user-space.h>
+#ifdef __rtems__
+/* The only file opened here is put into a BIO-structure which is handled by
+ * BIO_free. */
+#define RTEMS_BSD_PROGRAM_NO_OPEN_WRAP
+#include <machine/rtems-bsd-program.h>
+#include "rtems-bsd-openssl-namespace.h"
+#endif /* __rtems__ */
 
 /*
  * Copyright 1995-2018 The OpenSSL Project Authors. All Rights Reserved.
@@ -371,10 +378,15 @@ int app_passwd(const char *arg1, const char *arg2, char **pass1, char **pass2)
     return 1;
 }
 
+#ifdef __rtems__
+static BIO *pwdbio = NULL;
+#endif /* __rtems__ */
 static char *app_get_pass(const char *arg, int keepbio)
 {
     char *tmp, tpass[APP_PASS_LEN];
+#ifndef __rtems__
     static BIO *pwdbio = NULL;
+#endif /* __rtems__ */
     int i;
 
     if (strncmp(arg, "pass:", 5) == 0)
@@ -2752,3 +2764,6 @@ void make_uppercase(char *string)
     for (i = 0; string[i] != '\0'; i++)
         string[i] = toupper((unsigned char)string[i]);
 }
+#ifdef __rtems__
+#include "rtems-bsd-openssl-apps-data.h"
+#endif /* __rtems__ */
diff --git a/freebsd/crypto/openssl/apps/asn1pars.c b/freebsd/crypto/openssl/apps/asn1pars.c
index 7861fe4..a2af9e3 100644
--- a/freebsd/crypto/openssl/apps/asn1pars.c
+++ b/freebsd/crypto/openssl/apps/asn1pars.c
@@ -1,4 +1,8 @@
 #include <machine/rtems-bsd-user-space.h>
+#ifdef __rtems__
+#include <machine/rtems-bsd-program.h>
+#include "rtems-bsd-openssl-namespace.h"
+#endif /* __rtems__ */
 
 /*
  * Copyright 1995-2018 The OpenSSL Project Authors. All Rights Reserved.
@@ -357,3 +361,6 @@ static int do_generate(char *genstr, const char *genconf, BUF_MEM *buf)
     ASN1_TYPE_free(atyp);
     return -1;
 }
+#ifdef __rtems__
+#include "rtems-bsd-openssl-asn1pars-data.h"
+#endif /* __rtems__ */
diff --git a/freebsd/crypto/openssl/apps/bf_prefix.c b/freebsd/crypto/openssl/apps/bf_prefix.c
index eb7dd05..c3c812e 100644
--- a/freebsd/crypto/openssl/apps/bf_prefix.c
+++ b/freebsd/crypto/openssl/apps/bf_prefix.c
@@ -1,4 +1,8 @@
 #include <machine/rtems-bsd-user-space.h>
+#ifdef __rtems__
+#include <machine/rtems-bsd-program.h>
+#include "rtems-bsd-openssl-namespace.h"
+#endif /* __rtems__ */
 
 /*
  * Copyright 2018 The OpenSSL Project Authors. All Rights Reserved.
@@ -177,3 +181,6 @@ static int prefix_puts(BIO *b, const char *str)
 {
     return BIO_write(b, str, strlen(str));
 }
+#ifdef __rtems__
+#include "rtems-bsd-openssl-bf_prefix-data.h"
+#endif /* __rtems__ */
diff --git a/freebsd/crypto/openssl/apps/ca.c b/freebsd/crypto/openssl/apps/ca.c
index c36e2fd..e6902a1 100644
--- a/freebsd/crypto/openssl/apps/ca.c
+++ b/freebsd/crypto/openssl/apps/ca.c
@@ -1,4 +1,8 @@
 #include <machine/rtems-bsd-user-space.h>
+#ifdef __rtems__
+#include <machine/rtems-bsd-program.h>
+#include "rtems-bsd-openssl-namespace.h"
+#endif /* __rtems__ */
 
 /*
  * Copyright 1995-2018 The OpenSSL Project Authors. All Rights Reserved.
@@ -2606,3 +2610,6 @@ int unpack_revinfo(ASN1_TIME **prevtm, int *preason, ASN1_OBJECT **phold,
 
     return ret;
 }
+#ifdef __rtems__
+#include "rtems-bsd-openssl-ca-data.h"
+#endif /* __rtems__ */
diff --git a/freebsd/crypto/openssl/apps/ciphers.c b/freebsd/crypto/openssl/apps/ciphers.c
index caaa088..61f0e36 100644
--- a/freebsd/crypto/openssl/apps/ciphers.c
+++ b/freebsd/crypto/openssl/apps/ciphers.c
@@ -1,4 +1,8 @@
 #include <machine/rtems-bsd-user-space.h>
+#ifdef __rtems__
+#include <machine/rtems-bsd-program.h>
+#include "rtems-bsd-openssl-namespace.h"
+#endif /* __rtems__ */
 
 /*
  * Copyright 1995-2018 The OpenSSL Project Authors. All Rights Reserved.
@@ -266,3 +270,6 @@ int ciphers_main(int argc, char **argv)
     SSL_free(ssl);
     return ret;
 }
+#ifdef __rtems__
+#include "rtems-bsd-openssl-ciphers-data.h"
+#endif /* __rtems__ */
diff --git a/freebsd/crypto/openssl/apps/cms.c b/freebsd/crypto/openssl/apps/cms.c
index de8818b..29596fa 100644
--- a/freebsd/crypto/openssl/apps/cms.c
+++ b/freebsd/crypto/openssl/apps/cms.c
@@ -1,4 +1,8 @@
 #include <machine/rtems-bsd-user-space.h>
+#ifdef __rtems__
+#include <machine/rtems-bsd-program.h>
+#include "rtems-bsd-openssl-namespace.h"
+#endif /* __rtems__ */
 
 /*
  * Copyright 2008-2018 The OpenSSL Project Authors. All Rights Reserved.
@@ -1289,3 +1293,6 @@ static int cms_set_pkey_param(EVP_PKEY_CTX *pctx,
 }
 
 #endif
+#ifdef __rtems__
+#include "rtems-bsd-openssl-cms-data.h"
+#endif /* __rtems__ */
diff --git a/freebsd/crypto/openssl/apps/crl.c b/freebsd/crypto/openssl/apps/crl.c
index 54a879d..2439379 100644
--- a/freebsd/crypto/openssl/apps/crl.c
+++ b/freebsd/crypto/openssl/apps/crl.c
@@ -1,4 +1,8 @@
 #include <machine/rtems-bsd-user-space.h>
+#ifdef __rtems__
+#include <machine/rtems-bsd-program.h>
+#include "rtems-bsd-openssl-namespace.h"
+#endif /* __rtems__ */
 
 /*
  * Copyright 1995-2018 The OpenSSL Project Authors. All Rights Reserved.
@@ -342,3 +346,6 @@ int crl_main(int argc, char **argv)
     X509_STORE_free(store);
     return ret;
 }
+#ifdef __rtems__
+#include "rtems-bsd-openssl-crl-data.h"
+#endif /* __rtems__ */
diff --git a/freebsd/crypto/openssl/apps/crl2p7.c b/freebsd/crypto/openssl/apps/crl2p7.c
index 8108e23..e26ea4b 100644
--- a/freebsd/crypto/openssl/apps/crl2p7.c
+++ b/freebsd/crypto/openssl/apps/crl2p7.c
@@ -1,4 +1,8 @@
 #include <machine/rtems-bsd-user-space.h>
+#ifdef __rtems__
+#include <machine/rtems-bsd-program.h>
+#include "rtems-bsd-openssl-namespace.h"
+#endif /* __rtems__ */
 
 /*
  * Copyright 1995-2018 The OpenSSL Project Authors. All Rights Reserved.
@@ -217,3 +221,6 @@ static int add_certs_from_file(STACK_OF(X509) *stack, char *certfile)
     sk_X509_INFO_free(sk);
     return ret;
 }
+#ifdef __rtems__
+#include "rtems-bsd-openssl-crl2p7-data.h"
+#endif /* __rtems__ */
diff --git a/freebsd/crypto/openssl/apps/dgst.c b/freebsd/crypto/openssl/apps/dgst.c
index fb4e664..8cb894d 100644
--- a/freebsd/crypto/openssl/apps/dgst.c
+++ b/freebsd/crypto/openssl/apps/dgst.c
@@ -1,4 +1,8 @@
 #include <machine/rtems-bsd-user-space.h>
+#ifdef __rtems__
+#include <machine/rtems-bsd-program.h>
+#include "rtems-bsd-openssl-namespace.h"
+#endif /* __rtems__ */
 
 /*
  * Copyright 1995-2018 The OpenSSL Project Authors. All Rights Reserved.
@@ -492,3 +496,6 @@ int do_fp(BIO *out, unsigned char *buf, BIO *bp, int sep, int binout,
     }
     return 0;
 }
+#ifdef __rtems__
+#include "rtems-bsd-openssl-dgst-data.h"
+#endif /* __rtems__ */
diff --git a/freebsd/crypto/openssl/apps/dhparam.c b/freebsd/crypto/openssl/apps/dhparam.c
index 505ee4b..420d0a9 100644
--- a/freebsd/crypto/openssl/apps/dhparam.c
+++ b/freebsd/crypto/openssl/apps/dhparam.c
@@ -1,4 +1,8 @@
 #include <machine/rtems-bsd-user-space.h>
+#ifdef __rtems__
+#include <machine/rtems-bsd-program.h>
+#include "rtems-bsd-openssl-namespace.h"
+#endif /* __rtems__ */
 
 /*
  * Copyright 1995-2018 The OpenSSL Project Authors. All Rights Reserved.
@@ -379,3 +383,6 @@ static int dh_cb(int p, int n, BN_GENCB *cb)
     return 1;
 }
 #endif
+#ifdef __rtems__
+#include "rtems-bsd-openssl-dhparam-data.h"
+#endif /* __rtems__ */
diff --git a/freebsd/crypto/openssl/apps/dsa.c b/freebsd/crypto/openssl/apps/dsa.c
index bec8605..70bffcf 100644
--- a/freebsd/crypto/openssl/apps/dsa.c
+++ b/freebsd/crypto/openssl/apps/dsa.c
@@ -1,4 +1,8 @@
 #include <machine/rtems-bsd-user-space.h>
+#ifdef __rtems__
+#include <machine/rtems-bsd-program.h>
+#include "rtems-bsd-openssl-namespace.h"
+#endif /* __rtems__ */
 
 /*
  * Copyright 1995-2018 The OpenSSL Project Authors. All Rights Reserved.
@@ -265,3 +269,6 @@ int dsa_main(int argc, char **argv)
     return ret;
 }
 #endif
+#ifdef __rtems__
+#include "rtems-bsd-openssl-dsa-data.h"
+#endif /* __rtems__ */
diff --git a/freebsd/crypto/openssl/apps/dsaparam.c b/freebsd/crypto/openssl/apps/dsaparam.c
index 78a5c64..aa575db 100644
--- a/freebsd/crypto/openssl/apps/dsaparam.c
+++ b/freebsd/crypto/openssl/apps/dsaparam.c
@@ -1,4 +1,8 @@
 #include <machine/rtems-bsd-user-space.h>
+#ifdef __rtems__
+#include <machine/rtems-bsd-program.h>
+#include "rtems-bsd-openssl-namespace.h"
+#endif /* __rtems__ */
 
 /*
  * Copyright 1995-2018 The OpenSSL Project Authors. All Rights Reserved.
@@ -258,3 +262,6 @@ static int dsa_cb(int p, int n, BN_GENCB *cb)
     return 1;
 }
 #endif
+#ifdef __rtems__
+#include "rtems-bsd-openssl-dsaparam-data.h"
+#endif /* __rtems__ */
diff --git a/freebsd/crypto/openssl/apps/ec.c b/freebsd/crypto/openssl/apps/ec.c
index bbeccd9..4239f4e 100644
--- a/freebsd/crypto/openssl/apps/ec.c
+++ b/freebsd/crypto/openssl/apps/ec.c
@@ -1,4 +1,8 @@
 #include <machine/rtems-bsd-user-space.h>
+#ifdef __rtems__
+#include <machine/rtems-bsd-program.h>
+#include "rtems-bsd-openssl-namespace.h"
+#endif /* __rtems__ */
 
 /*
  * Copyright 2002-2018 The OpenSSL Project Authors. All Rights Reserved.
@@ -283,3 +287,6 @@ int ec_main(int argc, char **argv)
     return ret;
 }
 #endif
+#ifdef __rtems__
+#include "rtems-bsd-openssl-ec-data.h"
+#endif /* __rtems__ */
diff --git a/freebsd/crypto/openssl/apps/ecparam.c b/freebsd/crypto/openssl/apps/ecparam.c
index 423b5f3..8841c71 100644
--- a/freebsd/crypto/openssl/apps/ecparam.c
+++ b/freebsd/crypto/openssl/apps/ecparam.c
@@ -1,4 +1,8 @@
 #include <machine/rtems-bsd-user-space.h>
+#ifdef __rtems__
+#include <machine/rtems-bsd-program.h>
+#include "rtems-bsd-openssl-namespace.h"
+#endif /* __rtems__ */
 
 /*
  * Copyright 2002-2018 The OpenSSL Project Authors. All Rights Reserved.
@@ -450,3 +454,6 @@ int ecparam_main(int argc, char **argv)
 }
 
 #endif
+#ifdef __rtems__
+#include "rtems-bsd-openssl-ecparam-data.h"
+#endif /* __rtems__ */
diff --git a/freebsd/crypto/openssl/apps/enc.c b/freebsd/crypto/openssl/apps/enc.c
index dd09cba..285d6d5 100644
--- a/freebsd/crypto/openssl/apps/enc.c
+++ b/freebsd/crypto/openssl/apps/enc.c
@@ -1,4 +1,8 @@
 #include <machine/rtems-bsd-user-space.h>
+#ifdef __rtems__
+#include <machine/rtems-bsd-program.h>
+#include "rtems-bsd-openssl-namespace.h"
+#endif /* __rtems__ */
 
 /*
  * Copyright 1995-2018 The OpenSSL Project Authors. All Rights Reserved.
@@ -90,9 +94,14 @@ const OPTIONS enc_options[] = {
     {NULL}
 };
 
+#ifdef __rtems__
+static char buf[128];
+#endif /* __rtems__ */
 int enc_main(int argc, char **argv)
 {
+#ifndef __rtems__
     static char buf[128];
+#endif /* __rtems__ */
     static const char magic[] = "Salted__";
     ENGINE *e = NULL;
     BIO *in = NULL, *out = NULL, *b64 = NULL, *benc = NULL, *rbio =
@@ -675,3 +684,6 @@ static int set_hex(const char *in, unsigned char *out, int size)
     }
     return 1;
 }
+#ifdef __rtems__
+#include "rtems-bsd-openssl-enc-data.h"
+#endif /* __rtems__ */
diff --git a/freebsd/crypto/openssl/apps/engine.c b/freebsd/crypto/openssl/apps/engine.c
index bb77255..32e386d 100644
--- a/freebsd/crypto/openssl/apps/engine.c
+++ b/freebsd/crypto/openssl/apps/engine.c
@@ -1,4 +1,8 @@
 #include <machine/rtems-bsd-user-space.h>
+#ifdef __rtems__
+#include <machine/rtems-bsd-program.h>
+#include "rtems-bsd-openssl-namespace.h"
+#endif /* __rtems__ */
 
 /*
  * Copyright 2000-2018 The OpenSSL Project Authors. All Rights Reserved.
@@ -489,3 +493,6 @@ int engine_main(int argc, char **argv)
     return ret;
 }
 #endif
+#ifdef __rtems__
+#include "rtems-bsd-openssl-engine-data.h"
+#endif /* __rtems__ */
diff --git a/freebsd/crypto/openssl/apps/errstr.c b/freebsd/crypto/openssl/apps/errstr.c
index ae43051..c7a1ce1 100644
--- a/freebsd/crypto/openssl/apps/errstr.c
+++ b/freebsd/crypto/openssl/apps/errstr.c
@@ -1,4 +1,8 @@
 #include <machine/rtems-bsd-user-space.h>
+#ifdef __rtems__
+#include <machine/rtems-bsd-program.h>
+#include "rtems-bsd-openssl-namespace.h"
+#endif /* __rtems__ */
 
 /*
  * Copyright 1995-2018 The OpenSSL Project Authors. All Rights Reserved.
@@ -67,3 +71,6 @@ int errstr_main(int argc, char **argv)
  end:
     return ret;
 }
+#ifdef __rtems__
+#include "rtems-bsd-openssl-errstr-data.h"
+#endif /* __rtems__ */
diff --git a/freebsd/crypto/openssl/apps/gendsa.c b/freebsd/crypto/openssl/apps/gendsa.c
index ef845c7..d28eea3 100644
--- a/freebsd/crypto/openssl/apps/gendsa.c
+++ b/freebsd/crypto/openssl/apps/gendsa.c
@@ -1,4 +1,8 @@
 #include <machine/rtems-bsd-user-space.h>
+#ifdef __rtems__
+#include <machine/rtems-bsd-program.h>
+#include "rtems-bsd-openssl-namespace.h"
+#endif /* __rtems__ */
 
 /*
  * Copyright 1995-2018 The OpenSSL Project Authors. All Rights Reserved.
@@ -146,3 +150,6 @@ int gendsa_main(int argc, char **argv)
     return ret;
 }
 #endif
+#ifdef __rtems__
+#include "rtems-bsd-openssl-gendsa-data.h"
+#endif /* __rtems__ */
diff --git a/freebsd/crypto/openssl/apps/genpkey.c b/freebsd/crypto/openssl/apps/genpkey.c
index d420c88..0d3b30f 100644
--- a/freebsd/crypto/openssl/apps/genpkey.c
+++ b/freebsd/crypto/openssl/apps/genpkey.c
@@ -1,4 +1,8 @@
 #include <machine/rtems-bsd-user-space.h>
+#ifdef __rtems__
+#include <machine/rtems-bsd-program.h>
+#include "rtems-bsd-openssl-namespace.h"
+#endif /* __rtems__ */
 
 /*
  * Copyright 2006-2018 The OpenSSL Project Authors. All Rights Reserved.
@@ -322,3 +326,6 @@ static int genpkey_cb(EVP_PKEY_CTX *ctx)
     (void)BIO_flush(b);
     return 1;
 }
+#ifdef __rtems__
+#include "rtems-bsd-openssl-genpkey-data.h"
+#endif /* __rtems__ */
diff --git a/freebsd/crypto/openssl/apps/genrsa.c b/freebsd/crypto/openssl/apps/genrsa.c
index 3becea6..88a1e61 100644
--- a/freebsd/crypto/openssl/apps/genrsa.c
+++ b/freebsd/crypto/openssl/apps/genrsa.c
@@ -1,4 +1,8 @@
 #include <machine/rtems-bsd-user-space.h>
+#ifdef __rtems__
+#include <machine/rtems-bsd-program.h>
+#include "rtems-bsd-openssl-namespace.h"
+#endif /* __rtems__ */
 
 /*
  * Copyright 1995-2018 The OpenSSL Project Authors. All Rights Reserved.
@@ -201,3 +205,6 @@ static int genrsa_cb(int p, int n, BN_GENCB *cb)
     return 1;
 }
 #endif
+#ifdef __rtems__
+#include "rtems-bsd-openssl-genrsa-data.h"
+#endif /* __rtems__ */
diff --git a/freebsd/crypto/openssl/apps/nseq.c b/freebsd/crypto/openssl/apps/nseq.c
index 57047f3..43825e2 100644
--- a/freebsd/crypto/openssl/apps/nseq.c
+++ b/freebsd/crypto/openssl/apps/nseq.c
@@ -1,4 +1,8 @@
 #include <machine/rtems-bsd-user-space.h>
+#ifdef __rtems__
+#include <machine/rtems-bsd-program.h>
+#include "rtems-bsd-openssl-namespace.h"
+#endif /* __rtems__ */
 
 /*
  * Copyright 1999-2018 The OpenSSL Project Authors. All Rights Reserved.
@@ -114,3 +118,6 @@ int nseq_main(int argc, char **argv)
 
     return ret;
 }
+#ifdef __rtems__
+#include "rtems-bsd-openssl-nseq-data.h"
+#endif /* __rtems__ */
diff --git a/freebsd/crypto/openssl/apps/ocsp.c b/freebsd/crypto/openssl/apps/ocsp.c
index 6494fa2..9823d5f 100644
--- a/freebsd/crypto/openssl/apps/ocsp.c
+++ b/freebsd/crypto/openssl/apps/ocsp.c
@@ -1,4 +1,8 @@
 #include <machine/rtems-bsd-user-space.h>
+#ifdef __rtems__
+#include <machine/rtems-bsd-program.h>
+#include "rtems-bsd-openssl-namespace.h"
+#endif /* __rtems__ */
 
 /*
  * Copyright 2001-2018 The OpenSSL Project Authors. All Rights Reserved.
@@ -1593,3 +1597,6 @@ OCSP_RESPONSE *process_responder(OCSP_REQUEST *req,
 # endif
 
 #endif
+#ifdef __rtems__
+#include "rtems-bsd-openssl-ocsp-data.h"
+#endif /* __rtems__ */
diff --git a/freebsd/crypto/openssl/apps/openssl.c b/freebsd/crypto/openssl/apps/openssl.c
index 0b41ea5..68a8882 100644
--- a/freebsd/crypto/openssl/apps/openssl.c
+++ b/freebsd/crypto/openssl/apps/openssl.c
@@ -1,4 +1,8 @@
 #include <machine/rtems-bsd-user-space.h>
+#ifdef __rtems__
+#include <machine/rtems-bsd-program.h>
+#include "rtems-bsd-openssl-namespace.h"
+#endif /* __rtems__ */
 
 /*
  * Copyright 1995-2018 The OpenSSL Project Authors. All Rights Reserved.
@@ -9,6 +13,10 @@
  * https://www.openssl.org/source/license.html
  */
 
+#ifdef __rtems__
+#include <machine/rtems-bsd-program.h>
+#include <machine/rtems-bsd-commands.h>
+#endif /* __rtems__ */
 #include <internal/cryptlib.h>
 #include <stdio.h>
 #include <string.h>
@@ -32,6 +40,9 @@
 #include "apps.h"
 #define INCLUDE_FUNCTION_TABLE
 #include "progs.h"
+#ifdef __rtems__
+#include "rtems-bsd-openssl-openssl-data.h"
+#endif /* __rtems__ */
 
 /* Structure to hold the number of columns to be displayed and the
  * field width used to display them.
@@ -119,6 +130,29 @@ static char *make_config_name(void)
     return p;
 }
 
+#ifdef __rtems__
+static int main(int argc, char *argv[]);
+
+RTEMS_LINKER_RWSET(bsd_prog_openssl, char);
+
+int
+rtems_bsd_command_openssl(int argc, char *argv[])
+{
+    int exit_code;
+    void *data_begin;
+    size_t data_size;
+
+    data_begin = RTEMS_LINKER_SET_BEGIN(bsd_prog_openssl);
+    data_size = RTEMS_LINKER_SET_SIZE(bsd_prog_openssl);
+
+    rtems_bsd_program_lock();
+    exit_code = rtems_bsd_program_call_main_with_data_restore("openssl",
+        main, argc, argv, data_begin, data_size);
+    rtems_bsd_program_unlock();
+
+    return exit_code;
+}
+#endif /* __rtems__ */
 int main(int argc, char *argv[])
 {
     FUNCTION f, *fp;
@@ -802,10 +836,16 @@ static void list_disabled(void)
 #endif
 }
 
+#ifdef __rtems__
+static LHASH_OF(FUNCTION) *ret = NULL;
+static int prog_inited = 0;
+#endif /* __rtems__ */
 static LHASH_OF(FUNCTION) *prog_init(void)
 {
+#ifndef __rtems__
     static LHASH_OF(FUNCTION) *ret = NULL;
     static int prog_inited = 0;
+#endif /* __rtems__ */
     FUNCTION *f;
     size_t i;
 
diff --git a/freebsd/crypto/openssl/apps/opt.c b/freebsd/crypto/openssl/apps/opt.c
index e56b53f..757b649 100644
--- a/freebsd/crypto/openssl/apps/opt.c
+++ b/freebsd/crypto/openssl/apps/opt.c
@@ -1,4 +1,8 @@
 #include <machine/rtems-bsd-user-space.h>
+#ifdef __rtems__
+#include <machine/rtems-bsd-program.h>
+#include "rtems-bsd-openssl-namespace.h"
+#endif /* __rtems__ */
 
 /*
  * Copyright 2015-2018 The OpenSSL Project Authors. All Rights Reserved.
@@ -898,3 +902,6 @@ void opt_help(const OPTIONS *list)
         BIO_printf(bio_err, "%s  %s\n", start, help);
     }
 }
+#ifdef __rtems__
+#include "rtems-bsd-openssl-opt-data.h"
+#endif /* __rtems__ */
diff --git a/freebsd/crypto/openssl/apps/passwd.c b/freebsd/crypto/openssl/apps/passwd.c
index 81d9919..d2bc7cf 100644
--- a/freebsd/crypto/openssl/apps/passwd.c
+++ b/freebsd/crypto/openssl/apps/passwd.c
@@ -1,4 +1,8 @@
 #include <machine/rtems-bsd-user-space.h>
+#ifdef __rtems__
+#include <machine/rtems-bsd-program.h>
+#include "rtems-bsd-openssl-namespace.h"
+#endif /* __rtems__ */
 
 /*
  * Copyright 2000-2018 The OpenSSL Project Authors. All Rights Reserved.
@@ -82,6 +86,9 @@ const OPTIONS passwd_options[] = {
     {NULL}
 };
 
+#ifdef __rtems__
+static char *passwds_static[2] = { NULL, NULL };
+#endif /* __rtems__ */
 int passwd_main(int argc, char **argv)
 {
     BIO *in = NULL;
@@ -235,7 +242,9 @@ int passwd_main(int argc, char **argv)
         if (1) {
 #ifndef OPENSSL_NO_UI_CONSOLE
             /* build a null-terminated list */
+#ifndef __rtems__
             static char *passwds_static[2] = { NULL, NULL };
+#endif /* __rtems__ */
 
             passwds = passwds_static;
             if (in == NULL) {
@@ -853,3 +862,6 @@ static int do_passwd(int passed_salt, char **salt_p, char **salt_malloc_p,
  end:
     return 0;
 }
+#ifdef __rtems__
+#include "rtems-bsd-openssl-passwd-data.h"
+#endif /* __rtems__ */
diff --git a/freebsd/crypto/openssl/apps/pkcs12.c b/freebsd/crypto/openssl/apps/pkcs12.c
index 66a4bac..9235c97 100644
--- a/freebsd/crypto/openssl/apps/pkcs12.c
+++ b/freebsd/crypto/openssl/apps/pkcs12.c
@@ -1,4 +1,8 @@
 #include <machine/rtems-bsd-user-space.h>
+#ifdef __rtems__
+#include <machine/rtems-bsd-program.h>
+#include "rtems-bsd-openssl-namespace.h"
+#endif /* __rtems__ */
 
 /*
  * Copyright 1999-2018 The OpenSSL Project Authors. All Rights Reserved.
@@ -961,3 +965,6 @@ static int set_pbe(int *ppbe, const char *str)
 }
 
 #endif
+#ifdef __rtems__
+#include "rtems-bsd-openssl-pkcs12-data.h"
+#endif /* __rtems__ */
diff --git a/freebsd/crypto/openssl/apps/pkcs7.c b/freebsd/crypto/openssl/apps/pkcs7.c
index 6e5c473..c7bad93 100644
--- a/freebsd/crypto/openssl/apps/pkcs7.c
+++ b/freebsd/crypto/openssl/apps/pkcs7.c
@@ -1,4 +1,8 @@
 #include <machine/rtems-bsd-user-space.h>
+#ifdef __rtems__
+#include <machine/rtems-bsd-program.h>
+#include "rtems-bsd-openssl-namespace.h"
+#endif /* __rtems__ */
 
 /*
  * Copyright 1995-2018 The OpenSSL Project Authors. All Rights Reserved.
@@ -198,3 +202,6 @@ int pkcs7_main(int argc, char **argv)
     BIO_free_all(out);
     return ret;
 }
+#ifdef __rtems__
+#include "rtems-bsd-openssl-pkcs7-data.h"
+#endif /* __rtems__ */
diff --git a/freebsd/crypto/openssl/apps/pkcs8.c b/freebsd/crypto/openssl/apps/pkcs8.c
index 9792422..07e991a 100644
--- a/freebsd/crypto/openssl/apps/pkcs8.c
+++ b/freebsd/crypto/openssl/apps/pkcs8.c
@@ -1,4 +1,8 @@
 #include <machine/rtems-bsd-user-space.h>
+#ifdef __rtems__
+#include <machine/rtems-bsd-program.h>
+#include "rtems-bsd-openssl-namespace.h"
+#endif /* __rtems__ */
 
 /*
  * Copyright 1999-2018 The OpenSSL Project Authors. All Rights Reserved.
@@ -359,3 +363,6 @@ int pkcs8_main(int argc, char **argv)
 
     return ret;
 }
+#ifdef __rtems__
+#include "rtems-bsd-openssl-pkcs8-data.h"
+#endif /* __rtems__ */
diff --git a/freebsd/crypto/openssl/apps/pkey.c b/freebsd/crypto/openssl/apps/pkey.c
index d220fde..ec34141 100644
--- a/freebsd/crypto/openssl/apps/pkey.c
+++ b/freebsd/crypto/openssl/apps/pkey.c
@@ -1,4 +1,8 @@
 #include <machine/rtems-bsd-user-space.h>
+#ifdef __rtems__
+#include <machine/rtems-bsd-program.h>
+#include "rtems-bsd-openssl-namespace.h"
+#endif /* __rtems__ */
 
 /*
  * Copyright 2006-2018 The OpenSSL Project Authors. All Rights Reserved.
@@ -243,3 +247,6 @@ int pkey_main(int argc, char **argv)
 
     return ret;
 }
+#ifdef __rtems__
+#include "rtems-bsd-openssl-pkey-data.h"
+#endif /* __rtems__ */
diff --git a/freebsd/crypto/openssl/apps/pkeyparam.c b/freebsd/crypto/openssl/apps/pkeyparam.c
index b58b445..763ddc4 100644
--- a/freebsd/crypto/openssl/apps/pkeyparam.c
+++ b/freebsd/crypto/openssl/apps/pkeyparam.c
@@ -1,4 +1,8 @@
 #include <machine/rtems-bsd-user-space.h>
+#ifdef __rtems__
+#include <machine/rtems-bsd-program.h>
+#include "rtems-bsd-openssl-namespace.h"
+#endif /* __rtems__ */
 
 /*
  * Copyright 2006-2018 The OpenSSL Project Authors. All Rights Reserved.
@@ -142,3 +146,6 @@ int pkeyparam_main(int argc, char **argv)
 
     return ret;
 }
+#ifdef __rtems__
+#include "rtems-bsd-openssl-pkeyparam-data.h"
+#endif /* __rtems__ */
diff --git a/freebsd/crypto/openssl/apps/pkeyutl.c b/freebsd/crypto/openssl/apps/pkeyutl.c
index ff88c78..657a5be 100644
--- a/freebsd/crypto/openssl/apps/pkeyutl.c
+++ b/freebsd/crypto/openssl/apps/pkeyutl.c
@@ -1,4 +1,8 @@
 #include <machine/rtems-bsd-user-space.h>
+#ifdef __rtems__
+#include <machine/rtems-bsd-program.h>
+#include "rtems-bsd-openssl-namespace.h"
+#endif /* __rtems__ */
 
 /*
  * Copyright 2006-2018 The OpenSSL Project Authors. All Rights Reserved.
@@ -525,3 +529,6 @@ static int do_keyop(EVP_PKEY_CTX *ctx, int pkey_op,
     }
     return rv;
 }
+#ifdef __rtems__
+#include "rtems-bsd-openssl-pkeyutl-data.h"
+#endif /* __rtems__ */
diff --git a/freebsd/crypto/openssl/apps/prime.c b/freebsd/crypto/openssl/apps/prime.c
index c13bc3e..c7707ec 100644
--- a/freebsd/crypto/openssl/apps/prime.c
+++ b/freebsd/crypto/openssl/apps/prime.c
@@ -1,4 +1,8 @@
 #include <machine/rtems-bsd-user-space.h>
+#ifdef __rtems__
+#include <machine/rtems-bsd-program.h>
+#include "rtems-bsd-openssl-namespace.h"
+#endif /* __rtems__ */
 
 /*
  * Copyright 2004-2018 The OpenSSL Project Authors. All Rights Reserved.
@@ -133,3 +137,6 @@ opthelp:
     BN_free(bn);
     return ret;
 }
+#ifdef __rtems__
+#include "rtems-bsd-openssl-prime-data.h"
+#endif /* __rtems__ */
diff --git a/freebsd/crypto/openssl/apps/progs.h b/freebsd/crypto/openssl/apps/progs.h
index 0733d27..eabac0b 100644
--- a/freebsd/crypto/openssl/apps/progs.h
+++ b/freebsd/crypto/openssl/apps/progs.h
@@ -202,7 +202,9 @@ static FUNCTION functions[] = {
 #ifndef OPENSSL_NO_SRP
     {FT_general, "srp", srp_main, srp_options},
 #endif
+#ifndef __rtems__
     {FT_general, "storeutl", storeutl_main, storeutl_options},
+#endif /* __rtems__ */
 #ifndef OPENSSL_NO_TS
     {FT_general, "ts", ts_main, ts_options},
 #endif
diff --git a/freebsd/crypto/openssl/apps/rand.c b/freebsd/crypto/openssl/apps/rand.c
index af38f69..e6b7ed2 100644
--- a/freebsd/crypto/openssl/apps/rand.c
+++ b/freebsd/crypto/openssl/apps/rand.c
@@ -1,4 +1,8 @@
 #include <machine/rtems-bsd-user-space.h>
+#ifdef __rtems__
+#include <machine/rtems-bsd-program.h>
+#include "rtems-bsd-openssl-namespace.h"
+#endif /* __rtems__ */
 
 /*
  * Copyright 1998-2018 The OpenSSL Project Authors. All Rights Reserved.
@@ -133,3 +137,6 @@ int rand_main(int argc, char **argv)
     BIO_free_all(out);
     return ret;
 }
+#ifdef __rtems__
+#include "rtems-bsd-openssl-rand-data.h"
+#endif /* __rtems__ */
diff --git a/freebsd/crypto/openssl/apps/rehash.c b/freebsd/crypto/openssl/apps/rehash.c
index b90cd08..18fd5b1 100644
--- a/freebsd/crypto/openssl/apps/rehash.c
+++ b/freebsd/crypto/openssl/apps/rehash.c
@@ -1,4 +1,8 @@
 #include <machine/rtems-bsd-user-space.h>
+#ifdef __rtems__
+#include <machine/rtems-bsd-program.h>
+#include "rtems-bsd-openssl-namespace.h"
+#endif /* __rtems__ */
 
 /*
  * Copyright 2015-2018 The OpenSSL Project Authors. All Rights Reserved.
@@ -100,6 +104,10 @@ static int bit_isset(unsigned char *set, unsigned int bit)
 }
 
 
+#ifdef __rtems__
+static BUCKET nilbucket;
+static HENTRY nilhentry;
+#endif /* __rtems__ */
 /*
  * Process an entry; return number of errors.
  */
@@ -107,8 +115,10 @@ static int add_entry(enum Type type, unsigned int hash, const char *filename,
                       const unsigned char *digest, int need_symlink,
                       unsigned short old_id)
 {
+#ifndef __rtems__
     static BUCKET nilbucket;
     static HENTRY nilhentry;
+#endif /* __rtems__ */
     BUCKET *bp;
     HENTRY *ep, *found = NULL;
     unsigned int ndx = (type + hash) % OSSL_NELEM(hash_table);
@@ -512,3 +522,6 @@ int rehash_main(int argc, char **argv)
 }
 
 #endif /* defined(OPENSSL_SYS_UNIX) || defined(__APPLE__) */
+#ifdef __rtems__
+#include "rtems-bsd-openssl-rehash-data.h"
+#endif /* __rtems__ */
diff --git a/freebsd/crypto/openssl/apps/req.c b/freebsd/crypto/openssl/apps/req.c
index 0308a60..37fdde9 100644
--- a/freebsd/crypto/openssl/apps/req.c
+++ b/freebsd/crypto/openssl/apps/req.c
@@ -1,4 +1,8 @@
 #include <machine/rtems-bsd-user-space.h>
+#ifdef __rtems__
+#include <machine/rtems-bsd-program.h>
+#include "rtems-bsd-openssl-namespace.h"
+#endif /* __rtems__ */
 
 /*
  * Copyright 1995-2018 The OpenSSL Project Authors. All Rights Reserved.
@@ -1664,3 +1668,6 @@ int do_X509_CRL_sign(X509_CRL *x, EVP_PKEY *pkey, const EVP_MD *md,
     EVP_MD_CTX_free(mctx);
     return rv > 0 ? 1 : 0;
 }
+#ifdef __rtems__
+#include "rtems-bsd-openssl-req-data.h"
+#endif /* __rtems__ */
diff --git a/freebsd/crypto/openssl/apps/rsa.c b/freebsd/crypto/openssl/apps/rsa.c
index eb4774b..bce7747 100644
--- a/freebsd/crypto/openssl/apps/rsa.c
+++ b/freebsd/crypto/openssl/apps/rsa.c
@@ -1,4 +1,8 @@
 #include <machine/rtems-bsd-user-space.h>
+#ifdef __rtems__
+#include <machine/rtems-bsd-program.h>
+#include "rtems-bsd-openssl-namespace.h"
+#endif /* __rtems__ */
 
 /*
  * Copyright 1995-2018 The OpenSSL Project Authors. All Rights Reserved.
@@ -316,3 +320,6 @@ int rsa_main(int argc, char **argv)
     return ret;
 }
 #endif
+#ifdef __rtems__
+#include "rtems-bsd-openssl-rsa-data.h"
+#endif /* __rtems__ */
diff --git a/freebsd/crypto/openssl/apps/rsautl.c b/freebsd/crypto/openssl/apps/rsautl.c
index f527563..977a414 100644
--- a/freebsd/crypto/openssl/apps/rsautl.c
+++ b/freebsd/crypto/openssl/apps/rsautl.c
@@ -1,4 +1,8 @@
 #include <machine/rtems-bsd-user-space.h>
+#ifdef __rtems__
+#include <machine/rtems-bsd-program.h>
+#include "rtems-bsd-openssl-namespace.h"
+#endif /* __rtems__ */
 
 /*
  * Copyright 2000-2018 The OpenSSL Project Authors. All Rights Reserved.
@@ -282,3 +286,6 @@ int rsautl_main(int argc, char **argv)
     return ret;
 }
 #endif
+#ifdef __rtems__
+#include "rtems-bsd-openssl-rsautl-data.h"
+#endif /* __rtems__ */
diff --git a/freebsd/crypto/openssl/apps/rtems-bsd-openssl-app_rand-data.h b/freebsd/crypto/openssl/apps/rtems-bsd-openssl-app_rand-data.h
new file mode 100644
index 0000000..9f50a23
--- /dev/null
+++ b/freebsd/crypto/openssl/apps/rtems-bsd-openssl-app_rand-data.h
@@ -0,0 +1,5 @@
+/* generated by userspace-header-gen.py */
+#include <rtems/linkersets.h>
+#include "rtems-bsd-openssl-data.h"
+/* app_rand.c */
+RTEMS_LINKER_RWSET_CONTENT(bsd_prog_openssl, static char *save_rand_file);
diff --git a/freebsd/crypto/openssl/apps/rtems-bsd-openssl-apps-data.h b/freebsd/crypto/openssl/apps/rtems-bsd-openssl-apps-data.h
new file mode 100644
index 0000000..7138e3d
--- /dev/null
+++ b/freebsd/crypto/openssl/apps/rtems-bsd-openssl-apps-data.h
@@ -0,0 +1,10 @@
+/* generated by userspace-header-gen.py */
+#include <rtems/linkersets.h>
+#include "rtems-bsd-openssl-data.h"
+/* apps.c */
+RTEMS_LINKER_RWSET_CONTENT(bsd_prog_openssl, static BIO *pwdbio);
+RTEMS_LINKER_RWSET_CONTENT(bsd_prog_openssl, static BIO_METHOD *prefix_method);
+RTEMS_LINKER_RWSET_CONTENT(bsd_prog_openssl, static UI_METHOD *ui_method);
+RTEMS_LINKER_RWSET_CONTENT(bsd_prog_openssl, static UI_METHOD const *ui_fallback_method);
+RTEMS_LINKER_RWSET_CONTENT(bsd_prog_openssl, static char nmflag_set);
+RTEMS_LINKER_RWSET_CONTENT(bsd_prog_openssl, static long unsigned int nmflag);
diff --git a/freebsd/crypto/openssl/apps/rtems-bsd-openssl-asn1pars-data.h b/freebsd/crypto/openssl/apps/rtems-bsd-openssl-asn1pars-data.h
new file mode 100644
index 0000000..6ecd5f9
--- /dev/null
+++ b/freebsd/crypto/openssl/apps/rtems-bsd-openssl-asn1pars-data.h
@@ -0,0 +1,4 @@
+/* generated by userspace-header-gen.py */
+#include <rtems/linkersets.h>
+#include "rtems-bsd-openssl-data.h"
+/* asn1pars.c */
diff --git a/freebsd/crypto/openssl/apps/rtems-bsd-openssl-bf_prefix-data.h b/freebsd/crypto/openssl/apps/rtems-bsd-openssl-bf_prefix-data.h
new file mode 100644
index 0000000..ddddcd7
--- /dev/null
+++ b/freebsd/crypto/openssl/apps/rtems-bsd-openssl-bf_prefix-data.h
@@ -0,0 +1,5 @@
+/* generated by userspace-header-gen.py */
+#include <rtems/linkersets.h>
+#include "rtems-bsd-openssl-data.h"
+/* bf_prefix.c */
+RTEMS_LINKER_RWSET_CONTENT(bsd_prog_openssl, static BIO_METHOD *prefix_meth);
diff --git a/freebsd/crypto/openssl/apps/rtems-bsd-openssl-ca-data.h b/freebsd/crypto/openssl/apps/rtems-bsd-openssl-ca-data.h
new file mode 100644
index 0000000..fd72b2a
--- /dev/null
+++ b/freebsd/crypto/openssl/apps/rtems-bsd-openssl-ca-data.h
@@ -0,0 +1,8 @@
+/* generated by userspace-header-gen.py */
+#include <rtems/linkersets.h>
+#include "rtems-bsd-openssl-data.h"
+/* ca.c */
+RTEMS_LINKER_RWSET_CONTENT(bsd_prog_openssl, static CONF *extconf);
+RTEMS_LINKER_RWSET_CONTENT(bsd_prog_openssl, static char const *crl_reasons[]);
+RTEMS_LINKER_RWSET_CONTENT(bsd_prog_openssl, static int msie_hack);
+RTEMS_LINKER_RWSET_CONTENT(bsd_prog_openssl, static int preserve);
diff --git a/freebsd/crypto/openssl/apps/rtems-bsd-openssl-ciphers-data.h b/freebsd/crypto/openssl/apps/rtems-bsd-openssl-ciphers-data.h
new file mode 100644
index 0000000..0d67172
--- /dev/null
+++ b/freebsd/crypto/openssl/apps/rtems-bsd-openssl-ciphers-data.h
@@ -0,0 +1,4 @@
+/* generated by userspace-header-gen.py */
+#include <rtems/linkersets.h>
+#include "rtems-bsd-openssl-data.h"
+/* ciphers.c */
diff --git a/freebsd/crypto/openssl/apps/rtems-bsd-openssl-cms-data.h b/freebsd/crypto/openssl/apps/rtems-bsd-openssl-cms-data.h
new file mode 100644
index 0000000..94c82ae
--- /dev/null
+++ b/freebsd/crypto/openssl/apps/rtems-bsd-openssl-cms-data.h
@@ -0,0 +1,5 @@
+/* generated by userspace-header-gen.py */
+#include <rtems/linkersets.h>
+#include "rtems-bsd-openssl-data.h"
+/* cms.c */
+RTEMS_LINKER_RWSET_CONTENT(bsd_prog_openssl, static int verify_err);
diff --git a/freebsd/crypto/openssl/apps/rtems-bsd-openssl-crl-data.h b/freebsd/crypto/openssl/apps/rtems-bsd-openssl-crl-data.h
new file mode 100644
index 0000000..b08799c
--- /dev/null
+++ b/freebsd/crypto/openssl/apps/rtems-bsd-openssl-crl-data.h
@@ -0,0 +1,4 @@
+/* generated by userspace-header-gen.py */
+#include <rtems/linkersets.h>
+#include "rtems-bsd-openssl-data.h"
+/* crl.c */
diff --git a/freebsd/crypto/openssl/apps/rtems-bsd-openssl-crl2p7-data.h b/freebsd/crypto/openssl/apps/rtems-bsd-openssl-crl2p7-data.h
new file mode 100644
index 0000000..764a933
--- /dev/null
+++ b/freebsd/crypto/openssl/apps/rtems-bsd-openssl-crl2p7-data.h
@@ -0,0 +1,4 @@
+/* generated by userspace-header-gen.py */
+#include <rtems/linkersets.h>
+#include "rtems-bsd-openssl-data.h"
+/* crl2p7.c */
diff --git a/freebsd/crypto/openssl/apps/rtems-bsd-openssl-data.h b/freebsd/crypto/openssl/apps/rtems-bsd-openssl-data.h
new file mode 100644
index 0000000..83ba875
--- /dev/null
+++ b/freebsd/crypto/openssl/apps/rtems-bsd-openssl-data.h
@@ -0,0 +1,62 @@
+/* generated by userspace-header-gen.py */
+#include <rtems/linkersets.h>
+/* app_rand.c */
+/* apps.c */
+/* asn1pars.c */
+/* bf_prefix.c */
+/* ca.c */
+/* ciphers.c */
+/* cms.c */
+/* crl2p7.c */
+/* crl.c */
+/* dgst.c */
+/* dhparam.c */
+/* dsa.c */
+/* dsaparam.c */
+/* ec.c */
+/* ecparam.c */
+/* enc.c */
+/* engine.c */
+/* errstr.c */
+/* gendsa.c */
+/* genpkey.c */
+/* genrsa.c */
+/* nseq.c */
+/* ocsp.c */
+/* openssl.c */
+RTEMS_LINKER_RWSET_CONTENT(bsd_prog_openssl, extern BIO *bio_err);
+RTEMS_LINKER_RWSET_CONTENT(bsd_prog_openssl, extern BIO *bio_in);
+RTEMS_LINKER_RWSET_CONTENT(bsd_prog_openssl, extern BIO *bio_out);
+RTEMS_LINKER_RWSET_CONTENT(bsd_prog_openssl, extern char *default_config_file);
+/* opt.c */
+/* passwd.c */
+/* pkcs12.c */
+/* pkcs7.c */
+/* pkcs8.c */
+/* pkey.c */
+/* pkeyparam.c */
+/* pkeyutl.c */
+/* prime.c */
+/* rand.c */
+/* rehash.c */
+/* req.c */
+/* rsa.c */
+/* rsautl.c */
+/* s_cb.c */
+RTEMS_LINKER_RWSET_CONTENT(bsd_prog_openssl, extern VERIFY_CB_ARGS verify_args);
+/* s_client.c */
+/* sess_id.c */
+/* smime.c */
+/* speed.c */
+/* spkac.c */
+/* srp.c */
+/* s_server.c */
+RTEMS_LINKER_RWSET_CONTENT(bsd_prog_openssl, extern char *psk_key);
+/* s_socket.c */
+RTEMS_LINKER_RWSET_CONTENT(bsd_prog_openssl, extern BIO_ADDR *ourpeer);
+/* s_time.c */
+/* storeutl.c */
+/* ts.c */
+/* verify.c */
+/* version.c */
+/* x509.c */
diff --git a/freebsd/crypto/openssl/apps/rtems-bsd-openssl-dgst-data.h b/freebsd/crypto/openssl/apps/rtems-bsd-openssl-dgst-data.h
new file mode 100644
index 0000000..b89c445
--- /dev/null
+++ b/freebsd/crypto/openssl/apps/rtems-bsd-openssl-dgst-data.h
@@ -0,0 +1,4 @@
+/* generated by userspace-header-gen.py */
+#include <rtems/linkersets.h>
+#include "rtems-bsd-openssl-data.h"
+/* dgst.c */
diff --git a/freebsd/crypto/openssl/apps/rtems-bsd-openssl-dhparam-data.h b/freebsd/crypto/openssl/apps/rtems-bsd-openssl-dhparam-data.h
new file mode 100644
index 0000000..12f4572
--- /dev/null
+++ b/freebsd/crypto/openssl/apps/rtems-bsd-openssl-dhparam-data.h
@@ -0,0 +1,4 @@
+/* generated by userspace-header-gen.py */
+#include <rtems/linkersets.h>
+#include "rtems-bsd-openssl-data.h"
+/* dhparam.c */
diff --git a/freebsd/crypto/openssl/apps/rtems-bsd-openssl-dsa-data.h b/freebsd/crypto/openssl/apps/rtems-bsd-openssl-dsa-data.h
new file mode 100644
index 0000000..055de28
--- /dev/null
+++ b/freebsd/crypto/openssl/apps/rtems-bsd-openssl-dsa-data.h
@@ -0,0 +1,4 @@
+/* generated by userspace-header-gen.py */
+#include <rtems/linkersets.h>
+#include "rtems-bsd-openssl-data.h"
+/* dsa.c */
diff --git a/freebsd/crypto/openssl/apps/rtems-bsd-openssl-dsaparam-data.h b/freebsd/crypto/openssl/apps/rtems-bsd-openssl-dsaparam-data.h
new file mode 100644
index 0000000..d2b2bbf
--- /dev/null
+++ b/freebsd/crypto/openssl/apps/rtems-bsd-openssl-dsaparam-data.h
@@ -0,0 +1,4 @@
+/* generated by userspace-header-gen.py */
+#include <rtems/linkersets.h>
+#include "rtems-bsd-openssl-data.h"
+/* dsaparam.c */
diff --git a/freebsd/crypto/openssl/apps/rtems-bsd-openssl-ec-data.h b/freebsd/crypto/openssl/apps/rtems-bsd-openssl-ec-data.h
new file mode 100644
index 0000000..d7a8488
--- /dev/null
+++ b/freebsd/crypto/openssl/apps/rtems-bsd-openssl-ec-data.h
@@ -0,0 +1,6 @@
+/* generated by userspace-header-gen.py */
+#include <rtems/linkersets.h>
+#include "rtems-bsd-openssl-data.h"
+/* ec.c */
+RTEMS_LINKER_RWSET_CONTENT(bsd_prog_openssl, static OPT_PAIR conv_forms[]);
+RTEMS_LINKER_RWSET_CONTENT(bsd_prog_openssl, static OPT_PAIR param_enc[]);
diff --git a/freebsd/crypto/openssl/apps/rtems-bsd-openssl-ecparam-data.h b/freebsd/crypto/openssl/apps/rtems-bsd-openssl-ecparam-data.h
new file mode 100644
index 0000000..183ad4c
--- /dev/null
+++ b/freebsd/crypto/openssl/apps/rtems-bsd-openssl-ecparam-data.h
@@ -0,0 +1,6 @@
+/* generated by userspace-header-gen.py */
+#include <rtems/linkersets.h>
+#include "rtems-bsd-openssl-data.h"
+/* ecparam.c */
+RTEMS_LINKER_RWSET_CONTENT(bsd_prog_openssl, static OPT_PAIR encodings[]);
+RTEMS_LINKER_RWSET_CONTENT(bsd_prog_openssl, static OPT_PAIR forms[]);
diff --git a/freebsd/crypto/openssl/apps/rtems-bsd-openssl-enc-data.h b/freebsd/crypto/openssl/apps/rtems-bsd-openssl-enc-data.h
new file mode 100644
index 0000000..050ad04
--- /dev/null
+++ b/freebsd/crypto/openssl/apps/rtems-bsd-openssl-enc-data.h
@@ -0,0 +1,5 @@
+/* generated by userspace-header-gen.py */
+#include <rtems/linkersets.h>
+#include "rtems-bsd-openssl-data.h"
+/* enc.c */
+RTEMS_LINKER_RWSET_CONTENT(bsd_prog_openssl, static char buf[]);
diff --git a/freebsd/crypto/openssl/apps/rtems-bsd-openssl-engine-data.h b/freebsd/crypto/openssl/apps/rtems-bsd-openssl-engine-data.h
new file mode 100644
index 0000000..5c50774
--- /dev/null
+++ b/freebsd/crypto/openssl/apps/rtems-bsd-openssl-engine-data.h
@@ -0,0 +1,4 @@
+/* generated by userspace-header-gen.py */
+#include <rtems/linkersets.h>
+#include "rtems-bsd-openssl-data.h"
+/* engine.c */
diff --git a/freebsd/crypto/openssl/apps/rtems-bsd-openssl-errstr-data.h b/freebsd/crypto/openssl/apps/rtems-bsd-openssl-errstr-data.h
new file mode 100644
index 0000000..b14665a
--- /dev/null
+++ b/freebsd/crypto/openssl/apps/rtems-bsd-openssl-errstr-data.h
@@ -0,0 +1,4 @@
+/* generated by userspace-header-gen.py */
+#include <rtems/linkersets.h>
+#include "rtems-bsd-openssl-data.h"
+/* errstr.c */
diff --git a/freebsd/crypto/openssl/apps/rtems-bsd-openssl-gendsa-data.h b/freebsd/crypto/openssl/apps/rtems-bsd-openssl-gendsa-data.h
new file mode 100644
index 0000000..c094e29
--- /dev/null
+++ b/freebsd/crypto/openssl/apps/rtems-bsd-openssl-gendsa-data.h
@@ -0,0 +1,4 @@
+/* generated by userspace-header-gen.py */
+#include <rtems/linkersets.h>
+#include "rtems-bsd-openssl-data.h"
+/* gendsa.c */
diff --git a/freebsd/crypto/openssl/apps/rtems-bsd-openssl-genpkey-data.h b/freebsd/crypto/openssl/apps/rtems-bsd-openssl-genpkey-data.h
new file mode 100644
index 0000000..c6f84bd
--- /dev/null
+++ b/freebsd/crypto/openssl/apps/rtems-bsd-openssl-genpkey-data.h
@@ -0,0 +1,4 @@
+/* generated by userspace-header-gen.py */
+#include <rtems/linkersets.h>
+#include "rtems-bsd-openssl-data.h"
+/* genpkey.c */
diff --git a/freebsd/crypto/openssl/apps/rtems-bsd-openssl-genrsa-data.h b/freebsd/crypto/openssl/apps/rtems-bsd-openssl-genrsa-data.h
new file mode 100644
index 0000000..d4c87d2
--- /dev/null
+++ b/freebsd/crypto/openssl/apps/rtems-bsd-openssl-genrsa-data.h
@@ -0,0 +1,4 @@
+/* generated by userspace-header-gen.py */
+#include <rtems/linkersets.h>
+#include "rtems-bsd-openssl-data.h"
+/* genrsa.c */
diff --git a/freebsd/crypto/openssl/apps/rtems-bsd-openssl-namespace.h b/freebsd/crypto/openssl/apps/rtems-bsd-openssl-namespace.h
new file mode 100644
index 0000000..985bbae
--- /dev/null
+++ b/freebsd/crypto/openssl/apps/rtems-bsd-openssl-namespace.h
@@ -0,0 +1,248 @@
+/* generated by userspace-header-gen.py */
+/* app_rand.c */
+#define app_RAND_load_conf _bsd_openssl_app_RAND_load_conf
+#define app_RAND_write _bsd_openssl_app_RAND_write
+#define opt_rand _bsd_openssl_opt_rand
+/* apps.c */
+#define add_oid_section _bsd_openssl_add_oid_section
+#define app_access _bsd_openssl_app_access
+#define app_init _bsd_openssl_app_init
+#define app_isdir _bsd_openssl_app_isdir
+#define app_load_config _bsd_openssl_app_load_config
+#define app_load_config_bio _bsd_openssl_app_load_config_bio
+#define app_load_config_quiet _bsd_openssl_app_load_config_quiet
+#define app_load_modules _bsd_openssl_app_load_modules
+#define app_malloc _bsd_openssl_app_malloc
+#define app_passwd _bsd_openssl_app_passwd
+#define app_tminterval _bsd_openssl_app_tminterval
+#define bio_open_default _bsd_openssl_bio_open_default
+#define bio_open_default_quiet _bsd_openssl_bio_open_default_quiet
+#define bio_open_owner _bsd_openssl_bio_open_owner
+#define bio_to_mem _bsd_openssl_bio_to_mem
+#define chopup_args _bsd_openssl_chopup_args
+#define copy_extensions _bsd_openssl_copy_extensions
+#define corrupt_signature _bsd_openssl_corrupt_signature
+#define ctx_set_ctlog_list_file _bsd_openssl_ctx_set_ctlog_list_file
+#define ctx_set_verify_locations _bsd_openssl_ctx_set_verify_locations
+#define destroy_prefix_method _bsd_openssl_destroy_prefix_method
+#define destroy_ui_method _bsd_openssl_destroy_ui_method
+#define dump_cert_text _bsd_openssl_dump_cert_text
+#define dup_bio_err _bsd_openssl_dup_bio_err
+#define dup_bio_in _bsd_openssl_dup_bio_in
+#define dup_bio_out _bsd_openssl_dup_bio_out
+#define fileno_stdin _bsd_openssl_fileno_stdin
+#define fileno_stdout _bsd_openssl_fileno_stdout
+#define free_index _bsd_openssl_free_index
+#define get_nameopt _bsd_openssl_get_nameopt
+#define get_ui_method _bsd_openssl_get_ui_method
+#define index_index _bsd_openssl_index_index
+#define index_name_cmp _bsd_openssl_index_name_cmp
+#define load_cert _bsd_openssl_load_cert
+#define load_certs _bsd_openssl_load_certs
+#define load_crl _bsd_openssl_load_crl
+#define load_crls _bsd_openssl_load_crls
+#define load_index _bsd_openssl_load_index
+#define load_key _bsd_openssl_load_key
+#define load_pubkey _bsd_openssl_load_pubkey
+#define load_serial _bsd_openssl_load_serial
+#define make_uppercase _bsd_openssl_make_uppercase
+#define next_protos_parse _bsd_openssl_next_protos_parse
+#define parse_name _bsd_openssl_parse_name
+#define parse_yesno _bsd_openssl_parse_yesno
+#define password_callback _bsd_openssl_password_callback
+#define pkey_ctrl_string _bsd_openssl_pkey_ctrl_string
+#define policies_print _bsd_openssl_policies_print
+#define print_array _bsd_openssl_print_array
+#define print_bignum_var _bsd_openssl_print_bignum_var
+#define print_cert_checks _bsd_openssl_print_cert_checks
+#define print_name _bsd_openssl_print_name
+#define rand_serial _bsd_openssl_rand_serial
+#define raw_read_stdin _bsd_openssl_raw_read_stdin
+#define raw_write_stdout _bsd_openssl_raw_write_stdout
+#define release_engine _bsd_openssl_release_engine
+#define rotate_index _bsd_openssl_rotate_index
+#define rotate_serial _bsd_openssl_rotate_serial
+#define save_index _bsd_openssl_save_index
+#define save_serial _bsd_openssl_save_serial
+#define set_cert_ex _bsd_openssl_set_cert_ex
+#define set_cert_times _bsd_openssl_set_cert_times
+#define set_ext_copy _bsd_openssl_set_ext_copy
+#define set_name_ex _bsd_openssl_set_name_ex
+#define set_nameopt _bsd_openssl_set_nameopt
+#define setup_engine _bsd_openssl_setup_engine
+#define setup_ui_method _bsd_openssl_setup_ui_method
+#define setup_verify _bsd_openssl_setup_verify
+#define store_setup_crl_download _bsd_openssl_store_setup_crl_download
+#define unbuffer _bsd_openssl_unbuffer
+#define wait_for_async _bsd_openssl_wait_for_async
+/* asn1pars.c */
+#define asn1parse_main _bsd_openssl_asn1parse_main
+/* bf_prefix.c */
+#define apps_bf_prefix _bsd_openssl_apps_bf_prefix
+/* ca.c */
+#define ca_main _bsd_openssl_ca_main
+#define unpack_revinfo _bsd_openssl_unpack_revinfo
+/* ciphers.c */
+#define ciphers_main _bsd_openssl_ciphers_main
+/* cms.c */
+#define cms_main _bsd_openssl_cms_main
+/* crl2p7.c */
+#define crl2pkcs7_main _bsd_openssl_crl2pkcs7_main
+/* crl.c */
+#define crl_main _bsd_openssl_crl_main
+/* dgst.c */
+#define dgst_main _bsd_openssl_dgst_main
+#define do_fp _bsd_openssl_do_fp
+/* dhparam.c */
+#define dhparam_main _bsd_openssl_dhparam_main
+/* dsa.c */
+#define dsa_main _bsd_openssl_dsa_main
+/* dsaparam.c */
+#define dsaparam_main _bsd_openssl_dsaparam_main
+/* ec.c */
+#define ec_main _bsd_openssl_ec_main
+/* ecparam.c */
+#define ecparam_main _bsd_openssl_ecparam_main
+/* enc.c */
+#define enc_main _bsd_openssl_enc_main
+/* engine.c */
+#define engine_main _bsd_openssl_engine_main
+/* errstr.c */
+#define errstr_main _bsd_openssl_errstr_main
+/* gendsa.c */
+#define gendsa_main _bsd_openssl_gendsa_main
+/* genpkey.c */
+#define genpkey_main _bsd_openssl_genpkey_main
+#define init_gen_str _bsd_openssl_init_gen_str
+/* genrsa.c */
+#define genrsa_main _bsd_openssl_genrsa_main
+/* nseq.c */
+#define nseq_main _bsd_openssl_nseq_main
+/* ocsp.c */
+#define ocsp_main _bsd_openssl_ocsp_main
+#define process_responder _bsd_openssl_process_responder
+/* openssl.c */
+#define bio_err _bsd_openssl_bio_err
+#define bio_in _bsd_openssl_bio_in
+#define bio_out _bsd_openssl_bio_out
+#define default_config_file _bsd_openssl_default_config_file
+#define help_main _bsd_openssl_help_main
+#define list_main _bsd_openssl_list_main
+/* opt.c */
+#define opt_arg _bsd_openssl_opt_arg
+#define opt_cipher _bsd_openssl_opt_cipher
+#define opt_flag _bsd_openssl_opt_flag
+#define opt_format _bsd_openssl_opt_format
+#define opt_format_error _bsd_openssl_opt_format_error
+#define opt_getprog _bsd_openssl_opt_getprog
+#define opt_help _bsd_openssl_opt_help
+#define opt_imax _bsd_openssl_opt_imax
+#define opt_init _bsd_openssl_opt_init
+#define opt_int _bsd_openssl_opt_int
+#define opt_long _bsd_openssl_opt_long
+#define opt_md _bsd_openssl_opt_md
+#define opt_next _bsd_openssl_opt_next
+#define opt_num_rest _bsd_openssl_opt_num_rest
+#define opt_pair _bsd_openssl_opt_pair
+#define opt_progname _bsd_openssl_opt_progname
+#define opt_rest _bsd_openssl_opt_rest
+#define opt_ulong _bsd_openssl_opt_ulong
+#define opt_umax _bsd_openssl_opt_umax
+#define opt_unknown _bsd_openssl_opt_unknown
+#define opt_verify _bsd_openssl_opt_verify
+/* passwd.c */
+#define passwd_main _bsd_openssl_passwd_main
+/* pkcs12.c */
+#define cert_load _bsd_openssl_cert_load
+#define dump_certs_keys_p12 _bsd_openssl_dump_certs_keys_p12
+#define dump_certs_pkeys_bag _bsd_openssl_dump_certs_pkeys_bag
+#define dump_certs_pkeys_bags _bsd_openssl_dump_certs_pkeys_bags
+#define hex_prin _bsd_openssl_hex_prin
+#define pkcs12_main _bsd_openssl_pkcs12_main
+#define print_attribs _bsd_openssl_print_attribs
+/* pkcs7.c */
+#define pkcs7_main _bsd_openssl_pkcs7_main
+/* pkcs8.c */
+#define pkcs8_main _bsd_openssl_pkcs8_main
+/* pkey.c */
+#define pkey_main _bsd_openssl_pkey_main
+/* pkeyparam.c */
+#define pkeyparam_main _bsd_openssl_pkeyparam_main
+/* pkeyutl.c */
+#define pkeyutl_main _bsd_openssl_pkeyutl_main
+/* prime.c */
+#define prime_main _bsd_openssl_prime_main
+/* rand.c */
+#define rand_main _bsd_openssl_rand_main
+/* rehash.c */
+#define rehash_main _bsd_openssl_rehash_main
+/* req.c */
+#define do_X509_CRL_sign _bsd_openssl_do_X509_CRL_sign
+#define do_X509_REQ_sign _bsd_openssl_do_X509_REQ_sign
+#define do_X509_sign _bsd_openssl_do_X509_sign
+#define req_main _bsd_openssl_req_main
+/* rsa.c */
+#define rsa_main _bsd_openssl_rsa_main
+/* rsautl.c */
+#define rsautl_main _bsd_openssl_rsautl_main
+/* s_cb.c */
+#define apps_ssl_info_callback _bsd_openssl_apps_ssl_info_callback
+#define args_excert _bsd_openssl_args_excert
+#define bio_dump_callback _bsd_openssl_bio_dump_callback
+#define config_ctx _bsd_openssl_config_ctx
+#define generate_cookie_callback _bsd_openssl_generate_cookie_callback
+#define generate_stateless_cookie_callback _bsd_openssl_generate_stateless_cookie_callback
+#define load_excert _bsd_openssl_load_excert
+#define msg_cb _bsd_openssl_msg_cb
+#define print_ca_names _bsd_openssl_print_ca_names
+#define print_ssl_summary _bsd_openssl_print_ssl_summary
+#define print_verify_detail _bsd_openssl_print_verify_detail
+#define set_cert_key_stuff _bsd_openssl_set_cert_key_stuff
+#define set_cert_stuff _bsd_openssl_set_cert_stuff
+#define set_keylog_file _bsd_openssl_set_keylog_file
+#define ssl_ctx_add_crls _bsd_openssl_ssl_ctx_add_crls
+#define ssl_ctx_security_debug _bsd_openssl_ssl_ctx_security_debug
+#define ssl_ctx_set_excert _bsd_openssl_ssl_ctx_set_excert
+#define ssl_excert_free _bsd_openssl_ssl_excert_free
+#define ssl_load_stores _bsd_openssl_ssl_load_stores
+#define ssl_print_groups _bsd_openssl_ssl_print_groups
+#define ssl_print_point_formats _bsd_openssl_ssl_print_point_formats
+#define ssl_print_sigalgs _bsd_openssl_ssl_print_sigalgs
+#define ssl_print_tmp_key _bsd_openssl_ssl_print_tmp_key
+#define tlsext_cb _bsd_openssl_tlsext_cb
+#define verify_args _bsd_openssl_verify_args
+#define verify_callback _bsd_openssl_verify_callback
+#define verify_cookie_callback _bsd_openssl_verify_cookie_callback
+#define verify_stateless_cookie_callback _bsd_openssl_verify_stateless_cookie_callback
+/* s_client.c */
+#define s_client_main _bsd_openssl_s_client_main
+/* sess_id.c */
+#define sess_id_main _bsd_openssl_sess_id_main
+/* smime.c */
+#define smime_main _bsd_openssl_smime_main
+/* speed.c */
+#define get_dsa _bsd_openssl_get_dsa
+#define speed_main _bsd_openssl_speed_main
+/* spkac.c */
+#define spkac_main _bsd_openssl_spkac_main
+/* srp.c */
+#define srp_main _bsd_openssl_srp_main
+/* s_server.c */
+#define psk_key _bsd_openssl_psk_key
+#define s_server_main _bsd_openssl_s_server_main
+/* s_socket.c */
+#define do_server _bsd_openssl_do_server
+#define init_client _bsd_openssl_init_client
+#define ourpeer _bsd_openssl_ourpeer
+/* s_time.c */
+#define s_time_main _bsd_openssl_s_time_main
+/* storeutl.c */
+#define storeutl_main _bsd_openssl_storeutl_main
+/* ts.c */
+#define ts_main _bsd_openssl_ts_main
+/* verify.c */
+#define verify_main _bsd_openssl_verify_main
+/* version.c */
+#define version_main _bsd_openssl_version_main
+/* x509.c */
+#define x509_main _bsd_openssl_x509_main
diff --git a/freebsd/crypto/openssl/apps/rtems-bsd-openssl-nseq-data.h b/freebsd/crypto/openssl/apps/rtems-bsd-openssl-nseq-data.h
new file mode 100644
index 0000000..3162ed4
--- /dev/null
+++ b/freebsd/crypto/openssl/apps/rtems-bsd-openssl-nseq-data.h
@@ -0,0 +1,4 @@
+/* generated by userspace-header-gen.py */
+#include <rtems/linkersets.h>
+#include "rtems-bsd-openssl-data.h"
+/* nseq.c */
diff --git a/freebsd/crypto/openssl/apps/rtems-bsd-openssl-ocsp-data.h b/freebsd/crypto/openssl/apps/rtems-bsd-openssl-ocsp-data.h
new file mode 100644
index 0000000..2c2b926
--- /dev/null
+++ b/freebsd/crypto/openssl/apps/rtems-bsd-openssl-ocsp-data.h
@@ -0,0 +1,8 @@
+/* generated by userspace-header-gen.py */
+#include <rtems/linkersets.h>
+#include "rtems-bsd-openssl-data.h"
+/* ocsp.c */
+RTEMS_LINKER_RWSET_CONTENT(bsd_prog_openssl, static char *prog);
+RTEMS_LINKER_RWSET_CONTENT(bsd_prog_openssl, static int acfd);
+RTEMS_LINKER_RWSET_CONTENT(bsd_prog_openssl, static int multi);
+RTEMS_LINKER_RWSET_CONTENT(bsd_prog_openssl, static int termsig);
diff --git a/freebsd/crypto/openssl/apps/rtems-bsd-openssl-openssl-data.h b/freebsd/crypto/openssl/apps/rtems-bsd-openssl-openssl-data.h
new file mode 100644
index 0000000..68e01a4
--- /dev/null
+++ b/freebsd/crypto/openssl/apps/rtems-bsd-openssl-openssl-data.h
@@ -0,0 +1,7 @@
+/* generated by userspace-header-gen.py */
+#include <rtems/linkersets.h>
+#include "rtems-bsd-openssl-data.h"
+/* openssl.c */
+RTEMS_LINKER_RWSET_CONTENT(bsd_prog_openssl, static FUNCTION functions[]);
+RTEMS_LINKER_RWSET_CONTENT(bsd_prog_openssl, static int prog_inited);
+RTEMS_LINKER_RWSET_CONTENT(bsd_prog_openssl, static struct lhash_st_FUNCTION *ret);
diff --git a/freebsd/crypto/openssl/apps/rtems-bsd-openssl-opt-data.h b/freebsd/crypto/openssl/apps/rtems-bsd-openssl-opt-data.h
new file mode 100644
index 0000000..fcd604a
--- /dev/null
+++ b/freebsd/crypto/openssl/apps/rtems-bsd-openssl-opt-data.h
@@ -0,0 +1,14 @@
+/* generated by userspace-header-gen.py */
+#include <rtems/linkersets.h>
+#include "rtems-bsd-openssl-data.h"
+/* opt.c */
+RTEMS_LINKER_RWSET_CONTENT(bsd_prog_openssl, static OPTIONS const *opts);
+RTEMS_LINKER_RWSET_CONTENT(bsd_prog_openssl, static OPTIONS const *unknown);
+RTEMS_LINKER_RWSET_CONTENT(bsd_prog_openssl, static OPT_PAIR formats[]);
+RTEMS_LINKER_RWSET_CONTENT(bsd_prog_openssl, static char **argv);
+RTEMS_LINKER_RWSET_CONTENT(bsd_prog_openssl, static char *arg);
+RTEMS_LINKER_RWSET_CONTENT(bsd_prog_openssl, static char *dunno);
+RTEMS_LINKER_RWSET_CONTENT(bsd_prog_openssl, static char *flag);
+RTEMS_LINKER_RWSET_CONTENT(bsd_prog_openssl, static char prog[]);
+RTEMS_LINKER_RWSET_CONTENT(bsd_prog_openssl, static int argc);
+RTEMS_LINKER_RWSET_CONTENT(bsd_prog_openssl, static int opt_index);
diff --git a/freebsd/crypto/openssl/apps/rtems-bsd-openssl-passwd-data.h b/freebsd/crypto/openssl/apps/rtems-bsd-openssl-passwd-data.h
new file mode 100644
index 0000000..cb4302b
--- /dev/null
+++ b/freebsd/crypto/openssl/apps/rtems-bsd-openssl-passwd-data.h
@@ -0,0 +1,5 @@
+/* generated by userspace-header-gen.py */
+#include <rtems/linkersets.h>
+#include "rtems-bsd-openssl-data.h"
+/* passwd.c */
+RTEMS_LINKER_RWSET_CONTENT(bsd_prog_openssl, static char *passwds_static[]);
diff --git a/freebsd/crypto/openssl/apps/rtems-bsd-openssl-pkcs12-data.h b/freebsd/crypto/openssl/apps/rtems-bsd-openssl-pkcs12-data.h
new file mode 100644
index 0000000..cfc082d
--- /dev/null
+++ b/freebsd/crypto/openssl/apps/rtems-bsd-openssl-pkcs12-data.h
@@ -0,0 +1,4 @@
+/* generated by userspace-header-gen.py */
+#include <rtems/linkersets.h>
+#include "rtems-bsd-openssl-data.h"
+/* pkcs12.c */
diff --git a/freebsd/crypto/openssl/apps/rtems-bsd-openssl-pkcs7-data.h b/freebsd/crypto/openssl/apps/rtems-bsd-openssl-pkcs7-data.h
new file mode 100644
index 0000000..5a5f276
--- /dev/null
+++ b/freebsd/crypto/openssl/apps/rtems-bsd-openssl-pkcs7-data.h
@@ -0,0 +1,4 @@
+/* generated by userspace-header-gen.py */
+#include <rtems/linkersets.h>
+#include "rtems-bsd-openssl-data.h"
+/* pkcs7.c */
diff --git a/freebsd/crypto/openssl/apps/rtems-bsd-openssl-pkcs8-data.h b/freebsd/crypto/openssl/apps/rtems-bsd-openssl-pkcs8-data.h
new file mode 100644
index 0000000..34c2f20
--- /dev/null
+++ b/freebsd/crypto/openssl/apps/rtems-bsd-openssl-pkcs8-data.h
@@ -0,0 +1,4 @@
+/* generated by userspace-header-gen.py */
+#include <rtems/linkersets.h>
+#include "rtems-bsd-openssl-data.h"
+/* pkcs8.c */
diff --git a/freebsd/crypto/openssl/apps/rtems-bsd-openssl-pkey-data.h b/freebsd/crypto/openssl/apps/rtems-bsd-openssl-pkey-data.h
new file mode 100644
index 0000000..828c195
--- /dev/null
+++ b/freebsd/crypto/openssl/apps/rtems-bsd-openssl-pkey-data.h
@@ -0,0 +1,4 @@
+/* generated by userspace-header-gen.py */
+#include <rtems/linkersets.h>
+#include "rtems-bsd-openssl-data.h"
+/* pkey.c */
diff --git a/freebsd/crypto/openssl/apps/rtems-bsd-openssl-pkeyparam-data.h b/freebsd/crypto/openssl/apps/rtems-bsd-openssl-pkeyparam-data.h
new file mode 100644
index 0000000..dd63662
--- /dev/null
+++ b/freebsd/crypto/openssl/apps/rtems-bsd-openssl-pkeyparam-data.h
@@ -0,0 +1,4 @@
+/* generated by userspace-header-gen.py */
+#include <rtems/linkersets.h>
+#include "rtems-bsd-openssl-data.h"
+/* pkeyparam.c */
diff --git a/freebsd/crypto/openssl/apps/rtems-bsd-openssl-pkeyutl-data.h b/freebsd/crypto/openssl/apps/rtems-bsd-openssl-pkeyutl-data.h
new file mode 100644
index 0000000..2889557
--- /dev/null
+++ b/freebsd/crypto/openssl/apps/rtems-bsd-openssl-pkeyutl-data.h
@@ -0,0 +1,4 @@
+/* generated by userspace-header-gen.py */
+#include <rtems/linkersets.h>
+#include "rtems-bsd-openssl-data.h"
+/* pkeyutl.c */
diff --git a/freebsd/crypto/openssl/apps/rtems-bsd-openssl-prime-data.h b/freebsd/crypto/openssl/apps/rtems-bsd-openssl-prime-data.h
new file mode 100644
index 0000000..665f925
--- /dev/null
+++ b/freebsd/crypto/openssl/apps/rtems-bsd-openssl-prime-data.h
@@ -0,0 +1,4 @@
+/* generated by userspace-header-gen.py */
+#include <rtems/linkersets.h>
+#include "rtems-bsd-openssl-data.h"
+/* prime.c */
diff --git a/freebsd/crypto/openssl/apps/rtems-bsd-openssl-rand-data.h b/freebsd/crypto/openssl/apps/rtems-bsd-openssl-rand-data.h
new file mode 100644
index 0000000..19df25f
--- /dev/null
+++ b/freebsd/crypto/openssl/apps/rtems-bsd-openssl-rand-data.h
@@ -0,0 +1,4 @@
+/* generated by userspace-header-gen.py */
+#include <rtems/linkersets.h>
+#include "rtems-bsd-openssl-data.h"
+/* rand.c */
diff --git a/freebsd/crypto/openssl/apps/rtems-bsd-openssl-rehash-data.h b/freebsd/crypto/openssl/apps/rtems-bsd-openssl-rehash-data.h
new file mode 100644
index 0000000..6dd6079
--- /dev/null
+++ b/freebsd/crypto/openssl/apps/rtems-bsd-openssl-rehash-data.h
@@ -0,0 +1,13 @@
+/* generated by userspace-header-gen.py */
+#include <rtems/linkersets.h>
+#include "rtems-bsd-openssl-data.h"
+/* rehash.c */
+RTEMS_LINKER_RWSET_CONTENT(bsd_prog_openssl, static BUCKET *hash_table[]);
+RTEMS_LINKER_RWSET_CONTENT(bsd_prog_openssl, static BUCKET nilbucket);
+RTEMS_LINKER_RWSET_CONTENT(bsd_prog_openssl, static EVP_MD const *evpmd);
+RTEMS_LINKER_RWSET_CONTENT(bsd_prog_openssl, static HENTRY nilhentry);
+RTEMS_LINKER_RWSET_CONTENT(bsd_prog_openssl, static char const *extensions[]);
+RTEMS_LINKER_RWSET_CONTENT(bsd_prog_openssl, static char const *suffixes[]);
+RTEMS_LINKER_RWSET_CONTENT(bsd_prog_openssl, static int evpmdsize);
+RTEMS_LINKER_RWSET_CONTENT(bsd_prog_openssl, static int remove_links);
+RTEMS_LINKER_RWSET_CONTENT(bsd_prog_openssl, static int verbose);
diff --git a/freebsd/crypto/openssl/apps/rtems-bsd-openssl-req-data.h b/freebsd/crypto/openssl/apps/rtems-bsd-openssl-req-data.h
new file mode 100644
index 0000000..ad6fc0d
--- /dev/null
+++ b/freebsd/crypto/openssl/apps/rtems-bsd-openssl-req-data.h
@@ -0,0 +1,7 @@
+/* generated by userspace-header-gen.py */
+#include <rtems/linkersets.h>
+#include "rtems-bsd-openssl-data.h"
+/* req.c */
+RTEMS_LINKER_RWSET_CONTENT(bsd_prog_openssl, static CONF *addext_conf);
+RTEMS_LINKER_RWSET_CONTENT(bsd_prog_openssl, static CONF *req_conf);
+RTEMS_LINKER_RWSET_CONTENT(bsd_prog_openssl, static int batch);
diff --git a/freebsd/crypto/openssl/apps/rtems-bsd-openssl-rsa-data.h b/freebsd/crypto/openssl/apps/rtems-bsd-openssl-rsa-data.h
new file mode 100644
index 0000000..6419257
--- /dev/null
+++ b/freebsd/crypto/openssl/apps/rtems-bsd-openssl-rsa-data.h
@@ -0,0 +1,4 @@
+/* generated by userspace-header-gen.py */
+#include <rtems/linkersets.h>
+#include "rtems-bsd-openssl-data.h"
+/* rsa.c */
diff --git a/freebsd/crypto/openssl/apps/rtems-bsd-openssl-rsautl-data.h b/freebsd/crypto/openssl/apps/rtems-bsd-openssl-rsautl-data.h
new file mode 100644
index 0000000..54574fe
--- /dev/null
+++ b/freebsd/crypto/openssl/apps/rtems-bsd-openssl-rsautl-data.h
@@ -0,0 +1,4 @@
+/* generated by userspace-header-gen.py */
+#include <rtems/linkersets.h>
+#include "rtems-bsd-openssl-data.h"
+/* rsautl.c */
diff --git a/freebsd/crypto/openssl/apps/rtems-bsd-openssl-s_cb-data.h b/freebsd/crypto/openssl/apps/rtems-bsd-openssl-s_cb-data.h
new file mode 100644
index 0000000..a3d76b5
--- /dev/null
+++ b/freebsd/crypto/openssl/apps/rtems-bsd-openssl-s_cb-data.h
@@ -0,0 +1,15 @@
+/* generated by userspace-header-gen.py */
+#include <rtems/linkersets.h>
+#include "rtems-bsd-openssl-data.h"
+/* s_cb.c */
+RTEMS_LINKER_RWSET_CONTENT(bsd_prog_openssl, static BIO *bio_keylog);
+RTEMS_LINKER_RWSET_CONTENT(bsd_prog_openssl, static STRINT_PAIR alert_types[]);
+RTEMS_LINKER_RWSET_CONTENT(bsd_prog_openssl, static STRINT_PAIR callback_types[]);
+RTEMS_LINKER_RWSET_CONTENT(bsd_prog_openssl, static STRINT_PAIR cert_type_list[]);
+RTEMS_LINKER_RWSET_CONTENT(bsd_prog_openssl, static STRINT_PAIR chain_flags[]);
+RTEMS_LINKER_RWSET_CONTENT(bsd_prog_openssl, static STRINT_PAIR handshakes[]);
+RTEMS_LINKER_RWSET_CONTENT(bsd_prog_openssl, static STRINT_PAIR ssl_versions[]);
+RTEMS_LINKER_RWSET_CONTENT(bsd_prog_openssl, static STRINT_PAIR tlsext_types[]);
+RTEMS_LINKER_RWSET_CONTENT(bsd_prog_openssl, static int cookie_initialized);
+RTEMS_LINKER_RWSET_CONTENT(bsd_prog_openssl, static int retry_cnt);
+RTEMS_LINKER_RWSET_CONTENT(bsd_prog_openssl, static unsigned char cookie_secret[]);
diff --git a/freebsd/crypto/openssl/apps/rtems-bsd-openssl-s_client-data.h b/freebsd/crypto/openssl/apps/rtems-bsd-openssl-s_client-data.h
new file mode 100644
index 0000000..807aae0
--- /dev/null
+++ b/freebsd/crypto/openssl/apps/rtems-bsd-openssl-s_client-data.h
@@ -0,0 +1,21 @@
+/* generated by userspace-header-gen.py */
+#include <rtems/linkersets.h>
+#include "rtems-bsd-openssl-data.h"
+/* s_client.c */
+RTEMS_LINKER_RWSET_CONTENT(bsd_prog_openssl, static BIO *bio_c_out);
+RTEMS_LINKER_RWSET_CONTENT(bsd_prog_openssl, static SSL_SESSION *psksess);
+RTEMS_LINKER_RWSET_CONTENT(bsd_prog_openssl, static char *keymatexportlabel);
+RTEMS_LINKER_RWSET_CONTENT(bsd_prog_openssl, static char *prog);
+RTEMS_LINKER_RWSET_CONTENT(bsd_prog_openssl, static char *psk_identity);
+RTEMS_LINKER_RWSET_CONTENT(bsd_prog_openssl, static char *sess_out);
+RTEMS_LINKER_RWSET_CONTENT(bsd_prog_openssl, static int c_debug);
+RTEMS_LINKER_RWSET_CONTENT(bsd_prog_openssl, static int c_quiet);
+RTEMS_LINKER_RWSET_CONTENT(bsd_prog_openssl, static int c_showcerts);
+RTEMS_LINKER_RWSET_CONTENT(bsd_prog_openssl, static int keymatexportlen);
+RTEMS_LINKER_RWSET_CONTENT(bsd_prog_openssl, static int saved_errno);
+RTEMS_LINKER_RWSET_CONTENT(bsd_prog_openssl, static struct tlsa_field tlsa_fields[]);
+RTEMS_LINKER_RWSET_CONTENT(bsd_prog_openssl, static tlsextnextprotoctx next_proto);
+RTEMS_LINKER_RWSET_CONTENT(bsd_prog_openssl, static uint8_t mtype);
+RTEMS_LINKER_RWSET_CONTENT(bsd_prog_openssl, static uint8_t selector);
+RTEMS_LINKER_RWSET_CONTENT(bsd_prog_openssl, static uint8_t usage);
+RTEMS_LINKER_RWSET_CONTENT(bsd_prog_openssl, static unsigned char *data);
diff --git a/freebsd/crypto/openssl/apps/rtems-bsd-openssl-s_server-data.h b/freebsd/crypto/openssl/apps/rtems-bsd-openssl-s_server-data.h
new file mode 100644
index 0000000..fe55aaa
--- /dev/null
+++ b/freebsd/crypto/openssl/apps/rtems-bsd-openssl-s_server-data.h
@@ -0,0 +1,35 @@
+/* generated by userspace-header-gen.py */
+#include <rtems/linkersets.h>
+#include "rtems-bsd-openssl-data.h"
+/* s_server.c */
+RTEMS_LINKER_RWSET_CONTENT(bsd_prog_openssl, static BIO *bio_s_msg);
+RTEMS_LINKER_RWSET_CONTENT(bsd_prog_openssl, static BIO *bio_s_out);
+RTEMS_LINKER_RWSET_CONTENT(bsd_prog_openssl, static SSL_CTX *ctx);
+RTEMS_LINKER_RWSET_CONTENT(bsd_prog_openssl, static SSL_CTX *ctx2);
+RTEMS_LINKER_RWSET_CONTENT(bsd_prog_openssl, static SSL_SESSION *psksess);
+RTEMS_LINKER_RWSET_CONTENT(bsd_prog_openssl, static char **local_argv);
+RTEMS_LINKER_RWSET_CONTENT(bsd_prog_openssl, static char *keymatexportlabel);
+RTEMS_LINKER_RWSET_CONTENT(bsd_prog_openssl, static char *psk_identity);
+RTEMS_LINKER_RWSET_CONTENT(bsd_prog_openssl, static char const *session_id_prefix);
+RTEMS_LINKER_RWSET_CONTENT(bsd_prog_openssl, static int accept_socket);
+RTEMS_LINKER_RWSET_CONTENT(bsd_prog_openssl, static int async);
+RTEMS_LINKER_RWSET_CONTENT(bsd_prog_openssl, static int dtlslisten);
+RTEMS_LINKER_RWSET_CONTENT(bsd_prog_openssl, static int early_data);
+RTEMS_LINKER_RWSET_CONTENT(bsd_prog_openssl, static int enable_timeouts);
+RTEMS_LINKER_RWSET_CONTENT(bsd_prog_openssl, static int keymatexportlen);
+RTEMS_LINKER_RWSET_CONTENT(bsd_prog_openssl, static int local_argc);
+RTEMS_LINKER_RWSET_CONTENT(bsd_prog_openssl, static int s_brief);
+RTEMS_LINKER_RWSET_CONTENT(bsd_prog_openssl, static int s_crlf);
+RTEMS_LINKER_RWSET_CONTENT(bsd_prog_openssl, static int s_debug);
+RTEMS_LINKER_RWSET_CONTENT(bsd_prog_openssl, static int s_ign_eof);
+RTEMS_LINKER_RWSET_CONTENT(bsd_prog_openssl, static int s_msg);
+RTEMS_LINKER_RWSET_CONTENT(bsd_prog_openssl, static int s_nbio);
+RTEMS_LINKER_RWSET_CONTENT(bsd_prog_openssl, static int s_nbio_test);
+RTEMS_LINKER_RWSET_CONTENT(bsd_prog_openssl, static int s_quiet);
+RTEMS_LINKER_RWSET_CONTENT(bsd_prog_openssl, static int s_tlsextdebug);
+RTEMS_LINKER_RWSET_CONTENT(bsd_prog_openssl, static int stateless);
+RTEMS_LINKER_RWSET_CONTENT(bsd_prog_openssl, static int www);
+RTEMS_LINKER_RWSET_CONTENT(bsd_prog_openssl, static long int socket_mtu);
+RTEMS_LINKER_RWSET_CONTENT(bsd_prog_openssl, static simple_ssl_session *first);
+RTEMS_LINKER_RWSET_CONTENT(bsd_prog_openssl, static srpsrvparm srp_callback_parm);
+RTEMS_LINKER_RWSET_CONTENT(bsd_prog_openssl, static tlsextstatusctx tlscstatp);
diff --git a/freebsd/crypto/openssl/apps/rtems-bsd-openssl-s_socket-data.h b/freebsd/crypto/openssl/apps/rtems-bsd-openssl-s_socket-data.h
new file mode 100644
index 0000000..a4f18aa
--- /dev/null
+++ b/freebsd/crypto/openssl/apps/rtems-bsd-openssl-s_socket-data.h
@@ -0,0 +1,4 @@
+/* generated by userspace-header-gen.py */
+#include <rtems/linkersets.h>
+#include "rtems-bsd-openssl-data.h"
+/* s_socket.c */
diff --git a/freebsd/crypto/openssl/apps/rtems-bsd-openssl-s_time-data.h b/freebsd/crypto/openssl/apps/rtems-bsd-openssl-s_time-data.h
new file mode 100644
index 0000000..1ab1996
--- /dev/null
+++ b/freebsd/crypto/openssl/apps/rtems-bsd-openssl-s_time-data.h
@@ -0,0 +1,4 @@
+/* generated by userspace-header-gen.py */
+#include <rtems/linkersets.h>
+#include "rtems-bsd-openssl-data.h"
+/* s_time.c */
diff --git a/freebsd/crypto/openssl/apps/rtems-bsd-openssl-sess_id-data.h b/freebsd/crypto/openssl/apps/rtems-bsd-openssl-sess_id-data.h
new file mode 100644
index 0000000..48f1ebc
--- /dev/null
+++ b/freebsd/crypto/openssl/apps/rtems-bsd-openssl-sess_id-data.h
@@ -0,0 +1,4 @@
+/* generated by userspace-header-gen.py */
+#include <rtems/linkersets.h>
+#include "rtems-bsd-openssl-data.h"
+/* sess_id.c */
diff --git a/freebsd/crypto/openssl/apps/rtems-bsd-openssl-smime-data.h b/freebsd/crypto/openssl/apps/rtems-bsd-openssl-smime-data.h
new file mode 100644
index 0000000..b6dd416
--- /dev/null
+++ b/freebsd/crypto/openssl/apps/rtems-bsd-openssl-smime-data.h
@@ -0,0 +1,4 @@
+/* generated by userspace-header-gen.py */
+#include <rtems/linkersets.h>
+#include "rtems-bsd-openssl-data.h"
+/* smime.c */
diff --git a/freebsd/crypto/openssl/apps/rtems-bsd-openssl-speed-data.h b/freebsd/crypto/openssl/apps/rtems-bsd-openssl-speed-data.h
new file mode 100644
index 0000000..9d7a804
--- /dev/null
+++ b/freebsd/crypto/openssl/apps/rtems-bsd-openssl-speed-data.h
@@ -0,0 +1,58 @@
+/* generated by userspace-header-gen.py */
+#include <rtems/linkersets.h>
+#include "rtems-bsd-openssl-data.h"
+/* speed.c */
+RTEMS_LINKER_RWSET_CONTENT(bsd_prog_openssl, static AES_KEY aes_ks1);
+RTEMS_LINKER_RWSET_CONTENT(bsd_prog_openssl, static AES_KEY aes_ks2);
+RTEMS_LINKER_RWSET_CONTENT(bsd_prog_openssl, static AES_KEY aes_ks3);
+RTEMS_LINKER_RWSET_CONTENT(bsd_prog_openssl, static DES_key_schedule sch);
+RTEMS_LINKER_RWSET_CONTENT(bsd_prog_openssl, static DES_key_schedule sch2);
+RTEMS_LINKER_RWSET_CONTENT(bsd_prog_openssl, static DES_key_schedule sch3);
+RTEMS_LINKER_RWSET_CONTENT(bsd_prog_openssl, static EVP_MD const *evp_md);
+RTEMS_LINKER_RWSET_CONTENT(bsd_prog_openssl, static OPT_PAIR ecdsa_choices[]);
+RTEMS_LINKER_RWSET_CONTENT(bsd_prog_openssl, static OPT_PAIR eddsa_choices[]);
+RTEMS_LINKER_RWSET_CONTENT(bsd_prog_openssl, static RC4_KEY rc4_ks);
+RTEMS_LINKER_RWSET_CONTENT(bsd_prog_openssl, static char const *names[]);
+RTEMS_LINKER_RWSET_CONTENT(bsd_prog_openssl, static double dsa_results[][2]);
+RTEMS_LINKER_RWSET_CONTENT(bsd_prog_openssl, static double ecdh_results[][1]);
+RTEMS_LINKER_RWSET_CONTENT(bsd_prog_openssl, static double ecdsa_results[][2]);
+RTEMS_LINKER_RWSET_CONTENT(bsd_prog_openssl, static double eddsa_results[][2]);
+RTEMS_LINKER_RWSET_CONTENT(bsd_prog_openssl, static double results[][6]);
+RTEMS_LINKER_RWSET_CONTENT(bsd_prog_openssl, static double rsa_results[][2]);
+RTEMS_LINKER_RWSET_CONTENT(bsd_prog_openssl, static int const *lengths);
+RTEMS_LINKER_RWSET_CONTENT(bsd_prog_openssl, static int decrypt);
+RTEMS_LINKER_RWSET_CONTENT(bsd_prog_openssl, static int mr);
+RTEMS_LINKER_RWSET_CONTENT(bsd_prog_openssl, static int usertime);
+RTEMS_LINKER_RWSET_CONTENT(bsd_prog_openssl, static int volatile run);
+RTEMS_LINKER_RWSET_CONTENT(bsd_prog_openssl, static long int c[][6]);
+RTEMS_LINKER_RWSET_CONTENT(bsd_prog_openssl, static long int dsa_c[][2]);
+RTEMS_LINKER_RWSET_CONTENT(bsd_prog_openssl, static long int ecdh_c[][1]);
+RTEMS_LINKER_RWSET_CONTENT(bsd_prog_openssl, static long int ecdsa_c[][2]);
+RTEMS_LINKER_RWSET_CONTENT(bsd_prog_openssl, static long int eddsa_c[][2]);
+RTEMS_LINKER_RWSET_CONTENT(bsd_prog_openssl, static long int rsa_c[][2]);
+RTEMS_LINKER_RWSET_CONTENT(bsd_prog_openssl, static long int save_count);
+RTEMS_LINKER_RWSET_CONTENT(bsd_prog_openssl, static unsigned char DES_iv[]);
+RTEMS_LINKER_RWSET_CONTENT(bsd_prog_openssl, static unsigned char dsa1024_g[]);
+RTEMS_LINKER_RWSET_CONTENT(bsd_prog_openssl, static unsigned char dsa1024_p[]);
+RTEMS_LINKER_RWSET_CONTENT(bsd_prog_openssl, static unsigned char dsa1024_priv[]);
+RTEMS_LINKER_RWSET_CONTENT(bsd_prog_openssl, static unsigned char dsa1024_pub[]);
+RTEMS_LINKER_RWSET_CONTENT(bsd_prog_openssl, static unsigned char dsa1024_q[]);
+RTEMS_LINKER_RWSET_CONTENT(bsd_prog_openssl, static unsigned char dsa2048_g[]);
+RTEMS_LINKER_RWSET_CONTENT(bsd_prog_openssl, static unsigned char dsa2048_p[]);
+RTEMS_LINKER_RWSET_CONTENT(bsd_prog_openssl, static unsigned char dsa2048_priv[]);
+RTEMS_LINKER_RWSET_CONTENT(bsd_prog_openssl, static unsigned char dsa2048_pub[]);
+RTEMS_LINKER_RWSET_CONTENT(bsd_prog_openssl, static unsigned char dsa2048_q[]);
+RTEMS_LINKER_RWSET_CONTENT(bsd_prog_openssl, static unsigned char dsa512_g[]);
+RTEMS_LINKER_RWSET_CONTENT(bsd_prog_openssl, static unsigned char dsa512_p[]);
+RTEMS_LINKER_RWSET_CONTENT(bsd_prog_openssl, static unsigned char dsa512_priv[]);
+RTEMS_LINKER_RWSET_CONTENT(bsd_prog_openssl, static unsigned char dsa512_pub[]);
+RTEMS_LINKER_RWSET_CONTENT(bsd_prog_openssl, static unsigned char dsa512_q[]);
+RTEMS_LINKER_RWSET_CONTENT(bsd_prog_openssl, static unsigned char iv[]);
+RTEMS_LINKER_RWSET_CONTENT(bsd_prog_openssl, static unsigned char test1024[]);
+RTEMS_LINKER_RWSET_CONTENT(bsd_prog_openssl, static unsigned char test15360[]);
+RTEMS_LINKER_RWSET_CONTENT(bsd_prog_openssl, static unsigned char test2048[]);
+RTEMS_LINKER_RWSET_CONTENT(bsd_prog_openssl, static unsigned char test3072[]);
+RTEMS_LINKER_RWSET_CONTENT(bsd_prog_openssl, static unsigned char test4096[]);
+RTEMS_LINKER_RWSET_CONTENT(bsd_prog_openssl, static unsigned char test512[]);
+RTEMS_LINKER_RWSET_CONTENT(bsd_prog_openssl, static unsigned char test7680[]);
+RTEMS_LINKER_RWSET_CONTENT(bsd_prog_openssl, static unsigned int testnum);
diff --git a/freebsd/crypto/openssl/apps/rtems-bsd-openssl-spkac-data.h b/freebsd/crypto/openssl/apps/rtems-bsd-openssl-spkac-data.h
new file mode 100644
index 0000000..6e7afc6
--- /dev/null
+++ b/freebsd/crypto/openssl/apps/rtems-bsd-openssl-spkac-data.h
@@ -0,0 +1,4 @@
+/* generated by userspace-header-gen.py */
+#include <rtems/linkersets.h>
+#include "rtems-bsd-openssl-data.h"
+/* spkac.c */
diff --git a/freebsd/crypto/openssl/apps/rtems-bsd-openssl-srp-data.h b/freebsd/crypto/openssl/apps/rtems-bsd-openssl-srp-data.h
new file mode 100644
index 0000000..2757247
--- /dev/null
+++ b/freebsd/crypto/openssl/apps/rtems-bsd-openssl-srp-data.h
@@ -0,0 +1,4 @@
+/* generated by userspace-header-gen.py */
+#include <rtems/linkersets.h>
+#include "rtems-bsd-openssl-data.h"
+/* srp.c */
diff --git a/freebsd/crypto/openssl/apps/rtems-bsd-openssl-ts-data.h b/freebsd/crypto/openssl/apps/rtems-bsd-openssl-ts-data.h
new file mode 100644
index 0000000..23ff542
--- /dev/null
+++ b/freebsd/crypto/openssl/apps/rtems-bsd-openssl-ts-data.h
@@ -0,0 +1,5 @@
+/* generated by userspace-header-gen.py */
+#include <rtems/linkersets.h>
+#include "rtems-bsd-openssl-data.h"
+/* ts.c */
+RTEMS_LINKER_RWSET_CONTENT(bsd_prog_openssl, static char *opt_helplist[]);
diff --git a/freebsd/crypto/openssl/apps/rtems-bsd-openssl-verify-data.h b/freebsd/crypto/openssl/apps/rtems-bsd-openssl-verify-data.h
new file mode 100644
index 0000000..9d032a1
--- /dev/null
+++ b/freebsd/crypto/openssl/apps/rtems-bsd-openssl-verify-data.h
@@ -0,0 +1,6 @@
+/* generated by userspace-header-gen.py */
+#include <rtems/linkersets.h>
+#include "rtems-bsd-openssl-data.h"
+/* verify.c */
+RTEMS_LINKER_RWSET_CONTENT(bsd_prog_openssl, static int v_verbose);
+RTEMS_LINKER_RWSET_CONTENT(bsd_prog_openssl, static int vflags);
diff --git a/freebsd/crypto/openssl/apps/rtems-bsd-openssl-version-data.h b/freebsd/crypto/openssl/apps/rtems-bsd-openssl-version-data.h
new file mode 100644
index 0000000..8289879
--- /dev/null
+++ b/freebsd/crypto/openssl/apps/rtems-bsd-openssl-version-data.h
@@ -0,0 +1,4 @@
+/* generated by userspace-header-gen.py */
+#include <rtems/linkersets.h>
+#include "rtems-bsd-openssl-data.h"
+/* version.c */
diff --git a/freebsd/crypto/openssl/apps/rtems-bsd-openssl-x509-data.h b/freebsd/crypto/openssl/apps/rtems-bsd-openssl-x509-data.h
new file mode 100644
index 0000000..0deee10
--- /dev/null
+++ b/freebsd/crypto/openssl/apps/rtems-bsd-openssl-x509-data.h
@@ -0,0 +1,4 @@
+/* generated by userspace-header-gen.py */
+#include <rtems/linkersets.h>
+#include "rtems-bsd-openssl-data.h"
+/* x509.c */
diff --git a/freebsd/crypto/openssl/apps/s_cb.c b/freebsd/crypto/openssl/apps/s_cb.c
index ace2df3..24a9930 100644
--- a/freebsd/crypto/openssl/apps/s_cb.c
+++ b/freebsd/crypto/openssl/apps/s_cb.c
@@ -1,4 +1,8 @@
 #include <machine/rtems-bsd-user-space.h>
+#ifdef __rtems__
+#include <machine/rtems-bsd-program.h>
+#include "rtems-bsd-openssl-namespace.h"
+#endif /* __rtems__ */
 
 /*
  * Copyright 1995-2018 The OpenSSL Project Authors. All Rights Reserved.
@@ -834,6 +838,9 @@ static void print_chain_flags(SSL *s, int flags)
         BIO_printf(bio_err, "not tested\n");
 }
 
+#ifdef __rtems__
+    static int retry_cnt;
+#endif /* __rtems__ */
 /*
  * Very basic selection callback: just use any certificate chain reported as
  * valid. More sophisticated could prioritise according to local policy.
@@ -843,7 +850,9 @@ static int set_cert_cb(SSL *ssl, void *arg)
     int i, rv;
     SSL_EXCERT *exc = arg;
 #ifdef CERT_CB_TEST_RETRY
+#ifndef __rtems__
     static int retry_cnt;
+#endif /* __rtems__ */
     if (retry_cnt < 5) {
         retry_cnt++;
         BIO_printf(bio_err,
@@ -1481,3 +1490,6 @@ void print_ca_names(BIO *bio, SSL *s)
         BIO_write(bio, "\n", 1);
     }
 }
+#ifdef __rtems__
+#include "rtems-bsd-openssl-s_cb-data.h"
+#endif /* __rtems__ */
diff --git a/freebsd/crypto/openssl/apps/s_client.c b/freebsd/crypto/openssl/apps/s_client.c
index 2c08d94..40512c5 100644
--- a/freebsd/crypto/openssl/apps/s_client.c
+++ b/freebsd/crypto/openssl/apps/s_client.c
@@ -1,4 +1,8 @@
 #include <machine/rtems-bsd-user-space.h>
+#ifdef __rtems__
+#include <machine/rtems-bsd-program.h>
+#include "rtems-bsd-openssl-namespace.h"
+#endif /* __rtems__ */
 
 /*
  * Copyright 1995-2018 The OpenSSL Project Authors. All Rights Reserved.
@@ -503,9 +507,23 @@ struct tlsa_field {
     ossl_ssize_t (*parser)(const char **, void *);
 };
 
+#ifdef __rtems__
+static uint8_t usage;
+static uint8_t selector;
+static uint8_t mtype;
+static unsigned char *data;
+static struct tlsa_field tlsa_fields[] = {
+    { &usage, "usage", checked_uint8 },
+    { &selector, "selector", checked_uint8 },
+    { &mtype, "mtype", checked_uint8 },
+    { &data, "data", hexdecode },
+    { NULL, }
+};
+#endif /* __rtems__ */
 static int tlsa_import_rr(SSL *con, const char *rrdata)
 {
     /* Not necessary to re-init these values; the "parsers" do that. */
+#ifndef __rtems__
     static uint8_t usage;
     static uint8_t selector;
     static uint8_t mtype;
@@ -517,6 +535,7 @@ static int tlsa_import_rr(SSL *con, const char *rrdata)
         { &data, "data", hexdecode },
         { NULL, }
     };
+#endif /* __rtems__ */
     struct tlsa_field *f;
     int ret;
     const char *cp = rrdata;
@@ -2615,6 +2634,9 @@ int s_client_main(int argc, char **argv)
     case PROTO_LDAP:
         {
             /* StartTLS Operation according to RFC 4511 */
+#ifdef __rtems__
+            const
+#endif /* __rtems__ */
             static char ldap_tls_genconf[] = "asn1=SEQUENCE:LDAPMessage\n"
                 "[LDAPMessage]\n"
                 "messageID=INTEGER:1\n"
@@ -2931,6 +2953,9 @@ int s_client_main(int argc, char **argv)
         } else if (ssl_pending || FD_ISSET(SSL_get_fd(con), &readfds)) {
 #ifdef RENEG
             {
+#ifdef __rtems__
+#error FIXME: Make a global static variable out of this.
+#endif /* __rtems__ */
                 static int iiii;
                 if (++iiii == 52) {
                     SSL_renegotiate(con);
@@ -3462,3 +3487,6 @@ static int ldap_ExtendedResponse_parse(const char *buf, long rem)
 }
 
 #endif                          /* OPENSSL_NO_SOCK */
+#ifdef __rtems__
+#include "rtems-bsd-openssl-s_client-data.h"
+#endif /* __rtems__ */
diff --git a/freebsd/crypto/openssl/apps/s_server.c b/freebsd/crypto/openssl/apps/s_server.c
index acf9a7a..5461ac6 100644
--- a/freebsd/crypto/openssl/apps/s_server.c
+++ b/freebsd/crypto/openssl/apps/s_server.c
@@ -1,4 +1,8 @@
 #include <machine/rtems-bsd-user-space.h>
+#ifdef __rtems__
+#include <machine/rtems-bsd-program.h>
+#include "rtems-bsd-openssl-namespace.h"
+#endif /* __rtems__ */
 
 /*
  * Copyright 1995-2018 The OpenSSL Project Authors. All Rights Reserved.
@@ -2557,6 +2561,9 @@ static int sv_body(int s, int stype, int prot, unsigned char *context)
             for (;;) {
                 /* should do a select for the write */
 #ifdef RENEG
+#ifdef __rtems__
+#error FIXME: Make a global static variable out of this.
+#endif /* __rtems__ */
                 static count = 0;
                 if (++count == 100) {
                     count = 0;
@@ -3275,6 +3282,9 @@ static int www_body(int s, int stype, int prot, unsigned char *context)
 
                 for (j = 0; j < i;) {
 #ifdef RENEG
+#ifdef __rtems__
+#error FIXME: Make a global static variable out of this.
+#endif /* __rtems__ */
                     static count = 0;
                     if (++count == 13) {
                         SSL_renegotiate(con);
@@ -3615,3 +3625,6 @@ static void free_sessions(void)
 }
 
 #endif                          /* OPENSSL_NO_SOCK */
+#ifdef __rtems__
+#include "rtems-bsd-openssl-s_server-data.h"
+#endif /* __rtems__ */
diff --git a/freebsd/crypto/openssl/apps/s_socket.c b/freebsd/crypto/openssl/apps/s_socket.c
index 497eb29..1402f51 100644
--- a/freebsd/crypto/openssl/apps/s_socket.c
+++ b/freebsd/crypto/openssl/apps/s_socket.c
@@ -1,4 +1,8 @@
 #include <machine/rtems-bsd-user-space.h>
+#ifdef __rtems__
+#include <machine/rtems-bsd-program.h>
+#include "rtems-bsd-openssl-namespace.h"
+#endif /* __rtems__ */
 
 /*
  * Copyright 1995-2018 The OpenSSL Project Authors. All Rights Reserved.
@@ -395,3 +399,6 @@ int do_server(int *accept_sock, const char *host, const char *port,
 }
 
 #endif  /* OPENSSL_NO_SOCK */
+#ifdef __rtems__
+#include "rtems-bsd-openssl-s_socket-data.h"
+#endif /* __rtems__ */
diff --git a/freebsd/crypto/openssl/apps/s_time.c b/freebsd/crypto/openssl/apps/s_time.c
index e807cb3..ac0b199 100644
--- a/freebsd/crypto/openssl/apps/s_time.c
+++ b/freebsd/crypto/openssl/apps/s_time.c
@@ -1,4 +1,8 @@
 #include <machine/rtems-bsd-user-space.h>
+#ifdef __rtems__
+#include <machine/rtems-bsd-program.h>
+#include "rtems-bsd-openssl-namespace.h"
+#endif /* __rtems__ */
 
 /*
  * Copyright 1995-2018 The OpenSSL Project Authors. All Rights Reserved.
@@ -405,3 +409,6 @@ static SSL *doConnection(SSL *scon, const char *host, SSL_CTX *ctx)
     return serverCon;
 }
 #endif /* OPENSSL_NO_SOCK */
+#ifdef __rtems__
+#include "rtems-bsd-openssl-s_time-data.h"
+#endif /* __rtems__ */
diff --git a/freebsd/crypto/openssl/apps/sess_id.c b/freebsd/crypto/openssl/apps/sess_id.c
index 537fdab..212e8da 100644
--- a/freebsd/crypto/openssl/apps/sess_id.c
+++ b/freebsd/crypto/openssl/apps/sess_id.c
@@ -1,4 +1,8 @@
 #include <machine/rtems-bsd-user-space.h>
+#ifdef __rtems__
+#include <machine/rtems-bsd-program.h>
+#include "rtems-bsd-openssl-namespace.h"
+#endif /* __rtems__ */
 
 /*
  * Copyright 1995-2018 The OpenSSL Project Authors. All Rights Reserved.
@@ -191,3 +195,6 @@ static SSL_SESSION *load_sess_id(char *infile, int format)
     BIO_free(in);
     return x;
 }
+#ifdef __rtems__
+#include "rtems-bsd-openssl-sess_id-data.h"
+#endif /* __rtems__ */
diff --git a/freebsd/crypto/openssl/apps/smime.c b/freebsd/crypto/openssl/apps/smime.c
index 0b96a71..40ddedc 100644
--- a/freebsd/crypto/openssl/apps/smime.c
+++ b/freebsd/crypto/openssl/apps/smime.c
@@ -1,4 +1,8 @@
 #include <machine/rtems-bsd-user-space.h>
+#ifdef __rtems__
+#include <machine/rtems-bsd-program.h>
+#include "rtems-bsd-openssl-namespace.h"
+#endif /* __rtems__ */
 
 /*
  * Copyright 1999-2018 The OpenSSL Project Authors. All Rights Reserved.
@@ -647,3 +651,6 @@ static int smime_cb(int ok, X509_STORE_CTX *ctx)
 
     return ok;
 }
+#ifdef __rtems__
+#include "rtems-bsd-openssl-smime-data.h"
+#endif /* __rtems__ */
diff --git a/freebsd/crypto/openssl/apps/speed.c b/freebsd/crypto/openssl/apps/speed.c
index 10cabd0..989d892 100644
--- a/freebsd/crypto/openssl/apps/speed.c
+++ b/freebsd/crypto/openssl/apps/speed.c
@@ -1,4 +1,8 @@
 #include <machine/rtems-bsd-user-space.h>
+#ifdef __rtems__
+#include <machine/rtems-bsd-program.h>
+#include "rtems-bsd-openssl-namespace.h"
+#endif /* __rtems__ */
 
 /*
  * Copyright 1995-2018 The OpenSSL Project Authors. All Rights Reserved.
@@ -33,6 +37,9 @@
 #if !defined(OPENSSL_SYS_MSDOS)
 # include OPENSSL_UNISTD
 #endif
+#ifdef __rtems__
+#undef SIGALRM
+#endif /* __rtems__ */
 
 #if defined(_WIN32)
 # include <windows.h>
@@ -1455,12 +1462,21 @@ int speed_main(int argc, char **argv)
     CAMELLIA_KEY camellia_ks1, camellia_ks2, camellia_ks3;
 #endif
 #ifndef OPENSSL_NO_DES
+    #ifdef __rtems__
+    const
+    #endif /* __rtems__ */
     static DES_cblock key = {
         0x12, 0x34, 0x56, 0x78, 0x9a, 0xbc, 0xde, 0xf0
     };
+    #ifdef __rtems__
+    const
+    #endif /* __rtems__ */
     static DES_cblock key2 = {
         0x34, 0x56, 0x78, 0x9a, 0xbc, 0xde, 0xf0, 0x12
     };
+    #ifdef __rtems__
+    const
+    #endif /* __rtems__ */
     static DES_cblock key3 = {
         0x56, 0x78, 0x9a, 0xbc, 0xde, 0xf0, 0x12, 0x34
     };
@@ -3442,6 +3458,9 @@ static int do_multi(int multi, int size_num)
     int n;
     int fd[2];
     int *fds;
+#ifdef __rtems__
+    const
+#endif /* __rtems__ */
     static char sep[] = ":";
 
     fds = app_malloc(sizeof(*fds) * multi, "fd buffer for do_multi");
@@ -3691,3 +3710,6 @@ static void multiblock_speed(const EVP_CIPHER *evp_cipher, int lengths_single,
     OPENSSL_free(out);
     EVP_CIPHER_CTX_free(ctx);
 }
+#ifdef __rtems__
+#include "rtems-bsd-openssl-speed-data.h"
+#endif /* __rtems__ */
diff --git a/freebsd/crypto/openssl/apps/spkac.c b/freebsd/crypto/openssl/apps/spkac.c
index a235bfc..c184ee6 100644
--- a/freebsd/crypto/openssl/apps/spkac.c
+++ b/freebsd/crypto/openssl/apps/spkac.c
@@ -1,4 +1,8 @@
 #include <machine/rtems-bsd-user-space.h>
+#ifdef __rtems__
+#include <machine/rtems-bsd-program.h>
+#include "rtems-bsd-openssl-namespace.h"
+#endif /* __rtems__ */
 
 /*
  * Copyright 1999-2018 The OpenSSL Project Authors. All Rights Reserved.
@@ -202,3 +206,6 @@ int spkac_main(int argc, char **argv)
     OPENSSL_free(passin);
     return ret;
 }
+#ifdef __rtems__
+#include "rtems-bsd-openssl-spkac-data.h"
+#endif /* __rtems__ */
diff --git a/freebsd/crypto/openssl/apps/srp.c b/freebsd/crypto/openssl/apps/srp.c
index 0c7dad7..06551c7 100644
--- a/freebsd/crypto/openssl/apps/srp.c
+++ b/freebsd/crypto/openssl/apps/srp.c
@@ -1,4 +1,8 @@
 #include <machine/rtems-bsd-user-space.h>
+#ifdef __rtems__
+#include <machine/rtems-bsd-program.h>
+#include "rtems-bsd-openssl-namespace.h"
+#endif /* __rtems__ */
 
 /*
  * Copyright 2004-2018 The OpenSSL Project Authors. All Rights Reserved.
@@ -613,3 +617,6 @@ int srp_main(int argc, char **argv)
     return ret;
 }
 #endif
+#ifdef __rtems__
+#include "rtems-bsd-openssl-srp-data.h"
+#endif /* __rtems__ */
diff --git a/freebsd/crypto/openssl/apps/storeutl.c b/freebsd/crypto/openssl/apps/storeutl.c
deleted file mode 100644
index fdbd151..0000000
--- a/freebsd/crypto/openssl/apps/storeutl.c
+++ /dev/null
@@ -1,475 +0,0 @@
-#include <machine/rtems-bsd-user-space.h>
-
-/*
- * Copyright 2016-2018 The OpenSSL Project Authors. All Rights Reserved.
- *
- * Licensed under the OpenSSL license (the "License").  You may not use
- * this file except in compliance with the License.  You can obtain a copy
- * in the file LICENSE in the source distribution or at
- * https://www.openssl.org/source/license.html
- */
-
-#include <openssl/opensslconf.h>
-
-#include "apps.h"
-#include "progs.h"
-#include <openssl/err.h>
-#include <openssl/pem.h>
-#include <openssl/store.h>
-#include <openssl/x509v3.h>      /* s2i_ASN1_INTEGER */
-
-static int process(const char *uri, const UI_METHOD *uimeth, PW_CB_DATA *uidata,
-                   int expected, int criterion, OSSL_STORE_SEARCH *search,
-                   int text, int noout, int recursive, int indent, BIO *out,
-                   const char *prog);
-
-typedef enum OPTION_choice {
-    OPT_ERR = -1, OPT_EOF = 0, OPT_HELP, OPT_ENGINE, OPT_OUT, OPT_PASSIN,
-    OPT_NOOUT, OPT_TEXT, OPT_RECURSIVE,
-    OPT_SEARCHFOR_CERTS, OPT_SEARCHFOR_KEYS, OPT_SEARCHFOR_CRLS,
-    OPT_CRITERION_SUBJECT, OPT_CRITERION_ISSUER, OPT_CRITERION_SERIAL,
-    OPT_CRITERION_FINGERPRINT, OPT_CRITERION_ALIAS,
-    OPT_MD
-} OPTION_CHOICE;
-
-const OPTIONS storeutl_options[] = {
-    {OPT_HELP_STR, 1, '-', "Usage: %s [options] uri\nValid options are:\n"},
-    {"help", OPT_HELP, '-', "Display this summary"},
-    {"out", OPT_OUT, '>', "Output file - default stdout"},
-    {"passin", OPT_PASSIN, 's', "Input file pass phrase source"},
-    {"text", OPT_TEXT, '-', "Print a text form of the objects"},
-    {"noout", OPT_NOOUT, '-', "No PEM output, just status"},
-    {"certs", OPT_SEARCHFOR_CERTS, '-', "Search for certificates only"},
-    {"keys", OPT_SEARCHFOR_KEYS, '-', "Search for keys only"},
-    {"crls", OPT_SEARCHFOR_CRLS, '-', "Search for CRLs only"},
-    {"subject", OPT_CRITERION_SUBJECT, 's', "Search by subject"},
-    {"issuer", OPT_CRITERION_ISSUER, 's', "Search by issuer and serial, issuer name"},
-    {"serial", OPT_CRITERION_SERIAL, 's', "Search by issuer and serial, serial number"},
-    {"fingerprint", OPT_CRITERION_FINGERPRINT, 's', "Search by public key fingerprint, given in hex"},
-    {"alias", OPT_CRITERION_ALIAS, 's', "Search by alias"},
-    {"", OPT_MD, '-', "Any supported digest"},
-#ifndef OPENSSL_NO_ENGINE
-    {"engine", OPT_ENGINE, 's', "Use engine, possibly a hardware device"},
-#endif
-    {"r", OPT_RECURSIVE, '-', "Recurse through names"},
-    {NULL}
-};
-
-int storeutl_main(int argc, char *argv[])
-{
-    int ret = 1, noout = 0, text = 0, recursive = 0;
-    char *outfile = NULL, *passin = NULL, *passinarg = NULL;
-    BIO *out = NULL;
-    ENGINE *e = NULL;
-    OPTION_CHOICE o;
-    char *prog = opt_init(argc, argv, storeutl_options);
-    PW_CB_DATA pw_cb_data;
-    int expected = 0;
-    int criterion = 0;
-    X509_NAME *subject = NULL, *issuer = NULL;
-    ASN1_INTEGER *serial = NULL;
-    unsigned char *fingerprint = NULL;
-    size_t fingerprintlen = 0;
-    char *alias = NULL;
-    OSSL_STORE_SEARCH *search = NULL;
-    const EVP_MD *digest = NULL;
-
-    while ((o = opt_next()) != OPT_EOF) {
-        switch (o) {
-        case OPT_EOF:
-        case OPT_ERR:
- opthelp:
-            BIO_printf(bio_err, "%s: Use -help for summary.\n", prog);
-            goto end;
-        case OPT_HELP:
-            opt_help(storeutl_options);
-            ret = 0;
-            goto end;
-        case OPT_OUT:
-            outfile = opt_arg();
-            break;
-        case OPT_PASSIN:
-            passinarg = opt_arg();
-            break;
-        case OPT_NOOUT:
-            noout = 1;
-            break;
-        case OPT_TEXT:
-            text = 1;
-            break;
-        case OPT_RECURSIVE:
-            recursive = 1;
-            break;
-        case OPT_SEARCHFOR_CERTS:
-        case OPT_SEARCHFOR_KEYS:
-        case OPT_SEARCHFOR_CRLS:
-            if (expected != 0) {
-                BIO_printf(bio_err, "%s: only one search type can be given.\n",
-                           prog);
-                goto end;
-            }
-            {
-                static const struct {
-                    enum OPTION_choice choice;
-                    int type;
-                } map[] = {
-                    {OPT_SEARCHFOR_CERTS, OSSL_STORE_INFO_CERT},
-                    {OPT_SEARCHFOR_KEYS, OSSL_STORE_INFO_PKEY},
-                    {OPT_SEARCHFOR_CRLS, OSSL_STORE_INFO_CRL},
-                };
-                size_t i;
-
-                for (i = 0; i < OSSL_NELEM(map); i++) {
-                    if (o == map[i].choice) {
-                        expected = map[i].type;
-                        break;
-                    }
-                }
-                /*
-                 * If expected wasn't set at this point, it means the map
-                 * isn't syncronised with the possible options leading here.
-                 */
-                OPENSSL_assert(expected != 0);
-            }
-            break;
-        case OPT_CRITERION_SUBJECT:
-            if (criterion != 0) {
-                BIO_printf(bio_err, "%s: criterion already given.\n",
-                           prog);
-                goto end;
-            }
-            criterion = OSSL_STORE_SEARCH_BY_NAME;
-            if (subject != NULL) {
-                BIO_printf(bio_err, "%s: subject already given.\n",
-                           prog);
-                goto end;
-            }
-            if ((subject = parse_name(opt_arg(), MBSTRING_UTF8, 1)) == NULL) {
-                BIO_printf(bio_err, "%s: can't parse subject argument.\n",
-                           prog);
-                goto end;
-            }
-            break;
-        case OPT_CRITERION_ISSUER:
-            if (criterion != 0
-                || (criterion == OSSL_STORE_SEARCH_BY_ISSUER_SERIAL
-                    && issuer != NULL)) {
-                BIO_printf(bio_err, "%s: criterion already given.\n",
-                           prog);
-                goto end;
-            }
-            criterion = OSSL_STORE_SEARCH_BY_ISSUER_SERIAL;
-            if (issuer != NULL) {
-                BIO_printf(bio_err, "%s: issuer already given.\n",
-                           prog);
-                goto end;
-            }
-            if ((issuer = parse_name(opt_arg(), MBSTRING_UTF8, 1)) == NULL) {
-                BIO_printf(bio_err, "%s: can't parse issuer argument.\n",
-                           prog);
-                goto end;
-            }
-            break;
-        case OPT_CRITERION_SERIAL:
-            if (criterion != 0
-                || (criterion == OSSL_STORE_SEARCH_BY_ISSUER_SERIAL
-                    && serial != NULL)) {
-                BIO_printf(bio_err, "%s: criterion already given.\n",
-                           prog);
-                goto end;
-            }
-            criterion = OSSL_STORE_SEARCH_BY_ISSUER_SERIAL;
-            if (serial != NULL) {
-                BIO_printf(bio_err, "%s: serial number already given.\n",
-                           prog);
-                goto end;
-            }
-            if ((serial = s2i_ASN1_INTEGER(NULL, opt_arg())) == NULL) {
-                BIO_printf(bio_err, "%s: can't parse serial number argument.\n",
-                           prog);
-                goto end;
-            }
-            break;
-        case OPT_CRITERION_FINGERPRINT:
-            if (criterion != 0
-                || (criterion == OSSL_STORE_SEARCH_BY_KEY_FINGERPRINT
-                    && fingerprint != NULL)) {
-                BIO_printf(bio_err, "%s: criterion already given.\n",
-                           prog);
-                goto end;
-            }
-            criterion = OSSL_STORE_SEARCH_BY_KEY_FINGERPRINT;
-            if (fingerprint != NULL) {
-                BIO_printf(bio_err, "%s: fingerprint already given.\n",
-                           prog);
-                goto end;
-            }
-            {
-                long tmplen = 0;
-
-                if ((fingerprint = OPENSSL_hexstr2buf(opt_arg(), &tmplen))
-                    == NULL) {
-                    BIO_printf(bio_err,
-                               "%s: can't parse fingerprint argument.\n",
-                               prog);
-                    goto end;
-                }
-                fingerprintlen = (size_t)tmplen;
-            }
-            break;
-        case OPT_CRITERION_ALIAS:
-            if (criterion != 0) {
-                BIO_printf(bio_err, "%s: criterion already given.\n",
-                           prog);
-                goto end;
-            }
-            criterion = OSSL_STORE_SEARCH_BY_ALIAS;
-            if (alias != NULL) {
-                BIO_printf(bio_err, "%s: alias already given.\n",
-                           prog);
-                goto end;
-            }
-            if ((alias = OPENSSL_strdup(opt_arg())) == NULL) {
-                BIO_printf(bio_err, "%s: can't parse alias argument.\n",
-                           prog);
-                goto end;
-            }
-            break;
-        case OPT_ENGINE:
-            e = setup_engine(opt_arg(), 0);
-            break;
-        case OPT_MD:
-            if (!opt_md(opt_unknown(), &digest))
-                goto opthelp;
-        }
-    }
-    argc = opt_num_rest();
-    argv = opt_rest();
-
-    if (argc == 0) {
-        BIO_printf(bio_err, "%s: No URI given, nothing to do...\n", prog);
-        goto opthelp;
-    }
-    if (argc > 1) {
-        BIO_printf(bio_err, "%s: Unknown extra parameters after URI\n", prog);
-        goto opthelp;
-    }
-
-    if (criterion != 0) {
-        switch (criterion) {
-        case OSSL_STORE_SEARCH_BY_NAME:
-            if ((search = OSSL_STORE_SEARCH_by_name(subject)) == NULL) {
-                ERR_print_errors(bio_err);
-                goto end;
-            }
-            break;
-        case OSSL_STORE_SEARCH_BY_ISSUER_SERIAL:
-            if (issuer == NULL || serial == NULL) {
-                BIO_printf(bio_err,
-                           "%s: both -issuer and -serial must be given.\n",
-                           prog);
-                goto end;
-            }
-            if ((search = OSSL_STORE_SEARCH_by_issuer_serial(issuer, serial))
-                == NULL) {
-                ERR_print_errors(bio_err);
-                goto end;
-            }
-            break;
-        case OSSL_STORE_SEARCH_BY_KEY_FINGERPRINT:
-            if ((search = OSSL_STORE_SEARCH_by_key_fingerprint(digest,
-                                                               fingerprint,
-                                                               fingerprintlen))
-                == NULL) {
-                ERR_print_errors(bio_err);
-                goto end;
-            }
-            break;
-        case OSSL_STORE_SEARCH_BY_ALIAS:
-            if ((search = OSSL_STORE_SEARCH_by_alias(alias)) == NULL) {
-                ERR_print_errors(bio_err);
-                goto end;
-            }
-            break;
-        }
-    }
-
-    if (!app_passwd(passinarg, NULL, &passin, NULL)) {
-        BIO_printf(bio_err, "Error getting passwords\n");
-        goto end;
-    }
-    pw_cb_data.password = passin;
-    pw_cb_data.prompt_info = argv[0];
-
-    out = bio_open_default(outfile, 'w', FORMAT_TEXT);
-    if (out == NULL)
-        goto end;
-
-    ret = process(argv[0], get_ui_method(), &pw_cb_data,
-                  expected, criterion, search,
-                  text, noout, recursive, 0, out, prog);
-
- end:
-    OPENSSL_free(fingerprint);
-    OPENSSL_free(alias);
-    ASN1_INTEGER_free(serial);
-    X509_NAME_free(subject);
-    X509_NAME_free(issuer);
-    OSSL_STORE_SEARCH_free(search);
-    BIO_free_all(out);
-    OPENSSL_free(passin);
-    release_engine(e);
-    return ret;
-}
-
-static int indent_printf(int indent, BIO *bio, const char *format, ...)
-{
-    va_list args;
-    int ret;
-
-    va_start(args, format);
-
-    ret = BIO_printf(bio, "%*s", indent, "") + BIO_vprintf(bio, format, args);
-
-    va_end(args);
-    return ret;
-}
-
-static int process(const char *uri, const UI_METHOD *uimeth, PW_CB_DATA *uidata,
-                   int expected, int criterion, OSSL_STORE_SEARCH *search,
-                   int text, int noout, int recursive, int indent, BIO *out,
-                   const char *prog)
-{
-    OSSL_STORE_CTX *store_ctx = NULL;
-    int ret = 1, items = 0;
-
-    if ((store_ctx = OSSL_STORE_open(uri, uimeth, uidata, NULL, NULL))
-        == NULL) {
-        BIO_printf(bio_err, "Couldn't open file or uri %s\n", uri);
-        ERR_print_errors(bio_err);
-        return ret;
-    }
-
-    if (expected != 0) {
-        if (!OSSL_STORE_expect(store_ctx, expected)) {
-            ERR_print_errors(bio_err);
-            goto end2;
-        }
-    }
-
-    if (criterion != 0) {
-        if (!OSSL_STORE_supports_search(store_ctx, criterion)) {
-            BIO_printf(bio_err,
-                       "%s: the store scheme doesn't support the given search criteria.\n",
-                       prog);
-            goto end2;
-        }
-
-        if (!OSSL_STORE_find(store_ctx, search)) {
-            ERR_print_errors(bio_err);
-            goto end2;
-        }
-    }
-
-    /* From here on, we count errors, and we'll return the count at the end */
-    ret = 0;
-
-    for (;;) {
-        OSSL_STORE_INFO *info = OSSL_STORE_load(store_ctx);
-        int type = info == NULL ? 0 : OSSL_STORE_INFO_get_type(info);
-        const char *infostr =
-            info == NULL ? NULL : OSSL_STORE_INFO_type_string(type);
-
-        if (info == NULL) {
-            if (OSSL_STORE_eof(store_ctx))
-                break;
-
-            if (OSSL_STORE_error(store_ctx)) {
-                if (recursive)
-                    ERR_clear_error();
-                else
-                    ERR_print_errors(bio_err);
-                ret++;
-                continue;
-            }
-
-            BIO_printf(bio_err,
-                       "ERROR: OSSL_STORE_load() returned NULL without "
-                       "eof or error indications\n");
-            BIO_printf(bio_err, "       This is an error in the loader\n");
-            ERR_print_errors(bio_err);
-            ret++;
-            break;
-        }
-
-        if (type == OSSL_STORE_INFO_NAME) {
-            const char *name = OSSL_STORE_INFO_get0_NAME(info);
-            const char *desc = OSSL_STORE_INFO_get0_NAME_description(info);
-            indent_printf(indent, bio_out, "%d: %s: %s\n", items, infostr,
-                          name);
-            if (desc != NULL)
-                indent_printf(indent, bio_out, "%s\n", desc);
-        } else {
-            indent_printf(indent, bio_out, "%d: %s\n", items, infostr);
-        }
-
-        /*
-         * Unfortunately, PEM_X509_INFO_write_bio() is sorely lacking in
-         * functionality, so we must figure out how exactly to write things
-         * ourselves...
-         */
-        switch (type) {
-        case OSSL_STORE_INFO_NAME:
-            if (recursive) {
-                const char *suburi = OSSL_STORE_INFO_get0_NAME(info);
-                ret += process(suburi, uimeth, uidata,
-                               expected, criterion, search,
-                               text, noout, recursive, indent + 2, out, prog);
-            }
-            break;
-        case OSSL_STORE_INFO_PARAMS:
-            if (text)
-                EVP_PKEY_print_params(out, OSSL_STORE_INFO_get0_PARAMS(info),
-                                      0, NULL);
-            if (!noout)
-                PEM_write_bio_Parameters(out,
-                                         OSSL_STORE_INFO_get0_PARAMS(info));
-            break;
-        case OSSL_STORE_INFO_PKEY:
-            if (text)
-                EVP_PKEY_print_private(out, OSSL_STORE_INFO_get0_PKEY(info),
-                                       0, NULL);
-            if (!noout)
-                PEM_write_bio_PrivateKey(out, OSSL_STORE_INFO_get0_PKEY(info),
-                                         NULL, NULL, 0, NULL, NULL);
-            break;
-        case OSSL_STORE_INFO_CERT:
-            if (text)
-                X509_print(out, OSSL_STORE_INFO_get0_CERT(info));
-            if (!noout)
-                PEM_write_bio_X509(out, OSSL_STORE_INFO_get0_CERT(info));
-            break;
-        case OSSL_STORE_INFO_CRL:
-            if (text)
-                X509_CRL_print(out, OSSL_STORE_INFO_get0_CRL(info));
-            if (!noout)
-                PEM_write_bio_X509_CRL(out, OSSL_STORE_INFO_get0_CRL(info));
-            break;
-        default:
-            BIO_printf(bio_err, "!!! Unknown code\n");
-            ret++;
-            break;
-        }
-        items++;
-        OSSL_STORE_INFO_free(info);
-    }
-    indent_printf(indent, out, "Total found: %d\n", items);
-
- end2:
-    if (!OSSL_STORE_close(store_ctx)) {
-        ERR_print_errors(bio_err);
-        ret++;
-    }
-
-    return ret;
-}
diff --git a/freebsd/crypto/openssl/apps/ts.c b/freebsd/crypto/openssl/apps/ts.c
index 3fd64d7..71c029e 100644
--- a/freebsd/crypto/openssl/apps/ts.c
+++ b/freebsd/crypto/openssl/apps/ts.c
@@ -1,4 +1,8 @@
 #include <machine/rtems-bsd-user-space.h>
+#ifdef __rtems__
+#include <machine/rtems-bsd-program.h>
+#include "rtems-bsd-openssl-namespace.h"
+#endif /* __rtems__ */
 
 /*
  * Copyright 2006-2018 The OpenSSL Project Authors. All Rights Reserved.
@@ -986,3 +990,6 @@ static int verify_cb(int ok, X509_STORE_CTX *ctx)
     return ok;
 }
 #endif  /* ndef OPENSSL_NO_TS */
+#ifdef __rtems__
+#include "rtems-bsd-openssl-ts-data.h"
+#endif /* __rtems__ */
diff --git a/freebsd/crypto/openssl/apps/verify.c b/freebsd/crypto/openssl/apps/verify.c
index 8e7f863..2caa8b0 100644
--- a/freebsd/crypto/openssl/apps/verify.c
+++ b/freebsd/crypto/openssl/apps/verify.c
@@ -1,4 +1,8 @@
 #include <machine/rtems-bsd-user-space.h>
+#ifdef __rtems__
+#include <machine/rtems-bsd-program.h>
+#include "rtems-bsd-openssl-namespace.h"
+#endif /* __rtems__ */
 
 /*
  * Copyright 1995-2018 The OpenSSL Project Authors. All Rights Reserved.
@@ -319,3 +323,6 @@ static int cb(int ok, X509_STORE_CTX *ctx)
         ERR_clear_error();
     return ok;
 }
+#ifdef __rtems__
+#include "rtems-bsd-openssl-verify-data.h"
+#endif /* __rtems__ */
diff --git a/freebsd/crypto/openssl/apps/version.c b/freebsd/crypto/openssl/apps/version.c
index 82a9869..3bb5367 100644
--- a/freebsd/crypto/openssl/apps/version.c
+++ b/freebsd/crypto/openssl/apps/version.c
@@ -1,4 +1,8 @@
 #include <machine/rtems-bsd-user-space.h>
+#ifdef __rtems__
+#include <machine/rtems-bsd-program.h>
+#include "rtems-bsd-openssl-namespace.h"
+#endif /* __rtems__ */
 
 /*
  * Copyright 1995-2018 The OpenSSL Project Authors. All Rights Reserved.
@@ -194,3 +198,6 @@ opthelp:
  end:
     return ret;
 }
+#ifdef __rtems__
+#include "rtems-bsd-openssl-version-data.h"
+#endif /* __rtems__ */
diff --git a/freebsd/crypto/openssl/apps/x509.c b/freebsd/crypto/openssl/apps/x509.c
index 94f0b79..b57d222 100644
--- a/freebsd/crypto/openssl/apps/x509.c
+++ b/freebsd/crypto/openssl/apps/x509.c
@@ -1,4 +1,8 @@
 #include <machine/rtems-bsd-user-space.h>
+#ifdef __rtems__
+#include <machine/rtems-bsd-program.h>
+#include "rtems-bsd-openssl-namespace.h"
+#endif /* __rtems__ */
 
 /*
  * Copyright 1995-2018 The OpenSSL Project Authors. All Rights Reserved.
@@ -1196,3 +1200,6 @@ static int print_x509v3_exts(BIO *bio, X509 *x, const char *ext_names)
     OPENSSL_free(tmp_ext_names);
     return ret;
 }
+#ifdef __rtems__
+#include "rtems-bsd-openssl-x509-data.h"
+#endif /* __rtems__ */
diff --git a/libbsd.py b/libbsd.py
index 3235a5c..d5e801f 100644
--- a/libbsd.py
+++ b/libbsd.py
@@ -3944,6 +3944,96 @@ class crypto_openssl(builder.Module):
                                           mm.generator['buildSystemFragmentComposer']()))
 
 #
+# /usr/bin/openssl
+#
+# depends on crypto_openssl, user_space
+class usr_bin_openssl(builder.Module):
+
+    def __init__(self, manager):
+        super(usr_bin_openssl, self).__init__(manager, type(self).__name__)
+
+    def generate(self):
+        mm = self.manager
+        self.addUserSpaceHeaderFiles(
+            [
+                'crypto/openssl/apps/apps.h',
+                'crypto/openssl/apps/progs.h',
+                'crypto/openssl/apps/s_apps.h',
+                'crypto/openssl/apps/testdsa.h',
+                'crypto/openssl/apps/testrsa.h',
+                'crypto/openssl/apps/timeouts.h',
+            ]
+        )
+        self.addUserSpaceSourceFiles(
+            [
+                'crypto/openssl/apps/app_rand.c',
+                'crypto/openssl/apps/apps.c',
+                'crypto/openssl/apps/asn1pars.c',
+                'crypto/openssl/apps/bf_prefix.c',
+                'crypto/openssl/apps/ca.c',
+                'crypto/openssl/apps/ciphers.c',
+                'crypto/openssl/apps/cms.c',
+                'crypto/openssl/apps/crl.c',
+                'crypto/openssl/apps/crl2p7.c',
+                'crypto/openssl/apps/dgst.c',
+                'crypto/openssl/apps/dhparam.c',
+                'crypto/openssl/apps/dsa.c',
+                'crypto/openssl/apps/dsaparam.c',
+                'crypto/openssl/apps/ec.c',
+                'crypto/openssl/apps/ecparam.c',
+                'crypto/openssl/apps/enc.c',
+                'crypto/openssl/apps/engine.c',
+                'crypto/openssl/apps/errstr.c',
+                'crypto/openssl/apps/gendsa.c',
+                'crypto/openssl/apps/genpkey.c',
+                'crypto/openssl/apps/genrsa.c',
+                'crypto/openssl/apps/nseq.c',
+                'crypto/openssl/apps/ocsp.c',
+                'crypto/openssl/apps/openssl.c',
+                'crypto/openssl/apps/opt.c',
+                'crypto/openssl/apps/passwd.c',
+                'crypto/openssl/apps/pkcs12.c',
+                'crypto/openssl/apps/pkcs7.c',
+                'crypto/openssl/apps/pkcs8.c',
+                'crypto/openssl/apps/pkey.c',
+                'crypto/openssl/apps/pkeyparam.c',
+                'crypto/openssl/apps/pkeyutl.c',
+                'crypto/openssl/apps/prime.c',
+                'crypto/openssl/apps/rand.c',
+                'crypto/openssl/apps/rehash.c',
+                'crypto/openssl/apps/req.c',
+                'crypto/openssl/apps/rsa.c',
+                'crypto/openssl/apps/rsautl.c',
+                'crypto/openssl/apps/s_cb.c',
+                'crypto/openssl/apps/s_client.c',
+                'crypto/openssl/apps/s_server.c',
+                'crypto/openssl/apps/s_socket.c',
+                'crypto/openssl/apps/s_time.c',
+                'crypto/openssl/apps/sess_id.c',
+                'crypto/openssl/apps/smime.c',
+                'crypto/openssl/apps/speed.c',
+                'crypto/openssl/apps/spkac.c',
+                'crypto/openssl/apps/srp.c',
+                # storeutl excluded due to problem with OPENSSL_atexit
+                # 'crypto/openssl/apps/storeutl.c',
+                'crypto/openssl/apps/ts.c',
+                'crypto/openssl/apps/verify.c',
+                'crypto/openssl/apps/version.c',
+                'crypto/openssl/apps/x509.c',
+            ],
+            mm.generator['source'](['-D__FreeBSD__=1',
+                                    '-DOPENSSL_NO_RC5=1'],
+                                   ['freebsd/crypto/openssl']
+            )
+        )
+        self.addRTEMSSourceFiles(
+            [
+                'rtems/rtems-bsd-shell-openssl.c',
+            ],
+            mm.generator['source']()
+        )
+
+#
 # Contrib expat
 #
 class contrib_expat(builder.Module):
@@ -4945,6 +5035,7 @@ class tests(builder.Module):
         self.addTest(mm.generator['test']('crypto01', ['test_main']))
         self.addTest(mm.generator['test']('ipsec01', ['test_main']))
         self.addTest(mm.generator['test']('openssl01', ['test_main']))
+        self.addTest(mm.generator['test']('openssl02', ['test_main']))
 
 def load(mm):
 
@@ -5008,6 +5099,7 @@ def load(mm):
     mm.addModule(usr_sbin_tcpdump(mm))
     mm.addModule(usr_sbin_wpa_supplicant(mm))
     mm.addModule(crypto_openssl(mm))
+    mm.addModule(usr_bin_openssl(mm))
 
     mm.addModule(dhcpcd(mm))
     mm.addModule(mdnsresponder(mm))
diff --git a/rtemsbsd/include/machine/rtems-bsd-commands.h b/rtemsbsd/include/machine/rtems-bsd-commands.h
index 7717c1e..1b02290 100644
--- a/rtemsbsd/include/machine/rtems-bsd-commands.h
+++ b/rtemsbsd/include/machine/rtems-bsd-commands.h
@@ -78,6 +78,8 @@ int rtems_bsd_command_racoon(int argc, char **argv);
 
 int rtems_bsd_command_setkey(int argc, char **argv);
 
+int rtems_bsd_command_openssl(int argc, char **argv);
+
 __END_DECLS
 
 #endif /* _RTEMS_BSD_MACHINE_RTEMS_BSD_COMMANDS_H_ */
diff --git a/rtemsbsd/include/rtems/netcmds-config.h b/rtemsbsd/include/rtems/netcmds-config.h
index ce84c15..f8dcdcd 100644
--- a/rtemsbsd/include/rtems/netcmds-config.h
+++ b/rtemsbsd/include/rtems/netcmds-config.h
@@ -54,6 +54,7 @@ extern rtems_shell_cmd_t rtems_shell_STTY_Command;
 extern rtems_shell_cmd_t rtems_shell_RACOON_Command;
 extern rtems_shell_cmd_t rtems_shell_SETKEY_Command;
 
+extern rtems_shell_cmd_t rtems_shell_OPENSSL_Command;
 #ifdef __cplusplus
 }
 #endif /* __cplusplus */
diff --git a/rtemsbsd/rtems/rtems-bsd-shell-openssl.c b/rtemsbsd/rtems/rtems-bsd-shell-openssl.c
new file mode 100644
index 0000000..fc765b3
--- /dev/null
+++ b/rtemsbsd/rtems/rtems-bsd-shell-openssl.c
@@ -0,0 +1,40 @@
+/*
+ * Copyright (c) 2016 embedded brains GmbH.  All rights reserved.
+ *
+ *  embedded brains GmbH
+ *  Dornierstr. 4
+ *  82178 Puchheim
+ *  Germany
+ *  <rtems at embedded-brains.de>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#include <rtems/netcmds-config.h>
+#include <machine/rtems-bsd-commands.h>
+
+rtems_shell_cmd_t rtems_shell_OPENSSL_Command = {
+  .name = "openssl",
+  .usage = "openssl [args]",
+  .topic = "net",
+  .command = rtems_bsd_command_openssl
+};
diff --git a/testsuite/openssl02/test_main.c b/testsuite/openssl02/test_main.c
new file mode 100644
index 0000000..ccd48dc
--- /dev/null
+++ b/testsuite/openssl02/test_main.c
@@ -0,0 +1,135 @@
+/*
+ * Copyright (c) 2013-2019 embedded brains GmbH.  All rights reserved.
+ *
+ *  embedded brains GmbH
+ *  Dornierstr. 4
+ *  82178 Puchheim
+ *  Germany
+ *  <rtems at embedded-brains.de>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#include <sys/param.h>
+
+#include <assert.h>
+#include <errno.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <sysexits.h>
+
+#include <machine/rtems-bsd-commands.h>
+
+#include <rtems/libcsupport.h>
+#include <rtems/bsd/modules.h>
+
+#include <sys/stat.h>
+#include <fcntl.h>
+
+#define TEST_NAME "LIBBSD OPENSSL 2"
+
+#define ARGC(x) RTEMS_BSD_ARGC(x)
+
+#ifdef RTEMS_BSD_MODULE_USR_BIN_OPENSSL
+static void
+test_cmd_gencert(void)
+{
+	int fd;
+	int rv;
+	struct stat sb;
+	char *openssl_gencert[] = {
+		"openssl",
+		"req",
+		"-config",
+		"/openssl.cfg",
+		"-nodes",
+		"-newkey",
+		"rsa:2048",
+		"-keyout",
+		"/example.key",
+		"-out",
+		"example.csr",
+		"-subj",
+		"/C=GB/ST=London/L=London/O=Global Security/OU=IT Department/CN=example.com",
+		NULL
+	};
+
+	static const char config[] =
+		"[ req ]\n"
+		"distinguished_name = req_distinguished_name\n"
+		"[ req_distinguished_name ]\n"
+		"countryName = Country Name (2 letter code)\n"
+		"stateOrProvinceName = State or Province Name (full name)\n"
+		"localityName = Locality Name (eg, city)\n"
+		"0.organizationName = Organization Name (eg, company)\n"
+		"0.organizationName_default = Internet Widgits Pty Ltd\n"
+		"organizationalUnitName = Organizational Unit Name (eg, section)\n"
+		"organizationalUnitName_default =\n"
+		"commonName = Common Name (e.g. server FQDN or YOUR name)\n"
+		"commonName_max = 64\n"
+		"emailAddress = Email Address\n"
+		"emailAddress_max = 64\n";
+
+	/* Create config file. */
+	fd = open("/openssl.cfg", O_WRONLY | O_CREAT, S_IRWXU | S_IRWXG | S_IRWXO);
+	assert(fd != -1);
+	rv = write(fd, config, sizeof(config));
+	assert(rv == sizeof(config));
+	rv = close(fd);
+	assert(rv == 0);
+
+	rtems_bsd_command_openssl(ARGC(openssl_gencert), openssl_gencert);
+
+	assert(stat("/example.key", &sb) == 0);
+	assert(stat("/example.csr", &sb) == 0);
+}
+
+static void
+test_cmd_speed(void)
+{
+	int fd;
+	int rv;
+	struct stat sb;
+	char *openssl_speed[] = {
+		"openssl",
+		"speed",
+		"sha1",
+		NULL
+	};
+
+	rtems_bsd_command_openssl(ARGC(openssl_speed), openssl_speed);
+}
+#endif /* RTEMS_BSD_MODULE_USR_BIN_OPENSSL */
+
+static void
+test_main(void)
+{
+#ifdef RTEMS_BSD_MODULE_USR_BIN_OPENSSL
+	test_cmd_gencert();
+	test_cmd_speed();
+#else /* ! RTEMS_BSD_MODULE_USR_BIN_OPENSSL */
+	puts("openssl command not enabled in the current build set");
+#endif /* RTEMS_BSD_MODULE_USR_BIN_OPENSSL */
+	exit(0);
+}
+
+#include <rtems/bsd/test/default-init.h>



More information about the vc mailing list