Request for review: support building hotspot with gcc 4.6
David.Holmes at oracle.com
Sat Apr 30 02:43:17 UTC 2011
Erik Trimble said the following on 04/30/11 10:27:
> On 4/29/2011 5:17 PM, David Holmes wrote:
>> David Katleman said the following on 04/30/11 09:13:
>>> On 4/29/2011 3:59 PM, Omair Majid wrote:
>>>> The patch adds support for building hotspot with gcc 4.6. gcc 4.6
>>>> changed how arguments are handled. It now treats -export-dynamic as
>>>> it treats any other -efoo option: it thinks xport-dynamic is the
>>>> entry point and passes this information to the linker. Since
>>>> -export-dynamic is not passed to the linker, not all symbols will be
>>>> exported by the linker. The bfd-based linker, given the invalid
>>>> entry point xport-dynamic, simply ignores it. The gold linker,
>>>> however, crashes causing the build to fail.
>>>> Since -export-dynamic is a linker option, the correct way to pass it
>>>> is using -Wl,-export-dynamic (or -Xlinker -export-dynamic). We have
>>>> had this patch in IcedTea6 for a while now, but it would be nice if
>>>> this was in OpenJDK too.
>>> Seems like your change should be surrounded by an ifneq that enables
>>> your change for 4.6 and later
>> Changing the use of a linker option:
>> -Xlinker -foo (or -Wl,-foo)
>> is fully compatible and preferable. We've been making a number of such
>> changes ourselves (-Xlinker form) because they are needed when working
>> with some of the cross-compilers we use for embedded.
>> David Holmes
>>> Example elsewhere in the file
>>>> 129 # Except for a few acceptable ones
>>>> 130 # Since GCC 4.3, -Wconversion has changed its meanings to warn
>>>> these implicit
>>>> 131 # conversions which might affect the values. To avoid that, we
>>>> need to turn
>>>> 132 # it off explicitly.
>>>> 133 ifneq "$(shell expr \( $(CC_VER_MAJOR) \> 4 \) \| \( \(
>>>> $(CC_VER_MAJOR) = 4 \) \& \( $(CC_VER_MINOR) \>= 3 \) \))" "0"
>>>> 134 ACCEPTABLE_WARNINGS = -Wpointer-arith -Wsign-compare
>>>> 135 else
>>>> 136 ACCEPTABLE_WARNINGS = -Wpointer-arith -Wconversion -Wsign-compare
>>>> 137 endif
> Presuming that the changes are still valid for a GCC and early libc in
> the 3.x range (i.e. older 2.4-based releases), then it's OK to not use
> Otherwise, we should use ifneq to cover the versions of GCC/libc where
> this is a valid option.
> We (Oracle) and others still support older Linux distros, so we do need
> to be careful not to break anything unless we specifically mean to (and,
> have a good reason to cause such breakage).
As long as the gcc version recognizes -Xlinker (and/or -Wl,) then as I
said changing from direct use of -foo to "-Xlinker -foo" is 100% compatible.
We already use -Xlinker and -Wl, all over the place! So this change
should not have any compatibility issues whatsoever.
More information about the build-dev