https://gcc.gnu.org/bugzilla/show_bug.cgi?id=87864

--- Comment #3 from ro at CeBiTec dot Uni-Bielefeld.DE <ro at CeBiTec dot 
Uni-Bielefeld.DE> ---
>> --- Comment #1 from Iain Buclaw <ibuclaw at gdcproject dot org> ---
>> Is there another way to get a section in earlier versions of Solaris?
>
> What I initially did in LLVM's compiler-rt (which prompted the addition
> of __start_SEC/__stop_SEC support to ld) was to add two startup files to
> define the necessary labels and link the __start_SEC one early, the
> __stop_SEC one late:
>
> http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/sanitizer_common/
>
> See sancov_begin.S and sancov_end.S.

To elaborate, here's my current plan:

* Have some drtstuff.c like this

#ifdef DRT_BEGIN
void *__start_minfo[]
__attribute__((used, section("minfo"), aligned(sizeof(void *)))) = { };
#endif

#ifdef DRT_END
void *__stop_minfo[]
__attribute__((used, section("minfo"), aligned(sizeof(void *)))) = { };
#endif

  and compile it into separate drtbegin.o/drtend.o.

* Based on the outcome of DCFG_MINFO_BRACKETING, add them to
  libgphobos.spec like this:

%rename startfile startfile_orig
*startfile: %(startfile_orig) drtbegin.o%s

%rename endfile endfile_orig
*endfile: %(endfile_orig) drtend.o%s

* This will have to be done explicitly for libgdruntime.la and
  libgphobos.la since both are linked with -nophoboslib.

Doing the equivalent of this manually allowed the libs to be linked on
Solaris 10.  However, this was before the section_elf_shared.d work, so
the resulting libs had unresolved references.

Reply via email to