aboutsummaryrefslogtreecommitdiff
path: root/llvm/lib/Target/RISCV/Disassembler/RISCVDisassembler.cpp
diff options
context:
space:
mode:
authorAmilendra Kodithuwakku <Amilendra.Kodithuwakku@arm.com>2023-06-21 12:48:33 +0100
committerAmilendra Kodithuwakku <Amilendra.Kodithuwakku@arm.com>2023-06-21 14:47:34 +0100
commitc4fea3905617af89d1ad87319893e250f5b72dd6 (patch)
tree323c82e60a01a8bcb0ad8ffa4eaafeb8b688534e /llvm/lib/Target/RISCV/Disassembler/RISCVDisassembler.cpp
parentafc5cca0d4016f09f0d7e2683d5a920c7ecf9397 (diff)
downloadllvm-c4fea3905617af89d1ad87319893e250f5b72dd6.zip
llvm-c4fea3905617af89d1ad87319893e250f5b72dd6.tar.gz
llvm-c4fea3905617af89d1ad87319893e250f5b72dd6.tar.bz2
[LLD][ELF] Cortex-M Security Extensions (CMSE) Support
This commit provides linker support for Cortex-M Security Extensions (CMSE). The specification for this feature can be found in ARM v8-M Security Extensions: Requirements on Development Tools. The linker synthesizes a security gateway veneer in a special section; `.gnu.sgstubs`, when it finds non-local symbols `__acle_se_<entry>` and `<entry>`, defined relative to the same text section and having the same address. The address of `<entry>` is retargeted to the starting address of the linker-synthesized security gateway veneer in section `.gnu.sgstubs`. In summary, the linker translates input: ``` .text entry: __acle_se_entry: [entry_code] ``` into: ``` .section .gnu.sgstubs entry: SG B.W __acle_se_entry .text __acle_se_entry: [entry_code] ``` If addresses of `__acle_se_<entry>` and `<entry>` are not equal, the linker considers that `<entry>` already defines a secure gateway veneer so does not synthesize one. If `--out-implib=<out.lib>` is specified, the linker writes the list of secure gateway veneers into a CMSE import library `<out.lib>`. The CMSE import library will have 3 sections: `.symtab`, `.strtab`, `.shstrtab`. For every secure gateway veneer <entry> at address `<addr>`, `.symtab` contains a `SHN_ABS` symbol `<entry>` with value `<addr>`. If `--in-implib=<in.lib>` is specified, the linker reads the existing CMSE import library `<in.lib>` and preserves the entry function addresses in the resulting executable and new import library. Reviewed By: MaskRay, peter.smith Differential Revision: https://reviews.llvm.org/D139092
Diffstat (limited to 'llvm/lib/Target/RISCV/Disassembler/RISCVDisassembler.cpp')
0 files changed, 0 insertions, 0 deletions