Commit Graph

17370 Commits

Author SHA1 Message Date
Alan Modra
1004091634 PowerPC64 handling of @tocbase
* elf64-ppc.c (ppc64_elf_relocate_section): Warn if the symbol
	on R_PPC64_TOC isn't local.
2022-01-28 17:00:55 +10:30
Alan Modra
0441f94fba PR28827, assertion building LLVM 9 on powerpc64le-linux-gnu
The assertion is this one in ppc_build_one_stub
  BFD_ASSERT (stub_entry->stub_offset >= stub_entry->group->stub_sec->size);
It is checking that a stub doesn't overwrite the tail of a previous
stub, so not something trivial.

Normally, stub sizing iterates until no stubs are added, detected by
no change in stub section size.  Iteration also continues if no stubs
are added but one or more stubs increases in size, which also can be
detected by a change in stub section size.  But there is a
pathological case where stub section sizing decreases one iteration
then increases the next.  To handle that situation, stub sizing also
stops at more than STUB_SHRINK_ITER (20) iterations when calculated
stub section size is smaller.  The previous larger size is kept for
the actual layout (so that building the stubs, which behaves like
another iteration of stub sizing, will see the stub section sizes
shrink).  The problem with that stopping condition is that it assumes
that stub sizing is only affected by addresses external to the stub
sections, which isn't always true.

This patch fixes that by also keeping larger individual stub_offset
addresses past STUB_SHRINK_ITER.  It also catches a further
pathological case where one stub shrinks and another expands in such a
way that no stub section size change is seen.

	PR 28827
	* elf64-ppc.c (struct ppc_link_hash_table): Add stub_changed.
	(STUB_SHRINK_ITER): Move earlier in file.
	(ppc_size_one_stub): Detect any change in stub_offset.  Keep
	larger one if past STUB_SHRINK_ITER.
	(ppc64_elf_size_stubs): Iterate on stub_changed too.
2022-01-28 16:54:31 +10:30
Alan Modra
07c9f243b3 PR28826 x86_64 ld segfaults building xen
Fallout from commit e86fc4a5bc

	PR 28826
	* coffgen.c (coff_write_alien_symbol): Init dummy to zeros.
2022-01-28 16:54:31 +10:30
GDB Administrator
1f01799f55 Automatic date update in version.in 2022-01-28 00:00:25 +00:00
GDB Administrator
423f33d970 Automatic date update in version.in 2022-01-27 00:00:21 +00:00
H.J. Lu
8a782bbf70 bfd: Make bfd.stamp depend on source bfd.texi
Make bfd.stamp depend on source bfd.texi to avoid regenerating
doc/bfd.info for each make run.

	PR binutils/28807
	* Makefile.in: Regenerate.
	* doc/local.mk (%D%/bfd.stamp): Depend on $(srcdir)/%D%/bfd.texi.
2022-01-26 05:30:50 -08:00
GDB Administrator
a80032197f Automatic date update in version.in 2022-01-26 00:00:19 +00:00
H.J. Lu
042a82e5ee bfd: Regenerate Makefile.in
* Makefile.in: Regenerate.
2022-01-25 08:54:36 -08:00
GDB Administrator
823f6c5f05 Automatic date update in version.in 2022-01-25 00:00:17 +00:00
H.J. Lu
94fd627d46 bfd: Update doc/local.mk
PR binutils/28807
	* Makefile.in: Regenerate.
	* doc/local.mk (AM_MAKEINFOFLAGS): Add -I "$(srcdir)/%D%" -I %D%.
	(TEXI2DVI): New.
	(%D%/bfd.texi): Removed.
	(doc/bfd/index.html): Remove -I$(srcdir).  Replace bfd.texi with
	%D%/bfd.texi.
2022-01-24 12:56:48 -08:00
Roland McGrath
fdf55097a3 bfd/doc: Fix racy build failure from missing mkdir
bfd/
	* doc/local.mk (%D%/bfdver.texi): Add mkdir command.
2022-01-24 12:38:50 -08:00
Nick Clifton
5fe73d4624 Update Bulgarian, French, Romaniam and Ukranian translation for some of the sub-directories 2022-01-24 14:22:49 +00:00
GDB Administrator
2b1ca85cf8 Automatic date update in version.in 2022-01-24 00:00:15 +00:00
H.J. Lu
451c003d5f bfd: Partially revert commit 0e3839bde6
Partially revert

commit 0e3839bde6
Author: H.J. Lu <hjl.tools@gmail.com>
Date:   Sun Jan 23 07:29:27 2022 -0800

    bfd: Properly install library and header files

	PR binutils/28807
	* Makefile.am: Revert bfdlib_LTLIBRARIES and bfdinclude_HEADERS
	changes.
	* Makefile.in: Regenerate.
2022-01-23 10:40:46 -08:00
H.J. Lu
0e3839bde6 bfd: Properly install library and header files
Rename bfdlib_LTLIBRARIES and bfdinclude_HEADERS to lib_LTLIBRARIES and
include_HEADERS to fix the missing installed library and header files in
bfd caused by

commit bd32be01c9
Author: Mike Frysinger <vapier@gentoo.org>
Date:   Fri Dec 3 00:23:20 2021 -0500

    bfd: merge doc subdir up a level

	PR binutils/28807
	* Makefile.am (bfdlib_LTLIBRARIES): Renamed to ...
	(lib_LTLIBRARIES): This.
	(bfdinclude_HEADERS): Renamed to ...
	(include_HEADERS): This.
	* Makefile.in: Regenerate.
	* doc/local.mk (install): Removed.
2022-01-23 07:29:27 -08:00
H.J. Lu
ad69b6b861 Regenerate Makefile.in files with automake 1.15.1
Regenerate Makefile.in files with the unmodified automake 1.15.1 to
remove

runstatedir = @runstatedir@

bfd/

	* Makefile.in: Regenerate.

binutils/

	* Makefile.in: Regenerate.

gas/

	* Makefile.in: Regenerate.

gold/

	* Makefile.in: Regenerate.
	* testsuite/Makefile.in: Likewise.

gprof/

	* Makefile.in: Regenerate.

ld/

	* Makefile.in: Regenerate.

opcodes/

	* Makefile.in: Regenerate.
2022-01-23 06:59:20 -08:00
H.J. Lu
31b0378d53 Regenerate configure files with autoconf 2.69
Regenerate configure files with the unmodified autoconf 2.69 to remove

  --runstatedir=DIR       modifiable per-process data [LOCALSTATEDIR/run]

bfd/

	* configure: Regenerate.

binutils/

	* configure: Regenerate.

gas/

	* configure: Regenerate.

gold/

	* configure: Regenerate.

gprof/

	* configure: Regenerate.

ld/

	* configure: Regenerate.

opcodes/

	* configure: Regenerate.
2022-01-23 05:27:01 -08:00
GDB Administrator
35638469cb Automatic date update in version.in 2022-01-23 00:00:12 +00:00
Mike Frysinger
bd32be01c9 bfd: merge doc subdir up a level
This avoids a recursive make into the doc subdir and speeds up the
build slightly.  It also allows for more parallelism.
2022-01-22 16:47:35 -05:00
Mike Frysinger
cb803d3749 bfd: rename core.texi to corefile.texi
This is a generated file name from a correspondingly named C file.
Rename it to avoid unique build rules since there's no difference
to the generated manual.
2022-01-22 16:07:16 -05:00
Mike Frysinger
3dd8e5b615 bfd: replace doc header generation with pattern rules
This unifies boilerplate rules for most files with pattern rules.
2022-01-22 16:06:53 -05:00
Nick Clifton
f908e960c5 Change version number to 2.38.50 and regenerate files 2022-01-22 12:39:28 +00:00
Nick Clifton
a74e1cb344 Add markers for 2.38 branch 2022-01-22 12:08:55 +00:00
GDB Administrator
5b4ea8a740 Automatic date update in version.in 2022-01-22 00:00:12 +00:00
Mike Frysinger
ec7194506d drop old unused stamp-h.in file
This was needed by ancient versions of automake, but that hasn't been
the case since at least automake-1.5, so punt this from the tree.
2022-01-21 03:11:47 -05:00
GDB Administrator
df9d50bb22 Automatic date update in version.in 2022-01-21 00:00:15 +00:00
GDB Administrator
dd8a5a84a7 Automatic date update in version.in 2022-01-20 00:00:18 +00:00
Alan Modra
8ffb6df2aa PowerPC64 DT_RELR ELFv1
More fun with R_PPC64_NONE found in .opd.  Fixed by the
allocate_dynrelocs and ppc64_elf_size_dynamic_sections changes, and
since we are doing ifunc, opd and SYMBOL_REFERENCES_LOCAL tests later,
don't duplicate that work in check_relocs.

	* elf64-ppc.c (ppc64_elf_check_relocs): Remove opd and ifunc
	conditions for rel_count.
	(dec_dynrel_count): Likewise.
	(allocate_dynrelocs): Test for opd and ifunc when allocating
	relative relocs.
	(ppc64_elf_size_dynamic_sections): Likewise.
2022-01-19 16:45:45 +10:30
Alan Modra
edca615ac1 PowerPC64 DT_RELR local PLT
Similarly to the local GOT case.

	* elf64-ppc.c (ppc64_elf_size_dynamic_sections): Don't allocate
	space for PLT relocs against local syms when enable_dt_relr.
2022-01-19 16:45:45 +10:30
Alan Modra
8f22c9532b PowerPC64 DT_RELR local GOT
Fixes another case where we end up with superfluous R_PPC64_NONE.

	* elf64-ppc.c (ppc64_elf_size_dynamic_sections): Don't allocate
	space for GOT relocs against non-TLS local syms when enable_dt_relr.
	(ppc64_elf_layout_multitoc): Likewise.
2022-01-19 16:45:45 +10:30
GDB Administrator
05900cefe2 Automatic date update in version.in 2022-01-19 00:00:10 +00:00
Alan Modra
858b0eff3c Re: PowerPC64 DT_RELR
HJ: "There are 238 R_PPC64_NONEs in libc.so.6 alone."
Indeed, let's make them go away.  I had the SYMBOL_REFERENCES_LOCAL
test in the wrong place.  check_relocs is too early to know whether a
symbol is dynamic in a shared library.  Lots of glibc symbols are made
local by version script, but that doesn't happen until
size_dynamic_sections.

	* elf64-ppc.c (ppc64_elf_check_relocs): Don't count relative relocs
	here depending on SYMBOL_REFERENCES_LOCAL.
	(dec_dynrel_count): Likewise.
	(allocate_dynrelocs): Do so here instead.
2022-01-19 09:44:15 +10:30
Simon Marchi
0c80c64464 bfd/elf64-ppc.c: fix clang -Wbitwise-instead-of-logical warning in ppc64_elf_check_init_fini
I see this error with clang-14:

      CC       elf64-ppc.lo
    /home/smarchi/src/binutils-gdb/bfd/elf64-ppc.c:13131:11: error: use of bitwise '&' with boolean operands [-Werror,-Wbitwise-instead-of-logical]
      return (check_pasted_section (info, ".init")
             ~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Fix by replacing & with &&.  But given that the check_pasted_section
function has side-effects and we want to make sure both calls are made,
assign to temporary variables before evaluating the `&&`.

Change-Id: I849e1b2401bea5f4d8ef3ab9af99ba9e3ef42490
2022-01-17 23:14:57 -05:00
Alan Modra
48e3e6aec8 Check thin archive element file size against archive header
Makes it a little less likely for someone to break their thin archives.

	* archive.c (_bfd_get_elt_at_filepos): Check thin archive
	element file size.
2022-01-18 11:19:14 +10:30
Alan Modra
1657026ccd PowerPC64 DT_RELR
PowerPC64 takes a more traditional approach to DT_RELR than x86.  Count
relative relocs in check_relocs, allocate space for them and output in
the usual places but not doing so when enable_dt_relr.  DT_RELR is
sized in the existing ppc stub relaxation machinery, run via the
linker's ldemul_after_allocation hook.  DT_RELR is output in the same
function that writes ppc stubs, run via ldemul_finish.

This support should be considered experimental.

bfd/
	* elf64-ppc.c (struct ppc_local_dyn_relocs): Renamed from
	ppc_dyn_relocs.  Add rel_count field.  Update uses.
	(struct ppc_dyn_relocs): New.  Replace all uses of elf_dyn_relocs.
	(struct ppc_link_hash_table): Add relr_alloc, relr_count and
	relr_addr.
	(ppc64_elf_copy_indirect_symbol): Merge rel_count.
	(ppc64_elf_check_relocs): Init rel_count for global and local syms.
	(dec_dynrel_count): Change r_info param to reloc pointer.  Update
	all callers.  Handle decrementing rel_count.
	(allocate_got): Don't allocate space for relative relocs when
	enable_dt_relr.
	(allocate_dynrelocs): Likewise.
	(ppc64_elf_size_dynamic_sections): Likewise.  Handle srelrdyn.
	(ppc_build_one_stub): Don't emit relative relocs on .branch_lt.
	(compare_relr_address, append_relr_off): New functions.
	(got_and_plt_relr_for_local_syms, got_and_plt_relr): Likewise.
	(ppc64_elf_size_stubs): Size .relr.syn.
	(ppc64_elf_build_stubs): Emit .relr.dyn.
	(build_global_entry_stubs_and_plt): Don't output relative relocs
	when enable_dt_relr.
	(write_plt_relocs_for_local_syms): Likewise.
	(ppc64_elf_relocate_section): Likewise.
binutils/
	* testsuite/lib/binutils-common.exp (supports_dt_relr): Add
	powerpc64.
ld/
	* emulparams/elf64ppc.sh: Source dt-relr.sh.
	* testsuite/ld-elf/dt-relr-2b.d: Adjust for powerpc.
	* testsuite/ld-elf/dt-relr-2c.d: Likewise.
	* testsuite/ld-elf/dt-relr-2d.d: Likewise.
	* testsuite/ld-elf/dt-relr-2e.d: Likewise.
2022-01-18 11:18:45 +10:30
Alan Modra
97da0e2677 tweak __ehdr_start visibility and flags for check_relocs
bfd/
	* elf-bfd.h (UNDEFWEAK_NO_DYNAMIC_RELOC): Test linker_def.
ld/
	* ldelf.c (ldelf_before_allocation): Don't force __ehdr_start
	local and hidden here..
	* ldlang.c (lang_symbol_tweaks): ..do so here instead and set
	def_regular and linker_def for check_relocs.  New function
	extracted from lang_process.
2022-01-18 11:18:45 +10:30
GDB Administrator
1f95afb889 Automatic date update in version.in 2022-01-18 00:00:16 +00:00
Nick Clifton
6c037fdbf0 Update the config.guess and config.sub files from the master repository and regenerate files. 2022-01-17 16:21:22 +00:00
GDB Administrator
45cf0dc2ec Automatic date update in version.in 2022-01-17 00:00:25 +00:00
GDB Administrator
f61defbc98 Automatic date update in version.in 2022-01-16 00:00:16 +00:00
GDB Administrator
e55d9a1579 Automatic date update in version.in 2022-01-15 00:00:13 +00:00
GDB Administrator
62dd9d9177 Automatic date update in version.in 2022-01-14 00:00:27 +00:00
Alan Modra
1ffce3f87d Re: gas: add visibility support using GNU syntax on XCOFF
tc-ppc.c: In function 'ppc_comm':
tc-ppc.c:4560:40: error: 'visibility' may be used uninitialized in this function [-Werror=maybe-uninitialized]

With that fixed we hit lots of segfaults in the ld testsuite.

	PR 22085
bfd/
	* xcofflink.c (xcoff_link_input_bfd): Don't segfault on NULL
	sym_hash.
gas/
	* config/tc-ppc.c (ppc_comm): Init visibility.
2022-01-13 16:50:15 +10:30
Alan Modra
9c3d7d9b7e Move DT_RELR tag setting to elflink.c
This makes the code setting DT_RELR tags generally available.  Many
targets will be able to use the defaults.  Those that can't should set
up sh_entsize for .relr.dyn output section before reaching the dynamic
tag code in bfd_elf_final_link.

	* elflink.c (bfd_elf_final_link): Set up DT_RELR tags and sh_entsize.
	* elfxx-x86.c (_bfd_x86_elf_finish_dynamic_sections): Don't do any
	of that here.
2022-01-13 14:12:43 +10:30
Alan Modra
0ae1246717 Re: Set SEC_ELF_REVERSE_COPY earlier
Let's not rely on .init/.fini having relocs for the size sanity check.
This is mainly to squash reports of "my fuzzed object made ld hang".
2022-01-13 14:12:43 +10:30
GDB Administrator
cf6059a6ac Automatic date update in version.in 2022-01-13 00:00:16 +00:00
H.J. Lu
72aa81732b ld: Add glibc dependency for DT_RELR
When DT_RELR is enabled, to avoid random run-time crash with older glibc
binaries without DT_RELR support, add a GLIBC_ABI_DT_RELR symbol version,
which is provided by glibc with DT_RELR support, dependency on the shared
C library if it provides a GLIBC_2.XX symbol version.

bfd/

	* elflink.c (elf_link_add_dt_relr_dependency): New function.
	(bfd_elf_size_dynamic_sections): Call
	elf_link_add_dt_relr_dependency if DT_RELR is enabled.

ld/

	* ld.texi: Mention GLIBC_ABI_DT_RELR in -z pack-relative-relocs
	entry.
	* testsuite/ld-elf/dt-relr-glibc-1.c: New file.
	* testsuite/ld-elf/dt-relr-glibc-1a.rd: Likewise.
	* testsuite/ld-elf/dt-relr-glibc-1b.rd: Likewise.
	* testsuite/ld-elf/dt-relr.exp: Likewise.
2022-01-12 06:08:47 -08:00
H.J. Lu
5af6f000d8 x86: Add DT_RELR support
DT_RELR is implemented with linker relaxation:

1. During linker relaxation, we scan input relocations with the same
logic in relocate_section to determine if a relative relocation should
be generated and save the relative relocation candidate information for
sizing the DT_RELR section later after all symbols addresses can be
determined.  For these relative relocations which can't be placed in
the DT_RELR section, they will be placed in the rela.dyn/rel.dyn
section.
2. When DT_RELR is enabled, _bfd_elf_map_sections_to_segments calls a
backend function to size the DT_RELR section which will compute the
DT_RELR section size and tell ldelf_map_segments to layout sections
again when the DT_RELR section size has been increased.
3. After regular symbol processing is finished, bfd_elf_final_link calls
a backend function to finish the DT_RELR section.

	* elf32-i386.c (elf_i386_relocate_section): Don't generate
	relative relocation when DT_RELR is enabled.
	(elf_i386_finish_dynamic_symbol): Likewise.
	* elf64-x86-64.c (elf_x86_64_relocate_section): Don't generate
	relative relocation when DT_RELR is enabled.
	(elf_x86_64_finish_dynamic_symbol): Likewise.
	* elfxx-x86.c (_bfd_x86_elf_link_hash_table_create): Initialize
	relative_r_type, relative_r_name, elf_append_reloc,
	elf_write_addend and elf_write_addend_in_got.
	(elf_x86_relative_reloc_record_add): New function.
	(_bfd_x86_elf_link_relax_section): Likewise.
	(elf64_dt_relr_bitmap_add): Likewise.
	(elf32_dt_relr_bitmap_add): Likewise.
	(_bfd_elf32_write_addend): Likewise.
	(_bfd_elf64_write_addend): Likewise.
	(elf_x86_size_or_finish_relative_reloc): Likewise.
	(elf_x86_compute_dl_relr_bitmap): Likewise.
	(elf_x86_write_dl_relr_bitmap): Likewise.
	(elf_x86_relative_reloc_compare ): Likewise.
	(_bfd_elf_x86_size_relative_relocs): Likewise.
	(_bfd_elf_x86_finish_relative_relocs): Likewise.
	(_bfd_x86_elf_size_dynamic_sections): Skip the .relr.dyn section.
	(_bfd_x86_elf_finish_dynamic_sections): Convert 3 spare dynamic
	tags to DT_RELR, DT_RELRSZ and for compact relative relocation.
	* elfxx-x86.h (X86_64_GOT_TYPE_P): New.
	(I386_GOT_TYPE_P): Likewise.
	(X86_GOT_TYPE_P): Likewise.
	(X86_64_RELATIVE_RELOC_TYPE_P): Likewise.
	(I386_RELATIVE_RELOC_TYPE_P): Likewise.
	(X86_RELATIVE_RELOC_TYPE_P): Likewise.
	(X86_LOCAL_GOT_RELATIVE_RELOC_P): Likewise.
	(I386_PCREL_TYPE_P): Likewise.
	(X86_64_PCREL_TYPE_P): Likewise.
	(X86_64_NEED_DYNAMIC_RELOC_TYPE_P): Rewrite.
	(I386_NEED_DYNAMIC_RELOC_TYPE_P): Likewise.
	(GENERATE_DYNAMIC_RELOCATION_P): Also check rel_from_abs.
	(elf_x86_link_hash_entry): Add got_relative_reloc_done.
	(elf_x86_relative_reloc_record): New.
	(elf_x86_relative_reloc_data): Likewise.
	(elf_dt_relr_bitmap): Likewise.
	(elf_x86_link_hash_table): Add dt_relr_bitmap, relative_reloc,
	unaligned_relative_reloc, relative_r_type, relative_r_name,
	elf_append_reloc, elf_write_addend, elf_write_addend_in_got and
	relative_reloc_done.
	(elf_x86_relative_reloc_done): New.
	(relative_reloc_packed): Likewise.
	(_bfd_x86_elf_link_relax_section): Likewise.
	(_bfd_elf_x86_size_relative_relocs): Likewise.
	(_bfd_elf_x86_finish_relative_relocs): Likewise.
	(_bfd_elf32_write_addend): Likewise.
	(_bfd_elf64_write_addend): Likewise.
	(bfd_elf32_bfd_relax_section): Likewise.
	(bfd_elf64_bfd_relax_section): Likewise.
	(elf_backend_size_relative_relocs): Likewise.
	(elf_backend_finish_relative_relocs): Likewise.
	(elf_x86_allocate_local_got_info): Also allocate
	relative_reloc_done.
2022-01-12 06:04:51 -08:00
H.J. Lu
23cc1de50b elf: Add size_relative_relocs and finish_relative_relocs
On some targets, the DT_RELR section size can be computed only after all
symbols addresses can be determined.  Set the preliminary DT_RELR section
size before mapping sections to segments and set the final DT_RELR section
size after regular symbol processing is done.

	* elf-bfd.h (elf_backend_data): Add size_relative_relocs and
	finish_relative_relocs.
	* elf.c (_bfd_elf_map_sections_to_segments): Call
	size_relative_relocs if DT_RELR is enabled.
	* elflink.c (bfd_elf_final_link): Call finish_relative_relocs
	after regular symbol processing is finished if DT_RELR is enabled.
	* elfxx-target.h (elf_backend_size_relative_relocs): New.
	(elf_backend_finish_relative_relocs): Likewise.
	(elfNN_bed): Add elf_backend_size_relative_relocs and
	elf_backend_finish_relative_relocs.
2022-01-12 06:04:51 -08:00
H.J. Lu
6a91be8666 ld: Initial DT_RELR support
Add a -z pack-relative-relocs option to enable DT_RELR and create a
relr.dyn section for DT_RELR.  DT_RELR is implemented with the linker
relaxation infrastructure, but it doesn't require the --relax option
enabled.  -z pack-relative-relocs implies -z combreloc.  -z nocombreloc
implies -z nopack-relative-relocs.

-z pack-relative-relocs is chosen over the similar option in lld,
--pack-dyn-relocs=relr, to implement a glibc binary lockout mechanism
with a special glibc version symbol, to avoid random crashes of DT_RELR
binaries with the existing glibc binaries.

bfd/

	* elf-bfd.h (elf_link_hash_table): Add srelrdyn.
	* elflink.c (_bfd_elf_link_create_dynamic_sections): Create a
	.relr.dyn section for DT_RELR.

include/

	* bfdlink.h (bfd_link_info): Add enable_dt_relr.

ld/

	* News: Mention -z pack-relative-relocs and
	-z nopack-relative-relocs.
	* ld.texi: Document -z pack-relative-relocs and
	-z nopack-relative-relocs.
	* ldelf.c (ldelf_after_parse): Disable DT_RELR if not building
	PIE nor shared library.  Add 3 spare dynamic tags for DT_RELR,
	DT_RELRSZ and DT_RELRENT.
	* ldlang.c (lang_relax_sections): Also enable relaxation if
	DT_RELR is enabled.
	* emulparams/elf32_x86_64.sh: Source dt-relr.sh.
	* emulparams/elf_i386.sh: Likewise.
	* emulparams/elf_x86_64.sh: Likewise.
	* emulparams/dt-relr.sh: New file.
	* scripttempl/elf.sc: Support .relr.dyn.
2022-01-12 06:04:29 -08:00