diff options
Diffstat (limited to '0009-Cygwin-uses-sysv-ABI-on-x86_64-V2.patch')
-rw-r--r-- | 0009-Cygwin-uses-sysv-ABI-on-x86_64-V2.patch | 75 |
1 files changed, 75 insertions, 0 deletions
diff --git a/0009-Cygwin-uses-sysv-ABI-on-x86_64-V2.patch b/0009-Cygwin-uses-sysv-ABI-on-x86_64-V2.patch new file mode 100644 index 0000000..a36e9ce --- /dev/null +++ b/0009-Cygwin-uses-sysv-ABI-on-x86_64-V2.patch @@ -0,0 +1,75 @@ +diff --git a/gcc/builtin-attrs.def b/gcc/builtin-attrs.def +index 38fb1bb..bd5d97a 100644 +--- a/gcc/builtin-attrs.def ++++ b/gcc/builtin-attrs.def +@@ -112,6 +112,7 @@ DEF_ATTR_IDENT (ATTR_TYPEGENERIC, "type generic") + DEF_ATTR_IDENT (ATTR_TM_REGPARM, "*tm regparm") + DEF_ATTR_IDENT (ATTR_TM_TMPURE, "transaction_pure") + DEF_ATTR_IDENT (ATTR_RETURNS_TWICE, "returns_twice") ++DEF_ATTR_IDENT (ATTR_SYSV_ABI, "sysv_abi") + DEF_ATTR_IDENT (ATTR_RETURNS_NONNULL, "returns_nonnull") + + DEF_ATTR_TREE_LIST (ATTR_NOVOPS_LIST, ATTR_NOVOPS, ATTR_NULL, ATTR_NULL) +@@ -375,6 +376,8 @@ DEF_ATTR_TREE_LIST (ATTR_TM_CONST_NOTHROW_LIST, + ATTR_TM_REGPARM, ATTR_NULL, ATTR_CONST_NOTHROW_LIST) + DEF_ATTR_TREE_LIST (ATTR_TM_NOTHROW_RT_LIST, + ATTR_RETURNS_TWICE, ATTR_NULL, ATTR_TM_NOTHROW_LIST) ++DEF_ATTR_TREE_LIST (ATTR_TM_NOTHROW_RT_SYSV_LIST, ++ ATTR_SYSV_ABI, ATTR_NULL, ATTR_TM_NOTHROW_RT_LIST) + + /* Same attributes used for BUILT_IN_MALLOC except with TM_PURE thrown in. */ + DEF_ATTR_TREE_LIST (ATTR_TMPURE_MALLOC_NOTHROW_LIST, +diff --git a/gcc/gtm-builtins.def b/gcc/gtm-builtins.def +index 6d5cfb9..1f47898 100644 +--- a/gcc/gtm-builtins.def ++++ b/gcc/gtm-builtins.def +@@ -1,5 +1,5 @@ + DEF_TM_BUILTIN (BUILT_IN_TM_START, "_ITM_beginTransaction", +- BT_FN_UINT32_UINT32_VAR, ATTR_TM_NOTHROW_RT_LIST) ++ BT_FN_UINT32_UINT32_VAR, ATTR_TM_NOTHROW_RT_SYSV_LIST) + + DEF_TM_BUILTIN (BUILT_IN_TM_COMMIT, "_ITM_commitTransaction", + BT_FN_VOID, ATTR_TM_NOTHROW_LIST) +diff --git a/libitm/libitm.h b/libitm/libitm.h +index 4745f2a..a8c77e7 100644 +--- a/libitm/libitm.h ++++ b/libitm/libitm.h +@@ -45,6 +45,7 @@ extern "C" { + + #define ITM_NORETURN __attribute__((noreturn)) + #define ITM_PURE __attribute__((transaction_pure)) ++#define ITM_SYSV __attribute__((sysv_abi)) + + /* The following are externally visible definitions and functions, though + only very few of these should be called by user code. */ +@@ -145,7 +146,7 @@ typedef uint64_t _ITM_transactionId_t; /* Transaction identifier */ + + extern _ITM_transactionId_t _ITM_getTransactionId(void) ITM_REGPARM; + +-extern uint32_t _ITM_beginTransaction(uint32_t, ...) ITM_REGPARM; ++extern uint32_t _ITM_beginTransaction(uint32_t, ...) ITM_REGPARM ITM_SYSV; + + extern void _ITM_abortTransaction(_ITM_abortReason) ITM_REGPARM ITM_NORETURN; + +diff --git a/libitm/libitm_i.h b/libitm/libitm_i.h +index b3633bb..3072bad 100644 +--- a/libitm/libitm_i.h ++++ b/libitm/libitm_i.h +@@ -294,7 +294,7 @@ struct gtm_thread + // Invoked from assembly language, thus the "asm" specifier on + // the name, avoiding complex name mangling. + static uint32_t begin_transaction(uint32_t, const gtm_jmpbuf *) +- __asm__(UPFX "GTM_begin_transaction") ITM_REGPARM; ++ __asm__(UPFX "GTM_begin_transaction") ITM_REGPARM ITM_SYSV; + // In eh_cpp.cc + void init_cpp_exceptions (); + void revert_cpp_exceptions (gtm_transaction_cp *cp = 0); +@@ -328,7 +328,7 @@ namespace GTM HIDDEN { + extern uint64_t gtm_spin_count_var; + + extern "C" uint32_t GTM_longjmp (uint32_t, const gtm_jmpbuf *, uint32_t) +- ITM_NORETURN ITM_REGPARM; ++ ITM_NORETURN ITM_REGPARM ITM_SYSV; + + extern "C" void GTM_LB (const void *, size_t) ITM_REGPARM; + |