This is the mail archive of the mailing list for the GCC project.

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [PATCH] MIPS16 TLS support for GCC

Richard Sandiford <> writes:
> "Maciej W. Rozycki" <> writes:
>>> If there's still some concern that __mips16_rdhwr might not have
>>> the right ABI, then maybe we should simply emit a link-once function
>>> in each object that needs it.  We could then switch to another function
>>> (and another API) without having to keep the old one in libgcc.a for
>>> compatibility.  It would also avoid the -shared-libgcc thing.
>>> Admittedly that's just an off-the-top-of-my-head idea. :-)
>>> What do you think?
>>  Actually I had that idea of a link-once function too, but it turned out 
>> quite complicated to do without rewriting some generic parts of GCC as it 
>> is currently not prepared to emit link-once functions outside C++ 
>> compilations.  It's been a while and I did lots of other stuff meanwhile, 
>> so please excuse me if I got anything wrong here.
> Hmm, OK, I wouldn't have expected that.  But if you've tried making
> __mips16_rdhwr link-once and had a bad experience with it, then yeah,
> let's go with the hidden libgcc function.  It's just a shame that we're
> having to force static linking of libgcc for this one case.
> I'll take the relevant parts from Chung-Lin's patch and test them
> over the weekend.

Here's what I committed after testing on mips64-linux-gnu, both with
and without PLTs.


2012-02-05  Chung-Lin Tang  <>

	* (mips64*-*-linux*, mipsisa64*-*-linux*, mips*-*-linux*):
	Add t-slibgcc-libgcc to tmake_file.
	* config/mips/libgcc-mips16.ver: Revert previous patch.
	* config/mips/mips16.S (__mips16_rdhwr): Hide.

Index: libgcc/
--- libgcc/	2012-02-04 10:27:18.000000000 +0000
+++ libgcc/	2012-02-04 11:34:03.000000000 +0000
@@ -746,12 +746,12 @@ mips*-*-netbsd*)			# NetBSD/mips, either
 mips64*-*-linux* | mipsisa64*-*-linux*)
 	extra_parts="$extra_parts crtfastmath.o"
-	tmake_file="${tmake_file} t-crtfm mips/t-mips16 mips/t-tpbit"
+	tmake_file="${tmake_file} t-crtfm mips/t-mips16 mips/t-tpbit t-slibgcc-libgcc"
 mips*-*-linux*)				# Linux MIPS, either endian.
 	extra_parts="$extra_parts crtfastmath.o"
-	tmake_file="${tmake_file} t-crtfm mips/t-mips16"
+	tmake_file="${tmake_file} t-crtfm mips/t-mips16 t-slibgcc-libgcc"
Index: libgcc/config/mips/libgcc-mips16.ver
--- libgcc/config/mips/libgcc-mips16.ver	2012-02-04 11:12:01.000000000 +0000
+++ libgcc/config/mips/libgcc-mips16.ver	2012-02-04 11:34:03.000000000 +0000
@@ -84,7 +84,3 @@ GCC_4.4.0 {
-GCC_4.7.0 {
-  __mips16_rdhwr
Index: libgcc/config/mips/mips16.S
--- libgcc/config/mips/mips16.S	2012-02-04 10:27:18.000000000 +0000
+++ libgcc/config/mips/mips16.S	2012-02-04 11:34:03.000000000 +0000
@@ -712,6 +712,9 @@ CALL_STUB_RET (__mips16_call_stub_dc_10,
 #ifdef L_m16rdhwr
 STARTFN (__mips16_rdhwr)
+	/* Forced always hidden, because the PLT resolver function would
+	   not preserve all necessary registers.  */
+	.hidden	__mips16_rdhwr
 	.set	push
 	.set	mips32r2
 	.set	noreorder

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]