Build Error
Sandeep Soni
soni.sandeepb@gmail.com
Tue May 11 06:24:00 GMT 2010
On Mon, May 10, 2010 at 4:12 PM, mike <mikereape@onetel.com> wrote:
> On 05/10/2010 11:15 AM, Sandeep Soni wrote:
>>
>> On Mon, May 10, 2010 at 3:33 PM, Sandeep Soni<soni.sandeepb@gmail.com>
>> wrote:
>>
>>>
>>> Hi,
>>>
>>> I tried to build GCC again from the svn repository but make gave me an
>>> error in the end that said,
>>>
>>> ../../trunk/gcc/lto/lto-elf.c: In function 'validate_file' :
>>> ../../trunk/gcc/lto/lto-elf.c:539:3:error: implicit declaration of
>>> function 'elf_getshdrstrndx' [-Werror=implicit-function-declaration]
>>>
>>> cc1:all warnings being treated as errors
>>> make[3]:*** [lto/lto-elf.o] Error 1
>>> Leaving directory '/home/sandy/Development/build/gcc'
>>>
>>> make[3]:*** [all-stage2-gcc] Error 2
>>> Leaving directory '/home/sandy/Development/build'
>>>
>>> make[1]:*** [stage2-bubble] Error 2
>>> Leaving directory '/home/sandy/Development/build'
>>>
>>> make:*** [all] Error 2
>>>
>>> Hi, I'm having similar problems.
>>>
>
> Hi, I'm having similar problems.
>
> I get a similar result. The output I get is:
>
>> lto/lto-elf.o: In function `lto_elf_file_open':
>> lto-elf.c:(.text+0xcb5): undefined reference to `elf_getshdrstrndx'
>> collect2: ld returned 1 exit status
>> make[3]: *** [lto1] Error 1
>> make[3]: Leaving directory `/home/mike/gcc-obj-dir/gcc'
>> make[2]: *** [all-stage2-gcc] Error 2
>> make[2]: Leaving directory `/home/mike/gcc-obj-dir'
>> make[1]: *** [stage2-bubble] Error 2
>> make[1]: Leaving directory `/home/mike/gcc-obj-dir'
>> make: *** [all] Error 2
>
> Just to get the question of config.log out of the way here are the only two
> errors I get. Note that the result of the first is "buggy but acceptable"
> and that the second has to do with 'ac_nonexistent.h'. I still have no idea
> what that is supposed to be.
>
> First:
>>
>> configure:5841: checking for version 0.10 of PPL
>> configure:5858: gcc -c -g -O2 -I$$r/$(HOST_SUBDIR)/gmp -I$$s/gmp
>> -I$$s/mpc/src conftest.c >&5
>> configure:5858: $? = 0
>> configure:5859: result: yes
>> configure:5936: checking for version 0.15.5 (or later revision) of CLooG
>> configure:5953: gcc -c -g -O2 -DCLOOG_PPL_BACKEND
>> -I$$r/$(HOST_SUBDIR)/gmp -I$$s/gmp -I$$s/mpc/src conftest.c >&5
>> configure:5953: $? = 0
>> configure:5969: gcc -c -g -O2 -DCLOOG_PPL_BACKEND
>> -I$$r/$(HOST_SUBDIR)/gmp -I$$s/gmp -I$$s/mpc/src conftest.c >&5
>> conftest.c: In function 'main':
>> conftest.c:16: error: 'choke' undeclared (first use in this function)
>> conftest.c:16: error: (Each undeclared identifier is reported only once
>> conftest.c:16: error: for each function it appears in.)
>> conftest.c:16: error: expected ';' before 'me'
>> configure:5969: $? = 1
>> configure: failed program was:
>> | /* confdefs.h */
>> | #define PACKAGE_NAME ""
>> | #define PACKAGE_TARNAME ""
>> | #define PACKAGE_VERSION ""
>> | #define PACKAGE_STRING ""
>> | #define PACKAGE_BUGREPORT ""
>> | #define PACKAGE_URL ""
>> | #define LT_OBJDIR ".libs/"
>> | /* end confdefs.h. */
>> | #include "cloog/cloog.h"
>> | int
>> | main ()
>> | {
>> |
>> | #if CLOOG_VERSION_MAJOR != 0 || CLOOG_VERSION_MINOR != 15 ||
>> CLOOG_VERSION_REVISION < 9
>> | choke me
>> | #endif
>> |
>> | ;
>> | return 0;
>> | }
>> configure:5973: result: buggy but acceptable
>
> Second:
>>
>> configure:6092: checking how to run the C preprocessor
>> configure:6123: gcc -E -I/usr/include/libelf conftest.c
>> configure:6123: $? = 0
>> configure:6137: gcc -E -I/usr/include/libelf conftest.c
>> conftest.c:10:28: error: ac_nonexistent.h: No such file or directory
>> configure:6137: $? = 1
>> configure: failed program was:
>> | /* confdefs.h */
>> | #define PACKAGE_NAME ""
>> | #define PACKAGE_TARNAME ""
>> | #define PACKAGE_VERSION ""
>> | #define PACKAGE_STRING ""
>> | #define PACKAGE_BUGREPORT ""
>> | #define PACKAGE_URL ""
>> | #define LT_OBJDIR ".libs/"
>> | /* end confdefs.h. */
>> | #include <ac_nonexistent.h>
>> configure:6162: result: gcc -E
>> configure:6182: gcc -E -I/usr/include/libelf conftest.c
>> configure:6182: $? = 0
>> configure:6196: gcc -E -I/usr/include/libelf conftest.c
>> conftest.c:10:28: error: ac_nonexistent.h: No such file or directory
>> configure:6196: $? = 1
>> configure: failed program was:
>> | /* confdefs.h */
>> | #define PACKAGE_NAME ""
>> | #define PACKAGE_TARNAME ""
>> | #define PACKAGE_VERSION ""
>> | #define PACKAGE_STRING ""
>> | #define PACKAGE_BUGREPORT ""
>> | #define PACKAGE_URL ""
>> | #define LT_OBJDIR ".libs/"
>> | /* end confdefs.h. */
>> | #include <ac_nonexistent.h>
>
> Going back to the error at the end of the build the error is 'undefined
> reference to `undefined reference to `elf_getshdrstrndx''. However if I
> grep for 'elf_getshdrstrndx' in /usr/include I get:
>>
>> [mike@desktop gcc-obj-dir]$ grep -r 'elf_getshdrstrndx' /usr/include/
>> /usr/include/libelf.h:extern int elf_getshdrstrndx (Elf *__elf, size_t
>> *__dst);
>> /usr/include/libelf/libelfP.h:extern int __elf_getshdrstrndx_internal (Elf
>> *__elf, size_t *__dst)
>> /usr/include/libelf/libelf.h:extern int elf_getshdrstrndx (Elf *__elf,
>> size_t *__dst);
>> /usr/include/libelf/elf32_checksum.c: if (INTUSE(elf_getshdrstrndx)
>> (elf, &shstrndx) < 0)
>> /usr/include/libelf/elf_getshdrstrndx.c:elf_getshdrstrndx (elf, dst)
>> /usr/include/libelf/elf_getshdrstrndx.c:INTDEF(elf_getshdrstrndx)
>> /usr/include/libelf/elf_getshdrstrndx.c:strong_alias (elf_getshdrstrndx,
>> elf_getshstrndx)
>> [mike@desktop gcc-obj-dir]$
>
> so clearly the source is there and declared in libelf.h.
>
> Furthermore, to repeat the first two lines of the message at the end of the
> build are:
>
>> lto/lto-elf.o: In function `lto_elf_file_open':
>> lto-elf.c:(.text+0xcb5): undefined reference to `elf_getshdrstrndx'
>
> but in fact `elf_getshdrstrndx' is invoked in 'validate_file' and not
> 'lto_elf_file_open'. Here are the two relevant definitions:
>
>> validate_file (lto_elf_file *elf_file)
>> {
>> const char *elf_ident;
>>
>> /* Some aspects of the libelf API are dependent on whether the
>> object file is a 32-bit or 64-bit file. Determine which kind of
>> file this is now. */
>> elf_ident = elf_getident (elf_file->elf, NULL);
>> if (!elf_ident)
>> {
>> error ("could not read ELF identification information: %s",
>> elf_errmsg (0));
>> return false;
>>
>> }
>>
>> if (!cached_file_attrs.initialized)
>> {
>> switch (elf_ident[EI_CLASS])
>> {
>> case ELFCLASS32:
>> cached_file_attrs.bits = 32;
>> break;
>>
>> case ELFCLASS64:
>> cached_file_attrs.bits = 64;
>> break;
>>
>> default:
>> error ("unsupported ELF file class");
>> return false;
>> }
>>
>> memcpy (cached_file_attrs.elf_ident, elf_ident,
>> sizeof cached_file_attrs.elf_ident);
>> }
>>
>> if (memcmp (elf_ident, cached_file_attrs.elf_ident,
>> sizeof cached_file_attrs.elf_ident))
>> return false;
>>
>> /* Check that the input file is a relocatable object file with the
>> correct
>> architecture. */
>> switch (cached_file_attrs.bits)
>> {
>> case 32:
>> if (!validate_ehdr32 (elf_file))
>> return false;
>> break;
>>
>> case 64:
>> if (!validate_ehdr64 (elf_file))
>> return false;
>> break;
>>
>> default:
>> gcc_unreachable ();
>> }
>>
>> /* Read the string table used for section header names. */
>> if (elf_getshdrstrndx (elf_file->elf, &elf_file->sec_strtab) == -1)
>> {
>> error ("could not locate ELF string table: %s", elf_errmsg (0));
>> return false;
>> }
>>
>> cached_file_attrs.initialized = true;
>> return true;
>> }
>
> and
>>
>> /* Open ELF file FILENAME. If WRITABLE is true, the file is opened for
>> write
>> and, if necessary, created. Otherwise, the file is opened for reading.
>> Returns the opened file. */
>>
>> lto_file *
>> lto_elf_file_open (const char *filename, bool writable)
>> {
>> lto_elf_file *elf_file;
>> lto_file *result = NULL;
>> off_t offset;
>> long loffset;
>> off_t header_offset;
>> const char *offset_p;
>> char *fname;
>> int consumed;
>>
>> offset_p = strrchr (filename, '@');
>> if (offset_p
>> && offset_p != filename
>> && sscanf (offset_p, "@%li%n", &loffset, &consumed) >= 1
>> && strlen (offset_p) == (unsigned int)consumed)
>> {
>> fname = (char *) xmalloc (offset_p - filename + 1);
>> memcpy (fname, filename, offset_p - filename);
>> fname[offset_p - filename] = '\0';
>> offset = (off_t)loffset;
>> /* elf_rand expects the offset to point to the ar header, not the
>> object itself. Subtract the size of the ar header (60 bytes).
>> We don't uses sizeof (struct ar_hd) to avoid including ar.h */
>> header_offset = offset - 60;
>> }
>> else
>> {
>> fname = xstrdup (filename);
>> offset = 0;
>> header_offset = 0;
>> }
>>
>> /* Set up. */
>> elf_file = XCNEW (lto_elf_file);
>> result = (lto_file *) elf_file;
>> lto_file_init (result, fname, offset);
>> elf_file->fd = -1;
>>
>> /* Open the file. */
>> elf_file->fd = open (fname, writable ? O_WRONLY|O_CREAT|O_BINARY
>> : O_RDONLY|O_BINARY, 0666);
>> if (elf_file->fd == -1)
>> {
>> error ("could not open file %s", fname);
>> goto fail;
>> }
>>
>> /* Initialize the ELF library. */
>> if (elf_version (EV_CURRENT) == EV_NONE)
>> {
>> error ("ELF library is older than that used when building GCC");
>> goto fail;
>> }
>>
>> /* Open the ELF file descriptor. */
>> elf_file->elf = elf_begin (elf_file->fd, writable ? ELF_C_WRITE :
>> ELF_C_READ,
>> NULL);
>> if (!elf_file->elf)
>> {
>> error ("could not open ELF file: %s", elf_errmsg (0));
>> goto fail;
>> }
>>
>> if (offset != 0)
>> {
>> Elf *e;
>> off_t t = elf_rand (elf_file->elf, header_offset);
>> if (t != header_offset)
>> {
>> error ("could not seek in archive");
>> goto fail;
>> }
>>
>> e = elf_begin (elf_file->fd, ELF_C_READ, elf_file->elf);
>> if (e == NULL)
>> {
>> error("could not find archive member");
>> goto fail;
>> }
>> elf_end (elf_file->elf);
>> elf_file->elf = e;
>> }
>>
>> if (writable)
>> {
>> init_ehdr (elf_file);
>> elf_file->shstrtab_stream = XCNEW (struct lto_output_stream);
>> /* Output an empty string to the section header table. This becomes
>> the
>> name of the initial NULL section. */
>> lto_output_1_stream (elf_file->shstrtab_stream, '\0');
>> }
>> else
>> if (!validate_file (elf_file))
>> goto fail;
>>
>> return result;
>>
>> fail:
>> if (result)
>> lto_elf_file_close (result);
>> return NULL;
>> }
>
> The C source comes from 'lto-elf.c'. A grep for it in the source directory
> '~/LLJVM/gcc/gcc-4.5.0/gcc-4.5.0-3' gives:
>>
>> ~/LLJVM/gcc/gcc-4.5.0/gcc-4.5.0-3/gcc/lto/lto-elf.c
>
> Furthermore, a find in the object directory 'gcc-obj-dir' gives:
>>
>> [mike@desktop gcc-obj-dir]$ find . -name lto-elf.o -print
>> ./gcc/lto/lto-elf.o
>
> I've attached 'lto-elf.c' and 'lto-elf.o' from those two locations in case
> it's any help.
>
> I'd be very grateful for any help. I'm really stuck.
>
> Thanks in advance,
> Mike
>
It seems this error was because of an older libelf.
I installed elfutils-libelf-devel-0.145-1 and that worked.
However, now I face a different error that says:
make[2]: Entering directory `/home/Sandy/Development/build'
make[3]: Entering directory `/home/Sandy/Development/build'
rm -f stage_current
make[3]: Leaving directory `/home/Sandy/Development/build'
Comparing stages 2 and 3
warning: gcc/cc1-checksum.o differs
warning: gcc/cc1obj-checksum.o differs
warning: gcc/cc1plus-checksum.o differs
Bootstrap comparison failure!
gcc/gcc.o differs
gcc/plugin.o differs
make[2]: *** [compare] Error 1
make[2]: Leaving directory `/home/Sandy/Development/build'
make[1]: *** [stage3-bubble] Error 2
make[1]: Leaving directory `/home/Sandy/Development/build'
make: *** [all] Error 2
Stlll stuck.
I followed the same procedure mentioned in the first mail.
Is this a known error?
--
Cheers
Sandy
More information about the Gcc-help
mailing list