aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlan Modra <amodra@gmail.com>2019-11-21 20:44:54 +1030
committerAlan Modra <amodra@gmail.com>2019-11-21 22:33:42 +1030
commite19511a60cda301feacdb6244375363b08dccf7d (patch)
tree6592c6c5986399f2495aceb95b043d2b80341fb3
parentf76d79580efea856298d9e5b9a91746be875f1b1 (diff)
downloadgdb-e19511a60cda301feacdb6244375363b08dccf7d.zip
gdb-e19511a60cda301feacdb6244375363b08dccf7d.tar.gz
gdb-e19511a60cda301feacdb6244375363b08dccf7d.tar.bz2
PR273, SOM size -A
The SOM backend creates BFD sections for "spaces", and "sub-spaces". "sub-spaces" are what we normally think of as a section, "spaces" aggregate "sub-spaces". Thus it does not really make sense to include "spaces" for size -A since that would double count total size. It so happens that real sections ought to have at least one of the ALLOC and HAS_CONTENTS flags set, so this patch excludes "spaces" but excluding BFD sections with no flags set. PR 273 * size.c (sysv_internal_sizer, sysv_internal_printer): Exclude sections with no flag bits set. * testsuite/binutils-all/size.exp: Allow $CODE$ as a text section.
-rw-r--r--binutils/ChangeLog7
-rw-r--r--binutils/size.c12
-rw-r--r--binutils/testsuite/binutils-all/size.exp2
3 files changed, 18 insertions, 3 deletions
diff --git a/binutils/ChangeLog b/binutils/ChangeLog
index 2d1a003..c4f7e3d 100644
--- a/binutils/ChangeLog
+++ b/binutils/ChangeLog
@@ -1,3 +1,10 @@
+2019-11-21 Alan Modra <amodra@gmail.com>
+
+ PR 273
+ * size.c (sysv_internal_sizer, sysv_internal_printer): Exclude
+ sections with no flag bits set.
+ * testsuite/binutils-all/size.exp: Allow $CODE$ as a text section.
+
2019-11-21 Nick Clifton <nickc@redhat.com>
* objcopy.c (merge_gnu_build_notes): Allow for the possibility
diff --git a/binutils/size.c b/binutils/size.c
index b147221..69da30c 100644
--- a/binutils/size.c
+++ b/binutils/size.c
@@ -557,12 +557,16 @@ static void
sysv_internal_sizer (bfd *file ATTRIBUTE_UNUSED, sec_ptr sec,
void *ignore ATTRIBUTE_UNUSED)
{
- bfd_size_type size = bfd_section_size (sec);
+ flagword flags = bfd_section_flags (sec);
+ /* Exclude sections with no flags set. This is to omit som spaces. */
+ if (flags == 0)
+ return;
if ( ! bfd_is_abs_section (sec)
&& ! bfd_is_com_section (sec)
&& ! bfd_is_und_section (sec))
{
+ bfd_size_type size = bfd_section_size (sec);
int namelen = strlen (bfd_section_name (sec));
if (namelen > svi_namelen)
@@ -589,12 +593,16 @@ static void
sysv_internal_printer (bfd *file ATTRIBUTE_UNUSED, sec_ptr sec,
void *ignore ATTRIBUTE_UNUSED)
{
- bfd_size_type size = bfd_section_size (sec);
+ flagword flags = bfd_section_flags (sec);
+ if (flags == 0)
+ return;
if ( ! bfd_is_abs_section (sec)
&& ! bfd_is_com_section (sec)
&& ! bfd_is_und_section (sec))
{
+ bfd_size_type size = bfd_section_size (sec);
+
svi_total += size;
sysv_one_line (bfd_section_name (sec),
diff --git a/binutils/testsuite/binutils-all/size.exp b/binutils/testsuite/binutils-all/size.exp
index a102e15..1c199ba 100644
--- a/binutils/testsuite/binutils-all/size.exp
+++ b/binutils/testsuite/binutils-all/size.exp
@@ -66,7 +66,7 @@ if {![binutils_assemble $srcdir/$subdir/bintest.s tmpdir/bintest.o]} then {
set got [binutils_run $SIZE "$SIZEFLAGS -A ${testfile}"]
- set want "${testfile}.*(text|TEXT|P)\[^\n\r\]*\[ \]($dec)\[ \]+$dec.*(\\.data|DATA|D_1)\[^\n\r\]*\[ \]($dec)\[ \]+$dec"
+ set want "${testfile}.*(text|TEXT|\\\$CODE\\\$|P)\[^\n\r\]*\[ \]($dec)\[ \]+$dec.*(\\.data|DATA|D_1)\[^\n\r\]*\[ \]($dec)\[ \]+$dec"
if ![regexp $want $got all textname textsize dataname datasize] then {
fail "size -A"