diff options
Diffstat (limited to 'meta/packages/gcc/gcc-3.4.6/gcc34-thumb-support.patch')
| -rw-r--r-- | meta/packages/gcc/gcc-3.4.6/gcc34-thumb-support.patch | 156 |
1 files changed, 0 insertions, 156 deletions
diff --git a/meta/packages/gcc/gcc-3.4.6/gcc34-thumb-support.patch b/meta/packages/gcc/gcc-3.4.6/gcc34-thumb-support.patch deleted file mode 100644 index a4f156f8db..0000000000 --- a/meta/packages/gcc/gcc-3.4.6/gcc34-thumb-support.patch +++ /dev/null | |||
| @@ -1,156 +0,0 @@ | |||
| 1 | # This patch contains various fixes for the thumb code handling in GCC 3.4.4 | ||
| 2 | # | ||
| 3 | # Most of these are minor fixes to code which is either missing (Linux thumb | ||
| 4 | # div0, thumb clear instruction cache) or uses the wrong return mechanism | ||
| 5 | # (libffi) | ||
| 6 | # | ||
| 7 | # There is also a significant design problem with the _call_via_rx code - | ||
| 8 | # it cannot be in a shared library because a call via PLT simply won't | ||
| 9 | # work (for _call_via_ip) and is very inefficient anyway. | ||
| 10 | # | ||
| 11 | # This is fixed in uclibc simply by incorporating the code into crti.S | ||
| 12 | # (an extra 30 bytes for the 15 functions) even though not all link units | ||
| 13 | # require all the code - there is so little of it. That doesn't work with | ||
| 14 | # the crti.asm here because it is linked with libgcc.a which already defines | ||
| 15 | # these symbols | ||
| 16 | # | ||
| 17 | --- gcc-3.4.4/gcc/config/arm/t-linux.orig 2005-08-09 08:55:02.181797492 -0700 | ||
| 18 | +++ gcc-3.4.4/gcc/config/arm/t-linux 2005-08-09 08:58:22.766419486 -0700 | ||
| 19 | @@ -7,6 +7,7 @@ | ||
| 20 | LIB1ASMFUNCS = _udivsi3 _divsi3 _umodsi3 _modsi3 _dvmd_lnx \ | ||
| 21 | _negdf2 _addsubdf3 _muldivdf3 _cmpdf2 _unorddf2 _fixdfsi _fixunsdfsi \ | ||
| 22 | _truncdfsf2 _negsf2 _addsubsf3 _muldivsf3 _cmpsf2 _unordsf2 \ | ||
| 23 | + _call_via_rX \ | ||
| 24 | _fixsfsi _fixunssfsi | ||
| 25 | |||
| 26 | # MULTILIB_OPTIONS = mhard-float/msoft-float | ||
| 27 | --- gcc-3.4.4/.pc/gcc34-thumb-support.patch/gcc/config/arm/lib1funcs.asm 2004-01-15 08:56:34.000000000 -0800 | ||
| 28 | +++ gcc-3.4.4/gcc/config/arm/lib1funcs.asm 2005-09-21 21:32:03.376927755 -0700 | ||
| 29 | @@ -811,13 +811,18 @@ | ||
| 30 | |||
| 31 | /* Constants taken from <asm/unistd.h> and <asm/signal.h> */ | ||
| 32 | #define SIGFPE 8 | ||
| 33 | +#if !defined __thumb__ | ||
| 34 | #define __NR_SYSCALL_BASE 0x900000 | ||
| 35 | +#else | ||
| 36 | +#define __NR_SYSCALL_BASE 0 | ||
| 37 | +#endif | ||
| 38 | #define __NR_getpid (__NR_SYSCALL_BASE+ 20) | ||
| 39 | #define __NR_kill (__NR_SYSCALL_BASE+ 37) | ||
| 40 | |||
| 41 | .code 32 | ||
| 42 | FUNC_START div0 | ||
| 43 | |||
| 44 | +#if ! defined __thumb__ | ||
| 45 | stmfd sp!, {r1, lr} | ||
| 46 | swi __NR_getpid | ||
| 47 | cmn r0, #1000 | ||
| 48 | @@ -825,6 +830,28 @@ | ||
| 49 | mov r1, #SIGFPE | ||
| 50 | swi __NR_kill | ||
| 51 | RETLDM r1 | ||
| 52 | +#else | ||
| 53 | + push {r1, r7, lr} | ||
| 54 | + mov r7, #__NR_getpid | ||
| 55 | + swi 0 | ||
| 56 | + @ above the compare is with -1000, but the standard syscall | ||
| 57 | + @ macro checks for -1..-125 | ||
| 58 | + add r0, #125 | ||
| 59 | + bcs 90f | ||
| 60 | + sub r0, #125 | ||
| 61 | + mov r1, #SIGFPE | ||
| 62 | + mov r7, #__NR_kill | ||
| 63 | + swi 0 | ||
| 64 | +90: | ||
| 65 | +#if __ARM_ARCH__ > 4 | ||
| 66 | + pop {r1, r7, pc} | ||
| 67 | +#else | ||
| 68 | + @ on 4T that won't work | ||
| 69 | + pop {r1, r7} | ||
| 70 | + pop {r3} | ||
| 71 | + bx r3 | ||
| 72 | +#endif | ||
| 73 | +#endif | ||
| 74 | |||
| 75 | FUNC_END div0 | ||
| 76 | |||
| 77 | @@ -845,14 +872,14 @@ | ||
| 78 | code here switches to the correct mode before executing the function. */ | ||
| 79 | |||
| 80 | .text | ||
| 81 | - .align 0 | ||
| 82 | + .align 1 | ||
| 83 | .force_thumb | ||
| 84 | |||
| 85 | .macro call_via register | ||
| 86 | THUMB_FUNC_START _call_via_\register | ||
| 87 | + .hidden SYM (_call_via_\register) | ||
| 88 | |||
| 89 | bx \register | ||
| 90 | - nop | ||
| 91 | |||
| 92 | SIZE (_call_via_\register) | ||
| 93 | .endm | ||
| 94 | @@ -903,6 +930,7 @@ | ||
| 95 | .code 16 | ||
| 96 | |||
| 97 | THUMB_FUNC_START _interwork_call_via_\register | ||
| 98 | + .hidden SYM (_interwork_call_via_\register) | ||
| 99 | |||
| 100 | bx pc | ||
| 101 | nop | ||
| 102 | --- gcc-3.4.4/.pc/gcc34-thumb-support.patch/gcc/config/arm/linux-gas.h 2003-06-19 14:47:06.000000000 -0700 | ||
| 103 | +++ gcc-3.4.4/gcc/config/arm/linux-gas.h 2005-09-20 16:09:55.027862200 -0700 | ||
| 104 | @@ -56,6 +56,7 @@ | ||
| 105 | |||
| 106 | /* Clear the instruction cache from `beg' to `end'. This makes an | ||
| 107 | inline system call to SYS_cacheflush. */ | ||
| 108 | +#if !defined(__thumb__) | ||
| 109 | #define CLEAR_INSN_CACHE(BEG, END) \ | ||
| 110 | { \ | ||
| 111 | register unsigned long _beg __asm ("a1") = (unsigned long) (BEG); \ | ||
| 112 | @@ -65,3 +66,18 @@ | ||
| 113 | : "=r" (_beg) \ | ||
| 114 | : "0" (_beg), "r" (_end), "r" (_flg)); \ | ||
| 115 | } | ||
| 116 | +#else | ||
| 117 | +#define CLEAR_INSN_CACHE(BEG, END) \ | ||
| 118 | +{ \ | ||
| 119 | + register unsigned long _beg __asm ("a1") = (unsigned long) (BEG); \ | ||
| 120 | + register unsigned long _end __asm ("a2") = (unsigned long) (END); \ | ||
| 121 | + register unsigned long _flg __asm ("a3") = 0; \ | ||
| 122 | + register unsigned long _swi __asm ("a4") = 0xf0002; \ | ||
| 123 | + __asm __volatile ("push {r7}\n" \ | ||
| 124 | + " mov r7,a4\n" \ | ||
| 125 | + " swi 0 @ sys_cacheflush\n" \ | ||
| 126 | + " pop {r7}\n" \ | ||
| 127 | + : "=r" (_beg) \ | ||
| 128 | + : "0" (_beg), "r" (_end), "r" (_flg), "r" (_swi)); \ | ||
| 129 | +} | ||
| 130 | +#endif | ||
| 131 | --- gcc-3.4.4/.pc/gcc34-thumb-support.patch/libffi/src/arm/sysv.S 2003-10-21 12:01:55.000000000 -0700 | ||
| 132 | +++ gcc-3.4.4/libffi/src/arm/sysv.S 2005-09-20 16:09:55.027862200 -0700 | ||
| 133 | @@ -41,6 +41,14 @@ | ||
| 134 | #define ENTRY(x) .globl CNAME(x); .type CNAME(x),%function; CNAME(x): | ||
| 135 | #endif | ||
| 136 | |||
| 137 | +/* Get the correct return instruction */ | ||
| 138 | +#if defined(__ARM_ARCH_4T__) || defined(__ARM_ARCH_5__) \ | ||
| 139 | + || defined(__ARM_ARCH_5T__) || defined(__ARM_ARCH_5TE__) | ||
| 140 | +#define RET bx r | ||
| 141 | +#else | ||
| 142 | +#define RET mov pc, | ||
| 143 | +#endif | ||
| 144 | + | ||
| 145 | .text | ||
| 146 | |||
| 147 | # a1: ffi_prep_args | ||
| 148 | @@ -66,7 +74,7 @@ | ||
| 149 | |||
| 150 | # And call | ||
| 151 | mov lr, pc | ||
| 152 | - mov pc, ip | ||
| 153 | + RET ip | ||
| 154 | |||
| 155 | # move first 4 parameters in registers | ||
| 156 | ldr a1, [sp, #0] | ||
