public inbox for gas2@sourceware.org
 help / color / mirror / Atom feed
* .gas.warning sections
@ 1995-12-02 12:57 Arne H. Juul
  1995-12-02 13:49 ` Roland McGrath
  1995-12-04  8:25 ` Ian Lance Taylor
  0 siblings, 2 replies; 3+ messages in thread
From: Arne H. Juul @ 1995-12-02 12:57 UTC (permalink / raw)
  To: gas2

I have been looking at getting warnings from gnu ld when
used on mips-dec-netbsd platform (this is "plain" ELF on
little-endian mips).  This deals with both GCC, the assembler
and the linker, so forgive me if this message is rather long-winded.

So from looking in the GNU libc it looks like this should be
done like in this simple example:

#define link_warning(symbol, msg)                       \
  static const char __evoke_link_warning_##symbol[]     \
    __attribute__ ((section (".gnu.warning." #symbol))) = msg;

link_warning(null1, "This program uses null1(), which is pointless.\n");
int null1(void) {}

At first, this doesn't get through gcc, I just get
"section attributes are not supported for this target".  From
looking at c-common.c this is because ASM_OUTPUT_SECTION_NAME,
which should mean that the target platform doesn't support
arbitrarily named sections.

Now in config/mips the only file defining ASM_OUTPUT_SECTION_NAME
is elf64.h, which has this code in it:

/* A C statement to output something to the assembler file to switch to section
   NAME for object DECL which is either a FUNCTION_DECL, a VAR_DECL or
   NULL_TREE.  Some target formats do not support arbitrary sections.  Do not
   define this macro in such cases.  */

#define ASM_OUTPUT_SECTION_NAME(F, DECL, NAME) \
do {                                                            \
  extern FILE *asm_out_text_file;                               \
  if ((DECL) && TREE_CODE (DECL) == FUNCTION_DECL)              \
    fprintf (asm_out_text_file, "\t.section %s,\"ax\",@progbits\n", (NAME)); \
  else if ((DECL) && TREE_READONLY (DECL))                      \
    fprintf (F, "\t.section %s,\"a\",@progbits\n", (NAME));     \
  else                                                          \
    fprintf (F, "\t.section %s,\"aw\",@progbits\n", (NAME));    \
} while (0)

This is probably really an assembler question:  Is all this stuff really
necessary, and what does the extra @progbits mean?  Stuffing this
code into netbsd.h as well seemed to work ok, but then I looked a bit
further, and while svr4.h has a somewhat simple version of this,
h8300/h8300.h has something more like what I had imagined:
#define ASM_OUTPUT_SECTION_NAME(FILE, DECL, NAME) \
  fprintf (FILE, "\t.section %s\n", NAME)

Stuffing this code into netbsd.h instead seemed to work just as well.
I would welcome enlightenment on this issue. (Maybe it should
be common code in config/mips/something.h?)

Another (maybe somewhat irrelevant) inquiry:  With any of the
two variants above gcc accepts my test file and gas produces an
object file with the required section.  When linking a 'main'-type
file which uses the symbol in question (null1 for my example)
I also get my warning:
tm.o: In function `main':
tm.c(.text+0x28): This program uses null1(), which is pointless.

However, if I change my test file to have *only* the warning section
for null1 (not the function definition itself), I get the following
behaviour:

gcc: Internal compiler error: program ld got fatal signal 6

This is if the program doesn't reference null1() at all.
If I do reference null1() it works right:

tm.o: In function `main':
tm.c(.text+0x28): This program uses null1(), which is pointless.
tm.c(.text+0x28): undefined reference to `null1'

This seems to be a (probably obscure) bug in ld, but hopefully it
shouldn't give me any "real" problems, right?

Yours,
  - Arne H. Juul


^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~1995-12-04  8:25 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
1995-12-02 12:57 .gas.warning sections Arne H. Juul
1995-12-02 13:49 ` Roland McGrath
1995-12-04  8:25 ` Ian Lance Taylor

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).