[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Bug gold/12433] New: Linking libjvm.so with LTO fails with undefined re
From: |
trevor.hemsley at ntlworld dot com |
Subject: |
[Bug gold/12433] New: Linking libjvm.so with LTO fails with undefined references |
Date: |
Mon, 24 Jan 2011 10:46:20 +0000 |
http://sourceware.org/bugzilla/show_bug.cgi?id=12433
Summary: Linking libjvm.so with LTO fails with undefined
references
Product: binutils
Version: 2.22 (HEAD)
Status: NEW
Severity: normal
Priority: P2
Component: gold
AssignedTo: address@hidden
ReportedBy: address@hidden
I've been compiling Sun/Oracle Java 1.6.0_23 with gcc 4.5.1 and 4.6.0 to see if
a) it can be done (it can) and b) if there are any performance improvements to
be made (dubious). One of the things that I have tried is using LTO on the
resulting files.
With gcc 4.6.0 20110115, this mostly works until I try to add -flto to the link
that creates libjvm.so. Using binutils from cvs head, this fails to link with
about 20 pages of undefined references. There was a patch posted to the gcc
mailing list recently with the subject "PATCH: 2 stage BFD linker for LTO
plugin" and applying this to binutils does help immensely - it reduces the
undefined references from ~20 pages down to 13 individual items. However, it
uses ~5.7GB of my 4GB RAM and takes about 12 hours to link. A non-lto link of
the same items appears to use ~700MB RAM and takes a second or two.
The problematic command generated by the build process is
/usr/local/gcc46/bin/gcc -m64 -Xlinker -O1 -shared -Xlinker
--version-script=mapfile_reorder -Xlinker -soname=libjvm.so -static-libgcc -o
libjvm.so abstractCompiler.o accessFlags.o ad_x86_64.o ad_x86_64_clone.o
ad_x86_64_expand.o ad_x86_64_format.o ad_x86_64_gen.o ad_x86_64_misc.o
ad_x86_64_peephole.o ad_x86_64_pipeline.o adaptiveSizePolicy.o addnode.o
adjoiningGenerations.o adjoiningVirtualSpaces.o ageTable.o allocation.o
allocationStats.o aprofiler.o arguments.o array.o arrayKlass.o
arrayKlassKlass.o arrayOop.o asPSOldGen.o asPSYoungGen.o asParNewGeneration.o
assembler.o assembler_linux_x86.o assembler_x86.o atomic.o attachListener.o
attachListener_linux.o barrierSet.o bcEscapeAnalyzer.o biasedLocking.o
binaryTreeDictionary.o bitMap.o block.o blockOffsetTable.o buildOopMap.o
bytecode.o bytecodeHistogram.o bytecodeInfo.o bytecodeInterpreter.o
bytecodeInterpreterWithChecks.o bytecodeInterpreter_x86.o bytecodeStream.o
bytecodeTracer.o bytecodes.o bytecodes_x86.o c2_globals.o c2_init_x86.o
c2compiler.o cSpaceCounters.o callGenerator.o callnode.o cardTableExtension.o
cardTableModRefBS.o cardTableRS.o cfgnode.o chaitin.o chaitin_linux.o ciArray.o
ciArrayKlass.o ciCPCache.o ciCallSite.o ciConstant.o ciConstantPoolCache.o
ciEnv.o ciExceptionHandler.o ciField.o ciFlags.o ciInstance.o ciInstanceKlass.o
ciInstanceKlassKlass.o ciKlass.o ciKlassKlass.o ciMethod.o ciMethodBlocks.o
ciMethodData.o ciMethodHandle.o ciMethodKlass.o ciNullObject.o ciObjArray.o
ciObjArrayKlass.o ciObjArrayKlassKlass.o ciObject.o ciObjectFactory.o
ciSignature.o ciStreams.o ciSymbol.o ciSymbolKlass.o ciType.o ciTypeArray.o
ciTypeArrayKlass.o ciTypeArrayKlassKlass.o ciTypeFlow.o ciUtilities.o
classFileError.o classFileParser.o classFileStream.o classLoader.o
classLoadingService.o classes.o classify.o cmsAdaptiveSizePolicy.o
cmsCollectorPolicy.o cmsGCAdaptivePolicyCounters.o cmsLockVerifier.o
cmsPermGen.o coalesce.o codeBlob.o codeBuffer.o codeCache.o collectedHeap.o
collectionSetChooser.o collectorCounters.o collectorPolicy.o
compactibleFreeListSpace.o compactingPermGenGen.o compilationPolicy.o compile.o
compileBroker.o compileLog.o compiledIC.o compiledICHolderKlass.o
compiledICHolderOop.o compilerOracle.o compressedStream.o concurrentG1Refine.o
concurrentG1RefineThread.o concurrentGCThread.o concurrentMark.o
concurrentMarkSweepGeneration.o concurrentMarkSweepThread.o
concurrentMarkThread.o concurrentZFThread.o connode.o constMethodKlass.o
constMethodOop.o constantPoolKlass.o constantPoolOop.o constantTag.o copy.o
cpCacheKlass.o cpCacheOop.o cppInterpreter.o cppInterpreter_x86.o debug.o
debugInfo.o debugInfoRec.o debug_x86.o defNewGeneration.o deoptimization.o
depChecker_x86.o dependencies.o dfa_x86_64.o dict.o dictionary.o
dirtyCardQueue.o disassembler.o divnode.o doCall.o domgraph.o dtraceAttacher.o
dtraceJSDT.o dtraceJSDT_linux.o dump.o dump_x86_64.o escape.o events.o
evmCompat.o exceptionHandlerTable.o exceptions.o fieldDescriptor.o fieldType.o
filemap.o forte.o fprofiler.o frame.o frame_x86.o freeBlockDictionary.o
freeChunk.o freeList.o g1BlockOffsetTable.o g1CollectedHeap.o
g1CollectorPolicy.o g1MMUTracker.o g1MarkSweep.o g1MemoryPool.o g1RemSet.o
g1SATBCardTableModRefBS.o g1_globals.o gSpaceCounters.o
gcAdaptivePolicyCounters.o gcCause.o gcLocker.o gcPolicyCounters.o gcStats.o
gcTaskManager.o gcTaskThread.o gcUtil.o gcm.o genCollectedHeap.o genMarkSweep.o
genRemSet.o generateOopMap.o generateOptoStub.o generation.o
generationCounters.o generationSpec.o globalDefinitions.o globals.o graphKit.o
growableArray.o handles.o hashtable.o heap.o heapDumper.o heapInspection.o
heapRegion.o heapRegionRemSet.o heapRegionSeq.o histogram.o hpi.o hpi_linux.o
icBuffer.o icBuffer_x86.o icache.o icache_x86.o idealKit.o ifg.o ifnode.o
immutableSpace.o indexSet.o init.o instanceKlass.o instanceKlassKlass.o
instanceOop.o instanceRefKlass.o intHisto.o interfaceSupport.o
interp_masm_x86_64.o interpreter.o interpreterRT_x86_64.o interpreterRuntime.o
interpreter_x86_64.o invocationCounter.o iterator.o java.o javaAssertions.o
javaCalls.o javaClasses.o jni.o jniCheck.o jniFastGetField.o
jniFastGetField_x86_64.o jniHandles.o jniPeriodicChecker.o jvm.o jvm_linux.o
jvmtiClassFileReconstituter.o jvmtiCodeBlobEvents.o jvmtiEnter.o
jvmtiEnterTrace.o jvmtiEnv.o jvmtiEnvBase.o jvmtiEnvThreadState.o
jvmtiEventController.o jvmtiExport.o jvmtiExtensions.o jvmtiGetLoadedClasses.o
jvmtiImpl.o jvmtiManageCapabilities.o jvmtiRedefineClasses.o jvmtiTagMap.o
jvmtiThreadState.o jvmtiTrace.o jvmtiUtil.o klass.o klassKlass.o klassOop.o
klassVtable.o lcm.o library_call.o linkResolver.o live.o loaderConstraints.o
location.o locknode.o loopTransform.o loopUnswitch.o loopnode.o loopopts.o
lowMemoryDetector.o machnode.o macro.o management.o markOop.o markSweep.o
matcher.o memRegion.o memnode.o memoryManager.o memoryPool.o memoryService.o
memprofiler.o methodComparator.o methodDataKlass.o methodDataOop.o
methodHandleWalk.o methodHandles.o methodHandles_x86.o methodKlass.o
methodLiveness.o methodOop.o monitorChunk.o mulnode.o multnode.o
mutableNUMASpace.o mutableSpace.o mutex.o mutexLocker.o mutex_linux.o
nativeInst_x86.o nativeLookup.o nmethod.o node.o numberSeq.o objArrayKlass.o
objArrayKlassKlass.o objArrayOop.o objectMonitor_linux.o objectStartArray.o
oop.o oopFactory.o oopMap.o oopMapCache.o oopRecorder.o oopsHierarchy.o
opcodes.o orderAccess.o os.o osThread.o osThread_linux.o os_linux.o
os_linux_x86.o ostream.o output.o parCardTableModRefBS.o parGCAllocBuffer.o
parMarkBitMap.o parNewGeneration.o parallelScavengeHeap.o parse1.o parse2.o
parse3.o parseHelper.o pcDesc.o pcTasks.o perf.o perfData.o perfMemory.o
perfMemory_linux.o permGen.o phase.o phaseX.o placeholders.o port.o postaloc.o
preserveException.o privilegedStack.o promotionInfo.o psAdaptiveSizePolicy.o
psCompactionManager.o psGCAdaptivePolicyCounters.o psGenerationCounters.o
psMarkSweep.o psMarkSweepDecorator.o psMemoryPool.o psOldGen.o
psParallelCompact.o psPermGen.o psPromotionLAB.o psPromotionManager.o
psScavenge.o psTasks.o psVirtualspace.o psYoungGen.o ptrQueue.o
referencePolicy.o referenceProcessor.o reflection.o reflectionUtils.o
reg_split.o regalloc.o register.o register_definitions_x86.o register_x86.o
regmask.o relocInfo.o relocInfo_x86.o relocator.o resolutionErrors.o
resourceArea.o restore.o rewriter.o rframe.o rootnode.o runtime.o
runtimeService.o runtime_x86_64.o safepoint.o satbQueue.o scopeDesc.o
serialize.o set.o sharedHeap.o sharedRuntime.o sharedRuntimeTrans.o
sharedRuntimeTrig.o sharedRuntime_x86_64.o signature.o sizes.o space.o
spaceCounters.o spaceDecorator.o sparsePRT.o specialized_oop_closures.o
split_if.o stackMapFrame.o stackMapTable.o stackValue.o stackValueCollection.o
statSampler.o stringopts.o stubCodeGenerator.o stubGenerator_x86_64.o
stubRoutines.o stubRoutines_linux.o stubRoutines_x86_64.o stubs.o subnode.o
superword.o survRateGroup.o sweeper.o symbolKlass.o symbolOop.o symbolTable.o
synchronizer.o systemDictionary.o task.o taskqueue.o templateInterpreter.o
templateInterpreter_x86_64.o templateTable.o templateTable_x86_64.o
tenuredGeneration.o thread.o threadCritical_linux.o threadLS_linux_x86.o
threadLocalAllocBuffer.o threadLocalStorage.o threadService.o
thread_linux_x86.o timer.o type.o typeArrayKlass.o typeArrayKlassKlass.o
typeArrayOop.o unhandledOops.o universe.o unsafe.o utf8.o vectornode.o
vectset.o verificationType.o verifier.o vframe.o vframeArray.o vframe_hp.o
virtualspace.o vmCMSOperations.o vmError.o vmError_linux.o vmGCOperations.o
vmPSOperations.o vmStructs.o vmSymbols.o vmThread.o vm_operations.o
vm_operations_g1.o vm_version.o vm_version_linux_x86.o vm_version_x86.o vmreg.o
vmreg_x86.o vtableStubs.o vtableStubs_x86_64.o workgroup.o xmlstream.o
yieldingWorkgroup.o idealGraphPrinter.o linux_x86_64.o -Wl,-Bstatic -lstdc++
-Wl,-Bdynamic -lm -ldl -lpthread -flto -fuse-linker-plugin
Retrieving that command and removing "-flto -fuse-linker-plugin" and rerunning
it allows the link to complete and generate a libjvm.so that has no undefined
references (beyond those expected in external .so files).
The undefined external references listed by the LTO version of the same command
are
/sources/java/control/build/linux-amd64/hotspot/outputdir/linux_amd64_compiler2/product/libjvm.so:
undefined reference to `void
G1ParPushHeapRSClosure::do_oop_nv<oopDesc*>(oopDesc**)'
/sources/java/control/build/linux-amd64/hotspot/outputdir/linux_amd64_compiler2/product/libjvm.so:
undefined reference to `void
FilterOutOfRegionClosure::do_oop_nv<oopDesc*>(oopDesc**)'
/sources/java/control/build/linux-amd64/hotspot/outputdir/linux_amd64_compiler2/product/libjvm.so:
undefined reference to `void
FilterAndMarkInHeapRegionAndIntoCSClosure::do_oop_nv<oopDesc*>(oopDesc**)'
/sources/java/control/build/linux-amd64/hotspot/outputdir/linux_amd64_compiler2/product/libjvm.so:
undefined reference to `void HRInto_G1RemSet::write_ref_nv<unsigned
int>(HeapRegion*, unsigned int*)'
/sources/java/control/build/linux-amd64/hotspot/outputdir/linux_amd64_compiler2/product/libjvm.so:
undefined reference to `void
FilterIntoCSClosure::do_oop_nv<oopDesc*>(oopDesc**)'
/sources/java/control/build/linux-amd64/hotspot/outputdir/linux_amd64_compiler2/product/libjvm.so:
undefined reference to `void UpdateRSetImmediate::do_oop_work<unsigned
int>(unsigned int*)'
/sources/java/control/build/linux-amd64/hotspot/outputdir/linux_amd64_compiler2/product/libjvm.so:
undefined reference to `void
FilterInHeapRegionAndIntoCSClosure::do_oop_nv<oopDesc*>(oopDesc**)'
/sources/java/control/build/linux-amd64/hotspot/outputdir/linux_amd64_compiler2/product/libjvm.so:
undefined reference to `void
UpdateRSetImmediate::do_oop_work<oopDesc*>(oopDesc**)'
/sources/java/control/build/linux-amd64/hotspot/outputdir/linux_amd64_compiler2/product/libjvm.so:
undefined reference to `void
UpdateRSOopClosure::do_oop_work<oopDesc*>(oopDesc**)'
/sources/java/control/build/linux-amd64/hotspot/outputdir/linux_amd64_compiler2/product/libjvm.so:
undefined reference to `void UpdateRSOopClosure::do_oop_work<unsigned
int>(unsigned int*)'
/sources/java/control/build/linux-amd64/hotspot/outputdir/linux_amd64_compiler2/product/libjvm.so:
undefined reference to `void G1ParScanClosure::do_oop_nv<oopDesc*>(oopDesc**)'
/sources/java/control/build/linux-amd64/hotspot/outputdir/linux_amd64_compiler2/product/libjvm.so:
undefined reference to `HeapRegionSeq::addr_to_region(void const*)'
/sources/java/control/build/linux-amd64/hotspot/outputdir/linux_amd64_compiler2/product/libjvm.so:
undefined reference to `void
HRInto_G1RemSet::write_ref_nv<oopDesc*>(HeapRegion*, oopDesc**)'
--
Configure bugmail: http://sourceware.org/bugzilla/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are on the CC list for the bug.
- [Bug gold/12433] New: Linking libjvm.so with LTO fails with undefined references,
trevor.hemsley at ntlworld dot com <=
- [Bug gold/12433] Linking libjvm.so with LTO fails with undefined references, hjl.tools at gmail dot com, 2011/01/24
- [Bug gold/12433] Linking libjvm.so with LTO fails with undefined references, trevor.hemsley at ntlworld dot com, 2011/01/24
- [Bug gold/12433] Linking libjvm.so with LTO fails with undefined references, hjl.tools at gmail dot com, 2011/01/24
- [Bug gold/12433] Linking libjvm.so with LTO fails with undefined references, trevor.hemsley at ntlworld dot com, 2011/01/24
- [Bug gold/12433] Linking libjvm.so with LTO fails with undefined references, trevor.hemsley at ntlworld dot com, 2011/01/24
- [Bug gold/12433] Linking libjvm.so with LTO fails with undefined references, hjl.tools at gmail dot com, 2011/01/24