Add support for an ARM specific 'y' section attribute flag to mark the section as NOREAD.
bfd/ChangeLog: * elf32-arm.c ((elf32_arm_special_sections): Remove catch of noread section using '.text.noread' pattern. gas/ChangeLog: * config/obj-elf.c (obj_elf_change_section) : Allow arm section with SHF_ARM_NOREAD section flag. * config/tc-arm.h (md_elf_section_letter) : Implement this hook to handle letter 'y'. (arm_elf_section_letter) : Declare it. * config/tc-arm.c (arm_elf_section_letter): Handle letter 'y' to set SHF_ARM_NOREAD section flag. * doc/c-arm.texi (ARM section attribute 'y'): Document it. gas/testsuite/ChangeLog: * gas/arm/section-execute-only.s: New test case. * gas/arm/section-execute-only.d: Expected output. ld/testsuite/ChangeLog: * ld-arm/thumb1-noread-not-present-mixing-two-section.s: Add 'y' attribute usage. * ld-arm/thumb1-noread-present-one-section.s: Likewise. * ld-arm/thumb1-noread-present-two-section.s: Likewise. * ld-arm/thumb1-input-section-flag-match.s: Likewise. binutils/ChangeLog: * readelf.c (get_elf_section_flags): Display y letter for section with SHF_ARM_NOREAD section flag in readelf section output. (process_section_headers): Add y letter in readelf section output key mapping for ARM architecture.
This commit is contained in:
parent
be56871ee8
commit
91f68a68f9
18 changed files with 163 additions and 18 deletions
|
@ -1,3 +1,8 @@
|
|||
2016-01-20 Mickael Guene <mickael.guene@st.com>
|
||||
|
||||
* elf32-arm.c (elf32_arm_special_sections): Remove catch of noread
|
||||
section using '.text.noread' pattern.
|
||||
|
||||
2016-01-19 John Baldwin <jhb@FreeBSD.org>
|
||||
|
||||
* elf.c (elfcore_grok_note): Recognize NT_FREEBSD_THRMISC notes.
|
||||
|
|
|
@ -17839,16 +17839,6 @@ elf32_arm_get_synthetic_symtab (bfd *abfd,
|
|||
return n;
|
||||
}
|
||||
|
||||
static const struct bfd_elf_special_section
|
||||
elf32_arm_special_sections[] =
|
||||
{
|
||||
/* Catch sections with .text.noread prefix and apply allocate, execute and
|
||||
noread section attributes. */
|
||||
{ STRING_COMMA_LEN (".text.noread"), -2, SHT_PROGBITS,
|
||||
SHF_ALLOC + SHF_EXECINSTR + SHF_ARM_NOREAD },
|
||||
{ NULL, 0, 0, 0, 0 }
|
||||
};
|
||||
|
||||
static bfd_boolean
|
||||
elf32_arm_section_flags (flagword *flags, const Elf_Internal_Shdr * hdr)
|
||||
{
|
||||
|
@ -17953,8 +17943,6 @@ elf32_arm_count_additional_relocs (asection *sec)
|
|||
#define elf_backend_obj_attrs_order elf32_arm_obj_attrs_order
|
||||
#define elf_backend_obj_attrs_handle_unknown elf32_arm_obj_attrs_handle_unknown
|
||||
|
||||
#undef elf_backend_special_sections
|
||||
#define elf_backend_special_sections elf32_arm_special_sections
|
||||
#undef elf_backend_section_flags
|
||||
#define elf_backend_section_flags elf32_arm_section_flags
|
||||
#undef elf_backend_lookup_section_flags_hook
|
||||
|
|
|
@ -1,3 +1,14 @@
|
|||
2016-01-20 Mickael Guene <mickael.guene@st.com>
|
||||
|
||||
* readelf.c (get_elf_section_flags): Display y letter for section
|
||||
with SHF_ARM_NOREAD section flag in readelf section output.
|
||||
(process_section_headers): Add y letter in readelf section output
|
||||
key mapping for ARM architecture.
|
||||
* objdump.c (dump_section_header): Display NOREAD attributes as
|
||||
well.
|
||||
* doc/binutils.texi (objdump): Note that it is correct for
|
||||
sections to have both the READONLY and NOREAD attributes.
|
||||
|
||||
2016-01-19 John Baldwin <jhb@FreeBSD.org>
|
||||
|
||||
* readelf.c (get_freebsd_elfcore_note_type): Remove unused variable.
|
||||
|
|
|
@ -2125,6 +2125,11 @@ although @command{ld} relocates the sections correctly, using @samp{objdump
|
|||
Instead, it shows the usual addresses, which are implicit for the
|
||||
target.
|
||||
|
||||
Note, in some cases it is possible for a section to have both the
|
||||
READONLY and the NOREAD attributes set. In such cases the NOREAD
|
||||
attribute takes precedence, but @command{objdump} will report both
|
||||
since the exact setting of the flag bits might be important.
|
||||
|
||||
@item -H
|
||||
@itemx --help
|
||||
Print a summary of the options to @command{objdump} and exit.
|
||||
|
|
|
@ -488,9 +488,23 @@ dump_section_header (bfd *abfd, asection *section,
|
|||
}
|
||||
PF (SEC_SMALL_DATA, "SMALL_DATA");
|
||||
if (bfd_get_flavour (abfd) == bfd_target_coff_flavour)
|
||||
{
|
||||
PF (SEC_COFF_SHARED, "SHARED");
|
||||
PF (SEC_COFF_NOREAD, "NOREAD");
|
||||
}
|
||||
else if (bfd_get_flavour (abfd) == bfd_target_elf_flavour)
|
||||
{
|
||||
/* Note - sections can have both the READONLY and NOREAD attributes
|
||||
set. In this case the NOREAD takes precedence, but we report both
|
||||
since the user may need to know that both bits are set. */
|
||||
PF (SEC_ELF_NOREAD, "NOREAD");
|
||||
}
|
||||
PF (SEC_THREAD_LOCAL, "THREAD_LOCAL");
|
||||
PF (SEC_GROUP, "GROUP");
|
||||
if (bfd_get_arch (abfd) == bfd_arch_mep)
|
||||
{
|
||||
PF (SEC_MEP_VLIW, "VLIW");
|
||||
}
|
||||
|
||||
if ((section->flags & SEC_LINK_ONCE) != 0)
|
||||
{
|
||||
|
|
|
@ -5430,6 +5430,9 @@ get_elf_section_flags (bfd_vma sh_flags)
|
|||
|| elf_header.e_machine == EM_K1OM)
|
||||
&& flag == SHF_X86_64_LARGE)
|
||||
*p = 'l';
|
||||
else if (elf_header.e_machine == EM_ARM
|
||||
&& flag == SHF_ARM_NOREAD)
|
||||
*p = 'y';
|
||||
else if (flag & SHF_MASKOS)
|
||||
{
|
||||
*p = 'o';
|
||||
|
@ -6006,6 +6009,11 @@ process_section_headers (FILE * file)
|
|||
printf (_("Key to Flags:\n\
|
||||
W (write), A (alloc), X (execute), M (merge), S (strings), l (large)\n\
|
||||
I (info), L (link order), G (group), T (TLS), E (exclude), x (unknown)\n\
|
||||
O (extra OS processing required) o (OS specific), p (processor specific)\n"));
|
||||
else if (elf_header.e_machine == EM_ARM)
|
||||
printf (_("Key to Flags:\n\
|
||||
W (write), A (alloc), X (execute), M (merge), S (strings), y (noread)\n\
|
||||
I (info), L (link order), G (group), T (TLS), E (exclude), x (unknown)\n\
|
||||
O (extra OS processing required) o (OS specific), p (processor specific)\n"));
|
||||
else
|
||||
printf (_("Key to Flags:\n\
|
||||
|
|
|
@ -1,3 +1,18 @@
|
|||
2016-01-20 Mickael Guene <mickael.guene@st.com>
|
||||
Terry Guo <terry.guo@arm.com>
|
||||
|
||||
* config/obj-elf.c (obj_elf_change_section) : Allow arm section with
|
||||
SHF_ARM_NOREAD section flag.
|
||||
* config/tc-arm.h (md_elf_section_letter) : Implement this hook to
|
||||
handle letter 'y'.
|
||||
(arm_elf_section_letter) : Declare it.
|
||||
* config/tc-arm.c (arm_elf_section_letter): Handle letter 'y' to set
|
||||
SHF_ARM_NOREAD section flag.
|
||||
* doc/c-arm.texi (ARM section attribute): Document the 'y' attribute.
|
||||
|
||||
* testsuite/gas/arm/section-execute-only.s: New test case.
|
||||
* testsuite/gas/arm/section-execute-only.d: Expected output.
|
||||
|
||||
2016-01-18 Maciej W. Rozycki <macro@imgtec.com>
|
||||
|
||||
* config/tc-mips.c (micromips_insn_length): Remove the mention
|
||||
|
|
|
@ -64,6 +64,10 @@
|
|||
#include "elf/nios2.h"
|
||||
#endif
|
||||
|
||||
#ifdef TC_ARM
|
||||
#include "elf/arm.h"
|
||||
#endif
|
||||
|
||||
static void obj_elf_line (int);
|
||||
static void obj_elf_size (int);
|
||||
static void obj_elf_type (int);
|
||||
|
@ -673,6 +677,11 @@ obj_elf_change_section (const char *name,
|
|||
|| ssect->type == SHT_PREINIT_ARRAY))
|
||||
/* RX init/fini arrays can and should have the "awx" attributes set. */
|
||||
;
|
||||
#endif
|
||||
#ifdef TC_ARM
|
||||
else if (attr == (SHF_EXECINSTR | SHF_ARM_NOREAD | SHF_ALLOC))
|
||||
/* ARM can have code section with SHF_ARM_NOREAD attribute. */
|
||||
;
|
||||
#endif
|
||||
else
|
||||
{
|
||||
|
|
|
@ -24091,6 +24091,15 @@ arm_fix_adjustable (fixS * fixP)
|
|||
#endif /* defined (OBJ_ELF) || defined (OBJ_COFF) */
|
||||
|
||||
#ifdef OBJ_ELF
|
||||
bfd_vma
|
||||
arm_elf_section_letter (int letter, char **ptrmsg)
|
||||
{
|
||||
if (letter == 'y')
|
||||
return SHF_ARM_NOREAD;
|
||||
|
||||
*ptrmsg = _("unrecognized .section attribute: want a,e,w,x,y,M,S,G,T");
|
||||
return -1;
|
||||
}
|
||||
|
||||
const char *
|
||||
elf32_arm_target_format (void)
|
||||
|
|
|
@ -114,6 +114,9 @@ extern bfd_boolean tc_start_label_without_colon (void);
|
|||
#define tc_frob_fake_label(S) arm_frob_label (S)
|
||||
|
||||
#ifdef OBJ_ELF
|
||||
#define md_elf_section_letter arm_elf_section_letter
|
||||
extern bfd_vma arm_elf_section_letter (int, char **);
|
||||
|
||||
#define md_end arm_md_end
|
||||
extern void arm_md_end (void);
|
||||
bfd_boolean arm_is_eabi (void);
|
||||
|
|
|
@ -23,6 +23,7 @@
|
|||
* ARM Opcodes:: Opcodes
|
||||
* ARM Mapping Symbols:: Mapping Symbols
|
||||
* ARM Unwinding Tutorial:: Unwinding
|
||||
* ARM Section Attribute:: Section Attribute
|
||||
@end menu
|
||||
|
||||
@node ARM Options
|
||||
|
@ -1237,3 +1238,15 @@ code that calls functions which may throw exceptions. If you need to
|
|||
know more about the object-file format used to represent unwind
|
||||
information, you may consult the @cite{Exception Handling ABI for the
|
||||
ARM Architecture} available from @uref{http://infocenter.arm.com}.
|
||||
|
||||
@node ARM Section Attribute
|
||||
@section Section Attribute
|
||||
|
||||
@cindex ARM section attribute
|
||||
@table @code
|
||||
@item y
|
||||
This letter specifies a text section with NOREAD attribute for
|
||||
hardware that supports execute-only memory region. If not supported
|
||||
by hardware a section with this attribute will be treated as normal
|
||||
text section.
|
||||
@end table
|
||||
|
|
27
gas/testsuite/gas/arm/section-execute-only.d
Normal file
27
gas/testsuite/gas/arm/section-execute-only.d
Normal file
|
@ -0,0 +1,27 @@
|
|||
# name: test executable-only section attribute
|
||||
# as:
|
||||
# readelf: -t
|
||||
# This test is only valid on EABI based ports.
|
||||
# target: *-*-*eabi* *-*-nacl*
|
||||
There are 10 section headers, starting at offset 0x16c:
|
||||
|
||||
Section Headers:
|
||||
\[Nr\] Name
|
||||
Type Addr Off Size ES Lk Inf Al
|
||||
Flags
|
||||
\[ 0\]
|
||||
NULL 00000000 000000 000000 00 0 0 0
|
||||
\[00000000\]:
|
||||
\[ 1\] .text
|
||||
PROGBITS 00000000 000034 000000 00 0 0 2
|
||||
\[00000006\]: ALLOC, EXEC
|
||||
\[ 2\] .data
|
||||
PROGBITS 00000000 000034 000000 00 0 0 1
|
||||
\[00000003\]: WRITE, ALLOC
|
||||
\[ 3\] .bss
|
||||
NOBITS 00000000 000034 000000 00 0 0 1
|
||||
\[00000003\]: WRITE, ALLOC
|
||||
\[ 4\] .text.foo
|
||||
PROGBITS 00000000 000034 000010 00 0 0 4
|
||||
\[20000006\]: ALLOC, EXEC, ARM_NOREAD
|
||||
#pass
|
30
gas/testsuite/gas/arm/section-execute-only.s
Normal file
30
gas/testsuite/gas/arm/section-execute-only.s
Normal file
|
@ -0,0 +1,30 @@
|
|||
.syntax unified
|
||||
.cpu cortex-m3
|
||||
.fpu softvfp
|
||||
.eabi_attribute 20, 1
|
||||
.eabi_attribute 21, 1
|
||||
.eabi_attribute 23, 3
|
||||
.eabi_attribute 24, 1
|
||||
.eabi_attribute 25, 1
|
||||
.eabi_attribute 26, 1
|
||||
.eabi_attribute 30, 2
|
||||
.eabi_attribute 34, 1
|
||||
.eabi_attribute 18, 4
|
||||
.thumb
|
||||
.section .text.foo,"axy",%progbits
|
||||
.align 2
|
||||
.global foo
|
||||
.thumb
|
||||
.thumb_func
|
||||
.type foo, %function
|
||||
foo:
|
||||
@ args = 0, pretend = 0, frame = 0
|
||||
@ frame_needed = 0, uses_anonymous_args = 0
|
||||
@ link register save eliminated.
|
||||
movs r0, #1
|
||||
movs r1, #1
|
||||
movw r2, #257
|
||||
movs r3, #1
|
||||
b madd
|
||||
.size foo, .-foo
|
||||
|
|
@ -1,3 +1,11 @@
|
|||
2016-01-20 Mickael Guene <mickael.guene@st.com>
|
||||
|
||||
* testsuite/ld-arm/thumb1-noread-not-present-mixing-two-section.s:
|
||||
Add 'y' attribute usage.
|
||||
* testsuite/ld-arm/thumb1-noread-present-one-section.s: Likewise.
|
||||
* testsuite/ld-arm/thumb1-noread-present-two-section.s: Likewise.
|
||||
* testsuite/ld-arm/thumb1-input-section-flag-match.s: Likewise.
|
||||
|
||||
2016-01-19 Nick Clifton <nickc@redhat.com>
|
||||
|
||||
* testsuite/ld-elf/pr18735.d: Allow for extra symbols between
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
.text
|
||||
.section .text.noread
|
||||
.section .text.fetchonly,"axy",%progbits
|
||||
.arch armv6s-m
|
||||
.syntax unified
|
||||
.global _start
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
.text
|
||||
.section .text.noread
|
||||
.section .text.noread,"axy",%progbits
|
||||
.arch armv6s-m
|
||||
.syntax unified
|
||||
.global _start
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
.text
|
||||
.section .text.noread
|
||||
.section .text.fetchonly,"axy",%progbits
|
||||
.arch armv6s-m
|
||||
.syntax unified
|
||||
.global _start
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
.text
|
||||
.section .text.noread.first
|
||||
.section .text.fetchonly.first,"axy",%progbits
|
||||
.arch armv6s-m
|
||||
.syntax unified
|
||||
.global _start
|
||||
|
@ -9,7 +9,7 @@ _start:
|
|||
bx lr
|
||||
|
||||
.text
|
||||
.section .text.noread.second
|
||||
.section .text.fetchonly.second,"axy",%progbits
|
||||
.arch armv6s-m
|
||||
.syntax unified
|
||||
.global foo
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue