This is the mail archive of the binutils@sourceware.org mailing list for the binutils project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

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" by
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.

diff --git a/binutils/size.c b/binutils/size.c
index b147221e91..69da30cade 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 a102e15c0d..1c199ba638 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"

-- 
Alan Modra
Australia Development Lab, IBM


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]