On 19 August 2015 at 16:21, Jiong Wang <jiong.w...@arm.com> wrote: > > Marcus Shawcroft writes: > >> On 21 May 2015 at 17:49, Jiong Wang <jiong.w...@arm.com> wrote: >> >>> 2015-05-14 Jiong Wang <jiong.w...@arm.com> >>> gcc/ >>> * config/aarch64/aarch64.c (aarch64_print_operand): Support tls_size. >>> * config/aarch64/aarch64.md (tlsle): Choose proper instruction >>> sequences. >>> (tlsle_<mode>): New define_insn. >>> (tlsle_movsym_<mode>): Ditto. >>> * config/aarch64/constraints.md (Uta): New constraint. >>> (Utb): Ditto. >>> (Utc): Ditto. >>> (Utd): Ditto. >>> >>> gcc/testsuite/ >>> * gcc.target/aarch64/tlsle.c: New test source. >>> * gcc.target/aarch64/tlsle12.c: New testcase. >>> * gcc.target/aarch64/tlsle24.c: New testcase. >>> * gcc.target/aarch64/tlsle32.c: New testcase. >>> >> >> >> case SYMBOL_TLSLE: >> - asm_fprintf (asm_out_file, ":tprel_lo12_nc:"); >> + if (aarch64_tls_size <= 12) >> + /* Make sure TLS offset fit into 12bit. */ >> + asm_fprintf (asm_out_file, ":tprel_lo12:"); >> + else >> + asm_fprintf (asm_out_file, ":tprel_lo12_nc:"); >> break; >> >> Use the existing classify_symbol mechanism we use throughout the >> aarch64 backend. Specifically rename SYMBOL_TLSLE as SYMBOL_TLSLE24 >> and introduce the 3 missing flavours then use the symbol >> classification to control behaviour such as this modifier selection. > > Done. > > classified TLS symbol into the following sub-types according to the value of > tls size. > > SYMBOL_TLSLE12 > SYMBOL_TLSLE24 > SYMBOL_TLSLE32 > SYMBOL_TLSLE48 > > And On AArch64, instruction sequence for TLS LE under -mtls-size=32 will > utilize the relocation modifier "tprel_g0_nc" together with MOVK, it's > only supported in binutils since 2015-03-04 as PR gas/17843. So I > adjusted tlsle32.c to make it robust by detecting whether there is such > binutils support. >
Hi, I'm (still) using binutils-2.25, and I can see that 2 of these new tests (tlsle12_1.c and tlsle24_1.c) fail at execution time on aarch64*-none-elf targets. Can you adjust the testcase? Thanks Christophe. > OK for trunk? > > 2015-08-19 Marcus Shawcroft <marcus.shawcr...@arm.com> > Jiong Wang <jiong.w...@arm.com> > gcc/ > * config/aarch64/aarch64.c (initialize_aarch64_tls_size): Set default > tls size for tiny, small, large memory model. > (aarch64_load_symref_appropriately): Support new symbol types. > (aarch64_expand_mov_immediate): Likewise. > (aarch64_print_operand): Likewise. > (aarch64_classify_tls_symbol): Likewise. > * config/aarch64/aarch64-protos.h (aarch64_symbol_context): Likewise. > (aarch64_symbol_type): Likewise. > * config/aarch64/aarch64.md (tlsle): Deleted. > (tlsle12_<mode>): New define_insn. > (tlsle24_<mode>): Likewise. > (tlsle32_<mode>): Likewise. > (tlsle48_<mode>): Likewise. > * doc/sourcebuild.texi (AArch64-specific attributes): Document > "aarch64_tlsle32". > > gcc/testsuite/ > * lib/target-supports.exp (check_effective_target_aarch64_tlsle32): > New test directive. > * gcc.target/aarch64/tlsle_1.x: New test source. > * gcc.target/aarch64/tlsle12.c: New testcase. > * gcc.target/aarch64/tlsle24.c: New testcase. > * gcc.target/aarch64/tlsle32.c: New testcase. > -- > Regards, > Jiong >