It seems at some point the .size hook was hijacked to emit some
machine-specific directives, and the actual .size directive was
forgotten. This caused problems for split-stack support, since
linker couldn't scan the function body for non-split-stack calls.
gcc/ChangeLog:
* config/s390/s390.c (s390_asm_declare_function_size): Add code
to actually emit the .size directive.
---
gcc/ChangeLog | 5 +++++
gcc/config/s390/s390.c | 4 +++-
2 files changed, 8 insertions(+), 1 deletion(-)
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 2c572a7..6aef3f9 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,5 +1,10 @@
2016-01-02 Marcin Kościelnicki <[email protected]>
+ * config/s390/s390.c (s390_asm_declare_function_size): Add code
+ to actually emit the .size directive.
+
+2016-01-02 Marcin Kościelnicki <[email protected]>
+
* config/s390/s390.md (pool_section_start): Use switch_to_section
to select proper read-only data section instead of hardcoding .rodata.
(pool_section_end): Use switch_to_section to match the above.
diff --git a/gcc/config/s390/s390.c b/gcc/config/s390/s390.c
index 16045f0..9dc8d1e 100644
--- a/gcc/config/s390/s390.c
+++ b/gcc/config/s390/s390.c
@@ -6834,8 +6834,10 @@ s390_asm_output_function_prefix (FILE *asm_out_file,
void
s390_asm_declare_function_size (FILE *asm_out_file,
- const char *fnname ATTRIBUTE_UNUSED, tree decl)
+ const char *fnname, tree decl)
{
+ if (!flag_inhibit_size_directive)
+ ASM_OUTPUT_MEASURED_SIZE (asm_out_file, fnname);
if (DECL_FUNCTION_SPECIFIC_TARGET (decl) == NULL)
return;
fprintf (asm_out_file, "\t.machine pop\n");
--
2.6.4