libcc1: dynamic load versioned library

Message ID CAODfWeEEr6ENbqrw4_CsCJ20qh-MTMBRvMcb700tomOCZjnEdw@mail.gmail.com
State New, archived
Headers

Commit Message

Hector Oron March 24, 2015, 4:07 p.m. UTC
  Hello,

 I believe libcc1 is versioned library therefore, it should dlopen on
libcc1.so.0 instead libcc1.so.
 The patch should be applied to master and 7.9 branch.

Héctor Orón Martínez

    * include/gcc-c-interface.h (gcc_c_context): load libcc1 versioned library


Regards,
  

Comments

Mark Kettenis March 24, 2015, 4:33 p.m. UTC | #1
> Date: Tue, 24 Mar 2015 17:07:00 +0100
> From: Hector Oron <hector.oron@gmail.com>
> 
> Hello,
> 
>  I believe libcc1 is versioned library therefore, it should dlopen on
> libcc1.so.0 instead libcc1.so.
>  The patch should be applied to master and 7.9 branch.

And what happens if the major version of the library is bumped?

> Héctor Orón Martínez
> 
>     * include/gcc-c-interface.h (gcc_c_context): load libcc1 versioned library
> 
> --- gdb-7.9.orig/include/gcc-c-interface.h
> +++ gdb-7.9/include/gcc-c-interface.h
> @@ -197,7 +197,7 @@ struct gcc_c_context
>  /* The name of the .so that the compiler builds.  We dlopen this
>     later.  */
> 
> -#define GCC_C_FE_LIBCC libcc1.so
> +#define GCC_C_FE_LIBCC libcc1.so.0
> 
>  /* The compiler exports a single initialization function.  This macro
>     holds its name as a symbol.  */
> 
> Regards,
> -- 
>  Héctor Orón  -.. . -... .. .- -.   -.. . ...- . .-.. --- .--. . .-.
> 
>
  
Hector Oron March 24, 2015, 5:06 p.m. UTC | #2
Hello,

2015-03-24 17:33 GMT+01:00 Mark Kettenis <mark.kettenis@xs4all.nl>:
>> From: Hector Oron <hector.oron@gmail.com>
>>
>> Hello,
>>
>>  I believe libcc1 is versioned library therefore, it should dlopen on
>> libcc1.so.0 instead libcc1.so.
>>  The patch should be applied to master and 7.9 branch.
>
> And what happens if the major version of the library is bumped?

Does that mean that there is some ABI break which might imply or not
newer changes on GDB side?

>> Héctor Orón Martínez
>>
>>     * include/gcc-c-interface.h (gcc_c_context): load libcc1 versioned library
>>
>> --- gdb-7.9.orig/include/gcc-c-interface.h
>> +++ gdb-7.9/include/gcc-c-interface.h
>> @@ -197,7 +197,7 @@ struct gcc_c_context
>>  /* The name of the .so that the compiler builds.  We dlopen this
>>     later.  */
>>
>> -#define GCC_C_FE_LIBCC libcc1.so
>> +#define GCC_C_FE_LIBCC libcc1.so.0
>>
>>  /* The compiler exports a single initialization function.  This macro
>>     holds its name as a symbol.  */
>>
>> Regards,
>> --
>>  Héctor Orón  -.. . -... .. .- -.   -.. . ...- . .-.. --- .--. . .-.
>>
>>
  
Mike Frysinger March 24, 2015, 7:46 p.m. UTC | #3
On 24 Mar 2015 17:33, Mark Kettenis wrote:
> From: Hector Oron <hector.oron@gmail.com>
> >  I believe libcc1 is versioned library therefore, it should dlopen on
> > libcc1.so.0 instead libcc1.so.
> >  The patch should be applied to master and 7.9 branch.
> 
> And what happens if the major version of the library is bumped?

then we need to handle it ?  there's no guarantee the ABI is compatible ...
if it was, then it probably wouldn't have changed SONAMEs.

usually the libxxx.so symlink isn't generated on runtime systems.  you need
to install extra dev packages to get it.  so loading the SONAME directly is
almost always the right thing.
-mike
  

Patch

--- gdb-7.9.orig/include/gcc-c-interface.h
+++ gdb-7.9/include/gcc-c-interface.h
@@ -197,7 +197,7 @@  struct gcc_c_context
 /* The name of the .so that the compiler builds.  We dlopen this
    later.  */

-#define GCC_C_FE_LIBCC libcc1.so
+#define GCC_C_FE_LIBCC libcc1.so.0

 /* The compiler exports a single initialization function.  This macro
    holds its name as a symbol.  */