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;