8c37241be3
* elflink.c (elf_bfd_final_link): Don't output STT_SECTION symbol into .dynsym if elf_section_data (sec)->dynindx <= 0. Adjust counting of last_local. (_bfd_elf_link_renumber_dynsyms): Don't assign dynindx to sections other than SHT_PROGBITS/SHT_NOBITS and neither for .got/.got.plt/.plt created by the linker nor !SHF_ALLOC. * elf32-i386.c (elf_i386_finish_dynamic_sections): Point DT_PLTGOT to the start of the .got.plt section instead of the .got output section. Set sh_entsize for .got section in addition to .got.plt. (elf_i386_relocate_section): Don't assume _GLOBAL_OFFSET_TABLE_ is at sgot->output_section->vma. * elf64-x86-64.c (elf64_x86_64_finish_dynamic_sections): Point DT_PLTGOT to the start of the .got.plt section instead of the .got output section. (elf64_x86_64_relocate_section): Don't assume _GLOBAL_OFFSET_TABLE_ is at sgot->output_section->vma. Set sh_entsize for .got section in addition to .got.plt. * elf.c (_bfd_elf_print_private_bfd_data): Handle PT_GNU_RELRO. (bfd_section_from_phdr): Likewise. (map_sections_to_segments): Likewise. (assign_file_positions_for_segments): Likewise. (get_program_header_size): Likewise. * elflink.c (bfd_elf_size_dynamic_sections): Set elf_tdata (output_bfd)->relro from info->relro. * elf-bfd.h (struct elf_obj_tdata): Add relro field. include/ * bfdlink.h (struct bfd_link_info): Add relro, relro_start and relro_end fields. * elf/common.h (PT_GNU_EH_FRAME, PT_GNU_STACK): Add comments. (PT_GNU_RELRO): Define. binutils/ * readelf.c (get_segment_type): Handle PT_GNU_RELRO. ld/ * genscripts.sh: Generate -z combreloc -z now -z relro scripts for binaries, -shared and -pie. * emulparams/elf_i386.sh (SEPARATE_GOTPLT): Set. * emulparams/elf_x86_64.sh (SEPARATE_GOTPLT): Set. * emulparams/elf32ppc.sh (OTHER_READWRITE_SECTIONS): Rename to... (OTHER_RELRO_SECTIONS): ... this. * ldlex.l (DATA_SEGMENT_RELRO_END): Add. * emultempl/elf32.em (gld${EMULATION_NAME}_handle_option): Handle -z relro and -z norelro. (gld${EMULATION_NAME}_list_options): Add it to usage. (gld${EMULATION_NAME}_get_script): Return -z combreloc -z now -z relro scripts when appropriate. * scripttempl/elf.sc: Unset SEPARATE_GOTPLT if RELRO_NOW is set. Create separate .got.plt section if SEPARATE_GOTPLT. Move sections which are only written during relocation handling to the beginning of RW segment. If NO_SMALL_DATA, move .got before .data. Add DATA_SEGMENT_RELRO_END directive. Include OTHER_RELRO_SECTIONS. * ldgram.y (DATA_SEGMENT_RELRO_END): Add. * ldexp.c (exp_print_token): Handle DATA_SEGMENT_RELRO_END. (fold_unary): Likewise. (fold_binary): Handle -z relro. * ldexp.h (struct exp_data_seg): Add exp_dataseg_relro_seen and exp_dataseg_relro_adjust phases. Add relro_end field. * ldmain.c (main): Initialize link_info.relro to FALSE. * ldlang.c (lang_size_sections): Handle -z relro. ld/testsuite/ * ld-i386/tlspic.rd: Adjust for section reordering changes and removal of unneeded STT_SECTION symbols from .dynsym. * ld-i386/tlspic.dd: Likewise. * ld-i386/tlspic.sd: Likewise. * ld-i386/tlsbin.rd: Likewise. * ld-i386/tlsbinpic.s: Likewise. * ld-i386/tlsbin.dd: Likewise. * ld-i386/tlsbin.sd: Likewise. * ld-i386/tlsnopic.rd: Likewise. * ld-i386/tlsnopic1.s: Likewise. * ld-i386/combreloc.d: Likewise. * ld-i386/tlsnopic.dd: Likewise. * ld-i386/tlsnopic.sd: Likewise. * ld-x86-64/tlspic.rd: Likewise. * ld-x86-64/tlspic.dd: Likewise. * ld-x86-64/tlsbin.dd: Likewise. * ld-x86-64/tlspic.sd: Likewise. * ld-x86-64/tlsbin.sd: Likewise. * ld-x86-64/tlspic.td: Likewise. * ld-x86-64/tlsbin.td: Likewise. * ld-x86-64/tlsbin.rd: Likewise. * ld-s390/tlspic1.s: Likewise. * ld-s390/tlsbinpic.s: Likewise. * ld-s390/tlspic.rd: Likewise. * ld-s390/tlsbin.rd: Likewise. * ld-s390/tlspic.dd: Likewise. * ld-s390/tlsbin.dd: Likewise. * ld-s390/tlsbin.sd: Likewise. * ld-s390/tlsbin.td: Likewise. * ld-s390/tlspic.sd: Likewise. * ld-s390/tlspic.td: Likewise. * ld-s390/tlspic1_64.s: Likewise. * ld-s390/tlsbinpic_64.s: Likewise. * ld-s390/tlspic_64.rd: Likewise. * ld-s390/tlsbin_64.rd: Likewise. * ld-s390/tlspic_64.dd: Likewise. * ld-s390/tlsbin_64.dd: Likewise. * ld-s390/tlspic_64.sd: Likewise. * ld-s390/tlspic_64.td: Likewise. * ld-s390/tlsbin_64.td: Likewise. * ld-s390/tlsbin_64.sd: Likewise. * ld-powerpc/tlsexe32.r: Likewise. * ld-powerpc/tlsso32.r: Likewise. * ld-powerpc/tlsso32.d: Likewise. * ld-powerpc/tlsso32.g: Likewise. * ld-powerpc/tlsso32.t: Likewise. * ld-powerpc/tlsexe.r: Likewise. * ld-powerpc/tlsso.r: Likewise. * ld-powerpc/tlsso.g: Likewise. * ld-powerpc/tlsexetoc.r: Likewise. * ld-powerpc/tlstocso.r: Likewise. * ld-powerpc/tlstocso.g: Likewise. * ld-ia64/tlspic.rd: Likewise. * ld-ia64/tlspic.dd: Likewise. * ld-ia64/tlspic.sd: Likewise. * ld-ia64/tlspic.td: Likewise. * ld-ia64/tlsbin.rd: Likewise. * ld-ia64/tlsbin.sd: Likewise. * ld-ia64/tlsbin.td: Likewise. * ld-elfvsb/elfvsb.exp: XFAIL non-PIC load offset tests on s390x. * ld-shared/shared.exp: Likewise.
161 lines
4.6 KiB
Text
161 lines
4.6 KiB
Text
#source: tlsnopic1.s
|
|
#source: tlsnopic2.s
|
|
#as: --32
|
|
#ld: -shared -melf_i386
|
|
#objdump: -drj.text
|
|
#target: i?86-*-*
|
|
|
|
.*: +file format elf32-i386
|
|
|
|
Disassembly of section .text:
|
|
|
|
0+1000 <fn3>:
|
|
1000: 55[ ]+push %ebp
|
|
1001: 89 e5[ ]+mov %esp,%ebp
|
|
# @indntpoff IE against global var
|
|
1003: 65 a1 00 00 00 00[ ]+mov %gs:0x0,%eax
|
|
1009: 90[ ]+nop *
|
|
100a: 90[ ]+nop *
|
|
100b: 03 05 88 20 00 00[ ]+add 0x2088,%eax
|
|
# ->R_386_TLS_TPOFF sg1
|
|
1011: 90[ ]+nop *
|
|
1012: 90[ ]+nop *
|
|
1013: 90[ ]+nop *
|
|
1014: 90[ ]+nop *
|
|
# @indntpoff direct %gs access IE against global var
|
|
1015: 8b 15 8c 20 00 00[ ]+mov 0x208c,%edx
|
|
# ->R_386_TLS_TPOFF sg2
|
|
101b: 90[ ]+nop *
|
|
101c: 90[ ]+nop *
|
|
101d: 65 8b 02[ ]+mov %gs:\(%edx\),%eax
|
|
1020: 90[ ]+nop *
|
|
1021: 90[ ]+nop *
|
|
1022: 90[ ]+nop *
|
|
1023: 90[ ]+nop *
|
|
# @indntpoff IE against hidden var
|
|
1024: 65 a1 00 00 00 00[ ]+mov %gs:0x0,%eax
|
|
102a: 90[ ]+nop *
|
|
102b: 90[ ]+nop *
|
|
102c: 03 05 90 20 00 00[ ]+add 0x2090,%eax
|
|
# ->R_386_TLS_TPOFF [0x14000000]
|
|
1032: 90[ ]+nop *
|
|
1033: 90[ ]+nop *
|
|
1034: 90[ ]+nop *
|
|
1035: 90[ ]+nop *
|
|
# @indntpoff direct %gs access IE against hidden var
|
|
1036: 8b 15 94 20 00 00[ ]+mov 0x2094,%edx
|
|
# ->R_386_TLS_TPOFF [0x18000000]
|
|
103c: 90[ ]+nop *
|
|
103d: 90[ ]+nop *
|
|
103e: 65 8b 02[ ]+mov %gs:\(%edx\),%eax
|
|
1041: 90[ ]+nop *
|
|
1042: 90[ ]+nop *
|
|
1043: 90[ ]+nop *
|
|
1044: 90[ ]+nop *
|
|
# @indntpoff IE against local var
|
|
1045: 65 a1 00 00 00 00[ ]+mov %gs:0x0,%eax
|
|
104b: 90[ ]+nop *
|
|
104c: 90[ ]+nop *
|
|
104d: 03 05 80 20 00 00[ ]+add 0x2080,%eax
|
|
# ->R_386_TLS_TPOFF [0x00000000]
|
|
1053: 90[ ]+nop *
|
|
1054: 90[ ]+nop *
|
|
1055: 90[ ]+nop *
|
|
1056: 90[ ]+nop *
|
|
# @indntpoff direct %gs access IE against local var
|
|
1057: 8b 15 84 20 00 00[ ]+mov 0x2084,%edx
|
|
# ->R_386_TLS_TPOFF [0x04000000]
|
|
105d: 90[ ]+nop *
|
|
105e: 90[ ]+nop *
|
|
105f: 65 8b 02[ ]+mov %gs:\(%edx\),%eax
|
|
1062: 90[ ]+nop *
|
|
1063: 90[ ]+nop *
|
|
1064: 90[ ]+nop *
|
|
1065: 90[ ]+nop *
|
|
# LE @tpoff, global var
|
|
1066: ba fd ff ff ff[ ]+mov \$0xfffffffd,%edx
|
|
# R_386_TLS_TPOFF32 sg3
|
|
106b: 90[ ]+nop *
|
|
106c: 90[ ]+nop *
|
|
106d: 65 a1 00 00 00 00[ ]+mov %gs:0x0,%eax
|
|
1073: 90[ ]+nop *
|
|
1074: 90[ ]+nop *
|
|
1075: 29 d0[ ]+sub %edx,%eax
|
|
1077: 90[ ]+nop *
|
|
1078: 90[ ]+nop *
|
|
1079: 90[ ]+nop *
|
|
107a: 90[ ]+nop *
|
|
# LE @tpoff, local var
|
|
107b: b8 f7 ff ff ff[ ]+mov \$0xfffffff7,%eax
|
|
# R_386_TLS_TPOFF32
|
|
1080: 90[ ]+nop *
|
|
1081: 90[ ]+nop *
|
|
1082: 65 8b 15 00 00 00 00 mov %gs:0x0,%edx
|
|
1089: 90[ ]+nop *
|
|
108a: 90[ ]+nop *
|
|
108b: 29 c2[ ]+sub %eax,%edx
|
|
108d: 90[ ]+nop *
|
|
108e: 90[ ]+nop *
|
|
108f: 90[ ]+nop *
|
|
1090: 90[ ]+nop *
|
|
# LE @ntpoff, global var
|
|
1091: 65 a1 00 00 00 00[ ]+mov %gs:0x0,%eax
|
|
1097: 90[ ]+nop *
|
|
1098: 90[ ]+nop *
|
|
1099: 8d 90 02 00 00 00[ ]+lea 0x2\(%eax\),%edx
|
|
# R_386_TLS_TPOFF sg4
|
|
109f: 90[ ]+nop *
|
|
10a0: 90[ ]+nop *
|
|
10a1: 90[ ]+nop *
|
|
10a2: 90[ ]+nop *
|
|
# LE @ntpoff, hidden var, non-canonical sequence
|
|
10a3: b8 1c 00 00 00[ ]+mov \$0x1c,%eax
|
|
# R_386_TLS_TPOFF
|
|
10a8: 90[ ]+nop *
|
|
10a9: 90[ ]+nop *
|
|
10aa: 65 8b 15 00 00 00 00 mov %gs:0x0,%edx
|
|
10b1: 90[ ]+nop *
|
|
10b2: 90[ ]+nop *
|
|
10b3: 01 c2[ ]+add %eax,%edx
|
|
10b5: 90[ ]+nop *
|
|
10b6: 90[ ]+nop *
|
|
10b7: 90[ ]+nop *
|
|
10b8: 90[ ]+nop *
|
|
# LE @ntpoff, local var, non-canonical sequence
|
|
10b9: 65 8b 15 00 00 00 00 mov %gs:0x0,%edx
|
|
10c0: 90[ ]+nop *
|
|
10c1: 90[ ]+nop *
|
|
10c2: 81 c2 0d 00 00 00[ ]+add \$0xd,%edx
|
|
# R_386_TLS_TPOFF
|
|
10c8: 90[ ]+nop *
|
|
10c9: 90[ ]+nop *
|
|
10ca: 90[ ]+nop *
|
|
10cb: 90[ ]+nop *
|
|
# Direct %gs access
|
|
# LE @ntpoff, global var
|
|
10cc: 65 a1 00 00 00 00[ ]+mov %gs:0x0,%eax
|
|
# R_386_TLS_TPOFF sg5
|
|
10d2: 90[ ]+nop *
|
|
10d3: 90[ ]+nop *
|
|
10d4: 90[ ]+nop *
|
|
10d5: 90[ ]+nop *
|
|
# LE @ntpoff, local var
|
|
10d6: 65 8b 15 13 00 00 00 mov %gs:0x13,%edx
|
|
# R_386_TLS_TPOFF
|
|
10dd: 90[ ]+nop *
|
|
10de: 90[ ]+nop *
|
|
10df: 90[ ]+nop *
|
|
10e0: 90[ ]+nop *
|
|
# LE @ntpoff, hidden var
|
|
10e1: 65 8b 15 21 00 00 00 mov %gs:0x21,%edx
|
|
# R_386_TLS_TPOFF
|
|
10e8: 90[ ]+nop *
|
|
10e9: 90[ ]+nop *
|
|
10ea: 90[ ]+nop *
|
|
10eb: 90[ ]+nop *
|
|
10ec: 8b 5d fc[ ]+mov 0xfffffffc\(%ebp\),%ebx
|
|
10ef: c9[ ]+leave *
|
|
10f0: c3[ ]+ret *
|
|
10f1: 90[ ]+nop *
|
|
10f2: 90[ ]+nop *
|
|
10f3: 90[ ]+nop *
|