yann@1: From http://sources.redhat.com/ml/libc-alpha/2002-06/msg00006.html yann@1: yann@1: Message-ID: <15612.44195.299251.921969@honolulu.ilog.fr> yann@1: Date: Tue, 4 Jun 2002 14:03:47 +0200 (CEST) yann@1: From: Bruno Haible yann@1: To: libc-alpha at sources dot redhat dot com yann@1: Subject: link_warning fix yann@1: yann@1: yann@1: Hi, yann@1: yann@1: While cross-compiling glibc-2.2.5 for target=cris-linux using gcc-3.1 and yann@1: binutils-2.12.90.0.7, I get an error yann@1: yann@1: cris-linux-gcc ../sysdeps/unix/sysv/linux/sigstack.c -c -O2 -Wall -Winline -Wstrict-prototypes -Wwrite-strings -g -I../include -I. -I/backup/cross-build/build-glibc-cris/signal -I.. -I../libio -I/backup/cross-build/build-glibc-cris -I../sysdeps/cris/elf -I../linuxthreads/sysdeps/unix/sysv/linux -I../linuxthreads/sysdeps/pthread -I../sysdeps/pthread -I../linuxthreads/sysdeps/unix/sysv -I../linuxthreads/sysdeps/unix -I../linuxthreads/sysdeps/cris -I../sysdeps/unix/sysv/linux/cris -I../sysdeps/unix/sysv/linux -I../sysdeps/gnu -I../sysdeps/unix/common -I../sysdeps/unix/mman -I../sysdeps/unix/inet -I../sysdeps/unix/sysv -I../sysdeps/unix -I../sysdeps/posix -I../sysdeps/cris -I../sysdeps/wordsize-32 -I../sysdeps/ieee754/flt-32 -I../sysdeps/ieee754/dbl-64 -I../sysdeps/ieee754 -I../sysdeps/generic/elf -I../sysdeps/generic -nostdinc -isystem /cross/cris-linux-tools/lib/gcc-lib/cris-linux/3.1/include -isystem /cross/cris-linux/include -D_LIBC_REENTRANT -include ../include/libc-symbols.h -o /backup/cross-build/build-glibc-cris/signal/sigstack.o yann@1: /tmp/cca7qZyI.s: Assembler messages: yann@1: /tmp/cca7qZyI.s:87: Warning: rest of line ignored; first ignored character is `,' yann@1: /tmp/cca7qZyI.s:87: Error: Unknown opcode: `progbits' yann@1: make[2]: *** [/backup/cross-build/build-glibc-cris/signal/sigstack.o] Fehler 1 yann@1: yann@1: yann@1: The reason is that the .s file contains the following. yann@1: yann@1: ... yann@1: .size sigstack,.Lfe1-sigstack yann@1: #APP yann@1: .section .gnu.warning.sigstack yann@1: .previous yann@1: #NO_APP yann@1: .section .gnu.warning.sigstack yann@1: #,"a",@progbits yann@1: .align 2 yann@1: .type __evoke_link_warning_sigstack,@object yann@1: ... yann@1: yann@1: and comments (introduced by '#') are recognized by the assembler only after yann@1: #APP, not after #NO_APP. The workaround is to add '#APP' to the fake section yann@1: name. The following patch works for me. yann@1: yann@1: 2002-06-02 Bruno Haible yann@1: yann@1: * include/libc-symbols.h (__as_app_line): New macro. yann@1: (link_warning): Emit #APP line to turn comment recognition on. yann@1: yann@1: *** glibc-2.2.5/include/libc-symbols.h.bak 2001-08-04 01:02:52.000000000 +0200 yann@1: --- glibc-2.2.5/include/libc-symbols.h 2002-06-02 16:22:15.000000000 +0200 yann@1: *************** yann@1: *** 207,224 **** yann@1: # define __make_section_unallocated(section_string) yann@1: # endif yann@1: yann@1: ! /* Tacking on "\n\t#" to the section name makes gcc put it's bogus yann@1: ! section attributes on what looks like a comment to the assembler. */ yann@1: # ifdef HAVE_SECTION_QUOTES yann@1: # define link_warning(symbol, msg) \ yann@1: __make_section_unallocated (".gnu.warning." #symbol) \ yann@1: ! static const char __evoke_link_warning_##symbol[] \ yann@1: ! __attribute__ ((section (".gnu.warning." #symbol "\"\n\t#\""))) = msg; yann@1: # else yann@1: # define link_warning(symbol, msg) \ yann@1: __make_section_unallocated (".gnu.warning." #symbol) \ yann@1: ! static const char __evoke_link_warning_##symbol[] \ yann@1: ! __attribute__ ((section (".gnu.warning." #symbol "\n\t#"))) = msg; yann@1: # endif yann@1: # else /* Not ELF: a.out */ yann@1: # ifdef HAVE_XCOFF yann@1: --- 207,235 ---- yann@1: # define __make_section_unallocated(section_string) yann@1: # endif yann@1: yann@1: ! /* Tacking on "\n\t#" to the section name makes gcc put its bogus yann@1: ! section attributes on what looks like a comment to the assembler. yann@1: ! Furthermore, with gas, we need to add a "#APP" line so the comment yann@1: ! is recognized as such. */ yann@1: ! # ifdef HAVE_GNU_AS yann@1: ! # define __as_app_line "#APP\n" yann@1: ! # else yann@1: ! # define __as_app_line "" yann@1: ! # endif yann@1: # ifdef HAVE_SECTION_QUOTES yann@1: # define link_warning(symbol, msg) \ yann@1: __make_section_unallocated (".gnu.warning." #symbol) \ yann@1: ! static const char __evoke_link_warning_##symbol[] \ yann@1: ! __attribute__ \ yann@1: ! ((section (".gnu.warning." #symbol "\"\n" __as_app_line "\t#\""))) \ yann@1: ! = msg; yann@1: # else yann@1: # define link_warning(symbol, msg) \ yann@1: __make_section_unallocated (".gnu.warning." #symbol) \ yann@1: ! static const char __evoke_link_warning_##symbol[] \ yann@1: ! __attribute__ \ yann@1: ! ((section (".gnu.warning." #symbol "\n" __as_app_line "\t#"))) \ yann@1: ! = msg; yann@1: # endif yann@1: # else /* Not ELF: a.out */ yann@1: # ifdef HAVE_XCOFF yann@1: