Request for review: support building hotspot with gcc 4.6
kelly.ohair at oracle.com
Fri Apr 29 23:54:49 UTC 2011
The same hotspot sources and makefile deliver into our JDK6 releases, and formal builds of
JDK6 are done on some very old Linux systems, RH2.1?, which I think is before 2000.
On Apr 29, 2011, at 4:34 PM, Omair Majid wrote:
> On 04/29/2011 07:13 PM, David Katleman wrote:
>> Hi Omair!
>> 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
> While I could certainly do that, I dont understand why it's needed. The patch keeps things backwards compatible. With the patch applied, I can still build hotspot with older versions of gcc/binutils.
> -export-dynamic is a linker option and has been for a (long) while now. I am actually not sure what the earliest version of ld that supports export-dynamic is, but -Wl,-export-dynamic is mentioned on http://tldp.org/HOWTO/Program-Library-HOWTO/shared-libraries.html which was last updated 2003. Surely all versions of gcc/ld that we now use must support this?
> If you still think this needs to be conditional (although I strongly disagree that it needs to be), I can post another webrev.
>> 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
> Thanks for the example. I will keep this in mind whenever a gcc change needs to be conditional.
More information about the build-dev