problems elfutils-0.122 on RHEL4

William Cohen wcohen@redhat.com
Wed Jul 26 15:53:00 GMT 2006


William Cohen wrote:
> Has any one attempting to build the systemtap snapshot on RHEL4? The 
> snapshot requires elfutils-0.122 sources.
> 
> On the RHEL4 em64t machine elfutils fails with the following error:
> 
> if gcc -D_GNU_SOURCE -DHAVE_CONFIG_H 
> -DSRCDIR=\"/home/wcohen/rh-rpms/BUILD/elfutils-0.122/src\" 
> -DOBJDIR=\"/home/wcohen/stap_testing_200607260830/obj/build-elfutils/src\" 
> -I. -I/home/wcohen/rh-rpms/BUILD/elfutils-0.122/src -I.. 
> -I/home/wcohen/rh-rpms/BUILD/elfutils-0.122/src 
> -I/home/wcohen/rh-rpms/BUILD/elfutils-0.122/src/../libelf 
> -I/home/wcohen/rh-rpms/BUILD/elfutils-0.122/src/../libebl 
> -I/home/wcohen/rh-rpms/BUILD/elfutils-0.122/src/../libdw 
> -I/home/wcohen/rh-rpms/BUILD/elfutils-0.122/src/../libdwfl 
> -I/home/wcohen/rh-rpms/BUILD/elfutils-0.122/src/../lib -I..   -Wall 
> -Wshadow -std=gnu99  -Werror -Wunused -Wextra -Wformat=2 -g -O2 -MT 
> elflint.o -MD -MP -MF ".deps/elflint.Tpo" -c -o elflint.o 
> /home/wcohen/rh-rpms/BUILD/elfutils-0.122/src/elflint.c; \
> then mv -f ".deps/elflint.Tpo" ".deps/elflint.Po"; else rm -f 
> ".deps/elflint.Tpo"; exit 1; fi
> /home/wcohen/rh-rpms/BUILD/elfutils-0.122/src/elflint.c: In function 
> `check_versym':
> /home/wcohen/rh-rpms/BUILD/elfutils-0.122/src/elflint.c:2532: warning: 
> comparison between signed and unsigned
> make[3]: *** [elflint.o] Error 1
> make[3]: Leaving directory 
> `/home/wcohen/stap_testing_200607260830/obj/build-elfutils/src'

Did some investigation. The offending statement at src/elflint.c:2532:

	    if (runp->ndx == (*versym & 0x7fff))

Look at runp structure

static struct version_namelist
{
   const char *objname;
   const char *name;
   GElf_Word ndx;
   enum { ver_def, ver_need } type;
   struct version_namelist *next;
} *version_namelist;

Tracing back GElf_Word type:
./libelf/gelf.h:typedef Elf64_Word GElf_Word;
typedef uint32_t Elf64_Word;

Tracing back type of *versym:

GElf_Versym *versym = gelf_getversym (data, cnt, &versym_mem);
typedef Elf64_Versym GElf_Versym;
typedef Elf64_Half Elf64_Versym;
typedef uint16_t Elf64_Half;

This is wierd aren't they both uint?
Put in work-around cast:

	    if (runp->ndx == (GElf_Word)(*versym & 0x7fff))

> On the RHEL4 i686 machine elfutils build fails with the following error:

The error on the RHEL4 i686 machine was due to a corruption of the 
elfutil's source file. With the source file corruption fixed the i686 
machine had the same error message on src/elflint.c:2532 as the x86-64 one.

-Will



More information about the Systemtap mailing list