mirror of
https://github.com/espressif/binutils-gdb.git
synced 2025-06-20 18:08:24 +08:00
Add new directive to GAS: .attach_to_group.
* config/obj-elf (elf_pseudo_table): Add attach_to_group. (obj_elf_attach_to_group): New function. * doc/as.texi: Document the new directive. * NEWS: Mention the new feature. * testsuite/gas/elf/attach-1.s: New test. * testsuite/gas/elf/attach-1.d: New test driver. * testsuite/gas/elf/attach-2.s: New test. * testsuite/gas/elf/attach-2.d: New test driver. * testsuite/gas/elf/attach-err.s: New test. * testsuite/gas/elf/attach-err.d: New test driver. * testsuite/gas/elf/attach-err.err: New test error output. * testsuite/gas/elf/elf.exp: Run the new tests.
This commit is contained in:
@ -1,3 +1,18 @@
|
|||||||
|
2020-10-01 Nick Clifton <nickc@redhat.com>
|
||||||
|
|
||||||
|
* config/obj-elf (elf_pseudo_table): Add attach_to_group.
|
||||||
|
(obj_elf_attach_to_group): New function.
|
||||||
|
* doc/as.texi: Document the new directive.
|
||||||
|
* NEWS: Mention the new feature.
|
||||||
|
* testsuite/gas/elf/attach-1.s: New test.
|
||||||
|
* testsuite/gas/elf/attach-1.d: New test driver.
|
||||||
|
* testsuite/gas/elf/attach-2.s: New test.
|
||||||
|
* testsuite/gas/elf/attach-2.d: New test driver.
|
||||||
|
* testsuite/gas/elf/attach-err.s: New test.
|
||||||
|
* testsuite/gas/elf/attach-err.d: New test driver.
|
||||||
|
* testsuite/gas/elf/attach-err.err: New test error output.
|
||||||
|
* testsuite/gas/elf/elf.exp: Run the new tests.
|
||||||
|
|
||||||
2020-09-16 H.J. Lu <hongjiu.lu@intel.com>
|
2020-09-16 H.J. Lu <hongjiu.lu@intel.com>
|
||||||
|
|
||||||
PR gas/26685
|
PR gas/26685
|
||||||
|
@ -78,9 +78,11 @@ static void obj_elf_gnu_attribute (int);
|
|||||||
static void obj_elf_tls_common (int);
|
static void obj_elf_tls_common (int);
|
||||||
static void obj_elf_lcomm (int);
|
static void obj_elf_lcomm (int);
|
||||||
static void obj_elf_struct (int);
|
static void obj_elf_struct (int);
|
||||||
|
static void obj_elf_attach_to_group (int);
|
||||||
|
|
||||||
static const pseudo_typeS elf_pseudo_table[] =
|
static const pseudo_typeS elf_pseudo_table[] =
|
||||||
{
|
{
|
||||||
|
{"attach_to_group", obj_elf_attach_to_group, 0},
|
||||||
{"comm", obj_elf_common, 0},
|
{"comm", obj_elf_common, 0},
|
||||||
{"common", obj_elf_common, 1},
|
{"common", obj_elf_common, 1},
|
||||||
{"ident", obj_elf_ident, 0},
|
{"ident", obj_elf_ident, 0},
|
||||||
@ -1040,6 +1042,28 @@ obj_elf_section_name (void)
|
|||||||
return name;
|
return name;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
obj_elf_attach_to_group (int dummy ATTRIBUTE_UNUSED)
|
||||||
|
{
|
||||||
|
const char * gname = obj_elf_section_name ();
|
||||||
|
|
||||||
|
if (gname == NULL)
|
||||||
|
{
|
||||||
|
as_warn (_("group name not parseable"));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (elf_group_name (now_seg))
|
||||||
|
{
|
||||||
|
as_warn (_("section %s already has a group (%s)"),
|
||||||
|
bfd_section_name (now_seg), elf_group_name (now_seg));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
elf_group_name (now_seg) = xstrdup (gname);
|
||||||
|
elf_section_flags (now_seg) |= SHF_GROUP;
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
obj_elf_section (int push)
|
obj_elf_section (int push)
|
||||||
{
|
{
|
||||||
|
@ -4362,6 +4362,7 @@ Some machine configurations provide additional directives.
|
|||||||
* Altmacro:: @code{.altmacro}
|
* Altmacro:: @code{.altmacro}
|
||||||
* Ascii:: @code{.ascii "@var{string}"}@dots{}
|
* Ascii:: @code{.ascii "@var{string}"}@dots{}
|
||||||
* Asciz:: @code{.asciz "@var{string}"}@dots{}
|
* Asciz:: @code{.asciz "@var{string}"}@dots{}
|
||||||
|
* Attach_to_group:: @code{.attach_to_group @var{name}}
|
||||||
* Balign:: @code{.balign [@var{abs-expr}[, @var{abs-expr}]]}
|
* Balign:: @code{.balign [@var{abs-expr}[, @var{abs-expr}]]}
|
||||||
* Bundle directives:: @code{.bundle_align_mode @var{abs-expr}}, etc
|
* Bundle directives:: @code{.bundle_align_mode @var{abs-expr}}, etc
|
||||||
* Byte:: @code{.byte @var{expressions}}
|
* Byte:: @code{.byte @var{expressions}}
|
||||||
@ -4663,6 +4664,13 @@ trailing zero byte) into consecutive addresses.
|
|||||||
@code{.asciz} is just like @code{.ascii}, but each string is followed by
|
@code{.asciz} is just like @code{.ascii}, but each string is followed by
|
||||||
a zero byte. The ``z'' in @samp{.asciz} stands for ``zero''.
|
a zero byte. The ``z'' in @samp{.asciz} stands for ``zero''.
|
||||||
|
|
||||||
|
@node Attach_to_group
|
||||||
|
@section @code{.attach_to_group @var{name}}
|
||||||
|
Attaches the current section to the named group. This is like declaring
|
||||||
|
the section with the @code{G} attribute, but can be done after the section
|
||||||
|
has been created. Note if the group section does not exist at the point that
|
||||||
|
this directive is used then it will be created.
|
||||||
|
|
||||||
@node Balign
|
@node Balign
|
||||||
@section @code{.balign[wl] [@var{abs-expr}[, @var{abs-expr}[, @var{abs-expr}]]]}
|
@section @code{.balign[wl] [@var{abs-expr}[, @var{abs-expr}[, @var{abs-expr}]]]}
|
||||||
|
|
||||||
@ -6663,7 +6671,9 @@ a few exceptions to this rule however. Processor and application specific
|
|||||||
flags can be added to an already defined section. The @code{.interp},
|
flags can be added to an already defined section. The @code{.interp},
|
||||||
@code{.strtab} and @code{.symtab} sections can have the allocate flag
|
@code{.strtab} and @code{.symtab} sections can have the allocate flag
|
||||||
(@code{a}) set after they are initially defined, and the @code{.note-GNU-stack}
|
(@code{a}) set after they are initially defined, and the @code{.note-GNU-stack}
|
||||||
section may have the executable (@code{x}) flag added.
|
section may have the executable (@code{x}) flag added. Also note that the
|
||||||
|
@code{.attach_to_group} directive can be used to add a section to a group even
|
||||||
|
if the section was not originally declared to be part of that group.
|
||||||
|
|
||||||
The optional @var{type} argument may contain one of the following constants:
|
The optional @var{type} argument may contain one of the following constants:
|
||||||
|
|
||||||
|
11
gas/testsuite/gas/elf/attach-1.d
Normal file
11
gas/testsuite/gas/elf/attach-1.d
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
#readelf: --section-groups
|
||||||
|
#name: Attaching a section to a group
|
||||||
|
#source: attach-1.s
|
||||||
|
|
||||||
|
#...
|
||||||
|
group section \[ 1\] `\.group' \[foo\.group\] contains . sections:
|
||||||
|
\[Index\] Name
|
||||||
|
\[ .\] .*
|
||||||
|
\[ .\] foo
|
||||||
|
#pass
|
||||||
|
|
11
gas/testsuite/gas/elf/attach-1.s
Normal file
11
gas/testsuite/gas/elf/attach-1.s
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
.text
|
||||||
|
.nop
|
||||||
|
|
||||||
|
.section foo, "G", %progbits , foo.group
|
||||||
|
.word 0
|
||||||
|
|
||||||
|
.text
|
||||||
|
/* This is the intended use of the .attach_to_group directive.
|
||||||
|
It attaches a previously defined section (.text) to a
|
||||||
|
previously defined group (foo.group). */
|
||||||
|
.attach_to_group foo.group
|
11
gas/testsuite/gas/elf/attach-2.d
Normal file
11
gas/testsuite/gas/elf/attach-2.d
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
#readelf: --section-groups
|
||||||
|
#name: Attaching a section to a non-existant group
|
||||||
|
#source: attach-2.s
|
||||||
|
|
||||||
|
#...
|
||||||
|
group section \[ 1\] `\.group' \[foo\.group\] contains 2 sections:
|
||||||
|
\[Index\] Name
|
||||||
|
\[ .\] bar
|
||||||
|
\[ .\] foo
|
||||||
|
#pass
|
||||||
|
|
9
gas/testsuite/gas/elf/attach-2.s
Normal file
9
gas/testsuite/gas/elf/attach-2.s
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
.section bar
|
||||||
|
.nop
|
||||||
|
.attach_to_group foo.group
|
||||||
|
|
||||||
|
.section foo, "G", %note , foo.group
|
||||||
|
.word 0
|
||||||
|
|
||||||
|
.section bar
|
||||||
|
.nop
|
3
gas/testsuite/gas/elf/attach-err.d
Normal file
3
gas/testsuite/gas/elf/attach-err.d
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
#name: Errors generated by .attach_to_group
|
||||||
|
#source: attach-err.s
|
||||||
|
#error_output: attach-err.err
|
4
gas/testsuite/gas/elf/attach-err.err
Normal file
4
gas/testsuite/gas/elf/attach-err.err
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
.*: Assembler messages:
|
||||||
|
.*:4: Warning: section .* already has a group \(does\.not\.exist\)
|
||||||
|
.*:5: Error: missing name
|
||||||
|
.*:5: Warning: group name not parseable
|
5
gas/testsuite/gas/elf/attach-err.s
Normal file
5
gas/testsuite/gas/elf/attach-err.s
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
|
||||||
|
/* Test the error messages that should be generated. */
|
||||||
|
.attach_to_group does.not.exist /* This is OK, the group does not have to exist. */
|
||||||
|
.attach_to_group foo.group /* Already attached. */
|
||||||
|
.attach_to_group /* Missing group name. */
|
@ -139,6 +139,10 @@ if { [is_elf_format] } then {
|
|||||||
run_dump_test "group1b"
|
run_dump_test "group1b"
|
||||||
run_dump_test "group2"
|
run_dump_test "group2"
|
||||||
run_dump_test "group3"
|
run_dump_test "group3"
|
||||||
|
|
||||||
|
run_dump_test "attach-1"
|
||||||
|
run_dump_test "attach-err"
|
||||||
|
|
||||||
switch -glob $target_triplet {
|
switch -glob $target_triplet {
|
||||||
hppa64*-*-hpux* { }
|
hppa64*-*-hpux* { }
|
||||||
riscv*-*-* { }
|
riscv*-*-* { }
|
||||||
|
Reference in New Issue
Block a user