diff options
author | Sergei Trofimovich <slyfox@gentoo.org> | 2018-05-19 17:31:42 +0100 |
---|---|---|
committer | Sergei Trofimovich <slyfox@gentoo.org> | 2018-05-19 17:38:50 +0100 |
commit | 787d8d240bbeaa812bcf37deeedb3c467be468a3 (patch) | |
tree | ef2574872a63a0ca9c8f0fc91baf092fd1906ec2 | |
parent | 138734e5b9a6f93098291c09cf54d95ec3d301e7 (diff) | |
download | portable-787d8d240bbeaa812bcf37deeedb3c467be468a3.tar.gz portable-787d8d240bbeaa812bcf37deeedb3c467be468a3.tar.bz2 portable-787d8d240bbeaa812bcf37deeedb3c467be468a3.zip |
__warn_references: tweak assembly for "gnu.warning" section
On some targets ';' (like hppa) is treated as a comment
in assembly files. This occasionally causes the following
assembly failures:
```
Error: can't resolve `.gnu.warning.EVP_DecryptFinal'
{.gnu.warning.EVP_DecryptFinal section} - `.Ltext0' {.text section}
```
Note how branch (or other reference) attempts to cross the
boundary across two section types: '.text' and '.gnu.warning'.
Tobias Ulmer notes that openbsd already uses newlines
for similar macro:
https://github.com/openbsd/src/blob/master/sys/arch/hppa/include/cdefs.h
This change switches from ';' to newline as well.
Tested on hppa2.0 and x86_64.
Reported-by: Jeroen Roovers
Bug: https://bugs.gentoo.org/656104
Signed-off-by: Sergei Trofimovich <slyfox@gentoo.org>
Diffstat (limited to '')
-rw-r--r-- | configure.ac | 2 | ||||
-rw-r--r-- | include/compat/sys/types.h | 2 |
2 files changed, 2 insertions, 2 deletions
diff --git a/configure.ac b/configure.ac index b74b8a1..16ed825 100644 --- a/configure.ac +++ b/configure.ac | |||
@@ -91,7 +91,7 @@ AM_CONDITIONAL([HOST_CPU_IS_INTEL], [test "x$HOSTARCH" = "xintel"]) | |||
91 | AC_MSG_CHECKING([if .gnu.warning accepts long strings]) | 91 | AC_MSG_CHECKING([if .gnu.warning accepts long strings]) |
92 | AC_LINK_IFELSE([AC_LANG_SOURCE([[ | 92 | AC_LINK_IFELSE([AC_LANG_SOURCE([[ |
93 | extern void SSLv3_method(); | 93 | extern void SSLv3_method(); |
94 | __asm__(".section .gnu.warning.SSLv3_method; .ascii \"SSLv3_method is insecure\" ; .text"); | 94 | __asm__(".section .gnu.warning.SSLv3_method\n\t.ascii \"SSLv3_method is insecure\"\n\t.text"); |
95 | int main() {return 0;} | 95 | int main() {return 0;} |
96 | ]])], [ | 96 | ]])], [ |
97 | AC_DEFINE(HAS_GNU_WARNING_LONG, 1, [Define if .gnu.warning accepts long strings.]) | 97 | AC_DEFINE(HAS_GNU_WARNING_LONG, 1, [Define if .gnu.warning accepts long strings.]) |
diff --git a/include/compat/sys/types.h b/include/compat/sys/types.h index 2107119..dec09e3 100644 --- a/include/compat/sys/types.h +++ b/include/compat/sys/types.h | |||
@@ -62,7 +62,7 @@ typedef SSIZE_T ssize_t; | |||
62 | #if defined(__GNUC__) && defined (HAS_GNU_WARNING_LONG) | 62 | #if defined(__GNUC__) && defined (HAS_GNU_WARNING_LONG) |
63 | #define __warn_references(sym,msg) \ | 63 | #define __warn_references(sym,msg) \ |
64 | __asm__(".section .gnu.warning." __STRING(sym) \ | 64 | __asm__(".section .gnu.warning." __STRING(sym) \ |
65 | " ; .ascii \"" msg "\" ; .text"); | 65 | "\n\t.ascii \"" msg "\"\n\t.text"); |
66 | #else | 66 | #else |
67 | #define __warn_references(sym,msg) | 67 | #define __warn_references(sym,msg) |
68 | #endif | 68 | #endif |