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

Christian Mauderer christianm at rtems.org
Thu Mar 28 06:27:09 UTC 2019


Module:    rtems-libbsd
Branch:    5-freebsd-12
Commit:    9ed6c971395e455e0f5e40a9c9c7e7b8cee7f8a5
Changeset: http://git.rtems.org/rtems-libbsd/commit/?id=9ed6c971395e455e0f5e40a9c9c7e7b8cee7f8a5

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/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 +++++++++++
 114 files changed, 1424 insertions(+)

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 6fefe31..5cdbee6 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-2019 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 43fe9d7..0f9874b 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-2019 The OpenSSL Project Authors. All Rights Reserved.
@@ -1621,3 +1625,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 6f9a253..a298228 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-2019 The OpenSSL Project Authors. All Rights Reserved.
@@ -968,3 +972,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 99fe668..c848ea5 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-2019 The OpenSSL Project Authors. All Rights Reserved.
@@ -120,6 +124,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.
  */
@@ -127,8 +135,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);
@@ -532,3 +542,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 5be7088..e48fcfd 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-2019 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 d7dc199..51957ae 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-2019 The OpenSSL Project Authors. All Rights Reserved.
@@ -504,9 +508,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;
@@ -518,6 +536,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;
@@ -2634,6 +2653,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"
@@ -2950,6 +2972,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);
@@ -3544,3 +3569,6 @@ static int is_dNS_name(const char *host)
     return isdnsname;
 }
 #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 1394b97..b224407 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-2019 The OpenSSL Project Authors. All Rights Reserved.
@@ -2572,6 +2576,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;
@@ -3292,6 +3299,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);
@@ -3632,3 +3642,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 8bae20b..e2c711a 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-2019 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/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 751c94d..9fc7066 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-2019 The OpenSSL Project Authors. All Rights Reserved.
@@ -322,3 +326,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 e983623..e958288 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):
@@ -4936,6 +5026,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):
 
@@ -4999,6 +5090,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