diff options
author | Gerd Hoffmann <kraxel@redhat.com> | 2022-01-12 10:30:15 +0100 |
---|---|---|
committer | Tomas Mraz <tomas@openssl.org> | 2023-01-31 11:25:59 +0100 |
commit | b9e3749eb2ded7313459985978bb3ecc4374ff21 (patch) | |
tree | 83652ca7e99193b726d12209a6749e9f3ffb5d87 | |
parent | 44da71693cdad2deb6430a47d3f3ee9f57065091 (diff) | |
download | openssl-new-b9e3749eb2ded7313459985978bb3ecc4374ff21.tar.gz |
crypto/bio: drop float formating for UEFI
Using floating point is not supported in UEFI and can cause build
problems, for example due to SSE being disabled and x64 calling
convention passing floats in SSE registers.
Avoid those problems by not compiling the formating code for floating
point numbers.
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
Reviewed-by: Hugo Landau <hlandau@openssl.org>
Reviewed-by: Tomas Mraz <tomas@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/19738)
-rw-r--r-- | crypto/bio/b_print.c | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/crypto/bio/b_print.c b/crypto/bio/b_print.c index 41b7f5e2f6..90c7d9a4ec 100644 --- a/crypto/bio/b_print.c +++ b/crypto/bio/b_print.c @@ -13,6 +13,7 @@ #include "crypto/ctype.h" #include "internal/numbers.h" #include <openssl/bio.h> +#include <openssl/opensslconf.h> /* * Copyright Patrick Powell 1995 @@ -31,8 +32,10 @@ static int fmtstr(char **, char **, size_t *, size_t *, const char *, int, int, int); static int fmtint(char **, char **, size_t *, size_t *, int64_t, int, int, int, int); +#ifndef OPENSSL_SYS_UEFI static int fmtfp(char **, char **, size_t *, size_t *, LDOUBLE, int, int, int, int); +#endif static int doapr_outch(char **, char **, size_t *, size_t *, int); static int _dopr(char **sbuffer, char **buffer, size_t *maxlen, size_t *retlen, int *truncated, @@ -88,7 +91,9 @@ _dopr(char **sbuffer, { char ch; int64_t value; +#ifndef OPENSSL_SYS_UEFI LDOUBLE fvalue; +#endif char *strvalue; int min; int max; @@ -259,6 +264,7 @@ _dopr(char **sbuffer, min, max, flags)) return 0; break; +#ifndef OPENSSL_SYS_UEFI case 'f': if (cflags == DP_C_LDOUBLE) fvalue = va_arg(args, LDOUBLE); @@ -292,6 +298,16 @@ _dopr(char **sbuffer, flags, G_FORMAT)) return 0; break; +#else + case 'f': + case 'E': + case 'e': + case 'G': + case 'g': + /* not implemented for UEFI */ + ERR_raise(ERR_LIB_BIO, ERR_R_UNSUPPORTED); + return 0; +#endif case 'c': if (!doapr_outch(sbuffer, buffer, &currlen, maxlen, va_arg(args, int))) @@ -512,6 +528,8 @@ fmtint(char **sbuffer, return 1; } +#ifndef OPENSSL_SYS_UEFI + static LDOUBLE abs_val(LDOUBLE value) { LDOUBLE result = value; @@ -803,6 +821,8 @@ fmtfp(char **sbuffer, return 1; } +#endif /* OPENSSL_SYS_UEFI */ + #define BUFFER_INC 1024 static int |