diff options
Diffstat (limited to 'openembedded/packages/db/files/arm-thumb-mutex.patch')
| -rw-r--r-- | openembedded/packages/db/files/arm-thumb-mutex.patch | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/openembedded/packages/db/files/arm-thumb-mutex.patch b/openembedded/packages/db/files/arm-thumb-mutex.patch new file mode 100644 index 0000000000..acd446fcd8 --- /dev/null +++ b/openembedded/packages/db/files/arm-thumb-mutex.patch | |||
| @@ -0,0 +1,36 @@ | |||
| 1 | --- db-4.3.29-dist/../dbinc/mutex.h 2005-11-15 07:33:27.761042518 -0800 | ||
| 2 | +++ db-4.3.29-dist/../dbinc/mutex.h 2005-11-15 07:55:24.823920060 -0800 | ||
| 3 | @@ -470,6 +470,25 @@ | ||
| 4 | #ifdef LOAD_ACTUAL_MUTEX_CODE | ||
| 5 | #define MUTEX_SET_TEST 1 /* gcc/arm: 0 is clear, 1 is set. */ | ||
| 6 | |||
| 7 | +#if defined __thumb__ | ||
| 8 | +#define MUTEX_SET(tsl) ({ \ | ||
| 9 | + int __r, __p; \ | ||
| 10 | + asm volatile( \ | ||
| 11 | + ".align 2\n\t" \ | ||
| 12 | + "bx pc\n\t" \ | ||
| 13 | + "nop\n\t" \ | ||
| 14 | + ".arm\n\t" \ | ||
| 15 | + "swpb %0, %2, [%3]\n\t" \ | ||
| 16 | + "eor %0, %0, #1\n\t" \ | ||
| 17 | + "orr %1, pc, #1\n\t" \ | ||
| 18 | + "bx %1\n\t" \ | ||
| 19 | + ".force_thumb" \ | ||
| 20 | + : "=&r" (__r), "=r" (__p) \ | ||
| 21 | + : "r" (1), "r" (tsl) \ | ||
| 22 | + ); \ | ||
| 23 | + __r & 1; \ | ||
| 24 | +}) | ||
| 25 | +#else | ||
| 26 | #define MUTEX_SET(tsl) ({ \ | ||
| 27 | int __r; \ | ||
| 28 | asm volatile( \ | ||
| 29 | @@ -480,6 +499,7 @@ | ||
| 30 | ); \ | ||
| 31 | __r & 1; \ | ||
| 32 | }) | ||
| 33 | +#endif | ||
| 34 | |||
| 35 | #define MUTEX_UNSET(tsl) (*(volatile tsl_t *)(tsl) = 0) | ||
| 36 | #define MUTEX_INIT(tsl) MUTEX_UNSET(tsl) | ||
