re PR lto/46273 (Failed to bootstrap)
ChangeLog: 2010-11-03 Ian Lance Taylor <iant@google.com> Dave Korn <dave.korn.cygwin@gmail.com> PR lto/46273 * configure.ac: Remove libelf tests. Build lto-plugin on ELF always and on other supported platforms whenever LTO is enabled. * configure: Rebuild. gcc/ChangeLog: 2010-11-03 Ian Lance Taylor <iant@google.com> PR lto/46273 * gcc/config.gcc: Don't set lto_binary_reader. * doc/install.texi (Prerequisites): Remove libelf paragraphs. (Configuration): Mention --disable-lto. Remove --with-libelf paragraph. lto-plugin/ChangeLog: 2010-11-03 Dave Korn <dave.korn.cygwin@gmail.com> PR lto/46273 * lto-plugin.h: Delete. * lto-plugin-elf.c: Likewise. * lto-plugin-coff.c: Likewise. * configure.ac: Don't use libelf, don't source config.gcc. (LIBELFLIBS): Delete. (LIBELFINC): Delete. (LTO_FORMAT): Delete. (SYM_STYLE): Add AC_DEFINE var, set based on $target. (config.h): Add AC_CONFIG_HEADERS directive. * Makefile.am (LIBELFLIBS): Delete. (LIBELFINC): Delete. (LTO_FORMAT): Delete. (DEFS): Import. (AM_CPPFLAGS): Use it. Don't use LIBELFINC. (liblto_plugin_la_SOURCES): Don't use LTO_FORMAT, don't include any object-format-specific source file in the link. (liblto_plugin_la_LIBADD): Don't use LIBELFLIBS. * config.h.in: Generate. * configure: Regenerate. * Makefile.in: Likewise. * lto-plugin.c (O_BINARY): Definition moved here from lto-plugin.h. (LTO_SEGMENT_NAME): New definition. (LTO_SECTION_PREFIX): Definition moved here from lto-plugin.h. (LTO_SECTION_PREFIX_LEN): New definition. (struct sym_aux): Struct definition moved here from lto-plugin.h. (struct plugin_symtab): Likewise. (struct plugin_objfile): Likewise. (struct plugin_objfile): New struct def. (enum symbol_style): New enum type. (add_symbols): Make static. (claimed_files): Likewise. (num_claimed_files): Likewise. (sym_style): New global. (check): Make static. (parse_table_entry): Likewise. Respect sym_style when extracting symbol from symtab entry. (translate): Make static. (resolve_conflicts): Likewise. (process_symtab): New function, per-section callback version of old object-format-specific handling from deleted lto-plugin-elf.c. (claim_file_handler): Convert ELF-specific version from deleted lto-plugin-elf.c to simple_object interface and move here. (process_options): Allow new '-sym-style=' option. (onload): Don't call deleted onload_format_checks hook. From-SVN: r166233
This commit is contained in:
parent
03f43d3d3c
commit
48215350c2
16 changed files with 656 additions and 1468 deletions
|
@ -1,3 +1,11 @@
|
|||
2010-11-03 Ian Lance Taylor <iant@google.com>
|
||||
Dave Korn <dave.korn.cygwin@gmail.com>
|
||||
|
||||
PR lto/46273
|
||||
* configure.ac: Remove libelf tests. Build lto-plugin on ELF always
|
||||
and on other supported platforms whenever LTO is enabled.
|
||||
* configure: Rebuild.
|
||||
|
||||
2010-11-02 Alan Modra <amodra@gmail.com>
|
||||
|
||||
PR binutils/12110
|
||||
|
|
902
configure
vendored
902
configure
vendored
|
@ -553,42 +553,6 @@ PACKAGE_URL=
|
|||
|
||||
ac_unique_file="move-if-change"
|
||||
enable_option_checking=no
|
||||
# Factoring default headers for most tests.
|
||||
ac_includes_default="\
|
||||
#include <stdio.h>
|
||||
#ifdef HAVE_SYS_TYPES_H
|
||||
# include <sys/types.h>
|
||||
#endif
|
||||
#ifdef HAVE_SYS_STAT_H
|
||||
# include <sys/stat.h>
|
||||
#endif
|
||||
#ifdef STDC_HEADERS
|
||||
# include <stdlib.h>
|
||||
# include <stddef.h>
|
||||
#else
|
||||
# ifdef HAVE_STDLIB_H
|
||||
# include <stdlib.h>
|
||||
# endif
|
||||
#endif
|
||||
#ifdef HAVE_STRING_H
|
||||
# if !defined STDC_HEADERS && defined HAVE_MEMORY_H
|
||||
# include <memory.h>
|
||||
# endif
|
||||
# include <string.h>
|
||||
#endif
|
||||
#ifdef HAVE_STRINGS_H
|
||||
# include <strings.h>
|
||||
#endif
|
||||
#ifdef HAVE_INTTYPES_H
|
||||
# include <inttypes.h>
|
||||
#endif
|
||||
#ifdef HAVE_STDINT_H
|
||||
# include <stdint.h>
|
||||
#endif
|
||||
#ifdef HAVE_UNISTD_H
|
||||
# include <unistd.h>
|
||||
#endif"
|
||||
|
||||
ac_subst_vars='LTLIBOBJS
|
||||
LIBOBJS
|
||||
compare_exclusions
|
||||
|
@ -675,11 +639,6 @@ DEBUG_PREFIX_CFLAGS_FOR_TARGET
|
|||
SYSROOT_CFLAGS_FOR_TARGET
|
||||
stage1_languages
|
||||
extra_host_libiberty_configure_flags
|
||||
libelfinc
|
||||
libelflibs
|
||||
EGREP
|
||||
GREP
|
||||
CPP
|
||||
clooginc
|
||||
clooglibs
|
||||
pplinc
|
||||
|
@ -808,9 +767,6 @@ with_cloog_include
|
|||
with_cloog_lib
|
||||
enable_cloog_version_check
|
||||
enable_lto
|
||||
with_libelf
|
||||
with_libelf_include
|
||||
with_libelf_lib
|
||||
enable_stage1_languages
|
||||
enable_objc_gc
|
||||
with_build_sysroot
|
||||
|
@ -834,7 +790,6 @@ CPPFLAGS
|
|||
CXX
|
||||
CXXFLAGS
|
||||
CCC
|
||||
CPP
|
||||
build_configargs
|
||||
host_configargs
|
||||
target_configargs
|
||||
|
@ -1552,11 +1507,6 @@ Optional Packages:
|
|||
plus --with-cloog-lib=PATH/lib
|
||||
--with-cloog-include=PATH Specify directory for installed CLooG include files
|
||||
--with-cloog-lib=PATH Specify the directory for the installed CLooG library
|
||||
--with-libelf=PATH Specify prefix directory for the installed libelf package
|
||||
Equivalent to --with-libelf-include=PATH/include
|
||||
plus --with-libelf-lib=PATH/lib
|
||||
--with-libelf-include=PATH Specify directory for installed libelf include files
|
||||
--with-libelf-lib=PATH Specify the directory for the installed libelf library
|
||||
--with-build-sysroot=SYSROOT
|
||||
use sysroot as the system root during the build
|
||||
--with-debug-prefix-map='A=B C=D ...'
|
||||
|
@ -1576,7 +1526,6 @@ Some influential environment variables:
|
|||
you have headers in a nonstandard directory <include dir>
|
||||
CXX C++ compiler command
|
||||
CXXFLAGS C++ compiler flags
|
||||
CPP C preprocessor
|
||||
build_configargs
|
||||
additional configure arguments for build directories
|
||||
host_configargs
|
||||
|
@ -1829,203 +1778,6 @@ fi
|
|||
return $ac_retval
|
||||
|
||||
} # ac_fn_c_try_link
|
||||
|
||||
# ac_fn_c_try_cpp LINENO
|
||||
# ----------------------
|
||||
# Try to preprocess conftest.$ac_ext, and return whether this succeeded.
|
||||
ac_fn_c_try_cpp ()
|
||||
{
|
||||
as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
|
||||
if { { ac_try="$ac_cpp conftest.$ac_ext"
|
||||
case "(($ac_try" in
|
||||
*\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
|
||||
*) ac_try_echo=$ac_try;;
|
||||
esac
|
||||
eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
|
||||
$as_echo "$ac_try_echo"; } >&5
|
||||
(eval "$ac_cpp conftest.$ac_ext") 2>conftest.err
|
||||
ac_status=$?
|
||||
if test -s conftest.err; then
|
||||
grep -v '^ *+' conftest.err >conftest.er1
|
||||
cat conftest.er1 >&5
|
||||
mv -f conftest.er1 conftest.err
|
||||
fi
|
||||
$as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
|
||||
test $ac_status = 0; } >/dev/null && {
|
||||
test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
|
||||
test ! -s conftest.err
|
||||
}; then :
|
||||
ac_retval=0
|
||||
else
|
||||
$as_echo "$as_me: failed program was:" >&5
|
||||
sed 's/^/| /' conftest.$ac_ext >&5
|
||||
|
||||
ac_retval=1
|
||||
fi
|
||||
eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
|
||||
return $ac_retval
|
||||
|
||||
} # ac_fn_c_try_cpp
|
||||
|
||||
# ac_fn_c_check_header_mongrel LINENO HEADER VAR INCLUDES
|
||||
# -------------------------------------------------------
|
||||
# Tests whether HEADER exists, giving a warning if it cannot be compiled using
|
||||
# the include files in INCLUDES and setting the cache variable VAR
|
||||
# accordingly.
|
||||
ac_fn_c_check_header_mongrel ()
|
||||
{
|
||||
as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
|
||||
if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then :
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
|
||||
$as_echo_n "checking for $2... " >&6; }
|
||||
if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then :
|
||||
$as_echo_n "(cached) " >&6
|
||||
fi
|
||||
eval ac_res=\$$3
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
|
||||
$as_echo "$ac_res" >&6; }
|
||||
else
|
||||
# Is the header compilable?
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5
|
||||
$as_echo_n "checking $2 usability... " >&6; }
|
||||
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
|
||||
/* end confdefs.h. */
|
||||
$4
|
||||
#include <$2>
|
||||
_ACEOF
|
||||
if ac_fn_c_try_compile "$LINENO"; then :
|
||||
ac_header_compiler=yes
|
||||
else
|
||||
ac_header_compiler=no
|
||||
fi
|
||||
rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler" >&5
|
||||
$as_echo "$ac_header_compiler" >&6; }
|
||||
|
||||
# Is the header present?
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 presence" >&5
|
||||
$as_echo_n "checking $2 presence... " >&6; }
|
||||
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
|
||||
/* end confdefs.h. */
|
||||
#include <$2>
|
||||
_ACEOF
|
||||
if ac_fn_c_try_cpp "$LINENO"; then :
|
||||
ac_header_preproc=yes
|
||||
else
|
||||
ac_header_preproc=no
|
||||
fi
|
||||
rm -f conftest.err conftest.$ac_ext
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5
|
||||
$as_echo "$ac_header_preproc" >&6; }
|
||||
|
||||
# So? What about this header?
|
||||
case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in #((
|
||||
yes:no: )
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5
|
||||
$as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;}
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5
|
||||
$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;}
|
||||
;;
|
||||
no:yes:* )
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled" >&5
|
||||
$as_echo "$as_me: WARNING: $2: present but cannot be compiled" >&2;}
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: check for missing prerequisite headers?" >&5
|
||||
$as_echo "$as_me: WARNING: $2: check for missing prerequisite headers?" >&2;}
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5
|
||||
$as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;}
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&5
|
||||
$as_echo "$as_me: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&2;}
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5
|
||||
$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;}
|
||||
;;
|
||||
esac
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
|
||||
$as_echo_n "checking for $2... " >&6; }
|
||||
if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then :
|
||||
$as_echo_n "(cached) " >&6
|
||||
else
|
||||
eval "$3=\$ac_header_compiler"
|
||||
fi
|
||||
eval ac_res=\$$3
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
|
||||
$as_echo "$ac_res" >&6; }
|
||||
fi
|
||||
eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
|
||||
|
||||
} # ac_fn_c_check_header_mongrel
|
||||
|
||||
# ac_fn_c_try_run LINENO
|
||||
# ----------------------
|
||||
# Try to link conftest.$ac_ext, and return whether this succeeded. Assumes
|
||||
# that executables *can* be run.
|
||||
ac_fn_c_try_run ()
|
||||
{
|
||||
as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
|
||||
if { { ac_try="$ac_link"
|
||||
case "(($ac_try" in
|
||||
*\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
|
||||
*) ac_try_echo=$ac_try;;
|
||||
esac
|
||||
eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
|
||||
$as_echo "$ac_try_echo"; } >&5
|
||||
(eval "$ac_link") 2>&5
|
||||
ac_status=$?
|
||||
$as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
|
||||
test $ac_status = 0; } && { ac_try='./conftest$ac_exeext'
|
||||
{ { case "(($ac_try" in
|
||||
*\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
|
||||
*) ac_try_echo=$ac_try;;
|
||||
esac
|
||||
eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
|
||||
$as_echo "$ac_try_echo"; } >&5
|
||||
(eval "$ac_try") 2>&5
|
||||
ac_status=$?
|
||||
$as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
|
||||
test $ac_status = 0; }; }; then :
|
||||
ac_retval=0
|
||||
else
|
||||
$as_echo "$as_me: program exited with status $ac_status" >&5
|
||||
$as_echo "$as_me: failed program was:" >&5
|
||||
sed 's/^/| /' conftest.$ac_ext >&5
|
||||
|
||||
ac_retval=$ac_status
|
||||
fi
|
||||
rm -rf conftest.dSYM conftest_ipa8_conftest.oo
|
||||
eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
|
||||
return $ac_retval
|
||||
|
||||
} # ac_fn_c_try_run
|
||||
|
||||
# ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES
|
||||
# -------------------------------------------------------
|
||||
# Tests whether HEADER exists and can be compiled using the include files in
|
||||
# INCLUDES, setting the cache variable VAR accordingly.
|
||||
ac_fn_c_check_header_compile ()
|
||||
{
|
||||
as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
|
||||
$as_echo_n "checking for $2... " >&6; }
|
||||
if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then :
|
||||
$as_echo_n "(cached) " >&6
|
||||
else
|
||||
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
|
||||
/* end confdefs.h. */
|
||||
$4
|
||||
#include <$2>
|
||||
_ACEOF
|
||||
if ac_fn_c_try_compile "$LINENO"; then :
|
||||
eval "$3=yes"
|
||||
else
|
||||
eval "$3=no"
|
||||
fi
|
||||
rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
|
||||
fi
|
||||
eval ac_res=\$$3
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
|
||||
$as_echo "$ac_res" >&6; }
|
||||
eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
|
||||
|
||||
} # ac_fn_c_check_header_compile
|
||||
cat >config.log <<_ACEOF
|
||||
This file contains any messages produced by compilers while
|
||||
running configure, to aid debugging if configure makes a mistake.
|
||||
|
@ -6023,405 +5775,6 @@ fi
|
|||
|
||||
|
||||
|
||||
ac_ext=c
|
||||
ac_cpp='$CPP $CPPFLAGS'
|
||||
ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
|
||||
ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
|
||||
ac_compiler_gnu=$ac_cv_c_compiler_gnu
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5
|
||||
$as_echo_n "checking how to run the C preprocessor... " >&6; }
|
||||
# On Suns, sometimes $CPP names a directory.
|
||||
if test -n "$CPP" && test -d "$CPP"; then
|
||||
CPP=
|
||||
fi
|
||||
if test -z "$CPP"; then
|
||||
if test "${ac_cv_prog_CPP+set}" = set; then :
|
||||
$as_echo_n "(cached) " >&6
|
||||
else
|
||||
# Double quotes because CPP needs to be expanded
|
||||
for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp"
|
||||
do
|
||||
ac_preproc_ok=false
|
||||
for ac_c_preproc_warn_flag in '' yes
|
||||
do
|
||||
# Use a header file that comes with gcc, so configuring glibc
|
||||
# with a fresh cross-compiler works.
|
||||
# Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
|
||||
# <limits.h> exists even on freestanding compilers.
|
||||
# On the NeXT, cc -E runs the code through the compiler's parser,
|
||||
# not just through cpp. "Syntax error" is here to catch this case.
|
||||
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
|
||||
/* end confdefs.h. */
|
||||
#ifdef __STDC__
|
||||
# include <limits.h>
|
||||
#else
|
||||
# include <assert.h>
|
||||
#endif
|
||||
Syntax error
|
||||
_ACEOF
|
||||
if ac_fn_c_try_cpp "$LINENO"; then :
|
||||
|
||||
else
|
||||
# Broken: fails on valid input.
|
||||
continue
|
||||
fi
|
||||
rm -f conftest.err conftest.$ac_ext
|
||||
|
||||
# OK, works on sane cases. Now check whether nonexistent headers
|
||||
# can be detected and how.
|
||||
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
|
||||
/* end confdefs.h. */
|
||||
#include <ac_nonexistent.h>
|
||||
_ACEOF
|
||||
if ac_fn_c_try_cpp "$LINENO"; then :
|
||||
# Broken: success on invalid input.
|
||||
continue
|
||||
else
|
||||
# Passes both tests.
|
||||
ac_preproc_ok=:
|
||||
break
|
||||
fi
|
||||
rm -f conftest.err conftest.$ac_ext
|
||||
|
||||
done
|
||||
# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
|
||||
rm -f conftest.err conftest.$ac_ext
|
||||
if $ac_preproc_ok; then :
|
||||
break
|
||||
fi
|
||||
|
||||
done
|
||||
ac_cv_prog_CPP=$CPP
|
||||
|
||||
fi
|
||||
CPP=$ac_cv_prog_CPP
|
||||
else
|
||||
ac_cv_prog_CPP=$CPP
|
||||
fi
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5
|
||||
$as_echo "$CPP" >&6; }
|
||||
ac_preproc_ok=false
|
||||
for ac_c_preproc_warn_flag in '' yes
|
||||
do
|
||||
# Use a header file that comes with gcc, so configuring glibc
|
||||
# with a fresh cross-compiler works.
|
||||
# Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
|
||||
# <limits.h> exists even on freestanding compilers.
|
||||
# On the NeXT, cc -E runs the code through the compiler's parser,
|
||||
# not just through cpp. "Syntax error" is here to catch this case.
|
||||
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
|
||||
/* end confdefs.h. */
|
||||
#ifdef __STDC__
|
||||
# include <limits.h>
|
||||
#else
|
||||
# include <assert.h>
|
||||
#endif
|
||||
Syntax error
|
||||
_ACEOF
|
||||
if ac_fn_c_try_cpp "$LINENO"; then :
|
||||
|
||||
else
|
||||
# Broken: fails on valid input.
|
||||
continue
|
||||
fi
|
||||
rm -f conftest.err conftest.$ac_ext
|
||||
|
||||
# OK, works on sane cases. Now check whether nonexistent headers
|
||||
# can be detected and how.
|
||||
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
|
||||
/* end confdefs.h. */
|
||||
#include <ac_nonexistent.h>
|
||||
_ACEOF
|
||||
if ac_fn_c_try_cpp "$LINENO"; then :
|
||||
# Broken: success on invalid input.
|
||||
continue
|
||||
else
|
||||
# Passes both tests.
|
||||
ac_preproc_ok=:
|
||||
break
|
||||
fi
|
||||
rm -f conftest.err conftest.$ac_ext
|
||||
|
||||
done
|
||||
# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
|
||||
rm -f conftest.err conftest.$ac_ext
|
||||
if $ac_preproc_ok; then :
|
||||
|
||||
else
|
||||
{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
|
||||
$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
|
||||
as_fn_error "C preprocessor \"$CPP\" fails sanity check
|
||||
See \`config.log' for more details." "$LINENO" 5; }
|
||||
fi
|
||||
|
||||
ac_ext=c
|
||||
ac_cpp='$CPP $CPPFLAGS'
|
||||
ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
|
||||
ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
|
||||
ac_compiler_gnu=$ac_cv_c_compiler_gnu
|
||||
|
||||
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5
|
||||
$as_echo_n "checking for grep that handles long lines and -e... " >&6; }
|
||||
if test "${ac_cv_path_GREP+set}" = set; then :
|
||||
$as_echo_n "(cached) " >&6
|
||||
else
|
||||
if test -z "$GREP"; then
|
||||
ac_path_GREP_found=false
|
||||
# Loop through the user's path and test for each of PROGNAME-LIST
|
||||
as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
|
||||
for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin
|
||||
do
|
||||
IFS=$as_save_IFS
|
||||
test -z "$as_dir" && as_dir=.
|
||||
for ac_prog in grep ggrep; do
|
||||
for ac_exec_ext in '' $ac_executable_extensions; do
|
||||
ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext"
|
||||
{ test -f "$ac_path_GREP" && $as_test_x "$ac_path_GREP"; } || continue
|
||||
# Check for GNU ac_path_GREP and select it if it is found.
|
||||
# Check for GNU $ac_path_GREP
|
||||
case `"$ac_path_GREP" --version 2>&1` in
|
||||
*GNU*)
|
||||
ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;;
|
||||
*)
|
||||
ac_count=0
|
||||
$as_echo_n 0123456789 >"conftest.in"
|
||||
while :
|
||||
do
|
||||
cat "conftest.in" "conftest.in" >"conftest.tmp"
|
||||
mv "conftest.tmp" "conftest.in"
|
||||
cp "conftest.in" "conftest.nl"
|
||||
$as_echo 'GREP' >> "conftest.nl"
|
||||
"$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break
|
||||
diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
|
||||
as_fn_arith $ac_count + 1 && ac_count=$as_val
|
||||
if test $ac_count -gt ${ac_path_GREP_max-0}; then
|
||||
# Best one so far, save it but keep looking for a better one
|
||||
ac_cv_path_GREP="$ac_path_GREP"
|
||||
ac_path_GREP_max=$ac_count
|
||||
fi
|
||||
# 10*(2^10) chars as input seems more than enough
|
||||
test $ac_count -gt 10 && break
|
||||
done
|
||||
rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
|
||||
esac
|
||||
|
||||
$ac_path_GREP_found && break 3
|
||||
done
|
||||
done
|
||||
done
|
||||
IFS=$as_save_IFS
|
||||
if test -z "$ac_cv_path_GREP"; then
|
||||
as_fn_error "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
|
||||
fi
|
||||
else
|
||||
ac_cv_path_GREP=$GREP
|
||||
fi
|
||||
|
||||
fi
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5
|
||||
$as_echo "$ac_cv_path_GREP" >&6; }
|
||||
GREP="$ac_cv_path_GREP"
|
||||
|
||||
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5
|
||||
$as_echo_n "checking for egrep... " >&6; }
|
||||
if test "${ac_cv_path_EGREP+set}" = set; then :
|
||||
$as_echo_n "(cached) " >&6
|
||||
else
|
||||
if echo a | $GREP -E '(a|b)' >/dev/null 2>&1
|
||||
then ac_cv_path_EGREP="$GREP -E"
|
||||
else
|
||||
if test -z "$EGREP"; then
|
||||
ac_path_EGREP_found=false
|
||||
# Loop through the user's path and test for each of PROGNAME-LIST
|
||||
as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
|
||||
for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin
|
||||
do
|
||||
IFS=$as_save_IFS
|
||||
test -z "$as_dir" && as_dir=.
|
||||
for ac_prog in egrep; do
|
||||
for ac_exec_ext in '' $ac_executable_extensions; do
|
||||
ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext"
|
||||
{ test -f "$ac_path_EGREP" && $as_test_x "$ac_path_EGREP"; } || continue
|
||||
# Check for GNU ac_path_EGREP and select it if it is found.
|
||||
# Check for GNU $ac_path_EGREP
|
||||
case `"$ac_path_EGREP" --version 2>&1` in
|
||||
*GNU*)
|
||||
ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;;
|
||||
*)
|
||||
ac_count=0
|
||||
$as_echo_n 0123456789 >"conftest.in"
|
||||
while :
|
||||
do
|
||||
cat "conftest.in" "conftest.in" >"conftest.tmp"
|
||||
mv "conftest.tmp" "conftest.in"
|
||||
cp "conftest.in" "conftest.nl"
|
||||
$as_echo 'EGREP' >> "conftest.nl"
|
||||
"$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break
|
||||
diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
|
||||
as_fn_arith $ac_count + 1 && ac_count=$as_val
|
||||
if test $ac_count -gt ${ac_path_EGREP_max-0}; then
|
||||
# Best one so far, save it but keep looking for a better one
|
||||
ac_cv_path_EGREP="$ac_path_EGREP"
|
||||
ac_path_EGREP_max=$ac_count
|
||||
fi
|
||||
# 10*(2^10) chars as input seems more than enough
|
||||
test $ac_count -gt 10 && break
|
||||
done
|
||||
rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
|
||||
esac
|
||||
|
||||
$ac_path_EGREP_found && break 3
|
||||
done
|
||||
done
|
||||
done
|
||||
IFS=$as_save_IFS
|
||||
if test -z "$ac_cv_path_EGREP"; then
|
||||
as_fn_error "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
|
||||
fi
|
||||
else
|
||||
ac_cv_path_EGREP=$EGREP
|
||||
fi
|
||||
|
||||
fi
|
||||
fi
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5
|
||||
$as_echo "$ac_cv_path_EGREP" >&6; }
|
||||
EGREP="$ac_cv_path_EGREP"
|
||||
|
||||
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5
|
||||
$as_echo_n "checking for ANSI C header files... " >&6; }
|
||||
if test "${ac_cv_header_stdc+set}" = set; then :
|
||||
$as_echo_n "(cached) " >&6
|
||||
else
|
||||
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
|
||||
/* end confdefs.h. */
|
||||
#include <stdlib.h>
|
||||
#include <stdarg.h>
|
||||
#include <string.h>
|
||||
#include <float.h>
|
||||
|
||||
int
|
||||
main ()
|
||||
{
|
||||
|
||||
;
|
||||
return 0;
|
||||
}
|
||||
_ACEOF
|
||||
if ac_fn_c_try_compile "$LINENO"; then :
|
||||
ac_cv_header_stdc=yes
|
||||
else
|
||||
ac_cv_header_stdc=no
|
||||
fi
|
||||
rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
|
||||
|
||||
if test $ac_cv_header_stdc = yes; then
|
||||
# SunOS 4.x string.h does not declare mem*, contrary to ANSI.
|
||||
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
|
||||
/* end confdefs.h. */
|
||||
#include <string.h>
|
||||
|
||||
_ACEOF
|
||||
if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
|
||||
$EGREP "memchr" >/dev/null 2>&1; then :
|
||||
|
||||
else
|
||||
ac_cv_header_stdc=no
|
||||
fi
|
||||
rm -f conftest*
|
||||
|
||||
fi
|
||||
|
||||
if test $ac_cv_header_stdc = yes; then
|
||||
# ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI.
|
||||
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
|
||||
/* end confdefs.h. */
|
||||
#include <stdlib.h>
|
||||
|
||||
_ACEOF
|
||||
if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
|
||||
$EGREP "free" >/dev/null 2>&1; then :
|
||||
|
||||
else
|
||||
ac_cv_header_stdc=no
|
||||
fi
|
||||
rm -f conftest*
|
||||
|
||||
fi
|
||||
|
||||
if test $ac_cv_header_stdc = yes; then
|
||||
# /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi.
|
||||
if test "$cross_compiling" = yes; then :
|
||||
:
|
||||
else
|
||||
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
|
||||
/* end confdefs.h. */
|
||||
#include <ctype.h>
|
||||
#include <stdlib.h>
|
||||
#if ((' ' & 0x0FF) == 0x020)
|
||||
# define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
|
||||
# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c))
|
||||
#else
|
||||
# define ISLOWER(c) \
|
||||
(('a' <= (c) && (c) <= 'i') \
|
||||
|| ('j' <= (c) && (c) <= 'r') \
|
||||
|| ('s' <= (c) && (c) <= 'z'))
|
||||
# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c))
|
||||
#endif
|
||||
|
||||
#define XOR(e, f) (((e) && !(f)) || (!(e) && (f)))
|
||||
int
|
||||
main ()
|
||||
{
|
||||
int i;
|
||||
for (i = 0; i < 256; i++)
|
||||
if (XOR (islower (i), ISLOWER (i))
|
||||
|| toupper (i) != TOUPPER (i))
|
||||
return 2;
|
||||
return 0;
|
||||
}
|
||||
_ACEOF
|
||||
if ac_fn_c_try_run "$LINENO"; then :
|
||||
|
||||
else
|
||||
ac_cv_header_stdc=no
|
||||
fi
|
||||
rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
|
||||
conftest.$ac_objext conftest.beam conftest.$ac_ext
|
||||
fi
|
||||
|
||||
fi
|
||||
fi
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5
|
||||
$as_echo "$ac_cv_header_stdc" >&6; }
|
||||
if test $ac_cv_header_stdc = yes; then
|
||||
|
||||
$as_echo "#define STDC_HEADERS 1" >>confdefs.h
|
||||
|
||||
fi
|
||||
|
||||
# On IRIX 5.3, sys/types and inttypes.h are conflicting.
|
||||
for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \
|
||||
inttypes.h stdint.h unistd.h
|
||||
do :
|
||||
as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
|
||||
ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default
|
||||
"
|
||||
eval as_val=\$$as_ac_Header
|
||||
if test "x$as_val" = x""yes; then :
|
||||
cat >>confdefs.h <<_ACEOF
|
||||
#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
|
||||
_ACEOF
|
||||
|
||||
fi
|
||||
|
||||
done
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
target_elf=no
|
||||
|
@ -6437,258 +5790,14 @@ case $target in
|
|||
esac
|
||||
|
||||
if test $target_elf = yes; then :
|
||||
if test x"$enable_lto" = x"yes" ; then
|
||||
# Make sure that libelf.h and gelf.h are available.
|
||||
# ELF platforms build the lto-plugin always.
|
||||
build_lto_plugin=yes
|
||||
|
||||
# Check whether --with-libelf was given.
|
||||
if test "${with_libelf+set}" = set; then :
|
||||
withval=$with_libelf;
|
||||
fi
|
||||
|
||||
|
||||
|
||||
# Check whether --with-libelf_include was given.
|
||||
if test "${with_libelf_include+set}" = set; then :
|
||||
withval=$with_libelf_include;
|
||||
fi
|
||||
|
||||
|
||||
|
||||
# Check whether --with-libelf_lib was given.
|
||||
if test "${with_libelf_lib+set}" = set; then :
|
||||
withval=$with_libelf_lib;
|
||||
fi
|
||||
|
||||
|
||||
saved_CFLAGS="$CFLAGS"
|
||||
saved_CPPFLAGS="$CPPFLAGS"
|
||||
saved_LIBS="$LIBS"
|
||||
|
||||
case $with_libelf in
|
||||
"")
|
||||
libelflibs="-lelf"
|
||||
libelfinc="-I/usr/include/libelf"
|
||||
;;
|
||||
*)
|
||||
libelflibs="-L$with_libelf/lib -lelf"
|
||||
libelfinc="-I$with_libelf/include -I$with_libelf/include/libelf"
|
||||
LIBS="$libelflibs $LIBS"
|
||||
;;
|
||||
esac
|
||||
|
||||
if test "x$with_libelf_include" != x; then
|
||||
libelfinc="-I$with_libelf_include"
|
||||
fi
|
||||
|
||||
if test "x$with_libelf_lib" != x; then
|
||||
libelflibs="-L$with_libelf_lib -lelf"
|
||||
LIBS="$libelflibs $LIBS"
|
||||
fi
|
||||
|
||||
if test "x$with_libelf$with_libelf_include$with_libelf_lib" = x \
|
||||
&& test -d ${srcdir}/libelf; then
|
||||
libelflibs='-L$$r/$(HOST_SUBDIR)/libelf/lib -lelf '
|
||||
libelfinc='-D__LIBELF_INTERNAL__ -I$$r/$(HOST_SUBDIR)/libelf/lib -I$$s/libelf/lib'
|
||||
LIBS="$libelflibs $LIBS"
|
||||
|
||||
else
|
||||
|
||||
CFLAGS="$CFLAGS $libelfinc"
|
||||
CPPFLAGS="$CPPFLAGS $libelfinc"
|
||||
LIBS="$LIBS $libelflibs"
|
||||
|
||||
for ac_header in libelf.h
|
||||
do :
|
||||
ac_fn_c_check_header_mongrel "$LINENO" "libelf.h" "ac_cv_header_libelf_h" "$ac_includes_default"
|
||||
if test "x$ac_cv_header_libelf_h" = x""yes; then :
|
||||
cat >>confdefs.h <<_ACEOF
|
||||
#define HAVE_LIBELF_H 1
|
||||
_ACEOF
|
||||
have_libelf_h=yes
|
||||
fi
|
||||
|
||||
done
|
||||
|
||||
for ac_header in gelf.h
|
||||
do :
|
||||
ac_fn_c_check_header_mongrel "$LINENO" "gelf.h" "ac_cv_header_gelf_h" "$ac_includes_default"
|
||||
if test "x$ac_cv_header_gelf_h" = x""yes; then :
|
||||
cat >>confdefs.h <<_ACEOF
|
||||
#define HAVE_GELF_H 1
|
||||
_ACEOF
|
||||
have_gelf_h=yes
|
||||
fi
|
||||
|
||||
done
|
||||
|
||||
|
||||
for ac_header in libelf/libelf.h
|
||||
do :
|
||||
ac_fn_c_check_header_mongrel "$LINENO" "libelf/libelf.h" "ac_cv_header_libelf_libelf_h" "$ac_includes_default"
|
||||
if test "x$ac_cv_header_libelf_libelf_h" = x""yes; then :
|
||||
cat >>confdefs.h <<_ACEOF
|
||||
#define HAVE_LIBELF_LIBELF_H 1
|
||||
_ACEOF
|
||||
have_libelf_libelf_h=yes
|
||||
fi
|
||||
|
||||
done
|
||||
|
||||
for ac_header in libelf/gelf.h
|
||||
do :
|
||||
ac_fn_c_check_header_mongrel "$LINENO" "libelf/gelf.h" "ac_cv_header_libelf_gelf_h" "$ac_includes_default"
|
||||
if test "x$ac_cv_header_libelf_gelf_h" = x""yes; then :
|
||||
cat >>confdefs.h <<_ACEOF
|
||||
#define HAVE_LIBELF_GELF_H 1
|
||||
_ACEOF
|
||||
have_libelf_gelf_h=yes
|
||||
fi
|
||||
|
||||
done
|
||||
|
||||
|
||||
# If we couldn't find libelf.h and the user forced it, emit an error.
|
||||
if test x"$have_libelf_h" != x"yes" \
|
||||
&& test x"$have_libelf_libelf_h" != x"yes" ; then
|
||||
if test x"$default_enable_lto" != x"yes" ; then
|
||||
as_fn_error "LTO support requires libelf.h or libelf/libelf.h." "$LINENO" 5
|
||||
else
|
||||
enable_lto=no
|
||||
libelflibs=
|
||||
libelfinc=
|
||||
fi
|
||||
fi
|
||||
|
||||
# If we couldn't find gelf.h and the user forced it, emit an error.
|
||||
if test x"$have_gelf_h" != x"yes" \
|
||||
&& test x"$have_libelf_gelf_h" != x"yes" ; then
|
||||
if test x"$default_enable_lto" != x"yes" ; then
|
||||
as_fn_error "LTO support requires gelf.h or libelf/gelf.h." "$LINENO" 5
|
||||
else
|
||||
enable_lto=no
|
||||
libelflibs=
|
||||
libelfinc=
|
||||
fi
|
||||
fi
|
||||
|
||||
# Check that the detected libelf has the functions we need. We cannot
|
||||
# rely on just detecting the headers since they do not include
|
||||
# versioning information. Add functions, if needed.
|
||||
if test x"$enable_lto" = x"yes" ; then
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for the correct version of libelf" >&5
|
||||
$as_echo_n "checking for the correct version of libelf... " >&6; }
|
||||
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
|
||||
/* end confdefs.h. */
|
||||
#include <libelf.h>
|
||||
int
|
||||
main ()
|
||||
{
|
||||
|
||||
elf_errmsg (0);
|
||||
elf_getscn (0, 0);
|
||||
elf_nextscn (0, 0);
|
||||
elf_strptr (0, 0, 0);
|
||||
elf_getident (0, 0);
|
||||
elf_begin (0, 0, 0);
|
||||
elf_ndxscn (0);
|
||||
elf_end (0);
|
||||
|
||||
;
|
||||
return 0;
|
||||
}
|
||||
_ACEOF
|
||||
if ac_fn_c_try_link "$LINENO"; then :
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
|
||||
$as_echo "yes" >&6; };
|
||||
else
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
|
||||
$as_echo "no" >&6; }; enable_lto=no; libelflibs= ; libelfinc=
|
||||
|
||||
fi
|
||||
rm -f core conftest.err conftest.$ac_objext \
|
||||
conftest$ac_exeext conftest.$ac_ext
|
||||
|
||||
# Check for elf_getshdrstrndx or elf_getshstrndx. The latter's flavor
|
||||
# is determined in gcc/configure.ac.
|
||||
if test x"$enable_lto" = x"yes" ; then
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for elf_getshdrstrndx" >&5
|
||||
$as_echo_n "checking for elf_getshdrstrndx... " >&6; }
|
||||
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
|
||||
/* end confdefs.h. */
|
||||
#include <libelf.h>
|
||||
int
|
||||
main ()
|
||||
{
|
||||
|
||||
elf_getshdrstrndx (0, 0);
|
||||
|
||||
;
|
||||
return 0;
|
||||
}
|
||||
_ACEOF
|
||||
if ac_fn_c_try_link "$LINENO"; then :
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
|
||||
$as_echo "yes" >&6; };
|
||||
else
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
|
||||
$as_echo "no" >&6; };
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for elf_getshstrndx" >&5
|
||||
$as_echo_n "checking for elf_getshstrndx... " >&6; }
|
||||
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
|
||||
/* end confdefs.h. */
|
||||
#include <libelf.h>
|
||||
int
|
||||
main ()
|
||||
{
|
||||
|
||||
elf_getshstrndx (0, 0);
|
||||
|
||||
;
|
||||
return 0;
|
||||
}
|
||||
_ACEOF
|
||||
if ac_fn_c_try_link "$LINENO"; then :
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
|
||||
$as_echo "yes" >&6; };
|
||||
else
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
|
||||
$as_echo "no" >&6; }; enable_lto=no; libelflibs= ; libelfinc=
|
||||
|
||||
fi
|
||||
rm -f core conftest.err conftest.$ac_objext \
|
||||
conftest$ac_exeext conftest.$ac_ext
|
||||
|
||||
fi
|
||||
rm -f core conftest.err conftest.$ac_objext \
|
||||
conftest$ac_exeext conftest.$ac_ext
|
||||
fi
|
||||
|
||||
# If we couldn't enable LTO and the user forced it, emit an error.
|
||||
if test x"$enable_lto" = x"no" \
|
||||
&& test x"$default_enable_lto" != x"yes" ; then
|
||||
as_fn_error "To enable LTO, GCC requires libelf v0.8.12+.
|
||||
Try the --with-libelf, --with-libelf-include and --with-libelf-lib options
|
||||
to specify its location." "$LINENO" 5
|
||||
fi
|
||||
fi
|
||||
|
||||
CFLAGS="$saved_CFLAGS"
|
||||
CPPFLAGS="$saved_CPPFLAGS"
|
||||
LIBS="$saved_LIBS"
|
||||
|
||||
fi
|
||||
|
||||
# Flags needed for libelf.
|
||||
|
||||
|
||||
# ELF platforms build the lto-plugin when GOLD is in use.
|
||||
build_lto_plugin=${ENABLE_GOLD}
|
||||
fi
|
||||
else
|
||||
if test x"$default_enable_lto" = x"yes" ; then
|
||||
case $target in
|
||||
*-apple-darwin* | *-cygwin* | *-mingw*) ;;
|
||||
# On other non-ELF platforms, LTO must be explicitly enabled.
|
||||
# On other non-ELF platforms, LTO has yet to be validated.
|
||||
*) enable_lto=no ;;
|
||||
esac
|
||||
else
|
||||
|
@ -6706,11 +5815,12 @@ else
|
|||
esac
|
||||
fi
|
||||
# Among non-ELF, only Windows platforms support the lto-plugin so far.
|
||||
# Build it unless LTO was explicitly disabled.
|
||||
case $target in
|
||||
*-cygwin* | *-mingw*) build_lto_plugin=yes ;;
|
||||
*-cygwin* | *-mingw*) build_lto_plugin=$enable_lto ;;
|
||||
*) ;;
|
||||
esac
|
||||
default_enable_lto=no
|
||||
|
||||
fi
|
||||
|
||||
|
||||
|
|
150
configure.ac
150
configure.ac
|
@ -1656,149 +1656,12 @@ AC_ARG_ENABLE(lto,
|
|||
enable_lto=$enableval,
|
||||
enable_lto=yes; default_enable_lto=yes)
|
||||
|
||||
|
||||
ACX_ELF_TARGET_IFELSE([if test x"$enable_lto" = x"yes" ; then
|
||||
# Make sure that libelf.h and gelf.h are available.
|
||||
AC_ARG_WITH(libelf, [ --with-libelf=PATH Specify prefix directory for the installed libelf package
|
||||
Equivalent to --with-libelf-include=PATH/include
|
||||
plus --with-libelf-lib=PATH/lib])
|
||||
|
||||
AC_ARG_WITH(libelf_include, [ --with-libelf-include=PATH Specify directory for installed libelf include files])
|
||||
|
||||
AC_ARG_WITH(libelf_lib, [ --with-libelf-lib=PATH Specify the directory for the installed libelf library])
|
||||
|
||||
saved_CFLAGS="$CFLAGS"
|
||||
saved_CPPFLAGS="$CPPFLAGS"
|
||||
saved_LIBS="$LIBS"
|
||||
|
||||
case $with_libelf in
|
||||
"")
|
||||
libelflibs="-lelf"
|
||||
libelfinc="-I/usr/include/libelf"
|
||||
;;
|
||||
*)
|
||||
libelflibs="-L$with_libelf/lib -lelf"
|
||||
libelfinc="-I$with_libelf/include -I$with_libelf/include/libelf"
|
||||
LIBS="$libelflibs $LIBS"
|
||||
;;
|
||||
esac
|
||||
|
||||
if test "x$with_libelf_include" != x; then
|
||||
libelfinc="-I$with_libelf_include"
|
||||
fi
|
||||
|
||||
if test "x$with_libelf_lib" != x; then
|
||||
libelflibs="-L$with_libelf_lib -lelf"
|
||||
LIBS="$libelflibs $LIBS"
|
||||
fi
|
||||
|
||||
if test "x$with_libelf$with_libelf_include$with_libelf_lib" = x \
|
||||
&& test -d ${srcdir}/libelf; then
|
||||
libelflibs='-L$$r/$(HOST_SUBDIR)/libelf/lib -lelf '
|
||||
libelfinc='-D__LIBELF_INTERNAL__ -I$$r/$(HOST_SUBDIR)/libelf/lib -I$$s/libelf/lib'
|
||||
LIBS="$libelflibs $LIBS"
|
||||
|
||||
else
|
||||
|
||||
CFLAGS="$CFLAGS $libelfinc"
|
||||
CPPFLAGS="$CPPFLAGS $libelfinc"
|
||||
LIBS="$LIBS $libelflibs"
|
||||
|
||||
AC_CHECK_HEADERS(libelf.h, [have_libelf_h=yes])
|
||||
AC_CHECK_HEADERS(gelf.h, [have_gelf_h=yes])
|
||||
|
||||
AC_CHECK_HEADERS(libelf/libelf.h, [have_libelf_libelf_h=yes])
|
||||
AC_CHECK_HEADERS(libelf/gelf.h, [have_libelf_gelf_h=yes])
|
||||
|
||||
# If we couldn't find libelf.h and the user forced it, emit an error.
|
||||
if test x"$have_libelf_h" != x"yes" \
|
||||
&& test x"$have_libelf_libelf_h" != x"yes" ; then
|
||||
if test x"$default_enable_lto" != x"yes" ; then
|
||||
AC_MSG_ERROR([LTO support requires libelf.h or libelf/libelf.h.])
|
||||
else
|
||||
enable_lto=no
|
||||
libelflibs=
|
||||
libelfinc=
|
||||
fi
|
||||
fi
|
||||
|
||||
# If we couldn't find gelf.h and the user forced it, emit an error.
|
||||
if test x"$have_gelf_h" != x"yes" \
|
||||
&& test x"$have_libelf_gelf_h" != x"yes" ; then
|
||||
if test x"$default_enable_lto" != x"yes" ; then
|
||||
AC_MSG_ERROR([LTO support requires gelf.h or libelf/gelf.h.])
|
||||
else
|
||||
enable_lto=no
|
||||
libelflibs=
|
||||
libelfinc=
|
||||
fi
|
||||
fi
|
||||
|
||||
# Check that the detected libelf has the functions we need. We cannot
|
||||
# rely on just detecting the headers since they do not include
|
||||
# versioning information. Add functions, if needed.
|
||||
if test x"$enable_lto" = x"yes" ; then
|
||||
AC_MSG_CHECKING([for the correct version of libelf])
|
||||
AC_TRY_LINK(
|
||||
[#include <libelf.h>],[
|
||||
elf_errmsg (0);
|
||||
elf_getscn (0, 0);
|
||||
elf_nextscn (0, 0);
|
||||
elf_strptr (0, 0, 0);
|
||||
elf_getident (0, 0);
|
||||
elf_begin (0, 0, 0);
|
||||
elf_ndxscn (0);
|
||||
elf_end (0);
|
||||
],
|
||||
[AC_MSG_RESULT([yes]);],
|
||||
[AC_MSG_RESULT([no]); enable_lto=no; libelflibs= ; libelfinc= ]
|
||||
)
|
||||
|
||||
# Check for elf_getshdrstrndx or elf_getshstrndx. The latter's flavor
|
||||
# is determined in gcc/configure.ac.
|
||||
if test x"$enable_lto" = x"yes" ; then
|
||||
AC_MSG_CHECKING([for elf_getshdrstrndx])
|
||||
AC_TRY_LINK(
|
||||
[#include <libelf.h>],[
|
||||
elf_getshdrstrndx (0, 0);
|
||||
],
|
||||
[AC_MSG_RESULT([yes]);],
|
||||
[AC_MSG_RESULT([no]);
|
||||
AC_MSG_CHECKING([for elf_getshstrndx])
|
||||
AC_TRY_LINK(
|
||||
[#include <libelf.h>],[
|
||||
elf_getshstrndx (0, 0);
|
||||
],
|
||||
[AC_MSG_RESULT([yes]);],
|
||||
[AC_MSG_RESULT([no]); enable_lto=no; libelflibs= ; libelfinc= ]
|
||||
)]
|
||||
)
|
||||
fi
|
||||
|
||||
# If we couldn't enable LTO and the user forced it, emit an error.
|
||||
if test x"$enable_lto" = x"no" \
|
||||
&& test x"$default_enable_lto" != x"yes" ; then
|
||||
AC_MSG_ERROR([To enable LTO, GCC requires libelf v0.8.12+.
|
||||
Try the --with-libelf, --with-libelf-include and --with-libelf-lib options
|
||||
to specify its location.])
|
||||
fi
|
||||
fi
|
||||
|
||||
CFLAGS="$saved_CFLAGS"
|
||||
CPPFLAGS="$saved_CPPFLAGS"
|
||||
LIBS="$saved_LIBS"
|
||||
|
||||
fi
|
||||
|
||||
# Flags needed for libelf.
|
||||
AC_SUBST(libelflibs)
|
||||
AC_SUBST(libelfinc)
|
||||
# ELF platforms build the lto-plugin when GOLD is in use.
|
||||
build_lto_plugin=${ENABLE_GOLD}
|
||||
fi],[if test x"$default_enable_lto" = x"yes" ; then
|
||||
ACX_ELF_TARGET_IFELSE([# ELF platforms build the lto-plugin always.
|
||||
build_lto_plugin=yes
|
||||
],[if test x"$default_enable_lto" = x"yes" ; then
|
||||
case $target in
|
||||
*-apple-darwin* | *-cygwin* | *-mingw*) ;;
|
||||
# On other non-ELF platforms, LTO must be explicitly enabled.
|
||||
# On other non-ELF platforms, LTO has yet to be validated.
|
||||
*) enable_lto=no ;;
|
||||
esac
|
||||
else
|
||||
|
@ -1816,11 +1679,12 @@ fi],[if test x"$default_enable_lto" = x"yes" ; then
|
|||
esac
|
||||
fi
|
||||
# Among non-ELF, only Windows platforms support the lto-plugin so far.
|
||||
# Build it unless LTO was explicitly disabled.
|
||||
case $target in
|
||||
*-cygwin* | *-mingw*) build_lto_plugin=yes ;;
|
||||
*-cygwin* | *-mingw*) build_lto_plugin=$enable_lto ;;
|
||||
*) ;;
|
||||
esac
|
||||
default_enable_lto=no])
|
||||
])
|
||||
|
||||
|
||||
# By default, C is the only stage 1 language.
|
||||
|
|
|
@ -1,3 +1,11 @@
|
|||
2010-11-03 Ian Lance Taylor <iant@google.com>
|
||||
|
||||
PR lto/46273
|
||||
* gcc/config.gcc: Don't set lto_binary_reader.
|
||||
* doc/install.texi (Prerequisites): Remove libelf paragraphs.
|
||||
(Configuration): Mention --disable-lto. Remove --with-libelf
|
||||
paragraph.
|
||||
|
||||
2010-11-03 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
PR debug/46252
|
||||
|
|
|
@ -219,8 +219,6 @@ default_gnu_indirect_function=no
|
|||
target_gtfiles=
|
||||
need_64bit_hwint=
|
||||
need_64bit_isa=
|
||||
# Selects the object file format reader/writer used by LTO.
|
||||
lto_binary_reader=lto-elf
|
||||
|
||||
# Don't carry these over build->host->target. Please.
|
||||
xm_file=
|
||||
|
@ -1160,13 +1158,11 @@ i[34567]86-*-darwin*)
|
|||
# support.
|
||||
with_cpu=${with_cpu:-generic}
|
||||
tmake_file="${tmake_file} t-slibgcc-darwin i386/t-crtpc i386/t-crtfm"
|
||||
lto_binary_reader=lto-macho
|
||||
;;
|
||||
x86_64-*-darwin*)
|
||||
with_cpu=${with_cpu:-generic}
|
||||
tmake_file="${tmake_file} ${cpu_type}/t-darwin64 t-slibgcc-darwin i386/t-crtpc i386/t-crtfm"
|
||||
tm_file="${tm_file} ${cpu_type}/darwin64.h"
|
||||
lto_binary_reader=lto-macho
|
||||
;;
|
||||
i[34567]86-*-elf*)
|
||||
tm_file="${tm_file} i386/unix.h i386/att.h dbxelf.h elfos.h newlib-stdint.h i386/i386elf.h"
|
||||
|
@ -1421,7 +1417,6 @@ i[34567]86-*-pe | i[34567]86-*-cygwin*)
|
|||
thread_file='posix'
|
||||
fi
|
||||
use_gcc_stdint=wrap
|
||||
lto_binary_reader=lto-coff
|
||||
;;
|
||||
i[34567]86-*-mingw* | x86_64-*-mingw*)
|
||||
tm_file="${tm_file} i386/unix.h i386/bsd.h i386/gas.h dbxcoff.h i386/cygming.h i386/mingw32.h"
|
||||
|
@ -1494,7 +1489,6 @@ i[34567]86-*-mingw* | x86_64-*-mingw*)
|
|||
cxx_target_objs="${cxx_target_objs} winnt-cxx.o msformat-c.o"
|
||||
default_use_cxa_atexit=yes
|
||||
use_gcc_stdint=wrap
|
||||
lto_binary_reader=lto-coff
|
||||
case ${enable_threads} in
|
||||
"" | yes | win32) thread_file='win32'
|
||||
tmake_file="${tmake_file} i386/t-gthr-win32"
|
||||
|
@ -2006,7 +2000,6 @@ powerpc-*-darwin*)
|
|||
;;
|
||||
esac
|
||||
tmake_file="${tmake_file} t-slibgcc-darwin"
|
||||
lto_binary_reader=lto-macho
|
||||
extra_headers=altivec.h
|
||||
;;
|
||||
powerpc64-*-darwin*)
|
||||
|
@ -2014,7 +2007,6 @@ powerpc64-*-darwin*)
|
|||
extra_parts="crt2.o"
|
||||
tmake_file="${tmake_file} ${cpu_type}/t-darwin64 t-slibgcc-darwin"
|
||||
tm_file="${tm_file} ${cpu_type}/darwin8.h ${cpu_type}/darwin64.h"
|
||||
lto_binary_reader=lto-macho
|
||||
extra_headers=altivec.h
|
||||
;;
|
||||
powerpc*-*-freebsd*)
|
||||
|
|
|
@ -355,17 +355,6 @@ not installed in your default library search path.
|
|||
|
||||
Necessary to build libgcj, the GCJ runtime.
|
||||
|
||||
@item libelf version 0.8.12 (or later)
|
||||
|
||||
Necessary to build link-time optimization (LTO) support. It can be
|
||||
downloaded from @uref{http://www.mr511.de/software/libelf-0.8.12.tar.gz},
|
||||
though it is commonly available in several systems. The version in
|
||||
IRIX 6.5 doesn't work since it lacks @file{gelf.h}. The version in
|
||||
Solaris 2 does work.
|
||||
|
||||
The @option{--with-libelf} configure option should be used if libelf is
|
||||
not installed in your default library search patch.
|
||||
|
||||
@end table
|
||||
|
||||
@heading Tools/packages necessary for modifying GCC
|
||||
|
@ -1650,20 +1639,9 @@ default for a native toolchain with an assembler that accepts it and
|
|||
GLIBC 2.11 or above, otherwise disabled.
|
||||
|
||||
@item --enable-lto
|
||||
@itemx --disable-lto
|
||||
Enable support for link-time optimization (LTO). This is enabled by
|
||||
default if a working libelf implementation is found (see
|
||||
@option{--with-libelf}).
|
||||
|
||||
@item --with-libelf=@var{pathname}
|
||||
@itemx --with-libelf-include=@var{pathname}
|
||||
@itemx --with-libelf-lib=@var{pathname}
|
||||
If you do not have libelf installed in a standard location and you
|
||||
want to enable support for link-time optimization (LTO), you can
|
||||
explicitly specify the directory where libelf is installed
|
||||
(@samp{--with-libelf=@var{libelfinstalldir}}). The
|
||||
@option{--with-libelf=@var{libelfinstalldir}} option is shorthand for
|
||||
@option{--with-libelf-include=@var{libelfinstalldir}/include}
|
||||
@option{--with-libelf-lib=@var{libelfinstalldir}/lib}.
|
||||
default, and may be disabled using @option{--disable-lto}.
|
||||
|
||||
@item --enable-gold
|
||||
Enable support for using @command{gold} as the linker. If gold support is
|
||||
|
|
|
@ -1,3 +1,51 @@
|
|||
2010-11-03 Dave Korn <dave.korn.cygwin@gmail.com>
|
||||
|
||||
PR lto/46273
|
||||
* lto-plugin.h: Delete.
|
||||
* lto-plugin-elf.c: Likewise.
|
||||
* lto-plugin-coff.c: Likewise.
|
||||
* configure.ac: Don't use libelf, don't source config.gcc.
|
||||
(LIBELFLIBS): Delete.
|
||||
(LIBELFINC): Delete.
|
||||
(LTO_FORMAT): Delete.
|
||||
(SYM_STYLE): Add AC_DEFINE var, set based on $target.
|
||||
(config.h): Add AC_CONFIG_HEADERS directive.
|
||||
* Makefile.am (LIBELFLIBS): Delete.
|
||||
(LIBELFINC): Delete.
|
||||
(LTO_FORMAT): Delete.
|
||||
(DEFS): Import.
|
||||
(AM_CPPFLAGS): Use it. Don't use LIBELFINC.
|
||||
(liblto_plugin_la_SOURCES): Don't use LTO_FORMAT, don't include
|
||||
any object-format-specific source file in the link.
|
||||
(liblto_plugin_la_LIBADD): Don't use LIBELFLIBS.
|
||||
* config.h.in: Generate.
|
||||
* configure: Regenerate.
|
||||
* Makefile.in: Likewise.
|
||||
* lto-plugin.c (O_BINARY): Definition moved here from lto-plugin.h.
|
||||
(LTO_SEGMENT_NAME): New definition.
|
||||
(LTO_SECTION_PREFIX): Definition moved here from lto-plugin.h.
|
||||
(LTO_SECTION_PREFIX_LEN): New definition.
|
||||
(struct sym_aux): Struct definition moved here from lto-plugin.h.
|
||||
(struct plugin_symtab): Likewise.
|
||||
(struct plugin_objfile): Likewise.
|
||||
(struct plugin_objfile): New struct def.
|
||||
(enum symbol_style): New enum type.
|
||||
(add_symbols): Make static.
|
||||
(claimed_files): Likewise.
|
||||
(num_claimed_files): Likewise.
|
||||
(sym_style): New global.
|
||||
(check): Make static.
|
||||
(parse_table_entry): Likewise. Respect sym_style when extracting
|
||||
symbol from symtab entry.
|
||||
(translate): Make static.
|
||||
(resolve_conflicts): Likewise.
|
||||
(process_symtab): New function, per-section callback version of
|
||||
old object-format-specific handling from deleted lto-plugin-elf.c.
|
||||
(claim_file_handler): Convert ELF-specific version from deleted
|
||||
lto-plugin-elf.c to simple_object interface and move here.
|
||||
(process_options): Allow new '-sym-style=' option.
|
||||
(onload): Don't call deleted onload_format_checks hook.
|
||||
|
||||
2010-10-11 Kai Tietz <kai.tietz@onevision.com>
|
||||
|
||||
* lto-plugin.c (dump_symtab): Correct printf argument type.
|
||||
|
|
|
@ -7,20 +7,13 @@ gcc_version := $(shell cat $(top_srcdir)/../gcc/BASE-VER)
|
|||
target_noncanonical := @target_noncanonical@
|
||||
libexecsubdir := $(libexecdir)/gcc/$(target_noncanonical)/$(gcc_version)
|
||||
|
||||
# How to find libelf
|
||||
LIBELFLIBS = @LIBELFLIBS@
|
||||
LIBELFINC = @LIBELFINC@
|
||||
|
||||
# Which object format to parse.
|
||||
LTO_FORMAT = @LTO_FORMAT@
|
||||
|
||||
AM_CPPFLAGS = -I$(top_srcdir)/../include $(LIBELFINC)
|
||||
AM_CPPFLAGS = -I$(top_srcdir)/../include $(DEFS)
|
||||
AM_CFLAGS = -Wall -Werror
|
||||
|
||||
libexecsub_LTLIBRARIES = liblto_plugin.la
|
||||
|
||||
liblto_plugin_la_SOURCES = lto-plugin.c lto-plugin-$(LTO_FORMAT).c
|
||||
liblto_plugin_la_LIBADD = $(LIBELFLIBS) \
|
||||
liblto_plugin_la_SOURCES = lto-plugin.c
|
||||
liblto_plugin_la_LIBADD = \
|
||||
$(if $(wildcard ../libiberty/pic/libiberty.a),../libiberty/pic/libiberty.a,)
|
||||
liblto_plugin_la_LDFLAGS = -no-undefined -bindir $(libexecsubdir) \
|
||||
$(if $(wildcard ../libiberty/pic/libiberty.a),,-Wc,../libiberty/libiberty.a)
|
||||
|
|
|
@ -36,10 +36,11 @@ PRE_UNINSTALL = :
|
|||
POST_UNINSTALL = :
|
||||
build_triplet = @build@
|
||||
host_triplet = @host@
|
||||
target_triplet = @target@
|
||||
subdir = .
|
||||
DIST_COMMON = ChangeLog $(srcdir)/Makefile.in $(srcdir)/Makefile.am \
|
||||
$(top_srcdir)/configure $(am__configure_deps) \
|
||||
$(srcdir)/../mkinstalldirs
|
||||
$(srcdir)/config.h.in $(srcdir)/../mkinstalldirs
|
||||
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
|
||||
am__aclocal_m4_deps = $(top_srcdir)/../config/acx.m4 \
|
||||
$(top_srcdir)/../config/depstand.m4 \
|
||||
|
@ -53,6 +54,7 @@ am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
|
|||
am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \
|
||||
configure.lineno config.status.lineno
|
||||
mkinstalldirs = $(SHELL) $(top_srcdir)/../mkinstalldirs
|
||||
CONFIG_HEADER = config.h
|
||||
CONFIG_CLEAN_FILES =
|
||||
CONFIG_CLEAN_VPATH_FILES =
|
||||
am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
|
||||
|
@ -78,11 +80,9 @@ am__base_list = \
|
|||
sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
|
||||
am__installdirs = "$(DESTDIR)$(libexecsubdir)"
|
||||
LTLIBRARIES = $(libexecsub_LTLIBRARIES)
|
||||
am__DEPENDENCIES_1 =
|
||||
liblto_plugin_la_DEPENDENCIES = $(am__DEPENDENCIES_1) $(if $(wildcard \
|
||||
liblto_plugin_la_DEPENDENCIES = $(if $(wildcard \
|
||||
../libiberty/pic/libiberty.a),../libiberty/pic/libiberty.a,)
|
||||
am_liblto_plugin_la_OBJECTS = lto-plugin.lo \
|
||||
lto-plugin-$(LTO_FORMAT).lo
|
||||
am_liblto_plugin_la_OBJECTS = lto-plugin.lo
|
||||
liblto_plugin_la_OBJECTS = $(am_liblto_plugin_la_OBJECTS)
|
||||
liblto_plugin_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
|
||||
$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
|
||||
|
@ -133,19 +133,12 @@ INSTALL_SCRIPT = @INSTALL_SCRIPT@
|
|||
INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
|
||||
LD = @LD@
|
||||
LDFLAGS = @LDFLAGS@
|
||||
LIBELFINC = @LIBELFINC@
|
||||
|
||||
# How to find libelf
|
||||
LIBELFLIBS = @LIBELFLIBS@
|
||||
LIBOBJS = @LIBOBJS@
|
||||
LIBS = @LIBS@
|
||||
LIBTOOL = @LIBTOOL@
|
||||
LIPO = @LIPO@
|
||||
LN_S = @LN_S@
|
||||
LTLIBOBJS = @LTLIBOBJS@
|
||||
|
||||
# Which object format to parse.
|
||||
LTO_FORMAT = @LTO_FORMAT@
|
||||
MAINT = @MAINT@
|
||||
MAKEINFO = @MAKEINFO@
|
||||
MKDIR_P = @MKDIR_P@
|
||||
|
@ -219,9 +212,13 @@ sbindir = @sbindir@
|
|||
sharedstatedir = @sharedstatedir@
|
||||
srcdir = @srcdir@
|
||||
sysconfdir = @sysconfdir@
|
||||
target = @target@
|
||||
target_alias = @target_alias@
|
||||
target_cpu = @target_cpu@
|
||||
target_noncanonical := @target_noncanonical@
|
||||
target_os = @target_os@
|
||||
target_subdir = @target_subdir@
|
||||
target_vendor = @target_vendor@
|
||||
top_build_prefix = @top_build_prefix@
|
||||
top_builddir = @top_builddir@
|
||||
top_srcdir = @top_srcdir@
|
||||
|
@ -229,17 +226,18 @@ ACLOCAL_AMFLAGS = -I .. -I ../config
|
|||
AUTOMAKE_OPTIONS = no-dependencies
|
||||
gcc_version := $(shell cat $(top_srcdir)/../gcc/BASE-VER)
|
||||
libexecsubdir := $(libexecdir)/gcc/$(target_noncanonical)/$(gcc_version)
|
||||
AM_CPPFLAGS = -I$(top_srcdir)/../include $(LIBELFINC)
|
||||
AM_CPPFLAGS = -I$(top_srcdir)/../include $(DEFS)
|
||||
AM_CFLAGS = -Wall -Werror
|
||||
libexecsub_LTLIBRARIES = liblto_plugin.la
|
||||
liblto_plugin_la_SOURCES = lto-plugin.c lto-plugin-$(LTO_FORMAT).c
|
||||
liblto_plugin_la_LIBADD = $(LIBELFLIBS) \
|
||||
liblto_plugin_la_SOURCES = lto-plugin.c
|
||||
liblto_plugin_la_LIBADD = \
|
||||
$(if $(wildcard ../libiberty/pic/libiberty.a),../libiberty/pic/libiberty.a,)
|
||||
|
||||
liblto_plugin_la_LDFLAGS = -no-undefined -bindir $(libexecsubdir) \
|
||||
$(if $(wildcard ../libiberty/pic/libiberty.a),,-Wc,../libiberty/libiberty.a)
|
||||
|
||||
all: all-am
|
||||
all: config.h
|
||||
$(MAKE) $(AM_MAKEFLAGS) all-am
|
||||
|
||||
.SUFFIXES:
|
||||
.SUFFIXES: .c .lo .o .obj
|
||||
|
@ -277,6 +275,23 @@ $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
|
|||
$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
|
||||
$(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS)
|
||||
$(am__aclocal_m4_deps):
|
||||
|
||||
config.h: stamp-h1
|
||||
@if test ! -f $@; then \
|
||||
rm -f stamp-h1; \
|
||||
$(MAKE) $(AM_MAKEFLAGS) stamp-h1; \
|
||||
else :; fi
|
||||
|
||||
stamp-h1: $(srcdir)/config.h.in $(top_builddir)/config.status
|
||||
@rm -f stamp-h1
|
||||
cd $(top_builddir) && $(SHELL) ./config.status config.h
|
||||
$(srcdir)/config.h.in: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
|
||||
($(am__cd) $(top_srcdir) && $(AUTOHEADER))
|
||||
rm -f stamp-h1
|
||||
touch $@
|
||||
|
||||
distclean-hdr:
|
||||
-rm -f config.h stamp-h1
|
||||
install-libexecsubLTLIBRARIES: $(libexecsub_LTLIBRARIES)
|
||||
@$(NORMAL_INSTALL)
|
||||
test -z "$(libexecsubdir)" || $(MKDIR_P) "$(DESTDIR)$(libexecsubdir)"
|
||||
|
@ -345,11 +360,11 @@ ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
|
|||
mkid -fID $$unique
|
||||
tags: TAGS
|
||||
|
||||
TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
|
||||
TAGS: $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \
|
||||
$(TAGS_FILES) $(LISP)
|
||||
set x; \
|
||||
here=`pwd`; \
|
||||
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
|
||||
list='$(SOURCES) $(HEADERS) config.h.in $(LISP) $(TAGS_FILES)'; \
|
||||
unique=`for i in $$list; do \
|
||||
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
|
||||
done | \
|
||||
|
@ -367,9 +382,9 @@ TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
|
|||
fi; \
|
||||
fi
|
||||
ctags: CTAGS
|
||||
CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
|
||||
CTAGS: $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \
|
||||
$(TAGS_FILES) $(LISP)
|
||||
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
|
||||
list='$(SOURCES) $(HEADERS) config.h.in $(LISP) $(TAGS_FILES)'; \
|
||||
unique=`for i in $$list; do \
|
||||
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
|
||||
done | \
|
||||
|
@ -388,7 +403,7 @@ distclean-tags:
|
|||
-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
|
||||
check-am: all-am
|
||||
check: check-am
|
||||
all-am: Makefile $(LTLIBRARIES)
|
||||
all-am: Makefile $(LTLIBRARIES) config.h
|
||||
installdirs:
|
||||
for dir in "$(DESTDIR)$(libexecsubdir)"; do \
|
||||
test -z "$$dir" || $(MKDIR_P) "$$dir"; \
|
||||
|
@ -427,7 +442,7 @@ distclean: distclean-am
|
|||
-rm -f $(am__CONFIG_DISTCLEAN_FILES)
|
||||
-rm -f Makefile
|
||||
distclean-am: clean-am distclean-compile distclean-generic \
|
||||
distclean-libtool distclean-tags
|
||||
distclean-hdr distclean-libtool distclean-tags
|
||||
|
||||
dvi: dvi-am
|
||||
|
||||
|
@ -490,11 +505,11 @@ ps-am:
|
|||
|
||||
uninstall-am: uninstall-libexecsubLTLIBRARIES
|
||||
|
||||
.MAKE: install-am install-strip
|
||||
.MAKE: all install-am install-strip
|
||||
|
||||
.PHONY: CTAGS GTAGS all all-am am--refresh check check-am clean \
|
||||
clean-generic clean-libexecsubLTLIBRARIES clean-libtool ctags \
|
||||
distclean distclean-compile distclean-generic \
|
||||
distclean distclean-compile distclean-generic distclean-hdr \
|
||||
distclean-libtool distclean-tags dvi dvi-am html html-am info \
|
||||
info-am install install-am install-data install-data-am \
|
||||
install-dvi install-dvi-am install-exec install-exec-am \
|
||||
|
|
80
lto-plugin/config.h.in
Normal file
80
lto-plugin/config.h.in
Normal file
|
@ -0,0 +1,80 @@
|
|||
/* config.h.in. Generated from configure.ac by autoheader. */
|
||||
|
||||
/* Define to 1 if you have the <dlfcn.h> header file. */
|
||||
#undef HAVE_DLFCN_H
|
||||
|
||||
/* Define to 1 if you have the <inttypes.h> header file. */
|
||||
#undef HAVE_INTTYPES_H
|
||||
|
||||
/* Define to 1 if you have the <memory.h> header file. */
|
||||
#undef HAVE_MEMORY_H
|
||||
|
||||
/* Define to 1 if you have the <stdint.h> header file. */
|
||||
#undef HAVE_STDINT_H
|
||||
|
||||
/* Define to 1 if you have the <stdlib.h> header file. */
|
||||
#undef HAVE_STDLIB_H
|
||||
|
||||
/* Define to 1 if you have the <strings.h> header file. */
|
||||
#undef HAVE_STRINGS_H
|
||||
|
||||
/* Define to 1 if you have the <string.h> header file. */
|
||||
#undef HAVE_STRING_H
|
||||
|
||||
/* Define to 1 if you have the <sys/stat.h> header file. */
|
||||
#undef HAVE_SYS_STAT_H
|
||||
|
||||
/* Define to 1 if you have the <sys/types.h> header file. */
|
||||
#undef HAVE_SYS_TYPES_H
|
||||
|
||||
/* Define to 1 if you have the <unistd.h> header file. */
|
||||
#undef HAVE_UNISTD_H
|
||||
|
||||
/* Define to the sub-directory in which libtool stores uninstalled libraries.
|
||||
*/
|
||||
#undef LT_OBJDIR
|
||||
|
||||
/* Name of package */
|
||||
#undef PACKAGE
|
||||
|
||||
/* Define to the address where bug reports for this package should be sent. */
|
||||
#undef PACKAGE_BUGREPORT
|
||||
|
||||
/* Define to the full name of this package. */
|
||||
#undef PACKAGE_NAME
|
||||
|
||||
/* Define to the full name and version of this package. */
|
||||
#undef PACKAGE_STRING
|
||||
|
||||
/* Define to the one symbol short name of this package. */
|
||||
#undef PACKAGE_TARNAME
|
||||
|
||||
/* Define to the home page for this package. */
|
||||
#undef PACKAGE_URL
|
||||
|
||||
/* Define to the version of this package. */
|
||||
#undef PACKAGE_VERSION
|
||||
|
||||
/* Define to 1 if you have the ANSI C header files. */
|
||||
#undef STDC_HEADERS
|
||||
|
||||
/* Default symbol style */
|
||||
#undef SYM_STYLE
|
||||
|
||||
/* Version number of package */
|
||||
#undef VERSION
|
||||
|
||||
/* Number of bits in a file offset, on hosts where this is settable. */
|
||||
#undef _FILE_OFFSET_BITS
|
||||
|
||||
/* Define for large files, on AIX-style hosts. */
|
||||
#undef _LARGE_FILES
|
||||
|
||||
/* Define for Solaris 2.5.1 so the uint64_t typedef from <sys/synch.h>,
|
||||
<pthread.h>, or <semaphore.h> is not used. If the typedef were allowed, the
|
||||
#define below would cause a syntax error. */
|
||||
#undef _UINT64_T
|
||||
|
||||
/* Define to the type of an unsigned integer type of width exactly 64 bits if
|
||||
such a type exists and the standard includes do not define it. */
|
||||
#undef uint64_t
|
270
lto-plugin/configure
vendored
270
lto-plugin/configure
vendored
|
@ -601,7 +601,6 @@ ac_subst_vars='am__EXEEXT_FALSE
|
|||
am__EXEEXT_TRUE
|
||||
LTLIBOBJS
|
||||
LIBOBJS
|
||||
LTO_FORMAT
|
||||
target_noncanonical
|
||||
CPP
|
||||
OTOOL64
|
||||
|
@ -622,8 +621,6 @@ EGREP
|
|||
GREP
|
||||
SED
|
||||
LIBTOOL
|
||||
LIBELFINC
|
||||
LIBELFLIBS
|
||||
am__fastdepCC_FALSE
|
||||
am__fastdepCC_TRUE
|
||||
CCDEPMODE
|
||||
|
@ -742,8 +739,6 @@ CFLAGS
|
|||
LDFLAGS
|
||||
LIBS
|
||||
CPPFLAGS
|
||||
LIBELFLIBS
|
||||
LIBELFINC
|
||||
CPP'
|
||||
|
||||
|
||||
|
@ -1392,8 +1387,6 @@ Some influential environment variables:
|
|||
LIBS libraries to pass to the linker, e.g. -l<library>
|
||||
CPPFLAGS C/C++/Objective C preprocessor flags, e.g. -I<include dir> if
|
||||
you have headers in a nonstandard directory <include dir>
|
||||
LIBELFLIBS How to link libelf
|
||||
LIBELFINC How to find libelf include files
|
||||
CPP C preprocessor
|
||||
|
||||
Use these variables to override the choices made by `configure' or to help
|
||||
|
@ -3975,8 +3968,6 @@ rm -rf conftest*
|
|||
fi
|
||||
fi
|
||||
|
||||
|
||||
|
||||
case `pwd` in
|
||||
*\ * | *\ *)
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&5
|
||||
|
@ -10443,7 +10434,7 @@ else
|
|||
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
|
||||
lt_status=$lt_dlunknown
|
||||
cat > conftest.$ac_ext <<_LT_EOF
|
||||
#line 10446 "configure"
|
||||
#line 10437 "configure"
|
||||
#include "confdefs.h"
|
||||
|
||||
#if HAVE_DLFCN_H
|
||||
|
@ -10549,7 +10540,7 @@ else
|
|||
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
|
||||
lt_status=$lt_dlunknown
|
||||
cat > conftest.$ac_ext <<_LT_EOF
|
||||
#line 10552 "configure"
|
||||
#line 10543 "configure"
|
||||
#include "confdefs.h"
|
||||
|
||||
#if HAVE_DLFCN_H
|
||||
|
@ -10787,14 +10778,24 @@ CC="$lt_save_CC"
|
|||
|
||||
|
||||
|
||||
. ${srcdir}/../gcc/config.gcc
|
||||
case ${lto_binary_reader} in
|
||||
*coff*) LTO_FORMAT=coff ;;
|
||||
*elf*) LTO_FORMAT=elf ;;
|
||||
*) as_fn_error "LTO plugin is not supported on this target." "$LINENO" 5 ;;
|
||||
# Trying to get this information from gcc's config is tricky.
|
||||
case $target in
|
||||
x86_64*-mingw*)
|
||||
|
||||
$as_echo "#define SYM_STYLE ss_none" >>confdefs.h
|
||||
|
||||
;;
|
||||
*-cygwin* | i?86*-mingw* )
|
||||
|
||||
$as_echo "#define SYM_STYLE ss_win32" >>confdefs.h
|
||||
|
||||
;;
|
||||
*)
|
||||
|
||||
$as_echo "#define SYM_STYLE ss_none" >>confdefs.h
|
||||
|
||||
;;
|
||||
esac
|
||||
|
||||
|
||||
ac_fn_c_find_uintX_t "$LINENO" "64" "ac_cv_c_uint64_t"
|
||||
case $ac_cv_c_uint64_t in #(
|
||||
no|yes) ;; #(
|
||||
|
@ -10811,6 +10812,8 @@ _ACEOF
|
|||
|
||||
ac_config_files="$ac_config_files Makefile"
|
||||
|
||||
ac_config_headers="$ac_config_headers config.h"
|
||||
|
||||
cat >confcache <<\_ACEOF
|
||||
# This file is a shell script that caches the results of configure
|
||||
# tests run on this system so they can be shared between configure
|
||||
|
@ -10890,43 +10893,7 @@ test "x$prefix" = xNONE && prefix=$ac_default_prefix
|
|||
# Let make expand exec_prefix.
|
||||
test "x$exec_prefix" = xNONE && exec_prefix='${prefix}'
|
||||
|
||||
# Transform confdefs.h into DEFS.
|
||||
# Protect against shell expansion while executing Makefile rules.
|
||||
# Protect against Makefile macro expansion.
|
||||
#
|
||||
# If the first sed substitution is executed (which looks for macros that
|
||||
# take arguments), then branch to the quote section. Otherwise,
|
||||
# look for a macro that doesn't take arguments.
|
||||
ac_script='
|
||||
:mline
|
||||
/\\$/{
|
||||
N
|
||||
s,\\\n,,
|
||||
b mline
|
||||
}
|
||||
t clear
|
||||
:clear
|
||||
s/^[ ]*#[ ]*define[ ][ ]*\([^ (][^ (]*([^)]*)\)[ ]*\(.*\)/-D\1=\2/g
|
||||
t quote
|
||||
s/^[ ]*#[ ]*define[ ][ ]*\([^ ][^ ]*\)[ ]*\(.*\)/-D\1=\2/g
|
||||
t quote
|
||||
b any
|
||||
:quote
|
||||
s/[ `~#$^&*(){}\\|;'\''"<>?]/\\&/g
|
||||
s/\[/\\&/g
|
||||
s/\]/\\&/g
|
||||
s/\$/$$/g
|
||||
H
|
||||
:any
|
||||
${
|
||||
g
|
||||
s/^\n//
|
||||
s/\n/ /g
|
||||
p
|
||||
}
|
||||
'
|
||||
DEFS=`sed -n "$ac_script" confdefs.h`
|
||||
|
||||
DEFS=-DHAVE_CONFIG_H
|
||||
|
||||
ac_libobjs=
|
||||
ac_ltlibobjs=
|
||||
|
@ -11390,11 +11357,15 @@ case $ac_config_files in *"
|
|||
"*) set x $ac_config_files; shift; ac_config_files=$*;;
|
||||
esac
|
||||
|
||||
case $ac_config_headers in *"
|
||||
"*) set x $ac_config_headers; shift; ac_config_headers=$*;;
|
||||
esac
|
||||
|
||||
|
||||
cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
|
||||
# Files that config.status was made for.
|
||||
config_files="$ac_config_files"
|
||||
config_headers="$ac_config_headers"
|
||||
config_commands="$ac_config_commands"
|
||||
|
||||
_ACEOF
|
||||
|
@ -11415,10 +11386,15 @@ Usage: $0 [OPTION]... [TAG]...
|
|||
--recheck update $as_me by reconfiguring in the same conditions
|
||||
--file=FILE[:TEMPLATE]
|
||||
instantiate the configuration file FILE
|
||||
--header=FILE[:TEMPLATE]
|
||||
instantiate the configuration header FILE
|
||||
|
||||
Configuration files:
|
||||
$config_files
|
||||
|
||||
Configuration headers:
|
||||
$config_headers
|
||||
|
||||
Configuration commands:
|
||||
$config_commands
|
||||
|
||||
|
@ -11476,7 +11452,18 @@ do
|
|||
esac
|
||||
as_fn_append CONFIG_FILES " '$ac_optarg'"
|
||||
ac_need_defaults=false;;
|
||||
--he | --h | --help | --hel | -h )
|
||||
--header | --heade | --head | --hea )
|
||||
$ac_shift
|
||||
case $ac_optarg in
|
||||
*\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;;
|
||||
esac
|
||||
as_fn_append CONFIG_HEADERS " '$ac_optarg'"
|
||||
ac_need_defaults=false;;
|
||||
--he | --h)
|
||||
# Conflict between --help and --header
|
||||
as_fn_error "ambiguous option: \`$1'
|
||||
Try \`$0 --help' for more information.";;
|
||||
--help | --hel | -h )
|
||||
$as_echo "$ac_cs_usage"; exit ;;
|
||||
-q | -quiet | --quiet | --quie | --qui | --qu | --q \
|
||||
| -silent | --silent | --silen | --sile | --sil | --si | --s)
|
||||
|
@ -11800,6 +11787,7 @@ do
|
|||
"depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;;
|
||||
"libtool") CONFIG_COMMANDS="$CONFIG_COMMANDS libtool" ;;
|
||||
"Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;;
|
||||
"config.h") CONFIG_HEADERS="$CONFIG_HEADERS config.h" ;;
|
||||
|
||||
*) as_fn_error "invalid argument: \`$ac_config_target'" "$LINENO" 5;;
|
||||
esac
|
||||
|
@ -11812,6 +11800,7 @@ done
|
|||
# bizarre bug on SunOS 4.1.3.
|
||||
if $ac_need_defaults; then
|
||||
test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files
|
||||
test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers
|
||||
test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands
|
||||
fi
|
||||
|
||||
|
@ -11990,8 +11979,116 @@ fi
|
|||
cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
|
||||
fi # test -n "$CONFIG_FILES"
|
||||
|
||||
# Set up the scripts for CONFIG_HEADERS section.
|
||||
# No need to generate them if there are no CONFIG_HEADERS.
|
||||
# This happens for instance with `./config.status Makefile'.
|
||||
if test -n "$CONFIG_HEADERS"; then
|
||||
cat >"$tmp/defines.awk" <<\_ACAWK ||
|
||||
BEGIN {
|
||||
_ACEOF
|
||||
|
||||
eval set X " :F $CONFIG_FILES :C $CONFIG_COMMANDS"
|
||||
# Transform confdefs.h into an awk script `defines.awk', embedded as
|
||||
# here-document in config.status, that substitutes the proper values into
|
||||
# config.h.in to produce config.h.
|
||||
|
||||
# Create a delimiter string that does not exist in confdefs.h, to ease
|
||||
# handling of long lines.
|
||||
ac_delim='%!_!# '
|
||||
for ac_last_try in false false :; do
|
||||
ac_t=`sed -n "/$ac_delim/p" confdefs.h`
|
||||
if test -z "$ac_t"; then
|
||||
break
|
||||
elif $ac_last_try; then
|
||||
as_fn_error "could not make $CONFIG_HEADERS" "$LINENO" 5
|
||||
else
|
||||
ac_delim="$ac_delim!$ac_delim _$ac_delim!! "
|
||||
fi
|
||||
done
|
||||
|
||||
# For the awk script, D is an array of macro values keyed by name,
|
||||
# likewise P contains macro parameters if any. Preserve backslash
|
||||
# newline sequences.
|
||||
|
||||
ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]*
|
||||
sed -n '
|
||||
s/.\{148\}/&'"$ac_delim"'/g
|
||||
t rset
|
||||
:rset
|
||||
s/^[ ]*#[ ]*define[ ][ ]*/ /
|
||||
t def
|
||||
d
|
||||
:def
|
||||
s/\\$//
|
||||
t bsnl
|
||||
s/["\\]/\\&/g
|
||||
s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\
|
||||
D["\1"]=" \3"/p
|
||||
s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2"/p
|
||||
d
|
||||
:bsnl
|
||||
s/["\\]/\\&/g
|
||||
s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\
|
||||
D["\1"]=" \3\\\\\\n"\\/p
|
||||
t cont
|
||||
s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2\\\\\\n"\\/p
|
||||
t cont
|
||||
d
|
||||
:cont
|
||||
n
|
||||
s/.\{148\}/&'"$ac_delim"'/g
|
||||
t clear
|
||||
:clear
|
||||
s/\\$//
|
||||
t bsnlc
|
||||
s/["\\]/\\&/g; s/^/"/; s/$/"/p
|
||||
d
|
||||
:bsnlc
|
||||
s/["\\]/\\&/g; s/^/"/; s/$/\\\\\\n"\\/p
|
||||
b cont
|
||||
' <confdefs.h | sed '
|
||||
s/'"$ac_delim"'/"\\\
|
||||
"/g' >>$CONFIG_STATUS || ac_write_fail=1
|
||||
|
||||
cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
|
||||
for (key in D) D_is_set[key] = 1
|
||||
FS = ""
|
||||
}
|
||||
/^[\t ]*#[\t ]*(define|undef)[\t ]+$ac_word_re([\t (]|\$)/ {
|
||||
line = \$ 0
|
||||
split(line, arg, " ")
|
||||
if (arg[1] == "#") {
|
||||
defundef = arg[2]
|
||||
mac1 = arg[3]
|
||||
} else {
|
||||
defundef = substr(arg[1], 2)
|
||||
mac1 = arg[2]
|
||||
}
|
||||
split(mac1, mac2, "(") #)
|
||||
macro = mac2[1]
|
||||
prefix = substr(line, 1, index(line, defundef) - 1)
|
||||
if (D_is_set[macro]) {
|
||||
# Preserve the white space surrounding the "#".
|
||||
print prefix "define", macro P[macro] D[macro]
|
||||
next
|
||||
} else {
|
||||
# Replace #undef with comments. This is necessary, for example,
|
||||
# in the case of _POSIX_SOURCE, which is predefined and required
|
||||
# on some systems where configure will not decide to define it.
|
||||
if (defundef == "undef") {
|
||||
print "/*", prefix defundef, macro, "*/"
|
||||
next
|
||||
}
|
||||
}
|
||||
}
|
||||
{ print }
|
||||
_ACAWK
|
||||
_ACEOF
|
||||
cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
|
||||
as_fn_error "could not setup config headers machinery" "$LINENO" 5
|
||||
fi # test -n "$CONFIG_HEADERS"
|
||||
|
||||
|
||||
eval set X " :F $CONFIG_FILES :H $CONFIG_HEADERS :C $CONFIG_COMMANDS"
|
||||
shift
|
||||
for ac_tag
|
||||
do
|
||||
|
@ -12209,7 +12306,64 @@ which seems to be undefined. Please make sure it is defined." >&2;}
|
|||
esac \
|
||||
|| as_fn_error "could not create $ac_file" "$LINENO" 5
|
||||
;;
|
||||
|
||||
:H)
|
||||
#
|
||||
# CONFIG_HEADER
|
||||
#
|
||||
if test x"$ac_file" != x-; then
|
||||
{
|
||||
$as_echo "/* $configure_input */" \
|
||||
&& eval '$AWK -f "$tmp/defines.awk"' "$ac_file_inputs"
|
||||
} >"$tmp/config.h" \
|
||||
|| as_fn_error "could not create $ac_file" "$LINENO" 5
|
||||
if diff "$ac_file" "$tmp/config.h" >/dev/null 2>&1; then
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5
|
||||
$as_echo "$as_me: $ac_file is unchanged" >&6;}
|
||||
else
|
||||
rm -f "$ac_file"
|
||||
mv "$tmp/config.h" "$ac_file" \
|
||||
|| as_fn_error "could not create $ac_file" "$LINENO" 5
|
||||
fi
|
||||
else
|
||||
$as_echo "/* $configure_input */" \
|
||||
&& eval '$AWK -f "$tmp/defines.awk"' "$ac_file_inputs" \
|
||||
|| as_fn_error "could not create -" "$LINENO" 5
|
||||
fi
|
||||
# Compute "$ac_file"'s index in $config_headers.
|
||||
_am_arg="$ac_file"
|
||||
_am_stamp_count=1
|
||||
for _am_header in $config_headers :; do
|
||||
case $_am_header in
|
||||
$_am_arg | $_am_arg:* )
|
||||
break ;;
|
||||
* )
|
||||
_am_stamp_count=`expr $_am_stamp_count + 1` ;;
|
||||
esac
|
||||
done
|
||||
echo "timestamp for $_am_arg" >`$as_dirname -- "$_am_arg" ||
|
||||
$as_expr X"$_am_arg" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
|
||||
X"$_am_arg" : 'X\(//\)[^/]' \| \
|
||||
X"$_am_arg" : 'X\(//\)$' \| \
|
||||
X"$_am_arg" : 'X\(/\)' \| . 2>/dev/null ||
|
||||
$as_echo X"$_am_arg" |
|
||||
sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
|
||||
s//\1/
|
||||
q
|
||||
}
|
||||
/^X\(\/\/\)[^/].*/{
|
||||
s//\1/
|
||||
q
|
||||
}
|
||||
/^X\(\/\/\)$/{
|
||||
s//\1/
|
||||
q
|
||||
}
|
||||
/^X\(\/\).*/{
|
||||
s//\1/
|
||||
q
|
||||
}
|
||||
s/.*/./; q'`/stamp-h$_am_stamp_count
|
||||
;;
|
||||
|
||||
:C) { $as_echo "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5
|
||||
$as_echo "$as_me: executing $ac_file commands" >&6;}
|
||||
|
|
|
@ -6,18 +6,21 @@ AM_INIT_AUTOMAKE([foreign no-dist])
|
|||
AM_MAINTAINER_MODE
|
||||
AC_PROG_CC
|
||||
AC_SYS_LARGEFILE
|
||||
AC_ARG_VAR(LIBELFLIBS,[How to link libelf])
|
||||
AC_ARG_VAR(LIBELFINC,[How to find libelf include files])
|
||||
AM_PROG_LIBTOOL
|
||||
AC_SUBST(target_noncanonical)
|
||||
. ${srcdir}/../gcc/config.gcc
|
||||
case ${lto_binary_reader} in
|
||||
*coff*) LTO_FORMAT=coff ;;
|
||||
*elf*) LTO_FORMAT=elf ;;
|
||||
*) AC_MSG_ERROR([LTO plugin is not supported on this target.]) ;;
|
||||
# Trying to get this information from gcc's config is tricky.
|
||||
case $target in
|
||||
x86_64*-mingw*)
|
||||
AC_DEFINE([SYM_STYLE], [ss_none], [Default symbol style])
|
||||
;;
|
||||
*-cygwin* | i?86*-mingw* )
|
||||
AC_DEFINE([SYM_STYLE], [ss_win32], [Default symbol style])
|
||||
;;
|
||||
*)
|
||||
AC_DEFINE([SYM_STYLE], [ss_none], [Default symbol style])
|
||||
;;
|
||||
esac
|
||||
|
||||
AC_SUBST(LTO_FORMAT)
|
||||
AC_TYPE_UINT64_T
|
||||
AC_CONFIG_FILES(Makefile)
|
||||
AC_CONFIG_HEADERS(config.h)
|
||||
AC_OUTPUT
|
||||
|
|
|
@ -1,38 +0,0 @@
|
|||
/* LTO plugin for gold.
|
||||
Copyright (C) 2010 Free Software Foundation, Inc.
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 3, or (at your option)
|
||||
any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful, but
|
||||
WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; see the file COPYING3. If not see
|
||||
<http://www.gnu.org/licenses/>. */
|
||||
|
||||
/* Common definitions that the object format dependent code needs. */
|
||||
#include "lto-plugin.h"
|
||||
|
||||
/* Callback used by gold to check if the plugin will claim FILE. Writes
|
||||
the result in CLAIMED. */
|
||||
|
||||
enum ld_plugin_status
|
||||
claim_file_handler (const struct ld_plugin_input_file *file, int *claimed)
|
||||
{
|
||||
/* To be implemented; for now, simply do nothing. */
|
||||
return LDPS_OK;
|
||||
}
|
||||
|
||||
/* Method called first thing at onload time to perform sanity checks. */
|
||||
|
||||
enum ld_plugin_status
|
||||
onload_format_checks (struct ld_plugin_tv *tv)
|
||||
{
|
||||
return LDPS_OK;
|
||||
}
|
||||
|
|
@ -1,157 +0,0 @@
|
|||
/* LTO plugin for gold.
|
||||
Copyright (C) 2009, 2010 Free Software Foundation, Inc.
|
||||
Contributed by Rafael Avila de Espindola (espindola@google.com).
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 3, or (at your option)
|
||||
any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful, but
|
||||
WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; see the file COPYING3. If not see
|
||||
<http://www.gnu.org/licenses/>. */
|
||||
|
||||
#include <assert.h>
|
||||
#include <string.h>
|
||||
#include <stdio.h>
|
||||
#include <libiberty.h>
|
||||
#include <stdlib.h>
|
||||
#include <inttypes.h>
|
||||
|
||||
/* The presence of gelf.h is checked by the toplevel configure script. */
|
||||
#include <gelf.h>
|
||||
|
||||
/* Common definitions that the object format dependent code needs. */
|
||||
#include "lto-plugin.h"
|
||||
|
||||
/* Process all lto symtabs of file ELF. */
|
||||
|
||||
static int
|
||||
process_symtab (Elf *elf, struct plugin_symtab *out)
|
||||
{
|
||||
int found = 0;
|
||||
Elf_Scn *section = 0;
|
||||
GElf_Ehdr header;
|
||||
GElf_Ehdr *t = gelf_getehdr (elf, &header);
|
||||
if (t == NULL)
|
||||
return 0;
|
||||
assert (t == &header);
|
||||
|
||||
while ((section = elf_nextscn(elf, section)) != 0)
|
||||
{
|
||||
GElf_Shdr shdr;
|
||||
GElf_Shdr *tshdr = gelf_getshdr (section, &shdr);
|
||||
Elf_Data *symtab;
|
||||
const char *t;
|
||||
assert (tshdr == &shdr);
|
||||
t = elf_strptr (elf, header.e_shstrndx, shdr.sh_name);
|
||||
assert (t != NULL);
|
||||
if (strncmp (t, LTO_SECTION_PREFIX, strlen (LTO_SECTION_PREFIX)) == 0)
|
||||
{
|
||||
char *s = strrchr (t, '.');
|
||||
if (s)
|
||||
sscanf (s, ".%x", &out->id);
|
||||
symtab = elf_getdata (section, NULL);
|
||||
translate (symtab->d_buf, symtab->d_buf + symtab->d_size, out);
|
||||
found++;
|
||||
}
|
||||
}
|
||||
return found;
|
||||
}
|
||||
|
||||
/* Callback used by gold to check if the plugin will claim FILE. Writes
|
||||
the result in CLAIMED. */
|
||||
|
||||
enum ld_plugin_status
|
||||
claim_file_handler (const struct ld_plugin_input_file *file, int *claimed)
|
||||
{
|
||||
enum ld_plugin_status status;
|
||||
Elf *elf;
|
||||
struct plugin_file_info lto_file;
|
||||
int n;
|
||||
|
||||
memset (<o_file, 0, sizeof (struct plugin_file_info));
|
||||
|
||||
if (file->offset != 0)
|
||||
{
|
||||
char *objname;
|
||||
Elf *archive;
|
||||
off_t offset;
|
||||
/* We pass the offset of the actual file, not the archive header. */
|
||||
int t = asprintf (&objname, "%s@0x%" PRIx64, file->name,
|
||||
(int64_t) file->offset);
|
||||
check (t >= 0, LDPL_FATAL, "asprintf failed");
|
||||
lto_file.name = objname;
|
||||
|
||||
archive = elf_begin (file->fd, ELF_C_READ, NULL);
|
||||
check (elf_kind (archive) == ELF_K_AR, LDPL_FATAL,
|
||||
"Not an archive and offset not 0");
|
||||
|
||||
/* 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 */
|
||||
|
||||
offset = file->offset - 60;
|
||||
check (offset == elf_rand (archive, offset), LDPL_FATAL,
|
||||
"could not seek in archive");
|
||||
elf = elf_begin (file->fd, ELF_C_READ, archive);
|
||||
check (elf != NULL, LDPL_FATAL, "could not find archive member");
|
||||
elf_end (archive);
|
||||
}
|
||||
else
|
||||
{
|
||||
lto_file.name = xstrdup (file->name);
|
||||
elf = elf_begin (file->fd, ELF_C_READ, NULL);
|
||||
}
|
||||
lto_file.handle = file->handle;
|
||||
|
||||
*claimed = 0;
|
||||
|
||||
if (!elf)
|
||||
goto err;
|
||||
|
||||
n = process_symtab (elf, <o_file.symtab);
|
||||
if (n == 0)
|
||||
goto err;
|
||||
|
||||
if (n > 1)
|
||||
resolve_conflicts (<o_file.symtab, <o_file.conflicts);
|
||||
|
||||
status = add_symbols (file->handle, lto_file.symtab.nsyms,
|
||||
lto_file.symtab.syms);
|
||||
check (status == LDPS_OK, LDPL_FATAL, "could not add symbols");
|
||||
|
||||
*claimed = 1;
|
||||
num_claimed_files++;
|
||||
claimed_files =
|
||||
xrealloc (claimed_files,
|
||||
num_claimed_files * sizeof (struct plugin_file_info));
|
||||
claimed_files[num_claimed_files - 1] = lto_file;
|
||||
|
||||
goto cleanup;
|
||||
|
||||
err:
|
||||
free (lto_file.name);
|
||||
|
||||
cleanup:
|
||||
if (elf)
|
||||
elf_end (elf);
|
||||
|
||||
return LDPS_OK;
|
||||
}
|
||||
|
||||
/* Method called first thing at onload time to perform sanity checks. */
|
||||
|
||||
enum ld_plugin_status
|
||||
onload_format_checks (struct ld_plugin_tv *tv)
|
||||
{
|
||||
unsigned version = elf_version (EV_CURRENT);
|
||||
check (version != EV_NONE, LDPL_FATAL, "invalid ELF version");
|
||||
return LDPS_OK;
|
||||
}
|
||||
|
|
@ -32,6 +32,9 @@ along with this program; see the file COPYING3. If not see
|
|||
-nop: Instead of running lto-wrapper, pass the original to the plugin. This
|
||||
only works if the input files are hybrid. */
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
#include "config.h"
|
||||
#endif
|
||||
#include <assert.h>
|
||||
#include <string.h>
|
||||
#include <stdlib.h>
|
||||
|
@ -46,9 +49,72 @@ along with this program; see the file COPYING3. If not see
|
|||
#include <libiberty.h>
|
||||
#include <hashtab.h>
|
||||
#include "../gcc/lto/common.h"
|
||||
#include "simple-object.h"
|
||||
#include "plugin-api.h"
|
||||
|
||||
/* Common definitions for/from the object format dependent code. */
|
||||
#include "lto-plugin.h"
|
||||
/* Handle opening elf files on hosts, such as Windows, that may use
|
||||
text file handling that will break binary access. */
|
||||
#ifndef O_BINARY
|
||||
# define O_BINARY 0
|
||||
#endif
|
||||
|
||||
/* Segment name for LTO sections. This is only used for Mach-O.
|
||||
FIXME: This needs to be kept in sync with darwin.c. */
|
||||
|
||||
#define LTO_SEGMENT_NAME "__GNU_LTO"
|
||||
|
||||
/* LTO magic section name. */
|
||||
|
||||
#define LTO_SECTION_PREFIX ".gnu.lto_.symtab"
|
||||
#define LTO_SECTION_PREFIX_LEN (sizeof (LTO_SECTION_PREFIX) - 1)
|
||||
|
||||
/* The part of the symbol table the plugin has to keep track of. Note that we
|
||||
must keep SYMS until all_symbols_read is called to give the linker time to
|
||||
copy the symbol information. */
|
||||
|
||||
struct sym_aux
|
||||
{
|
||||
uint32_t slot;
|
||||
unsigned id;
|
||||
unsigned next_conflict;
|
||||
};
|
||||
|
||||
struct plugin_symtab
|
||||
{
|
||||
int nsyms;
|
||||
struct sym_aux *aux;
|
||||
struct ld_plugin_symbol *syms;
|
||||
unsigned id;
|
||||
};
|
||||
|
||||
/* Encapsulates object file data during symbol scan. */
|
||||
struct plugin_objfile
|
||||
{
|
||||
int found;
|
||||
simple_object_read *objfile;
|
||||
struct plugin_symtab *out;
|
||||
const struct ld_plugin_input_file *file;
|
||||
};
|
||||
|
||||
/* All that we have to remember about a file. */
|
||||
|
||||
struct plugin_file_info
|
||||
{
|
||||
char *name;
|
||||
void *handle;
|
||||
struct plugin_symtab symtab;
|
||||
struct plugin_symtab conflicts;
|
||||
};
|
||||
|
||||
/* Until ASM_OUTPUT_LABELREF can be hookized and decoupled from
|
||||
stdio file streams, we do simple label translation here. */
|
||||
|
||||
enum symbol_style
|
||||
{
|
||||
ss_none, /* No underscore prefix. */
|
||||
ss_win32, /* Underscore prefix any symbol not beginning with '@'. */
|
||||
ss_uscore, /* Underscore prefix all symbols. */
|
||||
};
|
||||
|
||||
static char *arguments_file_name;
|
||||
static ld_plugin_register_claim_file register_claim_file;
|
||||
|
@ -58,13 +124,10 @@ static ld_plugin_register_cleanup register_cleanup;
|
|||
static ld_plugin_add_input_file add_input_file;
|
||||
static ld_plugin_add_input_library add_input_library;
|
||||
static ld_plugin_message message;
|
||||
static ld_plugin_add_symbols add_symbols;
|
||||
|
||||
/* These are not static because the object format dependent
|
||||
claim_file hooks in lto-plugin-{coff,elf}.c need them. */
|
||||
ld_plugin_add_symbols add_symbols;
|
||||
|
||||
struct plugin_file_info *claimed_files = NULL;
|
||||
unsigned int num_claimed_files = 0;
|
||||
static struct plugin_file_info *claimed_files = NULL;
|
||||
static unsigned int num_claimed_files = 0;
|
||||
|
||||
static char **output_files = NULL;
|
||||
static unsigned int num_output_files = 0;
|
||||
|
@ -79,7 +142,12 @@ static bool debug;
|
|||
static bool nop;
|
||||
static char *resolution_file = NULL;
|
||||
|
||||
void
|
||||
/* Set by default from configure.ac, but can be overridden at runtime
|
||||
by using -plugin-opt=-sym-style={none,win32,underscore|uscore}
|
||||
(in fact, only first letter of style arg is checked.) */
|
||||
static enum symbol_style sym_style = SYM_STYLE;
|
||||
|
||||
static void
|
||||
check (bool gate, enum ld_plugin_level level, const char *text)
|
||||
{
|
||||
if (gate)
|
||||
|
@ -100,7 +168,7 @@ check (bool gate, enum ld_plugin_level level, const char *text)
|
|||
by P and the result is written in ENTRY. The slot number is stored in SLOT.
|
||||
Returns the address of the next entry. */
|
||||
|
||||
char *
|
||||
static char *
|
||||
parse_table_entry (char *p, struct ld_plugin_symbol *entry,
|
||||
struct sym_aux *aux)
|
||||
{
|
||||
|
@ -122,7 +190,24 @@ parse_table_entry (char *p, struct ld_plugin_symbol *entry,
|
|||
LDPV_HIDDEN
|
||||
};
|
||||
|
||||
entry->name = xstrdup (p);
|
||||
switch (sym_style)
|
||||
{
|
||||
case ss_win32:
|
||||
if (p[0] == '@')
|
||||
{
|
||||
/* cf. Duff's device. */
|
||||
case ss_none:
|
||||
entry->name = xstrdup (p);
|
||||
break;
|
||||
}
|
||||
/* FALL-THROUGH. */
|
||||
case ss_uscore:
|
||||
entry->name = concat ("_", p, NULL);
|
||||
break;
|
||||
default:
|
||||
check (false, LDPL_FATAL, "invalid symbol style requested");
|
||||
break;
|
||||
}
|
||||
while (*p)
|
||||
p++;
|
||||
p++;
|
||||
|
@ -165,7 +250,7 @@ parse_table_entry (char *p, struct ld_plugin_symbol *entry,
|
|||
/* Translate the IL symbol table located between DATA and END. Append the
|
||||
slots and symbols to OUT. */
|
||||
|
||||
void
|
||||
static void
|
||||
translate (char *data, char *end, struct plugin_symtab *out)
|
||||
{
|
||||
struct sym_aux *aux;
|
||||
|
@ -621,7 +706,7 @@ static int symbol_strength (struct ld_plugin_symbol *s)
|
|||
|
||||
XXX how to handle common? */
|
||||
|
||||
void
|
||||
static void
|
||||
resolve_conflicts (struct plugin_symtab *t, struct plugin_symtab *conflicts)
|
||||
{
|
||||
htab_t symtab = htab_create (t->nsyms, hash_sym, eq_sym, NULL);
|
||||
|
@ -689,6 +774,124 @@ resolve_conflicts (struct plugin_symtab *t, struct plugin_symtab *conflicts)
|
|||
htab_delete (symtab);
|
||||
}
|
||||
|
||||
/* Process one section of an object file. */
|
||||
|
||||
static int
|
||||
process_symtab (void *data, const char *name, off_t offset, off_t length)
|
||||
{
|
||||
struct plugin_objfile *obj = (struct plugin_objfile *)data;
|
||||
char *s;
|
||||
char *secdata;
|
||||
|
||||
if (strncmp (name, LTO_SECTION_PREFIX, LTO_SECTION_PREFIX_LEN) != 0)
|
||||
return 1;
|
||||
|
||||
s = strrchr (name, '.');
|
||||
if (s)
|
||||
sscanf (s, ".%x", &obj->out->id);
|
||||
secdata = xmalloc (length);
|
||||
offset += obj->file->offset;
|
||||
if (offset != lseek (obj->file->fd, offset, SEEK_SET)
|
||||
|| length != read (obj->file->fd, secdata, length))
|
||||
{
|
||||
if (message)
|
||||
message (LDPL_FATAL, "%s: corrupt object file", obj->file->name);
|
||||
/* Force claim_file_handler to abandon this file. */
|
||||
obj->found = 0;
|
||||
free (secdata);
|
||||
return 0;
|
||||
}
|
||||
|
||||
translate (secdata, secdata + length, obj->out);
|
||||
obj->found++;
|
||||
free (secdata);
|
||||
return 1;
|
||||
}
|
||||
|
||||
/* Callback used by gold to check if the plugin will claim FILE. Writes
|
||||
the result in CLAIMED. */
|
||||
|
||||
static enum ld_plugin_status
|
||||
claim_file_handler (const struct ld_plugin_input_file *file, int *claimed)
|
||||
{
|
||||
enum ld_plugin_status status;
|
||||
struct plugin_objfile obj;
|
||||
struct plugin_file_info lto_file;
|
||||
int err;
|
||||
const char *errmsg;
|
||||
|
||||
memset (<o_file, 0, sizeof (struct plugin_file_info));
|
||||
|
||||
if (file->offset != 0)
|
||||
{
|
||||
char *objname;
|
||||
/* We pass the offset of the actual file, not the archive header. */
|
||||
int t = asprintf (&objname, "%s@0x%" PRIx64, file->name,
|
||||
(int64_t) file->offset);
|
||||
check (t >= 0, LDPL_FATAL, "asprintf failed");
|
||||
lto_file.name = objname;
|
||||
}
|
||||
else
|
||||
{
|
||||
lto_file.name = xstrdup (file->name);
|
||||
}
|
||||
lto_file.handle = file->handle;
|
||||
|
||||
*claimed = 0;
|
||||
obj.file = file;
|
||||
obj.found = 0;
|
||||
obj.out = <o_file.symtab;
|
||||
errmsg = NULL;
|
||||
obj.objfile = simple_object_start_read (file->fd, file->offset, LTO_SEGMENT_NAME,
|
||||
&errmsg, &err);
|
||||
/* No file, but also no error code means unrecognized format; just skip it. */
|
||||
if (!obj.objfile && !err)
|
||||
goto err;
|
||||
|
||||
if (obj.objfile)
|
||||
errmsg = simple_object_find_sections (obj.objfile, process_symtab, &obj, &err);
|
||||
|
||||
if (!obj.objfile || errmsg)
|
||||
{
|
||||
if (err && message)
|
||||
message (LDPL_FATAL, "%s: %s: %s", file->name, errmsg,
|
||||
xstrerror (err));
|
||||
else if (message)
|
||||
message (LDPL_FATAL, "%s: %s", file->name, errmsg);
|
||||
goto err;
|
||||
}
|
||||
|
||||
if (obj.found == 0)
|
||||
goto err;
|
||||
|
||||
if (obj.found > 1)
|
||||
resolve_conflicts (<o_file.symtab, <o_file.conflicts);
|
||||
|
||||
status = add_symbols (file->handle, lto_file.symtab.nsyms,
|
||||
lto_file.symtab.syms);
|
||||
check (status == LDPS_OK, LDPL_FATAL, "could not add symbols");
|
||||
|
||||
*claimed = 1;
|
||||
num_claimed_files++;
|
||||
claimed_files =
|
||||
xrealloc (claimed_files,
|
||||
num_claimed_files * sizeof (struct plugin_file_info));
|
||||
claimed_files[num_claimed_files - 1] = lto_file;
|
||||
|
||||
goto cleanup;
|
||||
|
||||
err:
|
||||
free (lto_file.name);
|
||||
|
||||
cleanup:
|
||||
if (obj.objfile)
|
||||
simple_object_release_read (obj.objfile);
|
||||
if (file->fd >= 0)
|
||||
close (file->fd);
|
||||
|
||||
return LDPS_OK;
|
||||
}
|
||||
|
||||
/* Parse the plugin options. */
|
||||
|
||||
static void
|
||||
|
@ -706,6 +909,21 @@ process_option (const char *option)
|
|||
pass_through_items[num_pass_through_items - 1] =
|
||||
xstrdup (option + strlen ("-pass-through="));
|
||||
}
|
||||
else if (!strncmp (option, "-sym-style=", sizeof ("-sym-style=") - 1))
|
||||
{
|
||||
switch (option[sizeof ("-sym-style=") - 1])
|
||||
{
|
||||
case 'w':
|
||||
sym_style = ss_win32;
|
||||
break;
|
||||
case 'u':
|
||||
sym_style = ss_uscore;
|
||||
break;
|
||||
default:
|
||||
sym_style = ss_none;
|
||||
break;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
int size;
|
||||
|
@ -727,10 +945,6 @@ onload (struct ld_plugin_tv *tv)
|
|||
struct ld_plugin_tv *p;
|
||||
enum ld_plugin_status status;
|
||||
|
||||
status = onload_format_checks (tv);
|
||||
if (status != LDPS_OK)
|
||||
return status;
|
||||
|
||||
p = tv;
|
||||
while (p->tv_tag)
|
||||
{
|
||||
|
|
|
@ -1,84 +0,0 @@
|
|||
/* Common declarations for LTO plugin for gold and/or GNU ld.
|
||||
Copyright (C) 2009, 2010 Free Software Foundation, Inc.
|
||||
Contributed by Rafael Avila de Espindola (espindola@google.com).
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 3, or (at your option)
|
||||
any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful, but
|
||||
WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; see the file COPYING3. If not see
|
||||
<http://www.gnu.org/licenses/>. */
|
||||
|
||||
#include <stdbool.h>
|
||||
#include "plugin-api.h"
|
||||
|
||||
/* LTO magic section name. */
|
||||
|
||||
#define LTO_SECTION_PREFIX ".gnu.lto_.symtab"
|
||||
|
||||
/* The part of the symbol table the plugin has to keep track of. Note that we
|
||||
must keep SYMS until all_symbols_read is called to give the linker time to
|
||||
copy the symbol information. */
|
||||
|
||||
struct sym_aux
|
||||
{
|
||||
uint32_t slot;
|
||||
unsigned id;
|
||||
unsigned next_conflict;
|
||||
};
|
||||
|
||||
struct plugin_symtab
|
||||
{
|
||||
int nsyms;
|
||||
struct sym_aux *aux;
|
||||
struct ld_plugin_symbol *syms;
|
||||
unsigned id;
|
||||
};
|
||||
|
||||
/* All that we have to remember about a file. */
|
||||
|
||||
struct plugin_file_info
|
||||
{
|
||||
char *name;
|
||||
void *handle;
|
||||
struct plugin_symtab symtab;
|
||||
struct plugin_symtab conflicts;
|
||||
};
|
||||
|
||||
/* These are the methods supplied by one of the object format
|
||||
dependent files lto-plugin-elf.c or lto-plugin-coff.c */
|
||||
|
||||
extern enum ld_plugin_status claim_file_handler
|
||||
(const struct ld_plugin_input_file *file, int *claimed);
|
||||
|
||||
extern enum ld_plugin_status onload_format_checks (struct ld_plugin_tv *tv);
|
||||
|
||||
/* These methods are made available to the object format
|
||||
dependent files. */
|
||||
|
||||
extern void check (bool gate, enum ld_plugin_level level, const char *text);
|
||||
|
||||
extern void translate (char *data, char *end, struct plugin_symtab *out);
|
||||
|
||||
extern char *parse_table_entry (char *p, struct ld_plugin_symbol *entry,
|
||||
struct sym_aux *aux);
|
||||
|
||||
extern void resolve_conflicts (struct plugin_symtab *t,
|
||||
struct plugin_symtab *conflicts);
|
||||
|
||||
/* And this callback function is exposed. */
|
||||
|
||||
extern ld_plugin_add_symbols add_symbols;
|
||||
|
||||
/* Along with these two variables. */
|
||||
|
||||
extern struct plugin_file_info *claimed_files;
|
||||
extern unsigned int num_claimed_files;
|
||||
|
Loading…
Add table
Reference in a new issue