[PATCH] ARM: Add support for thumb1 PCROP relocations.
mickael guene
mickael.guene@st.com
Mon Nov 23 08:43:00 GMT 2015
More information about the Binutils mailing list
Mon Nov 23 08:43:00 GMT 2015
- Previous message (by thread): update zlib to 1.2.8
- Next message (by thread): [PATCH] ARM: Add support for thumb1 PCROP relocations.
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
Hi all, This is a proposal for a patch that implements the new ARM relocations needed to support execute-only code segment for thumb1 code sequences. Some STM32 MCUs implement a security feature called 'Proprietary Code Read-Out Protection' aka PCROP that forbids data read access to some code areas (only fetch access is allowed). This protection prevents usage of literal pools (since one cannot load data from code sections), so compilers have to use specific code sequence to generate constants. This is particularly a problem to generate symbol addresses. For armv7-m architecture compilers can generate movt/movw pair instructions relying on R_ARM_THM_MOVW_ABS_NC and R_ARM_THM_MOVT_ABS relocations support. For armv6-m there is currently no possibility to generate such symbol addresses. This is why the ARM ABI defines four new relocations that allow symbol address generation in armv6-m architecture using a sequence of movs/adds/lsls instructions. This patch implements this feature in gas and bfd. Unit tests have be written to check correct implementation for both gas and bfd. No regressions have been observed for arm-linux-gnueabi, arm-linux-gnueabihf, arm-none-eabi, arm-none-nacl and armeb-linux-gnueabihf targets on 64 bits linux host. Changelogs: include/ChangeLog: 2015-11-17 Mickael Guene <mickael.guene@st.com> * elf/arm.h: Add new arm relocations. bfd/ChangeLog: 2015-11-17 Mickael Guene <mickael.guene@st.com> * bfd-in2.h: Regenerate. * reloc.c: Add new relocations. * libbfd.h (bfd_reloc_code_real_names): Add new relocations display names. * elf32-arm.c (elf32_arm_howto_table_1): Add HOWTO for new relocations. (elf32_arm_reloc_map): Add bfd/arm mapping for new relocations. (elf32_arm_final_link_relocate): Implement new relocations resolution. gas/ChangeLog: 2015-11-17 Mickael Guene <mickael.guene@st.com> * config/tc-arm.c (group_reloc_table): Add mapping between gas syntax and new relocations. (do_t_add_sub): Keep new relocations for add operand. (do_t_mov_cmp): Keep new relocations for mov operand. (insns): Use 'shifter operand with possible group relocation' operand parse code for movs operand. (md_apply_fix): Implement mov and add encoding when new relocations on them. (tc_gen_reloc): Add new relocations. (arm_fix_adjustable): Since offset has a limited range ([0:255]) we disable adjust_reloc_syms() for new relocations. gas/testsuite/ChangeLog: 2015-11-17 Mickael Guene <mickael.guene@st.com> * gas/arm/adds-thumb1-reloc-local.d: New * gas/arm/adds-thumb1-reloc-local.s: New * gas/arm/movs-thumb1-reloc-local.d: New * gas/arm/movs-thumb1-reloc-local.s: New ld/testsuite/ChangeLog: 2015-11-17 Mickael Guene <mickael.guene@st.com> * ld-arm/arm-elf.exp (armelftests_common): Add new relocations tests. * ld-arm/thumb1-adds.d: New * ld-arm/thumb1-adds.s: New * ld-arm/thumb1-movs.d: New * ld-arm/thumb1-movs.s: New -------------- next part -------------- A non-text attachment was scrubbed... Name: 0001-Add-support-for-thumb1-pcrop-relocations.patch Type: text/x-patch Size: 21819 bytes Desc: not available URL: <https://sourceware.org/pipermail/binutils/attachments/20151123/056574a5/attachment.bin>
- Previous message (by thread): update zlib to 1.2.8
- Next message (by thread): [PATCH] ARM: Add support for thumb1 PCROP relocations.
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
More information about the Binutils mailing list