From: Saurabh Jha <[email protected]>
For mingw targets, there is no way to identify the end of function using
assembly directives right now.
This patch adds such directive as a comment. This is not a real
directive because some other things, like Structured Exception Handling
(SEH), needs to be supported before we can emit a real directive.
However, emitting an end of function marker now will let us modify
check-function-bodies in scanasm.exp, which in turn enables us to write
dg-compile tests for mingw target.
gcc/ChangeLog:
* config/aarch64/aarch64-coff.h
(ASM_COMMENT_START): Specify start of comment.
(ASM_DECLARE_FUNCTION_SIZE): Specify end of function as comment.
gcc/testsuite/ChangeLog:
* lib/scanasm.exp: Add support for mingw targets.
---
gcc/config/aarch64/aarch64-coff.h | 11 +++++++++--
gcc/testsuite/lib/scanasm.exp | 2 ++
2 files changed, 11 insertions(+), 2 deletions(-)
diff --git a/gcc/config/aarch64/aarch64-coff.h b/gcc/config/aarch64/aarch64-coff.h
index 72607262e1b..bcb3a782ba5 100644
--- a/gcc/config/aarch64/aarch64-coff.h
+++ b/gcc/config/aarch64/aarch64-coff.h
@@ -61,10 +61,17 @@
#define ASM_OUTPUT_SKIP(STREAM, NBYTES) \
fprintf (STREAM, "\t.space\t%d // skip\n", (int) (NBYTES))
-/* Definitions that are not yet supported by binutils for the
+#define ASM_COMMENT_START "//"
+
+/* ASM_OUTPUT_TYPE_DIRECTIVE is not yet supported by binutils for the
aarch64-w64-mingw32 target. */
#define ASM_OUTPUT_TYPE_DIRECTIVE(STREAM, NAME, TYPE)
-#define ASM_DECLARE_FUNCTION_SIZE(FILE, FNAME, DECL)
+
+/* Structured Exception Handling (SEH) is not yet supported by binutils
+ so adding seh_endproc as an assembly comment to mark the end of a
+ function. */
+#define ASM_DECLARE_FUNCTION_SIZE(FILE, FNAME, DECL) \
+ fprintf (FILE, "\t" ASM_COMMENT_START " seh_endproc\n")
#define TEXT_SECTION_ASM_OP "\t.text"
#define DATA_SECTION_ASM_OP "\t.data"
diff --git a/gcc/testsuite/lib/scanasm.exp b/gcc/testsuite/lib/scanasm.exp
index 51952a6a7f4..1f9842e7fa3 100644
--- a/gcc/testsuite/lib/scanasm.exp
+++ b/gcc/testsuite/lib/scanasm.exp
@@ -885,6 +885,8 @@ proc configure_check-function-bodies { config } {
set up_config(end) {^\}$}
} elseif { [istarget *-*-darwin*] } {
set up_config(end) {^LFE[0-9]+}
+ } elseif { [istarget *-*-mingw32] } {
+ set up_config(end) {seh_endproc}
} else {
set up_config(end) {^\s*\.size}
}