On Thu, Jun 23, 2016 at 6:08 PM, H.J. Lu <hjl.to...@gmail.com> wrote:
> Here is the updated patch. OK for trunk? > > PR target/66232 > PR target/67400 > * configure.ac (as_ix86_tls_ldm_opt): Renamed to ... > (as_ix86_gas_opt): This. > (ld_ix86_tls_ldm_opt): Renamed to ... > (ld_ix86_gld_opt): This. > (R_386_TLS_LDM reloc): Updated. > (R_386_GOT32X reloc): New assembler/linker check. > (HAVE_AS_IX86_GOT32X): New. Defined to 1 if 32-bit assembler and > linker support "jmp *_start@GOT" and "cmpl $0, bar@GOT". Otherise, > defined to 0. > * config.in: Regenerated. > * configure: Likewise. > * config/i386/i386.c (ix86_force_load_from_GOT_p): Return > true if HAVE_AS_IX86_GOT32X is 1 in 32-bit mode. > (ix86_legitimate_address_p): Allow UNSPEC_GOT for -fno-plt > if ix86_force_load_from_GOT_p returns true. > (ix86_print_operand_address_as): Also support UNSPEC_GOT if > ix86_force_load_from_GOT_p returns true. > (ix86_expand_move): Generate UNSPEC_GOT in 32-bit mode to load > the external function address via the GOT slot. > (ix86_nopic_noplt_attribute_p): Check both TARGET_64BIT and > HAVE_AS_IX86_GOT32X before returning false. > (ix86_output_call_insn): Generate "%!jmp/call\t*%p0@GOT" in > 32-bit mode if ix86_nopic_noplt_attribute_p returns true. > > gcc/testsuite/ > > PR target/66232 > PR target/67400 > * gcc.target/i386/pr66232-14.c: New file. > * gcc.target/i386/pr66232-15.c: Likewise. > * gcc.target/i386/pr66232-16.c: Likewise. > * gcc.target/i386/pr66232-17.c: Likewise. > * gcc.target/i386/pr67400-1.c: Don't disable for ia32. Scan for > ia32 if R_386_GOT32X relocation is supported. > * gcc.target/i386/pr67400-2.c: Likewise. > * gcc.target/i386/pr67400-3.c: Likewise. > * gcc.target/i386/pr67400-4.c: Likewise. > * gcc.target/i386/pr67400-6.c: Likewise. > * gcc.target/i386/pr67400-7.c: Likewise. > * lib/target-supports.exp (check_effective_target_got32x_reloc): > New. OK with a nit below. Thanks, Uros. --- a/gcc/configure.ac +++ b/gcc/configure.ac @@ -4164,13 +4164,13 @@ tls_ld: # Enforce 32-bit output with gas and gld. if test x$gas = xyes; then - as_ix86_tls_ldm_opt="--32" + as_ix86_gas_opt="--32" fi if echo "$ld_ver" | grep GNU > /dev/null; then if $gcc_cv_ld -V 2>/dev/null | grep elf_i386_sol2 > /dev/null; then - ld_ix86_tls_ldm_opt="-melf_i386_sol2" + ld_ix86_gld_opt="-melf_i386_sol2" else - ld_ix86_tls_ldm_opt="-melf_i386" + ld_ix86_gld_opt="-melf_i386" fi fi conftest_s=' I'd like to suggest better names, perhaps as_ix86_gas_32_opt and ld_ix86_gld_32_opt to mark that they are intended for 32bit targets. But it is up to you, we can also live with above names.