[PATCH] Problems with the .section workaround
Jakub Jelinek
jakub@redhat.com
Wed Jun 14 01:42:00 GMT 2000
Hi!
This one just replaces one warning with another one about unterminated
string.
* include/libc-symbols.h (link_warning): Work around a change in
GAS which warns about changing section attributes.
Proposed by Nick Clifton <nickc@redhat.com>.
The issue is that some gcc ports output
.section foo,"ax"
and some
.section "foo","ax"
for __attribute__((section("foo")))
so with \n\t# at the end of section name, one ends up with
.section "foo
#","ax"
This patch tries to check for this in configure and act upon what it found.
autoconf misses AC_TRY_ASSEMBLE :((.
2000-06-14 Jakub Jelinek <jakub@redhat.com>
* include/libc-symbols.h (link_warning): If
HAVE_SECTION_QUOTES is defined, terminate quotes and readd them
after the comment char.
* configure.in (HAVE_SECTION_QUOTES): Test whether
__attribute__((section ("x"))) puts quotes around x or not.
* config.h.in (HAVE_SECTION_QUOTES): Add.
* configure: Rebuilt.
--- libc/include/libc-symbols.h.jj Tue Jun 13 07:29:14 2000
+++ libc/include/libc-symbols.h Wed Jun 14 09:38:59 2000
@@ -178,8 +178,13 @@
# define link_warning(symbol, msg) \
__make_section_unallocated (".gnu.warning." #symbol) \
+# ifdef HAVE_SECTION_QUOTES
+ static const char __evoke_link_warning_##symbol[] \
+ __attribute__ ((section (".gnu.warning." #symbol "\"\n\t#\""))) = msg;
+# else
static const char __evoke_link_warning_##symbol[] \
__attribute__ ((section (".gnu.warning." #symbol "\n\t#"))) = msg;
+# endif
# else
# define link_warning(symbol, msg) \
asm(".stabs \"" msg "\",30,0,0,0\n" \
--- libc/configure.in.jj Tue Jun 13 07:29:03 2000
+++ libc/configure.in Wed Jun 14 10:17:19 2000
@@ -905,6 +905,29 @@ if test $elf != yes; then
fi
fi
+if test $elf = yes -a $gnu_ld = yes; then
+ AC_CACHE_CHECK(whether cc puts quotes around section names,
+ libc_cv_have_section_quotes,
+ [cat > conftest.c <<EOF
+ static const int foo
+ __attribute__ ((section ("bar"))) = 1;
+EOF
+ if ${CC-cc} -S conftest.c -o conftest.s; then
+ if grep '\.section.*"bar"' conftest.s >/dev/null; then
+ libc_cv_have_section_quotes=yes
+ else
+ libc_cv_have_section_quotes=no
+ fi
+ else
+ libc_cv_have_section_quotes=unknown
+ fi
+ rm -f conftest.[cs]
+ ])
+ if test $libc_cv_have_section_quotes = yes; then
+ AC_DEFINE(HAVE_SECTION_QUOTES)
+ fi
+fi
+
dnl AC_CHECK_ASM_UNDERSCORE([ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND]])
AC_DEFUN(AC_CHECK_ASM_UNDERSCORE,
[cat > conftest.$ac_ext <<EOF
--- libc/config.h.in.jj Wed Mar 22 22:36:03 2000
+++ libc/config.h.in Wed Jun 14 09:50:03 2000
@@ -21,6 +21,9 @@
/* Define if not using ELF, but `.init' and `.fini' sections are available. */
#undef HAVE_INITFINI
+/* Define if __attribute__((section("foo"))) puts quotes around foo. */
+#undef HAVE_SECTION_QUOTES
+
/* Define if using the GNU assembler, gas. */
#undef HAVE_GNU_AS
--- libc/configure.jj Tue Jun 13 07:29:03 2000
+++ libc/configure Wed Jun 14 10:17:21 2000
@@ -2633,6 +2633,38 @@ EOF
fi
fi
+if test $elf = yes -a $gnu_ld = yes; then
+ echo $ac_n "checking whether cc puts quotes around section names""... $ac_c" 1>&6
+echo "configure:2639: checking whether cc puts quotes around section names" >&5
+if eval "test \"`echo '$''{'libc_cv_have_section_quotes'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ cat > conftest.c <<EOF
+ static const int foo
+ __attribute__ ((section ("bar"))) = 1;
+EOF
+ if ${CC-cc} -S conftest.c -o conftest.s; then
+ if grep '\.section.*"bar"' conftest.s >/dev/null; then
+ libc_cv_have_section_quotes=yes
+ else
+ libc_cv_have_section_quotes=no
+ fi
+ else
+ libc_cv_have_section_quotes=unknown
+ fi
+ rm -f conftest.cs
+
+fi
+
+echo "$ac_t""$libc_cv_have_section_quotes" 1>&6
+ if test $libc_cv_have_section_quotes = yes; then
+ cat >> confdefs.h <<\EOF
+#define HAVE_SECTION_QUOTES 1
+EOF
+
+ fi
+fi
+
if test $elf = yes; then
Jakub
More information about the Libc-hacker
mailing list