Print this page
4009 size(1) can't find sections in relocatable objects with extended sections
        
*** 66,103 ****
  
  void
  process(Elf * elf)
  {
          /* EXTERNAL VARIABLES USED */
!         extern int      fflag, /* full format for sections */
!                         Fflag, /* full format for segments */
!                         nflag; /* include non-loadable segments or sections */
          extern int      numbase; /* hex, octal, or decimal */
          extern char     *fname;
          extern char     *archive;
          extern int      is_archive;
          extern int      oneflag;
  
          /* LOCAL VARIABLES */
!         GElf_Xword      size, /* total size in non-default case for sections */
                          /*
                           * size of first, second, third number and total size
                           * in default case for sections.
                           */
!                         first,
!                         second,
!                         third,
!                         totsize;
          GElf_Ehdr       ehdr;
          GElf_Shdr       shdr;
          Elf_Scn         *scn;
!         unsigned        ndx = 0;
          int             numsect = 0;
          int             notfirst = 0;
          int             i;
          char            *name = 0;
  
  /*
   * If there is a program header and the -f flag requesting section infor-
   * mation is not set, then process segments with the process_phdr function.
   * Otherwise, process sections.  For the default case, the first number
   * shall be the size of all sections that are allocatable, nonwritable and
--- 66,104 ----
  
  void
  process(Elf * elf)
  {
          /* EXTERNAL VARIABLES USED */
!         extern int      fflag; /* full format for sections */
!         extern int      Fflag; /* full format for segments */
!         extern int      nflag; /* include non-loadable segments or sections */
          extern int      numbase; /* hex, octal, or decimal */
          extern char     *fname;
          extern char     *archive;
          extern int      is_archive;
          extern int      oneflag;
  
          /* LOCAL VARIABLES */
!         GElf_Xword      size; /* total size in non-default case for sections */
          /*
           * size of first, second, third number and total size
           * in default case for sections.
           */
!         GElf_Xword      first;
!         GElf_Xword      second;
!         GElf_Xword      third;
!         GElf_Xword      totsize;
          GElf_Ehdr       ehdr;
          GElf_Shdr       shdr;
          Elf_Scn         *scn;
!         size_t          ndx = 0, shnum = 0;
          int             numsect = 0;
          int             notfirst = 0;
          int             i;
          char            *name = 0;
  
+ 
  /*
   * If there is a program header and the -f flag requesting section infor-
   * mation is not set, then process segments with the process_phdr function.
   * Otherwise, process sections.  For the default case, the first number
   * shall be the size of all sections that are allocatable, nonwritable and
*** 122,139 ****
          if (is_archive) {
                  (void) printf("%s[%s]: ", archive, fname);
          } else if (!oneflag && !is_archive) {
                  (void) printf("%s: ", fname);
          }
!         ndx = ehdr.e_shstrndx;
          scn = 0;
          size = 0;
          first = second = third = totsize = 0;
!         if (ehdr.e_shnum == 0) {
                  error(fname, "no section data");
!         }
!         numsect = ehdr.e_shnum;
          for (i = 0; i < numsect; i++) {
                  if ((scn = elf_nextscn(elf, scn)) == 0) {
                          break;
                  }
                  if (gelf_getshdr(scn, &shdr) == 0) {
--- 123,145 ----
          if (is_archive) {
                  (void) printf("%s[%s]: ", archive, fname);
          } else if (!oneflag && !is_archive) {
                  (void) printf("%s: ", fname);
          }
!         if (elf_getshdrstrndx(elf, &ndx) == -1)
!                 error(fname, "no string table");
          scn = 0;
          size = 0;
          first = second = third = totsize = 0;
! 
!         if (elf_getshdrnum(elf, &shnum) == -1)
!                 error(fname, "can't get number of sections");
! 
!         if (shnum == 0)
                  error(fname, "no section data");
! 
!         numsect = shnum;
          for (i = 0; i < numsect; i++) {
                  if ((scn = elf_nextscn(elf, scn)) == 0) {
                          break;
                  }
                  if (gelf_getshdr(scn, &shdr) == 0) {
*** 213,228 ****
  process_phdr(Elf * elf, GElf_Half num)
  {
          int             i;
          int             notfirst = 0;
          GElf_Phdr       p;
!         GElf_Xword      memsize,
!                         total,
!                         First,
!                         Second,
!                         Third,
!                         Totsize;
                  extern int Fflag;
                  extern int nflag;
                  extern int numbase;
                  extern char *fname;
                  extern char *archive;
--- 219,234 ----
  process_phdr(Elf * elf, GElf_Half num)
  {
          int             i;
          int             notfirst = 0;
          GElf_Phdr       p;
!         GElf_Xword      memsize;
!         GElf_Xword      total;
!         GElf_Xword      First;
!         GElf_Xword      Second;
!         GElf_Xword      Third;
!         GElf_Xword      Totsize;
          extern int Fflag;
          extern int nflag;
          extern int numbase;
          extern char *fname;
          extern char *archive;