зеркало из https://github.com/mozilla/pjs.git
Bug 670659 - Detect GNU ld bug with debugging symbols when using --gc-sections and don't use it then. r=khuey
This commit is contained in:
Родитель
4a0ad93e8f
Коммит
c6195f8fc9
47
configure.in
47
configure.in
|
@ -1549,10 +1549,8 @@ if test "$GNU_CC"; then
|
||||||
MKCSHLIB='$(CC) $(CFLAGS) $(DSO_PIC_CFLAGS) $(DSO_LDOPTS) -Wl,-h,$@ -o $@'
|
MKCSHLIB='$(CC) $(CFLAGS) $(DSO_PIC_CFLAGS) $(DSO_LDOPTS) -Wl,-h,$@ -o $@'
|
||||||
DSO_LDOPTS='-shared'
|
DSO_LDOPTS='-shared'
|
||||||
if test "$GCC_USE_GNU_LD"; then
|
if test "$GCC_USE_GNU_LD"; then
|
||||||
# Don't allow undefined symbols in libraries, and remove dead symbols
|
# Don't allow undefined symbols in libraries
|
||||||
DSO_LDOPTS="$DSO_LDOPTS -Wl,-z,defs -Wl,--gc-sections"
|
DSO_LDOPTS="$DSO_LDOPTS -Wl,-z,defs"
|
||||||
CFLAGS="$CFLAGS -ffunction-sections -fdata-sections"
|
|
||||||
CXXFLAGS="$CXXFLAGS -ffunction-sections -fdata-sections"
|
|
||||||
fi
|
fi
|
||||||
WARNINGS_AS_ERRORS='-Werror'
|
WARNINGS_AS_ERRORS='-Werror'
|
||||||
DSO_CFLAGS=''
|
DSO_CFLAGS=''
|
||||||
|
@ -7298,6 +7296,47 @@ if test -n "$MOZ_DEBUG" -o -n "$MOZ_DEBUG_SYMBOLS"; then
|
||||||
export MOZ_DEBUG_SYMBOLS
|
export MOZ_DEBUG_SYMBOLS
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
dnl ========================================================
|
||||||
|
dnl = Automatically remove dead symbols
|
||||||
|
dnl ========================================================
|
||||||
|
|
||||||
|
if test "$GNU_CC" -a "$GCC_USE_GNU_LD" -a -n "$MOZ_DEBUG_FLAGS"; then
|
||||||
|
dnl See bug 670659
|
||||||
|
AC_CACHE_CHECK([whether removing dead symbols breaks debugging],
|
||||||
|
GC_SECTIONS_BREAKS_DEBUG_RANGES,
|
||||||
|
[echo 'int foo() {return 42;}' \
|
||||||
|
'int bar() {return 1;}' \
|
||||||
|
'int main() {return foo();}' > conftest.${ac_ext}
|
||||||
|
if AC_TRY_COMMAND([${CC-cc} -o conftest.${ac_objext} $CFLAGS $MOZ_DEBUG_FLAGS -ffunction-sections conftest.${ac_ext} 1>&2]) &&
|
||||||
|
AC_TRY_COMMAND([${CC-cc} -o conftest${ac_exeext} $LDFLAGS $MOZ_DEBUG_FLAGS -ffunction-sections -Wl,--gc-sections conftest.${ac_ext} $LIBS 1>&2]) &&
|
||||||
|
test -s conftest${ac_exeext} -a -s conftest.${ac_objext}; then
|
||||||
|
dnl objdump -WR would be much simpler, but ancient objdump
|
||||||
|
dnl doesn't support it.
|
||||||
|
debug_ranges_lines() {
|
||||||
|
awk '/^Contents/ { content=0 } /^Contents of the \.debug_ranges/ { content=1 } content { n += 1 } END { print n }'
|
||||||
|
}
|
||||||
|
dnl We expect the number of lines after "Contents of the
|
||||||
|
dnl .debug_ranges" to be the same in the object file and the
|
||||||
|
dnl linked program. If it's not, then we are hitting the linker
|
||||||
|
dnl bug.
|
||||||
|
if test `objdump -W conftest.${ac_objext} 2> /dev/null | debug_ranges_lines` = \
|
||||||
|
`objdump -W conftest${ac_exeext} 2> /dev/null | debug_ranges_lines`; then
|
||||||
|
GC_SECTIONS_BREAKS_DEBUG_RANGES=no
|
||||||
|
else
|
||||||
|
GC_SECTIONS_BREAKS_DEBUG_RANGES=yes
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
dnl We really don't expect to get here, but just in case
|
||||||
|
AC_ERROR([couldn't compile a simple C file])
|
||||||
|
fi
|
||||||
|
rm -rf conftest*])
|
||||||
|
if test "$GC_SECTIONS_BREAKS_DEBUG_RANGES" = no; then
|
||||||
|
DSO_LDOPTS="$DSO_LDOPTS -Wl,--gc-sections"
|
||||||
|
CFLAGS="$CFLAGS -ffunction-sections -fdata-sections"
|
||||||
|
CXXFLAGS="$CXXFLAGS -ffunction-sections -fdata-sections"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
dnl ========================================================
|
dnl ========================================================
|
||||||
dnl = Disable any treating of compile warnings as errors
|
dnl = Disable any treating of compile warnings as errors
|
||||||
dnl ========================================================
|
dnl ========================================================
|
||||||
|
|
Загрузка…
Ссылка в новой задаче