Skip to content

Commit 2079184

Browse files
Ard Biesheuvelctmarinas
authored andcommitted
arm64: use ENDPIPROC() to annotate position independent assembler routines
For more control over which functions are called with the MMU off or with the UEFI 1:1 mapping active, annotate some assembler routines as position independent. This is done by introducing ENDPIPROC(), which replaces the ENDPROC() declaration of those routines. Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org> Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
1 parent d4dddfd commit 2079184

File tree

10 files changed

+24
-13
lines changed

10 files changed

+24
-13
lines changed

arch/arm64/include/asm/assembler.h

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -193,4 +193,15 @@ lr .req x30 // link register
193193
str \src, [\tmp, :lo12:\sym]
194194
.endm
195195

196+
/*
197+
* Annotate a function as position independent, i.e., safe to be called before
198+
* the kernel virtual mapping is activated.
199+
*/
200+
#define ENDPIPROC(x) \
201+
.globl __pi_##x; \
202+
.type __pi_##x, %function; \
203+
.set __pi_##x, x; \
204+
.size __pi_##x, . - x; \
205+
ENDPROC(x)
206+
196207
#endif /* __ASM_ASSEMBLER_H */

arch/arm64/lib/memchr.S

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,4 +41,4 @@ ENTRY(memchr)
4141
ret
4242
2: mov x0, #0
4343
ret
44-
ENDPROC(memchr)
44+
ENDPIPROC(memchr)

arch/arm64/lib/memcmp.S

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -255,4 +255,4 @@ CPU_LE( rev data2, data2 )
255255
.Lret0:
256256
mov result, #0
257257
ret
258-
ENDPROC(memcmp)
258+
ENDPIPROC(memcmp)

arch/arm64/lib/memcpy.S

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -71,4 +71,4 @@
7171
ENTRY(memcpy)
7272
#include "copy_template.S"
7373
ret
74-
ENDPROC(memcpy)
74+
ENDPIPROC(memcpy)

arch/arm64/lib/memmove.S

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -194,4 +194,4 @@ ENTRY(memmove)
194194
tst count, #0x3f
195195
b.ne .Ltail63
196196
ret
197-
ENDPROC(memmove)
197+
ENDPIPROC(memmove)

arch/arm64/lib/memset.S

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -213,4 +213,4 @@ ENTRY(memset)
213213
ands count, count, zva_bits_x
214214
b.ne .Ltail_maybe_long
215215
ret
216-
ENDPROC(memset)
216+
ENDPIPROC(memset)

arch/arm64/lib/strcmp.S

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -231,4 +231,4 @@ CPU_BE( orr syndrome, diff, has_nul )
231231
lsr data1, data1, #56
232232
sub result, data1, data2, lsr #56
233233
ret
234-
ENDPROC(strcmp)
234+
ENDPIPROC(strcmp)

arch/arm64/lib/strlen.S

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -123,4 +123,4 @@ CPU_LE( lsr tmp2, tmp2, tmp1 ) /* Shift (tmp1 & 63). */
123123
csinv data1, data1, xzr, le
124124
csel data2, data2, data2a, le
125125
b .Lrealigned
126-
ENDPROC(strlen)
126+
ENDPIPROC(strlen)

arch/arm64/lib/strncmp.S

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -307,4 +307,4 @@ CPU_BE( orr syndrome, diff, has_nul )
307307
.Lret0:
308308
mov result, #0
309309
ret
310-
ENDPROC(strncmp)
310+
ENDPIPROC(strncmp)

arch/arm64/mm/cache.S

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -98,7 +98,7 @@ ENTRY(__flush_dcache_area)
9898
b.lo 1b
9999
dsb sy
100100
ret
101-
ENDPROC(__flush_dcache_area)
101+
ENDPIPROC(__flush_dcache_area)
102102

103103
/*
104104
* __inval_cache_range(start, end)
@@ -131,7 +131,7 @@ __dma_inv_range:
131131
b.lo 2b
132132
dsb sy
133133
ret
134-
ENDPROC(__inval_cache_range)
134+
ENDPIPROC(__inval_cache_range)
135135
ENDPROC(__dma_inv_range)
136136

137137
/*
@@ -171,7 +171,7 @@ ENTRY(__dma_flush_range)
171171
b.lo 1b
172172
dsb sy
173173
ret
174-
ENDPROC(__dma_flush_range)
174+
ENDPIPROC(__dma_flush_range)
175175

176176
/*
177177
* __dma_map_area(start, size, dir)
@@ -184,7 +184,7 @@ ENTRY(__dma_map_area)
184184
cmp w2, #DMA_FROM_DEVICE
185185
b.eq __dma_inv_range
186186
b __dma_clean_range
187-
ENDPROC(__dma_map_area)
187+
ENDPIPROC(__dma_map_area)
188188

189189
/*
190190
* __dma_unmap_area(start, size, dir)
@@ -197,4 +197,4 @@ ENTRY(__dma_unmap_area)
197197
cmp w2, #DMA_TO_DEVICE
198198
b.ne __dma_inv_range
199199
ret
200-
ENDPROC(__dma_unmap_area)
200+
ENDPIPROC(__dma_unmap_area)

0 commit comments

Comments
 (0)