Re: [patch] [java] bump libgcj soname

Matthias Klose <[email protected]> Sat, 2 Jan 2016 15:40:24 +0100
Newsgroups gmane.comp.gcc.java.patches,gmane.comp.gcc.patches
Message-ID <[email protected]>
On 21.04.2015 16:37, Jakub Jelinek wrote:
> On Tue, Apr 21, 2015 at 04:29:52PM +0200, Matthias Klose wrote:
>> On 04/21/2015 04:19 PM, Jakub Jelinek wrote:
>>> On Tue, Apr 21, 2015 at 04:16:18PM +0200, Matthias Klose wrote:
>>>> On 04/21/2015 04:11 PM, Jakub Jelinek wrote:
>>>>> On Tue, Apr 21, 2015 at 04:07:13PM +0200, Matthias Klose wrote:
>>>>>> bump the libgcj soname on the trunk, as done for every release cycle,
>>>>>
>>>>> Is that really needed though these days?
>>>>> Weren't there basically zero changes to libjava (both libjava and
>>>>> libjava/classpath) in the last 2 or more years?
>>>>> The few ones were mostly updating Copyright notices, minor configure
>>>>> changes, but I really haven't seen anything ABI changing for quite a while.
>>>>
>>>> yes, the GCC version is embedded in the GCJ_VERSIONED_LIBDIR
>>>>
>>>> which is defined as
>>>>
>>>> gcjsubdir=gcj-$gcjversion-$libgcj_soversion
>>>> dbexecdir='$(toolexeclibdir)/'$gcjsubdir
>>>
>>> But why is that an argument for bumping it?  If both GCC 5 and GCC 6 will
>>> (likely) provide the same ABI in the library, there is no reason not to use
>>> the same directory for those.
>>
>> but currently there are different directories used (gcjversion already changed
>> on the trunk) and compiled into the library.  Do you mean that gcjsubdir should
>> be just defined as gcj?
>
> What depends on BASE-VER sure, that is bumped automatically and should track
> the gcc version.  But the soname, which is an unrelated number, there is no
> point to bump it.  If you have a packaging issue, just solve it on the
> packaging side, but really there is no point to yearly bump a soname of
> something that doesn't change at all (and is really dead project for many
> years).

preparing for a test rebuild of the archive, and trying to run gcj-dbtool (from 
GCC 5) with libgcj16 (from GCC 6):

$ gcj-dbtool -n /tmp/foo.db
libgcj failure: gcj linkage error.
Incorrect library ABI version detected.  Aborting.

Aborted (core dumped)

natClassLoader.cc:_Jv_CheckABIVersion checks the ABI version, which is defined as

libjava/include/jvm.h:#define GCJ_CXX_ABI_VERSION (__GNUC__ * 100000 + 
__GNUC_MINOR__ * 1000)

so this will be seen with everything directly linked to libgcj with a libgcj16 
upgraded to GCC 6. So what to do? Bump the soname, or discard this check?

In any case, GCJ_CXX_ABI_VERSION should be changed to not include __GNUC_MINOR__ 
anymore.  Maybe for the gcc-5-branch, set it unconditionally to 3 so that it 
won't change anymore with future releases from the gcc-5 branch?

Matthias