00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00040 #include "mtm_i.h"
00041 #include <stdio.h>
00042 #include "init.h"
00043 #include "useraction.h"
00044
00045
00046 int _ITM_CALL_CONVENTION
00047 _ITM_versionCompatible (int version)
00048 {
00049 return version == _ITM_VERSION_NO;
00050 }
00051
00052
00053 const char * _ITM_CALL_CONVENTION
00054 _ITM_libraryVersion (void)
00055 {
00056 return "Mnemosyne MTM" _ITM_VERSION;
00057 }
00058
00059
00060 _ITM_howExecuting _ITM_CALL_CONVENTION
00061 _ITM_inTransaction (mtm_tx_t *tx)
00062 {
00063 if (tx && tx->status != TX_IDLE) {
00064 if (tx->status & TX_IRREVOCABLE) {
00065 return inIrrevocableTransaction;
00066 } else {
00067 return inRetryableTransaction;
00068 }
00069 }
00070 return outsideTransaction;
00071 }
00072
00073
00074 _ITM_transactionId _ITM_CALL_CONVENTION
00075 _ITM_getTransactionId (mtm_tx_t *td)
00076 {
00077 mtm_tx_t *tx = mtm_get_tx();
00078 return tx ? tx->id : _ITM_noTransactionId;
00079 }
00080
00081
00082 mtm_tx_t * _ITM_CALL_CONVENTION
00083 _ITM_getTransaction(void)
00084 {
00085 mtm_tx_t *tx = mtm_get_tx();
00086
00087 if (tx) {
00088 return tx;
00089 }
00090
00091 tx = mtm_init_thread();
00092 return tx;
00093 }
00094
00095
00096 int _ITM_CALL_CONVENTION
00097 _ITM_getThreadnum (void)
00098 {
00099 static int global_num;
00100 mtm_tx_t *tx = mtm_get_tx();
00101 int num = (int) tx->thread_num;
00102
00103 if (num == 0) {
00104 num = __sync_add_and_fetch (&global_num, 1);
00105 tx->thread_num = num;
00106 }
00107
00108 return num;
00109 }
00110
00111
00112 void _ITM_CALL_CONVENTION ITM_NORETURN
00113 _ITM_error (const _ITM_srcLocation * loc UNUSED, int errorCode UNUSED)
00114 {
00115 abort ();
00116 }
00117
00118
00119 void _ITM_CALL_CONVENTION
00120 _ITM_userError (const char *errorStr, int errorCode)
00121 {
00122 fprintf (stderr, "A TM fatal error: %s (code = %i).\n", errorStr, errorCode);
00123 exit (errorCode);
00124 }
00125
00126
00127 void _ITM_CALL_CONVENTION
00128 _ITM_dropReferences (mtm_tx_t * td, const void *start, size_t size)
00129 {
00130
00131 }
00132
00133
00134 void _ITM_CALL_CONVENTION
00135 _ITM_registerThrownObject(mtm_tx_t *td,
00136 const void *exception_object, size_t s)
00137 {
00138
00139
00140 }
00141
00142
00143 int _ITM_CALL_CONVENTION
00144 _ITM_initializeProcess (void)
00145 {
00146 int ret;
00147 mtm_tx_t *thr;
00148
00149 if ((ret = mtm_init_global()) == 0) {
00150 thr = mtm_init_thread();
00151 if (thr) {
00152 return 0;
00153 } else {
00154 return -1;
00155 }
00156 }
00157 return ret;
00158 }
00159
00160
00161 void _ITM_CALL_CONVENTION
00162 _ITM_finalizeProcess (void)
00163 {
00164 mtm_fini_global();
00165 return;
00166 }
00167
00168
00169 int _ITM_CALL_CONVENTION
00170 _ITM_initializeThread (void)
00171 {
00172 if (mtm_init_thread()) {
00173 return 0;
00174 } else {
00175 return -1;
00176 }
00177 }
00178
00179
00180 void _ITM_CALL_CONVENTION
00181 _ITM_finalizeThread (void)
00182 {
00183 mtm_fini_thread();
00184 }
00185
00186 void _ITM_CALL_CONVENTION
00187 _ITM_registerThreadFinalization (void (_ITM_CALL_CONVENTION * thread_fini_func) (void *), void *arg)
00188 {
00189
00190
00191 }
00192
00193 void _ITM_CALL_CONVENTION
00194 _ITM_addUserCommitAction(mtm_tx_t * __td,
00195 _ITM_userCommitFunction fn,
00196 _ITM_transactionId tid,
00197 void *arg)
00198 {
00199 mtm_useraction_addUserCommitAction(__td, fn, tid, arg);
00200 }
00201
00202
00203 void _ITM_CALL_CONVENTION
00204 _ITM_addUserUndoAction(mtm_tx_t * __td,
00205 const _ITM_userUndoFunction fn,
00206 void *arg)
00207 {
00208 mtm_useraction_addUserUndoAction(__td, fn, arg);
00209 }
00210
00211
00212 void _ITM_CALL_CONVENTION
00213 _ITM_changeTransactionMode(mtm_tx_t *td,
00214 _ITM_transactionState __mode,
00215 const _ITM_srcLocation * __loc)
00216 {
00217
00218
00219
00220 }