From: "Arne H. Juul" <arnej@pvv.unit.no>
To: gas2@cygnus.com
Subject: .gas.warning sections
Date: Sat, 02 Dec 1995 12:57:00 -0000 [thread overview]
Message-ID: <9512022057.AA11248@datter.pvv.unit.no> (raw)
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
next reply other threads:[~1995-12-02 12:57 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
1995-12-02 12:57 Arne H. Juul [this message]
1995-12-02 13:49 ` Roland McGrath
1995-12-04 8:25 ` Ian Lance Taylor
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=9512022057.AA11248@datter.pvv.unit.no \
--to=arnej@pvv.unit.no \
--cc=gas2@cygnus.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
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).