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:
Mickael Guene 2016-01-20 12:53:50 +00:00 committed by Nick Clifton
parent be56871ee8
commit 91f68a68f9
18 changed files with 163 additions and 18 deletions

View file

@ -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.

View file

@ -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

View file

@ -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.

View file

@ -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.

View file

@ -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_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)
{

View file

@ -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\

View file

@ -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

View file

@ -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
{

View file

@ -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)

View file

@ -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);

View file

@ -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

View 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

View 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

View file

@ -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

View file

@ -1,5 +1,5 @@
.text
.section .text.noread
.section .text.fetchonly,"axy",%progbits
.arch armv6s-m
.syntax unified
.global _start

View file

@ -1,5 +1,5 @@
.text
.section .text.noread
.section .text.noread,"axy",%progbits
.arch armv6s-m
.syntax unified
.global _start

View file

@ -1,5 +1,5 @@
.text
.section .text.noread
.section .text.fetchonly,"axy",%progbits
.arch armv6s-m
.syntax unified
.global _start

View file

@ -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