mirror of https://github.com/acidanthera/audk.git
ArmPkg: introduce ASM_FUNC, MOV32/MOV64 and ADRL/LDRL macros
This introduces the ASM_FUNC() macro to annotate function entry points in assembler files. This allows us to add additional metadata that marks a function entry point as a function, and allows us to emit a .section directive for each function, which makes it possible for the linker to drop unreferenced code. In addition, introduce a couple of utility macros that we can use to clean up the code. Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org> Reviewed-by: Eugene Cohen <eugene@hp.com> Reviewed-by: Leif Lindholm <leif.lindholm@linaro.org>
This commit is contained in:
parent
66edb631f8
commit
d2d0e27c76
|
@ -3,6 +3,7 @@
|
|||
|
||||
Copyright (c) 2008 - 2009, Apple Inc. All rights reserved.<BR>
|
||||
Copyright (c) 2011-2012, ARM Ltd. All rights reserved.<BR>
|
||||
Copyright (c) 2016, Linaro Ltd. All rights reserved.<BR>
|
||||
|
||||
This program and the accompanying materials
|
||||
are licensed and made available under the terms and conditions of the BSD License
|
||||
|
@ -51,4 +52,26 @@
|
|||
|
||||
#endif
|
||||
|
||||
#define _ASM_FUNC(Name, Section) \
|
||||
.global Name ; \
|
||||
.section #Section, "ax" ; \
|
||||
.type Name, %function ; \
|
||||
Name:
|
||||
|
||||
#define ASM_FUNC(Name) _ASM_FUNC(ASM_PFX(Name), .text. ## Name)
|
||||
|
||||
#define MOV32(Reg, Val) \
|
||||
movw Reg, #(Val) & 0xffff ; \
|
||||
movt Reg, #(Val) >> 16
|
||||
|
||||
#define ADRL(Reg, Sym) \
|
||||
movw Reg, #:lower16:(Sym) - (. + 16) ; \
|
||||
movt Reg, #:upper16:(Sym) - (. + 12) ; \
|
||||
add Reg, Reg, pc
|
||||
|
||||
#define LDRL(Reg, Sym) \
|
||||
movw Reg, #:lower16:(Sym) - (. + 16) ; \
|
||||
movt Reg, #:upper16:(Sym) - (. + 12) ; \
|
||||
ldr Reg, [pc, Reg]
|
||||
|
||||
#endif
|
||||
|
|
|
@ -3,6 +3,7 @@
|
|||
|
||||
Copyright (c) 2008 - 2009, Apple Inc. All rights reserved.<BR>
|
||||
Portions copyright (c) 2011 - 2014, ARM Ltd. All rights reserved.<BR>
|
||||
Copyright (c) 2016, Linaro Ltd. All rights reserved.<BR>
|
||||
|
||||
This program and the accompanying materials
|
||||
are licensed and made available under the terms and conditions of the BSD License
|
||||
|
@ -71,5 +72,22 @@
|
|||
|
||||
#endif // __GNUC__
|
||||
|
||||
#endif // __MACRO_IO_LIBV8_H__
|
||||
#define _ASM_FUNC(Name, Section) \
|
||||
.global Name ; \
|
||||
.section #Section, "ax" ; \
|
||||
.type Name, %function ; \
|
||||
Name:
|
||||
|
||||
#define ASM_FUNC(Name) _ASM_FUNC(ASM_PFX(Name), .text. ## Name)
|
||||
|
||||
#define MOV32(Reg, Val) \
|
||||
movz Reg, (Val) >> 16, lsl #16 ; \
|
||||
movk Reg, (Val) & 0xffff
|
||||
|
||||
#define MOV64(Reg, Val) \
|
||||
movz Reg, (Val) >> 48, lsl #48 ; \
|
||||
movk Reg, ((Val) >> 32) & 0xffff, lsl #32 ; \
|
||||
movk Reg, ((Val) >> 16) & 0xffff, lsl #16 ; \
|
||||
movk Reg, (Val) & 0xffff
|
||||
|
||||
#endif // __MACRO_IO_LIBV8_H__
|
||||
|
|
Loading…
Reference in New Issue