diff options
author | lloyd <[email protected]> | 2011-04-18 18:05:27 +0000 |
---|---|---|
committer | lloyd <[email protected]> | 2011-04-18 18:05:27 +0000 |
commit | 06a32c91e639cc2b0c636553a8aa395aa90d4d37 (patch) | |
tree | 9e69d0eda9228cfde50cfd377ebe0e4463026e32 | |
parent | 886252ce1a1b0de611c33c9eac0a91a0e6bf3276 (diff) |
My workaround for gcc pr 44174 caused cpuid support to be silently
disabled under gcc.
Hide asm labels in the x86-32 code; some did not begin with a .L so
they were being exported.
-rw-r--r-- | doc/log.txt | 3 | ||||
-rw-r--r-- | src/block/serpent_ia32/serp_ia32_imp.S | 4 | ||||
-rw-r--r-- | src/hash/sha1_ia32/sha1_ia32_imp.S | 4 | ||||
-rw-r--r-- | src/utils/cpuid.cpp | 10 |
4 files changed, 15 insertions, 6 deletions
diff --git a/doc/log.txt b/doc/log.txt index ff0beca78..4c9e5e054 100644 --- a/doc/log.txt +++ b/doc/log.txt @@ -12,6 +12,9 @@ Version 1.10.0, Not Yet Released * Further updates to the documentation +* A bug in 1.9.16 effectively disabled support for runtime CPU feature + detection on x86 under GCC in that release. + * New options to ``configure.py`` control what tools are used for documentation generation. The ``--with-sphinx`` option enables using Sphinx to convert ReST into HTML; otherwise the ReST sources are diff --git a/src/block/serpent_ia32/serp_ia32_imp.S b/src/block/serpent_ia32/serp_ia32_imp.S index 768192061..5308173bf 100644 --- a/src/block/serpent_ia32/serp_ia32_imp.S +++ b/src/block/serpent_ia32/serp_ia32_imp.S @@ -591,7 +591,7 @@ START_FUNCTION(botan_serpent_ia32_key_schedule) ASSIGN(ESI, IMM(8)) ADD_IMM(EDI, 32) -START_LOOP(.EXPANSION) +START_LOOP(.L_SERP_EXPANSION) ASSIGN(EAX, ARRAY4(EDI, -1)) ASSIGN(EBX, ARRAY4(EDI, -3)) ASSIGN(ECX, ARRAY4(EDI, -5)) @@ -611,7 +611,7 @@ START_LOOP(.EXPANSION) ADD_IMM(ESI, 1) ADD_IMM(EDI, 4) -LOOP_UNTIL_EQ(ESI, 140, .EXPANSION) +LOOP_UNTIL_EQ(ESI, 140, .L_SERP_EXPANSION) ASSIGN(EDI, ARG(1)) /* round keys */ diff --git a/src/hash/sha1_ia32/sha1_ia32_imp.S b/src/hash/sha1_ia32/sha1_ia32_imp.S index c2777b4b5..0aed8015b 100644 --- a/src/hash/sha1_ia32/sha1_ia32_imp.S +++ b/src/hash/sha1_ia32/sha1_ia32_imp.S @@ -42,7 +42,7 @@ LOOP_UNTIL_EQ(ESI, 16, .LOAD_INPUT) ADD2_IMM(EDI, EBP, 64) -START_LOOP(.EXPANSION) +START_LOOP(.L_SHA_EXPANSION) ADD_IMM(ESI, 4) ZEROIZE(EAX) @@ -77,7 +77,7 @@ START_LOOP(.EXPANSION) ASSIGN(ARRAY4(EDI, 3), EAX) ADD_IMM(EDI, 16) -LOOP_UNTIL_EQ(ESI, 80, .EXPANSION) +LOOP_UNTIL_EQ(ESI, 80, .L_SHA_EXPANSION) #define MAGIC1 0x5A827999 #define MAGIC2 0x6ED9EBA1 diff --git a/src/utils/cpuid.cpp b/src/utils/cpuid.cpp index 7f3b4d9b8..ce3822d55 100644 --- a/src/utils/cpuid.cpp +++ b/src/utils/cpuid.cpp @@ -31,15 +31,21 @@ // Only available starting in GCC 4.3 #include <cpuid.h> +namespace { + /* * Prevent inlining to work around GCC bug 44174 */ - void __attribute__((__noinline__)) CALL_CPUID(Botan::u32bit type, - Botan::u32bit out[4]) + void __attribute__((__noinline__)) call_gcc_cpuid(Botan::u32bit type, + Botan::u32bit out[4]) { __get_cpuid(type, out, out+1, out+2, out+3); } + #define CALL_CPUID call_gcc_cpuid + +} + #else #warning "No method of calling CPUID for this compiler" #endif |