diff options
author | Ben Nizette <bn@niasdigital.com> | 2009-01-13 17:32:19 -0500 |
---|---|---|
committer | Haavard Skinnemoen <haavard.skinnemoen@atmel.com> | 2009-01-16 03:31:57 -0500 |
commit | 8d29b7b9f81d6b83d869ff054e6c189d6da73f1f (patch) | |
tree | dab61206aa71a650f53adb52bf02c17f7cd7a787 /arch/avr32/kernel/syscall-stubs.S | |
parent | 7cb36b6ccdca03bd87e8faca7fd920643dd1aec7 (diff) |
avr32: Fix out-of-range rcalls in large kernels
Replace handcoded rcall instructions with the call pseudo-instruction.
For kernels too far over 1MB the rcall instruction can't reach and
linking will fail. We already call the final linker with --relax which
converts call pseudo-instructions to the right things anyway.
This fixes
arch/avr32/kernel/built-in.o: In function `syscall_exit_work':
(.ex.text+0x198): relocation truncated to fit: R_AVR32_22H_PCREL against symbol `schedule' defined in .sched.text section in kernel/built-in.o
arch/avr32/kernel/built-in.o: In function `fault_exit_work':
(.ex.text+0x3b6): relocation truncated to fit: R_AVR32_22H_PCREL against symbol `schedule' defined in .sched.text section in kernel/built-in.o
But I'm still left with
arch/avr32/kernel/built-in.o:(.fixup+0x2): relocation truncated to fit: R_AVR32_22H_PCREL against `.text'+45a
arch/avr32/kernel/built-in.o:(.fixup+0x8): relocation truncated to fit: R_AVR32_22H_PCREL against `.text'+8ea
arch/avr32/kernel/built-in.o:(.fixup+0xe): relocation truncated to fit: R_AVR32_22H_PCREL against `.text'+abe
arch/avr32/kernel/built-in.o:(.fixup+0x14): relocation truncated to fit: R_AVR32_22H_PCREL against `.text'+ac8
arch/avr32/kernel/built-in.o:(.fixup+0x1a): relocation truncated to fit: R_AVR32_22H_PCREL against `.text'+ad2
arch/avr32/kernel/built-in.o:(.fixup+0x20): relocation truncated to fit: R_AVR32_22H_PCREL against `.text'+adc
arch/avr32/kernel/built-in.o:(.fixup+0x26): relocation truncated to fit: R_AVR32_22H_PCREL against `.text'+ae6
arch/avr32/kernel/built-in.o:(.fixup+0x2c): relocation truncated to fit: R_AVR32_22H_PCREL against `.text'+af0
arch/avr32/kernel/built-in.o:(.fixup+0x32): additional relocation overflows omitted from the output
These are caused by a similar problem with 'rjmp' instructions.
Unfortunately, there's no easy fix for these at the moment since we
don't have a arbitrary-range 'jmp' instruction similar to 'call'.
Signed-off-by: Ben Nizette <bn@niasdigital.com>
Signed-off-by: Haavard Skinnemoen <haavard.skinnemoen@atmel.com>
Diffstat (limited to 'arch/avr32/kernel/syscall-stubs.S')
-rw-r--r-- | arch/avr32/kernel/syscall-stubs.S | 14 |
1 files changed, 7 insertions, 7 deletions
diff --git a/arch/avr32/kernel/syscall-stubs.S b/arch/avr32/kernel/syscall-stubs.S index 673178e235f3..f7244cd02fbb 100644 --- a/arch/avr32/kernel/syscall-stubs.S +++ b/arch/avr32/kernel/syscall-stubs.S | |||
@@ -61,7 +61,7 @@ __sys_execve: | |||
61 | __sys_mmap2: | 61 | __sys_mmap2: |
62 | pushm lr | 62 | pushm lr |
63 | st.w --sp, ARG6 | 63 | st.w --sp, ARG6 |
64 | rcall sys_mmap2 | 64 | call sys_mmap2 |
65 | sub sp, -4 | 65 | sub sp, -4 |
66 | popm pc | 66 | popm pc |
67 | 67 | ||
@@ -70,7 +70,7 @@ __sys_mmap2: | |||
70 | __sys_sendto: | 70 | __sys_sendto: |
71 | pushm lr | 71 | pushm lr |
72 | st.w --sp, ARG6 | 72 | st.w --sp, ARG6 |
73 | rcall sys_sendto | 73 | call sys_sendto |
74 | sub sp, -4 | 74 | sub sp, -4 |
75 | popm pc | 75 | popm pc |
76 | 76 | ||
@@ -79,7 +79,7 @@ __sys_sendto: | |||
79 | __sys_recvfrom: | 79 | __sys_recvfrom: |
80 | pushm lr | 80 | pushm lr |
81 | st.w --sp, ARG6 | 81 | st.w --sp, ARG6 |
82 | rcall sys_recvfrom | 82 | call sys_recvfrom |
83 | sub sp, -4 | 83 | sub sp, -4 |
84 | popm pc | 84 | popm pc |
85 | 85 | ||
@@ -88,7 +88,7 @@ __sys_recvfrom: | |||
88 | __sys_pselect6: | 88 | __sys_pselect6: |
89 | pushm lr | 89 | pushm lr |
90 | st.w --sp, ARG6 | 90 | st.w --sp, ARG6 |
91 | rcall sys_pselect6 | 91 | call sys_pselect6 |
92 | sub sp, -4 | 92 | sub sp, -4 |
93 | popm pc | 93 | popm pc |
94 | 94 | ||
@@ -97,7 +97,7 @@ __sys_pselect6: | |||
97 | __sys_splice: | 97 | __sys_splice: |
98 | pushm lr | 98 | pushm lr |
99 | st.w --sp, ARG6 | 99 | st.w --sp, ARG6 |
100 | rcall sys_splice | 100 | call sys_splice |
101 | sub sp, -4 | 101 | sub sp, -4 |
102 | popm pc | 102 | popm pc |
103 | 103 | ||
@@ -106,7 +106,7 @@ __sys_splice: | |||
106 | __sys_epoll_pwait: | 106 | __sys_epoll_pwait: |
107 | pushm lr | 107 | pushm lr |
108 | st.w --sp, ARG6 | 108 | st.w --sp, ARG6 |
109 | rcall sys_epoll_pwait | 109 | call sys_epoll_pwait |
110 | sub sp, -4 | 110 | sub sp, -4 |
111 | popm pc | 111 | popm pc |
112 | 112 | ||
@@ -115,6 +115,6 @@ __sys_epoll_pwait: | |||
115 | __sys_sync_file_range: | 115 | __sys_sync_file_range: |
116 | pushm lr | 116 | pushm lr |
117 | st.w --sp, ARG6 | 117 | st.w --sp, ARG6 |
118 | rcall sys_sync_file_range | 118 | call sys_sync_file_range |
119 | sub sp, -4 | 119 | sub sp, -4 |
120 | popm pc | 120 | popm pc |