This is the mail archive of the gcc@gcc.gnu.org mailing list for the GCC 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]

Re: LTO and libelf (and FreeBSD)


On Thu, 20 May 2010, Kai Wang wrote:
> The elf_getbase() API in FreeBSD libelf can only be called using an 
> archive member ELF descriptor. It will return -1 (indicates an error) 
> when called with a "regular" ELF object.
> 
> The lto_obj_build_section_table() function in lto-elf.c calls
> elf_getbase() to get the offset base for a "regular" ELF object. On
> FreeBSD it gets -1.  (Side notes: lto-elf.c should really check return
> values of libelf APIs) And later it uses -1 as base_offset for all the
> ELF sections thus results in an off-by-one error when passing the
> section data to zlib to inflate.
> 
> Could you please try applying the attached patch to the libelf in
> FreeBSD 7.3 and see if it fixes gcc4.6 lto?

Thanks, Kai!

This patch to FreeBSD's libelf significantly improves test results
from http://gcc.gnu.org/ml/gcc-testresults/2010-05/msg02081.html
to http://gcc.gnu.org/ml/gcc-testresults/2010-05/msg02150.html

Some detailed numbers:

=== g++ Summary ===		vanilla	patched libelf

# of expected passes		22876	23118
# of unexpected failures	425	142
# of expected failures		151	151
# of unresolved testcases	124	66
# of unsupported tests		150	150

=== gcc Summary ===

# of expected passes		64021	67099
# of unexpected failures	3806	1667
# of unexpected successes	1	1
# of expected failures		171	171
# of unresolved testcases	2580	1292
# of unsupported tests		1284	1284

=== gfortran Summary ===

# of expected passes		34094	34122
# of unexpected failures	48	27
# of expected failures		22	22
# of unresolved testcases	37	16
# of unsupported tests		266	266


Based on this, it will be great if you can apply your patch to -CURRENT, 
8-STABLE and 7-STABLE.


>From what I can tell, this patch of yours fixes LTO in GCC.  Looking
at the remaining failures, it is now only the somewhat related WHOPR 
optimization in GCC that remains broken:

  % cat x.c
  int main() { }
  % gccvs -flto x.c
  % gccvs -fwhopr x.c
  lto1: fatal error: elf_update() failed: Layout constraint violation
  compilation terminated.
  lto-wrapper: gccvs returned 1 exit status
  collect2: lto-wrapper returned 1 exit status

Gerald


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