https://gcc.gnu.org/g:e259a182e1f100a7693657cea20a207fd1323b82

commit r17-1725-ge259a182e1f100a7693657cea20a207fd1323b82
Author: Iain Sandoe <[email protected]>
Date:   Sun Jun 21 11:43:51 2026 +0100

    testsuite: Add target macho, document object format checks.
    
    There are already target supports tests for ELF and PE/COFF, this adds
    one for Mach-O and documents all three in sourcebuild.
    
    gcc/ChangeLog:
    
            * doc/sourcebuild.texi: Document object file checks.
    
    gcc/testsuite/ChangeLog:
    
            * lib/target-supports.exp: Add a check for Mach-O object file
            format.
    
    Signed-off-by: Iain Sandoe <[email protected]>

Diff:
---
 gcc/doc/sourcebuild.texi              | 23 +++++++++++++++++++++--
 gcc/testsuite/lib/target-supports.exp | 22 ++++++++++++++++------
 2 files changed, 37 insertions(+), 8 deletions(-)

diff --git a/gcc/doc/sourcebuild.texi b/gcc/doc/sourcebuild.texi
index ef2ca9eab5e9..7850b9de9344 100644
--- a/gcc/doc/sourcebuild.texi
+++ b/gcc/doc/sourcebuild.texi
@@ -876,9 +876,9 @@ included, in this file you should guard declarations using 
these types
 inside appropriate @code{#ifdef RTX_CODE} or @code{#ifdef TREE_CODE}
 conditional code segments.
 
-If the backend uses shared data structures that require @code{GTY} markers 
+If the backend uses shared data structures that require @code{GTY} markers
 for garbage collection (@pxref{Type Information}), you must declare those
-in @file{@var{machine}.h} rather than @file{@var{machine}-protos.h}.  
+in @file{@var{machine}.h} rather than @file{@var{machine}-protos.h}.
 Any definitions required for building libgcc must also go in
 @file{@var{machine}.h}.
 
@@ -1506,6 +1506,25 @@ By convention, keywords ending in @code{_nocache} can 
also include options
 specified for the particular test in an earlier @code{dg-options} or
 @code{dg-add-options} directive.
 
+@subsubsection Object file format
+
+This identifies the object file format emitted by the compiler. Matching
+assembler output often depends on content that differs between file formats.
+
+@table @code
+
+@item elf
+Target uses the ELF file format (note that ELFv2 is matched specifically for
+the powerpc platform, below).
+
+@item macho
+Target uses the Mach-O file format (currently applies only to Darwin / macOS).
+
+@item pe
+Target uses the PE/COFF file format (e.g. for Windows).
+
+@end table
+
 @subsubsection Endianness
 
 @table @code
diff --git a/gcc/testsuite/lib/target-supports.exp 
b/gcc/testsuite/lib/target-supports.exp
index 668434e933ff..c6ebbed4f4b5 100644
--- a/gcc/testsuite/lib/target-supports.exp
+++ b/gcc/testsuite/lib/target-supports.exp
@@ -335,7 +335,7 @@ proc check_weak_available { } {
 
     # VxWorks supports it only since VxWorks 7 (assumed >= r2) for RTPs.
     # Kernel mode works fine as well for our testsuite's purposes.
- 
+
     if { [istarget *-*-vxworks*] } {
        return [istarget *-*-vxworks7*]
     }
@@ -560,6 +560,16 @@ proc check_effective_target_elf { } {
     }
 }
 
+# Returns 1 if the target uses the Mach-O object format, 0 otherwise.
+
+proc check_effective_target_macho { } {
+    if { [gcc_target_object_format] == "mach-o" } {
+       return 1;
+    } else {
+       return 0;
+    }
+}
+
 # Returns 1 if the target uses the PE/COFF object format, 0 otherwise.
 
 proc check_effective_target_pe { } {
@@ -6336,7 +6346,7 @@ foreach { armfunc armflag armdefs } {
 #        /* { dg-add-options arm_cpu_xscale } */
 #       /* { dg-require-effective-target arm_xscale_multilib } */
 
-# NOTE: -mcpu does not override -mtune, so to ensure the tuning is consistent 
+# NOTE: -mcpu does not override -mtune, so to ensure the tuning is consistent
 # for tests using these flags all entries should set -mcpu and -mtune 
explicitly
 
 # This table should only be used to set -mcpu= (and associated
@@ -13775,7 +13785,7 @@ proc check_effective_target_autoincdec { } {
 #
 proc check_effective_target_supports_stack_clash_protection { } {
 
-    if { [check_effective_target_x86] 
+    if { [check_effective_target_x86]
          || [istarget powerpc*-*-*] || [istarget rs6000*-*-*]
          || [istarget aarch64*-**] || [istarget s390*-*-*]
          || [istarget loongarch64*-**] || [istarget riscv64*-**] } {
@@ -14790,7 +14800,7 @@ proc check_nvptx_default_ptx_isa_version_at_least { 
major minor } {
             "#error unsupported" \
             "#endif"]
     set src [join $src "\n"]
-    
+
     set res [check_no_compiler_messages $name assembly $src ""]
 
     return $res
@@ -14825,7 +14835,7 @@ proc 
check_nvptx_default_ptx_isa_target_architecture_at_least { ta } {
             "#error unsupported" \
             "#endif"]
     set src [join $src "\n"]
-    
+
     set res [check_no_compiler_messages $name assembly $src ""]
 
     return $res
@@ -14940,7 +14950,7 @@ proc check_effective_target_alarm { } {
        #include <stdlib.h>
        #include <unistd.h>
        void do_exit(int i) { exit (0); }
-       int main (void) { 
+       int main (void) {
          struct sigaction s;
          sigemptyset (&s.sa_mask);
          s.sa_handler = exit;

Reply via email to