[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
Sat Mar 19 13:38:57 UTC 2016


Hi Richard,

Am 19.03.2016 um 12:49 schrieb Richard Levitte via RT:
> So I'm wondering, what happens if you apply the attached patch?

Works like a charm, tested on Solaris 10 Sparc doing a 32bit build and a 
64bit build. The intermediate ".s" (lower case) file no longer gets 
generated and instead the object file gets directly compiled from the .S 
(upper case) file.

Builds succeed, tests pass.

As always: thanks a bunch!

Regards,

Rainer

> Vid Sat, 19 Mar 2016 kl. 11.02.09, skrev levitte:
>> Hmmm...
>>
>> Actually, I'm thinkg that src2obj() should check if the original file
>> exists as
>> given before changing .S to .s... That should work, since we're always
>> generating 'foo.s' from 'asm/foo.S' (or 'asm/foo.pl', but that's not
>> applicable
>> here)... The directory difference should make it safe.
>>
>> I'll experiment a little, there's also the question of the assembler
>> files in
>> crypto/, but they are a problem in other builds as well...
>>
>> So, fix coming up! But not quite your solution.
>>
>> Vid Fre, 18 Mar 2016 kl. 21.56.37, skrev rainer.jung at kippdata.de:
>>> 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
>>>
>>
>>
>> --
>> Richard Levitte
>> levitte at openssl.org
>
>
> --
> Richard Levitte
> levitte at openssl.org


-- 
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