From f2d4ba38f5723a207c40a288036af2f38b70e837 Mon Sep 17 00:00:00 2001 From: Jan Beulich Date: Thu, 4 Jul 2019 10:35:47 +0200 Subject: gas/ELF: don't accumulate .type settings Recently a patch was submitted for a Xen Project test harness binary to override the compiler specified @object to @func (see [1]). In a reply I suggested we shouldn't make ourselves dependent on currently unspecified behavior of gas here: It accumulates all requests, and then bfd/elf.c:swap_out_syms(), in an apparently ad hoc manner, prioritizes certain flags over others. Make the behavior predictable: Generally the last .type is what counts. Exceptions are directives which set multiple bits (TLS, IFUNC, and UNIQUE): Subsequent directives requesting just the more generic bit (i.e. FUNC following IFUNC) won't clear the more specific one. Warn about incompatible changes, except from/to STT_NOTYPE. Also add a new target hook, which hppa wants to use right away afaict. In the course of adding the warning I ran into two ld testsuite failures. I can only assume that it was a copy-and-paste mistake that lead to the same symbol having its type set twice. [1] https://lists.xenproject.org/archives/html/xen-devel/2019-05/msg01980.html --- gas/doc/as.texi | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'gas/doc') diff --git a/gas/doc/as.texi b/gas/doc/as.texi index b177daa..b4598e8 100644 --- a/gas/doc/as.texi +++ b/gas/doc/as.texi @@ -7215,6 +7215,10 @@ systems). @end table +Changing between incompatible types other than from/to STT_NOTYPE will +result in a diagnostic. An intermediate change to STT_NOTYPE will silence +this. + Note: Some targets support extra types in addition to those listed above. @end ifset -- cgit v1.1