[openssl-dev] [openssl.org #4447] Missing generators for sparcv8plus.s, sparcv8.s and sparccpuid.s (OpenSSL 1.1.0 pre4)

Rainer Jung via RT rt at openssl.org
Fri Mar 18 21:56:38 UTC 2016


When building OpenSSL 1.1.0 pre4 on Solaris Sparc for 64 Bits I get an 
error, because before building crypto/bn/sparcv8plus.o first generates 
crypto/bn/asm/sparcv8plus.s from crypto/bn/asm/sparcv8plus.S with the 
following command

gcc -E  crypto/bn/asm/sparcv8plus.S > crypto/bn/asm/sparcv8plus.s

This command is missing CFLAGS. As a consequence, the generated .s file 
does not work for 64 bit compilation and compiling it fails with lots of 
errors of type:

/usr/ccs/bin/as: "crypto/bn/asm/sparcv8plus.s", line ...: error: detect 
global register use not covered .register pseudo-op

The pre3 version compiled crypto/bn/asm/sparcv8plus.o directly from 
crypto/bn/asm/sparcv8plus.S (upper case ".S") using "gcc -c" and all 
CFLAGS, include flags etc.

So either one does the same for pre4 or one adds a Makefile rule for 
crypto/bn/asm/sparcv8plus.s generating it from 
crypto/bn/asm/sparcv8plus.S respecting CFLAGS, include dirs etc. or 
simply copying it from the .S file.

I think the switch from .S to .s happens in src2obj() inside 
Configurations/unix-Makefile.tmpl. So if it is intentional, you need to 
define and use a generator from .S to .s.

The following patch worked for me, but I don't know whether it is how it 
should work:


--- Configurations/00-base-templates.conf       Wed Mar 16 19:18:09 2016
+++ Configurations/00-base-templates.conf       Fri Mar 18 22:31:59 2016
@@ -198,8 +198,8 @@
      },
      sparcv9_asm => {
         template        => 1,
-       cpuid_asm_src   => "sparcv9cap.c sparccpuid.S",
-       bn_asm_src      => "asm/sparcv8plus.S sparcv9-mont.S 
sparcv9a-mont.S vis3-mont.S sparct4-mont.S sparcv9-gf2m.S",
+       cpuid_asm_src   => "sparcv9cap.c sparccpuid.s",
+       bn_asm_src      => "sparcv8plus.s sparcv9-mont.S sparcv9a-mont.S 
vis3-mont.S sparct4-mont.S sparcv9-gf2m.S",
         ec_asm_src      => "ecp_nistz256.c ecp_nistz256-sparcv9.S",
         des_asm_src     => "des_enc-sparc.S fcrypt_b.c dest4-sparcv9.S",
         aes_asm_src     => "aes_core.c aes_cbc.c aes-sparcv9.S 
aest4-sparcv9.S",
@@ -213,7 +213,7 @@
      sparcv8_asm => {
         template        => 1,
         cpuid_asm_src   => "",
-       bn_asm_src      => "asm/sparcv8.S",
+       bn_asm_src      => "sparcv8.s",
         des_asm_src     => "des_enc-sparc.S fcrypt_b.c",
         perlasm_scheme  => "void"
      },


(upper case ".S" to lower case ".s" and removal of "asm/").

and two build.info changes:


--- crypto/build.info Wed Mar 16 19:18:08 2016
+++ crypto/build.info   Fri Mar 18 22:11:43 2016
@@ -21,6 +21,8 @@

  GENERATE[x86_64cpuid.s]=x86_64cpuid.pl $(PERLASM_SCHEME)

+GENERATE[sparccpuid.s]=sparccpuid.S
+
  GENERATE[ia64cpuid.s]=ia64cpuid.S
  GENERATE[ppccpuid.s]=ppccpuid.pl $(PERLASM_SCHEME)
  GENERATE[pariscid.s]=pariscid.pl $(PERLASM_SCHEME)


--- crypto/bn/build.info      Wed Mar 16 19:18:09 2016
+++ crypto/bn/build.info        Fri Mar 18 22:11:43 2016
@@ -24,6 +24,9 @@
         $(PERLASM_SCHEME) $(CFLAGS) $(LIB_CFLAGS) $(PROCESSOR)
  DEPEND[x86-gf2m.s]=../perlasm/x86asm.pl

+GENERATE[sparcv8.s]=asm/sparcv8.S
+GENERATE[sparcv8plus.s]=asm/sparcv8plus.S
+
  GENERATE[sparcv9a-mont.S]=asm/sparcv9a-mont.pl $(PERLASM_SCHEME)
  INCLUDE[sparcv9a-mont.o]=..
  GENERATE[sparcv9-mont.S]=asm/sparcv9-mont.pl $(PERLASM_SCHEME)


This seems to be consistent with how it is done for

crypto/ia64cpuid.S
crypto/aes/asm/aes-ia64.S
crypto/bn/asm/ia64.S

The same changes probably need to be done for

crypto/s390xcpuid.S
crypto/bn/asm/s390x.S

Regards,

Rainer


-- 
Ticket here: http://rt.openssl.org/Ticket/Display.html?id=4447
Please log in as guest with password guest if prompted



More information about the openssl-dev mailing list