Created attachment 31813 [details] Testcase. The attached testcase shows the problem. Argument expressions containing a TLS symbol reference need to be precomputed as a call may be needed to legitimize the address and this may clobber the setup for earlier arguments causing wrong code. For example, compilation of the testcase with: gcc-4.8 -fPIC -DPIC -W -Wall -Wextra -Wshadow -Wformat -Wundef -D_GNU_SOURCE -O0 cap-ng.c -fPIC -DPIC -o cap-ng results in the following output: $ ./cap-ng cc m.hdr1 = 0x400015c8 pidaaaa = 0 There seems to be some attempt to handle this in precompute_register_parameters().
Created attachment 31814 [details] Output from expand. One can see in .expand that TLS arguments to printf are not being precomputed causing wrong code.
Author: danglin Date: Wed Feb 5 00:43:56 2014 New Revision: 207493 URL: http://gcc.gnu.org/viewcvs?rev=207493&root=gcc&view=rev Log: PR target/59777 * config/pa/pa.c (legitimize_tls_address): Return original address if not passed a SYMBOL_REF rtx. (hppa_legitimize_address): Call legitimize_tls_address for all TLS addresses. (pa_emit_move_sequence): Simplify TLS source operands. (pa_legitimate_constant_p): Reject all TLS constants. * config/pa/pa.h (PA_SYMBOL_REF_TLS_P): Correct comment. (CONSTANT_ADDRESS_P): Reject TLS CONST addresses. Modified: trunk/gcc/ChangeLog trunk/gcc/config/pa/pa.c trunk/gcc/config/pa/pa.h
Author: danglin Date: Wed Feb 5 00:47:25 2014 New Revision: 207494 URL: http://gcc.gnu.org/viewcvs?rev=207494&root=gcc&view=rev Log: PR target/59777 * config/pa/pa.c (legitimize_tls_address): Return original address if not passed a SYMBOL_REF rtx. (hppa_legitimize_address): Call legitimize_tls_address for all TLS addresses. (pa_emit_move_sequence): Simplify TLS source operands. (pa_legitimate_constant_p): Reject all TLS constants. * config/pa/pa.h (PA_SYMBOL_REF_TLS_P): Correct comment. (CONSTANT_ADDRESS_P): Reject TLS CONST addresses. Modified: branches/gcc-4_8-branch/gcc/ChangeLog branches/gcc-4_8-branch/gcc/config/pa/pa.c branches/gcc-4_8-branch/gcc/config/pa/pa.h
Fixed on trunk and 4.8 branch.