This is the mail archive of the
mailing list for the GCC project.
Re: libgo patch committed: Merge from revision 18783 of master
- From: Rainer Orth <ro at CeBiTec dot Uni-Bielefeld dot DE>
- To: Ian Lance Taylor <iant at google dot com>
- Cc: gcc-patches <gcc-patches at gcc dot gnu dot org>, "gofrontend-dev\ at googlegroups dot com" <gofrontend-dev at googlegroups dot com>
- Date: Wed, 11 Jun 2014 14:01:21 +0200
- Subject: Re: libgo patch committed: Merge from revision 18783 of master
- Authentication-results: sourceware.org; auth=none
- References: <mcrioogdu1a dot fsf at iant-glaptop dot roam dot corp dot google dot com> <yddegz25rm9 dot fsf at lokon dot CeBiTec dot Uni-Bielefeld dot DE> <CAKOQZ8yi5MNgqu9MSC6MCyOAZDrM6tHBYGC_+=n4ds8DX4BxNg at mail dot gmail dot com>
Ian Lance Taylor <firstname.lastname@example.org> writes:
> On Fri, Jun 6, 2014 at 2:12 AM, Rainer Orth <email@example.com> wrote:
>> Ian Lance Taylor <firstname.lastname@example.org> writes:
>>> I have committed a patch to libgo to merge from revision
>>> 18783:00cce3a34d7e of the master library. This revision was committed
>>> January 7. I picked this revision to merge to because the next revision
>>> deleted a file that is explicitly merged in by the libgo/merge.sh
>>> Among other things, this patch changes type descriptors to add a new
>>> pointer to a zero value. In gccgo this is implemented as a common
>>> variable, and that requires some changes to the compiler and a small
>>> change to go-gcc.cc.
>> This change introduced many failures on Solaris with /bin/ld, e.g.
>> FAIL: go.test/test/bom.go -O (test for excess errors)
>> ld: warning: symbol 'go$zerovalue' has differing sizes:
>> (file bom.o value=0x8; file
>> bom.o definition taken and updated with larger size
> Interesting. This is working as intended, except for the warning.
> go$zerovalue is a common symbol, and the linker is supposed to use the
> larger version. From the error message I'm guessing the Solaris
> linker supports this when linking object files, but not when linking
> an object file against a shared library.
> I wonder if we could avoid this warning by giving go$zerovalue hidden
> visibility. That would mean something like this patch.
> Index: go-gcc.cc
> --- go-gcc.cc (revision 211315)
> +++ go-gcc.cc (working copy)
> @@ -2521,6 +2521,8 @@ Gcc_backend::implicit_variable(const std
> DECL_COMMON(decl) = 1;
> TREE_PUBLIC(decl) = 1;
> gcc_assert(init_tree == NULL_TREE);
> + DECL_VISIBILITY(decl) = VISIBILITY_HIDDEN;
> + DECL_VISIBILITY_SPECIFIED(decl) = 1;
> else if (is_constant)
Unfortunately, this doesn't make a difference. I've now found that ld
Turns off the warning for multiply-defined tentative
(common block) data symbols that have different sizes or
different alignments. This option is equivalent to
specifying the -z relax=common option.
But I'm reluctant to enable this globally. Since Go uses no specs file,
support for target-specific (linker) options would have to go into gccgo
Rainer Orth, Center for Biotechnology, Bielefeld University