mirror of
https://github.com/Mbed-TLS/mbedtls.git
synced 2025-01-31 18:32:57 +00:00
Merge pull request #1986 from jacmet/bn_mul-fix-x86-pic-compilation-for-gcc-4
bn_mul.h: fix x86 PIC inline ASM compilation with GCC < 5
This commit is contained in:
commit
a948f0588c
4
ChangeLog.d/bn_mul-fix-x86-pic-compilation-for-gcc-4.txt
Normal file
4
ChangeLog.d/bn_mul-fix-x86-pic-compilation-for-gcc-4.txt
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
Bugfix
|
||||||
|
* Fix a long-standing build failure when building x86 PIC code with old
|
||||||
|
gcc (4.x). The code will be slower, but will compile. We do however
|
||||||
|
recommend upgrading to a more recent compiler instead. Fixes #1910.
|
@ -90,13 +90,29 @@
|
|||||||
#if defined(__GNUC__) && \
|
#if defined(__GNUC__) && \
|
||||||
( !defined(__ARMCC_VERSION) || __ARMCC_VERSION >= 6000000 )
|
( !defined(__ARMCC_VERSION) || __ARMCC_VERSION >= 6000000 )
|
||||||
|
|
||||||
|
/*
|
||||||
|
* GCC < 5.0 treated the x86 ebx (which is used for the GOT) as a
|
||||||
|
* fixed reserved register when building as PIC, leading to errors
|
||||||
|
* like: bn_mul.h:46:13: error: PIC register clobbered by 'ebx' in 'asm'
|
||||||
|
*
|
||||||
|
* This is fixed by an improved register allocator in GCC 5+. From the
|
||||||
|
* release notes:
|
||||||
|
* Register allocation improvements: Reuse of the PIC hard register,
|
||||||
|
* instead of using a fixed register, was implemented on x86/x86-64
|
||||||
|
* targets. This improves generated PIC code performance as more hard
|
||||||
|
* registers can be used.
|
||||||
|
*/
|
||||||
|
#if defined(__GNUC__) && __GNUC__ < 5 && defined(__PIC__)
|
||||||
|
#define MULADDC_CANNOT_USE_EBX
|
||||||
|
#endif
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Disable use of the i386 assembly code below if option -O0, to disable all
|
* Disable use of the i386 assembly code below if option -O0, to disable all
|
||||||
* compiler optimisations, is passed, detected with __OPTIMIZE__
|
* compiler optimisations, is passed, detected with __OPTIMIZE__
|
||||||
* This is done as the number of registers used in the assembly code doesn't
|
* This is done as the number of registers used in the assembly code doesn't
|
||||||
* work with the -O0 option.
|
* work with the -O0 option.
|
||||||
*/
|
*/
|
||||||
#if defined(__i386__) && defined(__OPTIMIZE__)
|
#if defined(__i386__) && defined(__OPTIMIZE__) && !defined(MULADDC_CANNOT_USE_EBX)
|
||||||
|
|
||||||
#define MULADDC_X1_INIT \
|
#define MULADDC_X1_INIT \
|
||||||
{ mbedtls_mpi_uint t; \
|
{ mbedtls_mpi_uint t; \
|
||||||
|
Loading…
x
Reference in New Issue
Block a user