aboutsummaryrefslogtreecommitdiff
path: root/ld
AgeCommit message (Collapse)AuthorFilesLines
2007-05-22Use @copying around copyright noticesNick Clifton3-28/+28
2007-05-21binutils/Richard Sandiford6-3/+42
* objdump.c (disassemble_bytes): Ignore disassembler_needs_relocs for executables and shared libraries. ld/testsuite/ * ld-arm/emit-relocs1.d, ld-arm/emit-relocs1.s, * ld-arm/emit-relocs1-vxworks.d: New tests. * ld-arm/arm-elf.exp: Run them. * ld-arm/vxworks1.dd: Expect proper branch targets.
2007-05-18 * ld-elf/group.ld: Discard .reginfo.Joseph Myers2-0/+5
2007-05-18ld/Richard Sandiford2-0/+14
* emulparams/elf32ebmipvxworks.sh (OTHER_READONLY_SECTIONS) (OTHER_READWRITE_SECTIONS): Define. Add .rdata sections.
2007-05-182007-05-18 Paul Brook <paul@codesourcery.com>Paul Brook2-10/+12
bfd/ * elf32-arm.c (ARM2THUMB_V5_STATIC_GLUE_SIZE): Define. (a2t1v5_ldr_insn, a2t1v5_ldr_insn): New. (record_arm_to_thumb_glue): Add v5t non-pic glue. (elf32_arm_create_thumb_stub): Ditto. ld/testsuite/ * ld-arm/arm-call.d: Update expected output.
2007-05-172007-05-17 Paul Brook <paul@codesourcery.com>Paul Brook2-1/+5
ld/testsuite/ * ld-elf/multibss1.s: Use %nobits instead of @nobits.
2007-05-17 * ld-m68k/merge-error-1a.d: Mismatch is an error.Nathan Sidwell6-5/+13
* ld-m68k/merge-error-1b.d: Likewise. * ld-m68k/merge-error-1c.d: Likewise. * ld-m68k/merge-error-1d.d: Likewise. * ld-m68k/merge-error-1e.d: Likewise.
2007-05-16ld/Richard Sandiford3-12/+24
* configure.in: Allow sysroots to be relocated under $prefix as well as $exec_prefix. * configure: Regenerate.
2007-05-152007-05-15 H.J. Lu <hongjiu.lu@intel.com>H.J. Lu6-0/+53
PR ld/4504 * ld-elf/data1.c: New file. * ld-elf/data1.h: Likewise. * ld-elf/dynbss1.c: Likewise. * ld-elf/pass.out: Likewise. * ld-elf/shared.exp (build_tests): Add "Build libdata1.so". (run_tests): Add "Run with libdata1.so".
2007-05-15ld/testsuite/Richard Sandiford24-36/+82
* ld-arm/vxworks1.ld: Swap .bss and .data. * ld-arm/vxworks1-lib.rd: Update accordingly. * ld-arm/vxworks1-lib.td: New test. * ld-arm/arm-elf.exp: Run it. * ld-i386/vxworks1.ld: Swap .bss and .data. * ld-i386/vxworks1-lib.rd: Update accordingly. * ld-i386/vxworks1-lib.td: New test. * ld-i386/i386.exp: Run it. * ld-mips-elf/vxworks1.ld: Swap .bss and .data. * ld-mips-elf/vxworks1-lib.rd: Update accordingly. * ld-mips-elf/vxworks1.rd: Likewise. * ld-powerpc/vxworks1.ld: Swap .bss and .data. * ld-powerpc/vxworks1-lib.rd: Update accordingly. * ld-powerpc/vxworks1-lib.td: New test. * ld-powerpc/powerpc.exp: Run it. * ld-sh/vxworks1.ld: Swap .bss and .data. * ld-sh/vxworks1-lib.rd: Update accordingly. * ld-sh/vxworks1-lib.td: New test. * ld-sh/sh-vxworks.exp: Run it. * ld-sparc/vxworks1.ld: Swap .bss and .data. * ld-sparc/vxworks1-lib.rd: Update accordingly. * ld-sparc/vxworks1-lib.td: New test. * ld-sparc/sparc.exp: Run it.
2007-05-15bfd/Richard Sandiford2-1/+6
* elfxx-mips.c (mips_elf_create_local_got_entry): Remove input_section argument. Create .rela.dyn relocations against symbol 0 rather than the section symbol. (mips_elf_local_got_index): Remove input_section argument. Update call to mips_elf_create_local_got_entry. (mips_elf_got_page, mips_elf_got16_entry): Likewise. (mips_elf_calculate_relocation): Update calls to mips_elf_local_got_index, mips_elf_got16_entry and mips_elf_got_page. ld/testsuite/ * ld-mips-elf/vxworks1-lib.rd: Expect the GOT relocation to be against symbol 0.
2007-05-15 bfd/Mark Shinwell4-0/+33
* elf32-arm.c (elf32_arm_final_link_relocate): Correctly handle the Thumb-2 JUMP19 relocation. ld/testsuite/ * ld-arm/arm-elf.exp: Add jump19 testcase. * ld-arm/jump19.d: New. * ld-arm/jump19.s: New.
2007-05-14ld/testsuite/Richard Sandiford7-50/+61
* ld-sh/vxworks1.dd: Remove hexadecimal prefixes from constant pool contents. Consistently use "!" as the comment character. Consistently use _PROCEDURE_LINKAGE_TABLE_ in the first PLT entry. * ld-sh/vxworks1-le.dd: Likewise. * ld-sh/vxworks1-lib.dd: Likewise. * ld-sh/vxworks1-lib-le.dd: Likewise. * ld-sh/vxworks3.dd: Likewise. * ld-sh/vxworks3-le.dd: Likewise.
2007-05-14 * emultempl/ppc64elf.em (gld${EMULATION_NAME}_new_vers_pattern):Andreas Schwab5-6/+27
Handle null pattern. testsuite/: * ld-elf/dl2a.list: New file. * ld-elf/shared.exp: Add test using --dynamic-list=dl2a.list.
2007-05-11bfd/Alan Modra3-7/+33
* elf32-ppc.h (ppc_elf_select_plt_layout): Update prototype. (enum ppc_elf_plt_type): Move from.. * elf32-ppc.c: ..here. (struct ppc_elf_obj_tdata): Add makes_plt_call and has_rel16. (struct ppc_elf_link_hash_table): Reorder. Add old_bfd. Delete can_use_new_plt. Make is_vxworks a bitfield. (ppc_elf_link_hash_table_create): Don't clear is_vxworks (again). (ppc_elf_check_relocs): Update setting of reloc flags. Set old_bfd. (ppc_elf_select_plt_layout): Modify parameters. Use bfd reloc flags to better detect object files needing old bss-style plt. Allow secure plt to be used without rel16 relocs being detected. Warn if secure plt request cannot be allowed. ld/ * emultempl/ppc32elf.em (plt_style): New variable. (old_plt): Delete. (ppc_after_open): Adjust ppc_elf_select_plt_layout call. (PARSE_AND_LIST_PROLOGUE): Define OPTION_NEW_PLT, renumber OPTION_OLD_PLT, OPTION_OLD_GOT and OPTION_STUBSYMS. (PARSE_AND_LIST_LONGOPTS, PARSE_AND_LIST_OPTIONS): Add secure-plt. (PARSE_AND_LIST_ARGS_CASES): Handle OPTION_NEW_PLT. * ld.texinfo (--secure-plt): Document.
2007-05-10bfd/Richard Sandiford3-30/+38
* elf32-arm.c (elf32_arm_check_relocs): Don't create PLT entries for R_ARM_ABS12 relocs. (elf32_arm_finish_dynamic_symbol): Fix the loop that creates non-shared VxWorks PLT entries. ld/testsuite/ * ld-arm/vxworks1-lib.dd: Expect "push" instead of stmdb and "pop" instead of ldmia. Don't require specific symbolic addresses for in-text addresses. Expect data to be rendered as .words rather than disassembled. * ld-arm/vxworks1.dd: Likewise.
2007-05-10bfd/Richard Sandiford3-0/+24
* elf.c (assign_file_positions_for_load_sections): Use p_memsz rather than p_filesz to calculate the LMA of the end of a segment. ld/testsuite/ * ld-elf/multibss1.d, ld-elf/multibss1.s: New test.
2007-05-07 * ld.h (args_type, ld_config_type): Reorder fields.Alan Modra3-106/+51
* ldmain.c (main): Don't initialise a bunch of vars we know are zero already.
2007-05-05 * multempl/avrelf.em (PARSE_AND_LIST_ARGS_CASES): Add new value forDenis Chertykov2-1/+9
"--pmem-wrap-around". (PARSE_AND_LIST_OPTIONS): Describe new value for "--pmem-wrap-around".
2007-05-03 * scripttempl/elfxtensa.sc: Merge changes from elf.sc.Bob Wilson2-4/+17
2007-05-03 * ld.texinfo (--no-warn-search-mismatch): Document.Alan Modra6-4/+37
* ldfile.c (ldfile_try_open_bfd): Don't warn about skipping incompatible libraries if --no-warn-search-mismatch. * ld.h (args_type): Add warn_search_mismatch. * ldmain.c (main): Init it. * lexsup.c (enum option_values): Add OPTION_NO_WARN_SEARCH_MISMATCH. (ld_options): Add entry for --no-warn-search-mismatch. (parse_args): Handle OPTION_NO_WARN_SEARCH_MISMATCH.
2007-05-03 * scripttempl/elf.sc: Add .debug_pubtypes and .debug_ranges.Alan Modra2-0/+8
2007-05-02commit the Robert's removal of "warning:"Alan Modra1-1/+1
2007-05-01 * ldlang.c (lang_check): Error on architecture mismatch.Alan Modra2-1/+5
2007-04-30bfd/Alan Modra6-28/+143
* elf32-spu.c (struct spu_link_hash_table): Add stack_analysis and emit_stack_syms bitfields. (get_sym_h): Read all symbols if stack analysis will be done. (spu_elf_create_sections): Add stack_analysis and emit_stack_syms params, and stash in hash table. (is_hint): Split off from.. (is_branch): ..here. Adjust callers. (spu_elf_size_stubs): Add stack_analysis param. Arrange to read and keep all syms. (write_one_stub): Fix mem leak. (find_function_stack_adjust): New function. (sort_syms_syms, sort_syms_psecs): New vars. (sort_syms): New function. (struct call_info, struct function_info): New. (struct spu_elf_stack_info): New. (alloc_stack_info, maybe_insert_function, func_name): New functions. (is_nop, insns_at_end, check_function_ranges): Likewise. (find_function, insert_callee, mark_functions_via_relocs): Likewise. (pasted_function, interesting_section, discover_functions): Likewise. (mark_non_root, call_graph_traverse, build_call_tree): Likewise. (sum_stack, spu_elf_stack_analysis, spu_elf_final_link): Likewise. (bfd_elf32_bfd_final_link): Define. * elf32-spu.h (struct _spu_elf_section_data): Add stack_info field. (spu_elf_create_sections, spu_elf_size_stubs): Update prototypes. include/ * bfdlink.h (struct bfd_link_info): Add "info" and "minfo". ld/ * ldmain.c (link_callbacks): Init info and minfo fields. * ldmisc.c (minfo): Do nothing if no map file. * emultempl/spuelf.em (stack_analysis, emit_stack_syms): New vars. (spu_after_open): Adjust spu_elf_create_sections call. (spu_before_allocation): Likewise for spu_elf_size_stubs. (OPTION_SPU_STACK_ANALYSIS, OPTION_SPU_STACK_SYMS): Define. (PARSE_AND_LIST_LONGOPTS): Add new entries. (PARSE_AND_LIST_OPTIONS, PARSE_AND_LIST_ARGS_CASES): Likewise. * gen-doc.texi: Add @set for SPU and other missing targets. * ld.texinfo: Update man page selection to match gen-doc.texi. Document SPU features.
2007-04-28 * ldcref.c (struct cref_hash_entry): Make "demangled" const.Alan Modra3-4/+20
(cref_fill_array): Adjust for changed demangler. * ldlang.c (lang_one_common): Likewise.
2007-04-27 * ld-m68k/plt1-isac.d: New.Nathan Sidwell3-1/+50
* ld-m68k/m68k.exp: Add it.
2007-04-27gas/testsuite/H.J. Lu12-208/+223
2007-04-26 H.J. Lu <hongjiu.lu@intel.com> PR binutils/4430 * gas/i386/amd.d: Updated. * gas/i386/immed32.d: Likewise. * gas/i386/intel.d: Likewise. * gas/i386/intel16.d: Likewise. * gas/i386/intelok.d: Likewise. * gas/i386/jump16.d: Likewise. * gas/i386/naked.d: Likewise. * gas/i386/opcode-suffix.d: Likewise. * gas/i386/opcode.d: Likewise. * gas/i386/prescott.d: Likewise. * gas/i386/ssemmx2.d: Likewise. * gas/i386/tlsd.d: Likewise. * gas/i386/tlspic.d: Likewise. * gas/i386/x86-64-addr32.d: Likewise. * gas/i386/x86-64-prescott.d: Likewise. * gas/i386/x86-64-rip.d: Likewise. * gas/i386/x86_64.d: Likewise. ld/testsuite/ 2007-04-26 H.J. Lu <hongjiu.lu@intel.com> PR binutils/4430 * ld-i386/tlsbin.dd: Updated. * ld-i386/tlsbindesc.dd: Likewise * ld-i386/tlsdesc.dd: Likewise * ld-i386/tlsgdesc.dd: Likewise * ld-i386/tlsnopic.dd: Likewise * ld-i386/tlspic.dd: Likewise * ld-x86-64/tlsbin.dd: Likewise * ld-x86-64/tlsbindesc.dd: Likewise * ld-x86-64/tlsdesc.dd: Likewise * ld-x86-64/tlsgdesc.dd: Likewise * ld-x86-64/tlspic.dd: Likewise opcodes/ 2007-04-26 H.J. Lu <hongjiu.lu@intel.com> PR binutils/4430 * i386-dis.c (print_displacement): New. (OP_E): Call print_displacement instead of print_operand_value to output displacement when either base or index exist. Print the explicit zero displacement in 16bit mode.
2007-04-27 * emulparams/elf32_sparc.sh: Update comments.Alan Modra5-4/+18
* emulparams/elf32bmip.sh: Likewise. * emulparams/elf32ppc.sh: Likewise. * emulparams/vxworks.sh: Likewise.
2007-04-26bfd/Alan Modra1-0/+6
* sysdep.h: Include config.h first. Many files: Include sysdep.h before bfd.h. * Makefile.am: Run "make dep-am". * Makefile.in: Regenerate. binutils/ * bucumm.h: Split off host dependencies to.. * sysdep.h: ..here. Many files: Include sysdep.h. Remove duplicate headers and reorder. * Makefile.am: Run "make dep-am". * Makefile.in: Regenerate. ld/ Many files: Include sysdep.h first. Remove duplicate headers. * Makefile.am: Run "make dep-am". * Makefile.in: Regenerate. opcodes/ * Makefile.am: Run "make dep-am". * Makefile.in: Regenerate. * ns32k-dis.c: Include sysdep.h first.
2007-04-26bfd/Alan Modra35-156/+150
Many files: Include sysdep.h before bfd.h. * Makefile.am: Run "make dep-am". * Makefile.in: Regenerate. binutils/ * bucumm.h: Split off host dependencies to.. * sysdep.h: ..here. Many files: Include sysdep.h. Remove duplicate headers and reorder. * Makefile.am: Run "make dep-am". * Makefile.in: Regenerate. ld/ Many files: Include sysdep.h first. Remove duplicate headers. * Makefile.am: Run "make dep-am". * Makefile.in: Regenerate. opcodes/ * Makefile.am: Run "make dep-am". * Makefile.in: Regenerate. * ns32k-dis.c: Include sysdep.h first.
2007-04-24 * ld-linkonce/x.s: Use .gcc_except_table instead of .eh_frameAlan Modra5-8/+74
to test that entry for deleted function is zeroed. Add a somewhat closer to normal .eh_frame to test that fde for deleted function is removed. * ld-linkonce/y.s: Likewise. * ld-linkonce/zeroeh.ld: Place .gcc_except_table too. * ld-linkonce/zeroehl32.d: Update.
2007-04-24 * Makefile.in: Regenerate.Alan Modra2-2/+7
2007-04-21 * ld-arm/arm-app-abs32.d: Convert to unified syntax.Richard Earnshaw10-36/+48
* ld-arm/arm-app.d: Likewise. * ld-arm/arm-lib-plt32.d: Likewise. * ld-arm/arm-lib.d: Likewise. * ld-arm/arm-static-app.d: Likewise. * ld-arm/armthumb-lib.d: Likewise. * ld-arm/mixed-app-v5.d: Likewise. * ld-arm/mixed-app.d: Likewise. * ld-arm/mixed-lib.d: Likewise.
2007-04-19revert hunk that belongs to a future patchsetAlan Modra1-7/+4
2007-04-19 * ldcref.c (cref_fill_array): Call bfd_demangle rather than demangle.Alan Modra7-66/+46
* ldlang.c (lang_one_common): Likewise. * ldmisc.c (vfinfo): Likewise. (demangle): Delete. * ldmisc.h (demangle): Delete. * Makefile.am: Run "make dep-am". * Makefile.in: Regenerate.
2007-04-18ld/Alan Modra5-14/+29
* ldlang.h (enum section_type): Add overlay_section. * ldlang.c (lang_add_section): Handle flags for overlay_section as per normal_section. (lang_size_sections_1): When setting lma, detect overlays by os->sectype rather than by looking for overlapping vmas. (lang_enter_overlay_section): Use overlay_section type. (lang_leave_overlay): Set first overlay section to normal. ld/testsuite/ * ld-spu/ovl.lnk: Use OVERLAY keyword.
2007-04-172007-04-17 Paul Brook <paul@codesourcery.com>Paul Brook4-0/+53
bfd/ * elf.c (_bfd_elf_is_function_type): New function. * elflink.c (_bfd_elf_merge_symbol): Use bed->is_function_type. (_bfd_elf_dynamic_symbol_p, _bfd_elf_symbol_refs_local_p, is_global_data_symbol_definition, elf_link_add_object_symbols): Ditto. * elf-bfd.h (elf_backend_data): Add is_function_type. (_bfd_elf_is_function_type): Add prototype. * elfxx-target.h (elf_backend_is_function_type): Add default definition. (elfNN_bed): Add elf_backend_is_function_type. * elf32-arm.c (elf32_arm_is_function_type): New function. (elf_backend_is_function_type): Define. ld/testsuite/ * ld-arm/preempt-app.s: New test. * ld-arm/preempt-app.sym: New. * ld-arm/arm-elf.exp: Add preempt-app.
2007-04-14 * Makefile.am: Add ACLOCAL_AMFLAGS.Steve Ellcey3-4/+11
* Makefile.in: Regenerate.
2007-04-12bfd/Richard Sandiford3-1/+9
* elfxx-mips.c (mips_elf_calculate_relocation): Set DT_TEXTREL when creating a __GOTT_BASE__ or __GOTT_INDEX__ relocation in a read-only section. (_bfd_mips_elf_check_relocs): Likewise. ld/testsuite/ * ld-mips-elf/vxworks1-lib.td: New test. * ld-mips-elf/mips-elf.exp: Run it.
2007-04-12bfd/Bob Wilson2-3/+7
* elf32-xtensa.c (elf_xtensa_gc_mark_hook): Don't follow references from Xtensa property sections. ld/ * emulparams/elf32xtensa.sh (OTHER_SECTIONS): KEEP property sections.
2007-04-10bfd/Richard Henderson2-0/+7
* elf64-alpha.c (struct alpha_elf_link_hash_table): Add relax_trip. (elf64_alpha_size_got_sections): Remove unused something_changed local. (elf64_alpha_size_plt_section): Return void. (elf64_alpha_size_rela_got_section): Likewise. (elf64_alpha_relax_section): Only regenerate got+plt if the relax_trip counter has changed. include/ * bfdlink.h (struct bfd_link_info): Add relax_trip. ld/ * ldlang.c (relax_sections): Initialize and increment link_info.relax_trip.
2007-04-05bfd/H.J. Lu4-0/+18
2007-04-05 H.J. Lu <hongjiu.lu@intel.com> PR ld/4304 * elflink.c (bfd_elf_final_link): Call einfo callback in bfd_link_info instead of _bfd_error_handler for DT_TEXTREL warning. ld/testsuite/ 2007-04-05 H.J. Lu <hongjiu.lu@intel.com> PR ld/4304 * ld-i386/i386.exp: Run "warn1". * ld-i386/warn1.d: New file. * ld-i386/warn1.s: Likewise.
2007-04-052007-04-05 H.J. Lu <hongjiu.lu@intel.com>H.J. Lu3-2/+5
* ld-i386/combreloc.d: Remove #target: i?86-*-*. * ld-i386/reloc.d: Likewise.
2007-04-05bfd/Alan Modra2-2/+6
* elf32-spu.c (spu_elf_output_symbol_hook): New function. (elf_backend_link_output_symbol_hook): Define. ld/testsuite/ * ld-spu/ovl2.d: Update.
2007-04-042007-04-04 Paul Brook <paul@codesourcery.com>Paul Brook2-1/+5
ld/ * configure.tgt: Loosen checks for arm uclinux eabi targets. gas/ * configure.tgt: Loosen checks for arm uclinux eabi targets.
2007-04-02ld/H.J. Lu7-1/+53
2007-04-02 H.J. Lu <hongjiu.lu@intel.com> PR ld/4090 * ldexp.h (node_type): Add lineno. * ldexp.c: Include "ldlex.h". (exp_intop): Set the lineno field from lineno. (exp_bigintop): Likewise. (exp_relop): Likewise. (exp_nameop): Likewise. (exp_binop): Set the lineno field from lineno of lhs. (exp_trinop): Likewise. (exp_unop): Set the lineno field from lineno of child. (exp_assop): Set the lineno field from lineno of src. (exp_provide): Likewise. (exp_assert): Set the lineno field from lineno of exp. (exp_get_abs_int): Set lineno from lineno of nonconstant expression when report problem. ld/testsuite/ 2007-04-02 H.J. Lu <hongjiu.lu@intel.com> PR ld/4090 * ld-elf/expr1.d: New file. * ld-elf/expr1.s: Likewise. * ld-elf/expr1.t: Likewise.
2007-03-29ld/Richard Sandiford9-13/+58
200x-xx-xx Richard Sandiford <richard@codesourcery.com> Daniel Jacobowitz <dan@codesourcery.com> * NEWS: Mention -l:foo. * ld.texinfo: Document it. * ldlang.c (new_afile): If a lang_input_file_is_l_enum entry as a name beginning with a coloh, convert it to a lang_input_file_is_search_file_enum entry without the colon. ld/testsuite/ * ld-libs/lib-1.s, ld-libs/lib-2.s, ld-libs/lib-2.d, * ld-libs/libs.exp: New files.
2007-03-28ld/Richard Sandiford10-15/+102
* ld.h (ld_config_type): Add rpath_separator. * ldmain.c (main): Initialize it. * lexsup.c (parse_args): Honor config.rpath_separator. * emultempl/elf32.em (gld${EMULATION_NAME}_search_needed): Likewise. (gld${EMULATION_NAME}_add_sysroot): Likewise. (gld${EMULATION_NAME}_parse_ld_so_conf): Use config.rpath_separator rather than ':' when building the path. * emultempl/vxworks.em (vxworks_before_parse): New function. Override config.rpath_separator. (LDEMUL_AFTER_OPEN): Do not change if EXTRA_EM_FILE has been set to gld${EMULATION_NAME}_after_open; #define that identifier to vxworks_foo instead. (LDEMUL_BEFORE_PARSE): Override in the same way as LDEMUL_AFTER_OPEN. ld/testsuite/ * ld-vxworks/rpath-1.s, ld-vxworks/rpath-1.d, * ld-vxworks/vxworks.exp: New files.
2007-03-28bfd/Richard Sandiford2-2/+7
200x-xx-xx Richard Sandiford <richard@codesourcery.com> Phil Edwards <phil@codesourcery.com> * doc/bfd.texinfo: Put the contents after the title page rather than at the end of the document. binutils/ 200x-xx-xx Richard Sandiford <richard@codesourcery.com> Phil Edwards <phil@codesourcery.com> * doc/binutils.texi: Put the contents after the title page rather than at the end of the document. gas/ 200x-xx-xx Richard Sandiford <richard@codesourcery.com> Phil Edwards <phil@codesourcery.com> * doc/as.texinfo: Put the contents after the title page rather than at the end of the document. gprof/ 200x-xx-xx Richard Sandiford <richard@codesourcery.com> Phil Edwards <phil@codesourcery.com> * gprof.texi: Put the contents after the title page rather than at the end of the document. ld/ 200x-xx-xx Richard Sandiford <richard@codesourcery.com> Phil Edwards <phil@codesourcery.com> * ld.texinfo: Put the contents after the title page rather than at the end of the document.