[gccsdk] RePackaging using trunk GCC instead of 4.1.2

Lee Noar leenoar at sky.com
Fri Jan 3 06:41:09 PST 2014


On 03/01/14 12:47, Alan Buckley wrote:
> I’m in the process of modifying the autobuilder packaging to set
> up the new packaging Components field.

> Once I’ve done this and tested it I intend to go through the
> autobuilder programs/libraries that generate packages
> and update them all (or as many as I can get to build).

> I was wondering if this would be a good time to change my
> machine to use the trunk version of the compiler (4.7?)
> instead of the 4.1.2 version I currently use.

> I’ve a few questions to see if it seems like a good idea.
> Is the trunk compiler stable enough to use in this way?

I've been using trunk for some time for development and it seems
stable to me. The only problem I've had is a crash in Cairo which
I traced to file cairo-1.12.16/src/cairo-boxes-intersect.c, function
sweep_line_init(), GCC 4.7.4 produced this code snippet:

   ldr	r0, [r0, #-3936]
   ldr	r7, [r0, #-3940]
   str	r9, [r7, r0, asl #2]

The first ldr corrupts r0 which is still required by the second ldr.
I was able to work around it by declaring the function noinline.
This must be an extremely obscure bug, because this is the only time
I've seen it and I've compiled and run a fair bit of code with this
compiler. Unfortunately, I wouldn't have a clue how to fix it.

> To run programs compiled with it, does it need new versions
> of the Shared Unix Library?

I don't think so, they both appear to be V1.12.

> To run programs compiled with it, does it need new versions
> of SharedLibs?

Yes, the shared library ABI changed after 4.1.2 to a more efficient
scheme, so, a program compiled with 4.7 must run with libraries
built with 4.7 and likewise for 4.1.2.

> Can I freely use libraries compiled with 4.1.2 with the trunk
> version and visa versa?

As above, binaries must use libraries built with the same compiler,
however, it is possible to have both types installed alongside
each other. For this the !SharedLibs and SOManager from trunk
are required. Libraries built with 4.1.2 are then installed
in !SharedLibs.lib.abi-1/0 and those built with 4.7 (or later)
are installed in !SharedLibs.lib.abi-2/0.
The SOManager and dynamic linker will detect which compiler a
binary was compiled with and load the appropriate libraries,
but all libraries must be the same ABI as the binary.

Lee.





More information about the gcc mailing list