Commit Graph

189 Commits

Author SHA1 Message Date
Klee Dienes 0c5e171aed 2002-11-18 Klee Dienes <kdienes@apple.com>
* buildsym.h (pop_context): Convert to function, defined in
        buildsym.c.
        * buildsym.c: Include gdb_assert.h.
        (pop_context): Implement as C function.  Add check for stack
        underflow.
        * dbxread.c (process_one_symbol): Complain and stop processing
        that symbol if we are already at the top of the context stack for
        a function-end N_FUN (this would imply an umatched RBRAC).  Ditto
        when processing N_RBRAC.
2002-11-18 19:14:10 +00:00
Andrew Cagney 72367fb45b 2002-10-25 Andrew Cagney <cagney@redhat.com>
* complaints.h (struct deprecated_complaint): Rename `struct
	complaint'.
	* complaints.c (complain): Update.
	* remote-vx68.c, remote-vxmips.c, remote-vxsparc.c: Delete
	incorrect comment indicating that "symfile.h" was being included
	for the `struct complaint' definition.
	* remote-vx.c: Update.
	* objc-lang.c: Update.
	* xcoffread.c: Update.
	* hpread.c: Update.
	* mdebugread.c: Update.
	* stabsread.c: Update.
	* dwarf2read.c: Update.
	* dwarfread.c: Update.
	* elfread.c: Update.
	* coffread.c: Update.
	* stabsread.h: Update.
	* dbxread.c: Update.
	* buildsym.c: Update.
	* gdbtypes.c: Update.
	* macrotab.c: Update.
2002-10-25 22:25:55 +00:00
Jim Blandy 5afc051b4b * dbxread.c, mdebugread.c: Revert my change of 2001-10-23. Moving
texthigh and textlow to reader-specific structs caused
objfile_relocate to miss them.  This is fixable, but the work that
the change was supposed to prepare GDB for never got done anyway.
2002-09-18 20:47:39 +00:00
Andrew Cagney 04ea0df192 2002-07-29 Andrew Cagney <ac131313@redhat.com>
* gdb_obstack.h: New file.
* symtab.h: Include "gdb_obstack.h" instead of "obstack.h".
(obstack_chunk_alloc, obstack_chunk_free): Delete macros.
* objfiles.h: Include "gdb_obstack.h".
* Makefile.in (gdb_obstack_h): Define.
(symtab_h): Add $(gdb_obstack_h).
(objfiles_h): Add $(gdb_obstack_h).

* objfiles.c: Include "gdb_obstack.h" instead of "obstack.h".
* macrotab.c, cp-valprint.c, dbxread.c: Ditto.
* ch-typeprint.c, ch-valprint.c, dstread.c: Ditto.
* macroexp.c, p-typeprint.c, stabsread.c: Ditto.
* symtab.c, f-typeprint.c, mdebugread.c: Ditto.
* p-valprint.c, symmisc.c, typeprint.c: Ditto.
* symfile.c, coffread.c, c-typeprint.c: Ditto.
* buildsym.c, bcache.c, ada-typeprint.c: Ditto.

* Makefile.in (bcache.o): Update dependencies.
(buildsym.o, c-typeprint.o, ch-typeprint.o): Ditto.
(ch-valprint.o, coffread.o, cp-valprint.o): Ditto.
(dbxread.o, dstread.o, f-typeprint.o): Ditto.
(objfiles.o, p-typeprint.o, p-valprint.o): Ditto.
(stabsread.o, symfile.o, symmisc.o): Ditto.
(symtab.o, typeprint.o, macroexp.o): Ditto.
(macrotab.o, mdebugread.o): Ditto.
(f_lang_h, coff_sym_h, coff_symconst_h): Define.
(coff_ecoff_h, aout_aout64_h): Define.
(aout_stabs_gnu_h, libaout_h): Define.
2002-07-29 22:55:26 +00:00
Kevin Buettner 1f077a3e7c * dbxread.c (discarding_local_symbols_complaint): New complaint.
(process_one_symbol): Complain about discarding local symbols
	due to a misplaced N_LBRAC entry.
2002-05-10 07:32:50 +00:00
David S. Miller 4867e41ec7 2002-04-24 David S. Miller <davem@redhat.com>
* symtab.h (find_stab_function_addr): Kill extern.
	* minsyms.c (find_stab_function_addr): Remove from here...
	* dbxread.c: ... to here, and mark it static.
2002-04-24 08:00:54 +00:00
Daniel Jacobowitz a1b9830cba 2002-03-21 Daniel Jacobowitz <drow@mvista.com>
* dbxread.c (process_one_symbol): Extend the first N_SLINE
         in a function to cover the entire beginning of the function
         as well if it does not already.
2002-03-21 19:48:54 +00:00
Fred Fish e8717518fc Approved by Jim Blandy (jimb@redhat.com).
2002-02-21  Fred Fish  <fnf@redhat.com>
	* dbxread.c (process_one_symbol): When finding an N_FUN symbol
	that marks the end of the range of a function, enter a line number
	entry that has a line number of zero and a PC offset that matches
	the end of the function.  This starts a range of PC's for which no
	line number information is known.
	* symtab.c (find_pc_sect_line): If our best fit is in a range of
	PC's for which no line number info is found (line number is zero)
	then we didn't find any valid line information.
	* symtab.h: Document use of zero line number entry.
2002-02-22 00:17:13 +00:00
Richard Earnshaw 181c1381a5 * gdbarch.sh (copyright): Update years in generated header.
(SMASH_TEXT_ADDRESS): Add rule.
*gdbarch.h, gdbarch.c: Re-generate.
* coffread.c: Multi-arch uses of SMASH_TEXT_ADDRESS.
* dbxread.c: Likewise.
* dwarfread.c: Likewise.
* elfread.c: Likewise.
* somread.c: Likewise.

* arm-tdep.c (arm_smash_text_address): New function.
* config/arm/tm-arm.h (SMASH_TEXT_ADDRESS): Define in terms of above.
2002-02-04 11:55:36 +00:00
Andrew Cagney aac7f4eaf2 mfree() -> xmfree(). 2001-12-02 22:38:23 +00:00
Elena Zannoni 6a34fd2fd5 2001-11-07 Elena Zannoni <ezannoni@redhat.com>
* dbxread.c (set_namestring): New function, replacing the
	SET_NAMESTRING macro.
	(SET_NAMESTRING, CUR_SYMBOL_TYPE, CUR_SYMBOL_VALUE,
	CUR_SYMBOL_STRX, DBXREAD_ONLY, START_PSYMTAB, END_PSYMTAB): Delete
	definitions.
	(read_dbx_symtab): Don't include partial-stab.h any more. Don't
	reuse code in partial-stab.h, include the code directly, instead.

        * Makefile.in (dbxread.o): Remove dependency on partial-stab.h.
	(HFILES_NO_SRCDIR): Remove partial-stab.h.
2001-11-08 04:39:04 +00:00
Fred Fish 4dc13854e5 2001-11-06 Fred Fish <fnf@redhat.com>
* complaints.c (info_verbose): Remove unneeded decl, is in defs.h.
	* dbxread.c: Ditto
	* dwarf2read.c: Ditto.
	* dwarfread.c: Ditto.
	* exec.c: Ditto.
	* hpread.c: Ditto.
	* hpread.h: Ditto.
	* mdebugread.c: Ditto.
	* os9kread.c: Ditto.
	* stack.c: Ditto.
	* symfile.c: Ditto.
	* tracepoint.c: Ditto.
2001-11-06 23:38:15 +00:00
Jim Blandy 3973eaddf4 Isolate STABS readers' use of the `textlow' and `texthigh' fields
of `struct partial_symtab' to only a few locations.  This change
is not supposed to affect the way the values are computed, only
where they live.

* dbxread.c (struct symloc): Add `textlow' and `texthigh' fields
to the reader-specific structure.
* mdebugread.c (struct symloc): Same.
* dbxread.c (TEXTLOW, TEXTHIGH): New accessor macros.
* mdebugread.c (TEXTLOW, TEXTHIGH): Same.
* dbxread.c (dbx_symfile_read): After we've built all our partial
symbol tables, set each partial symtab's `textlow' and `texthigh'
fields from our reader-specific structure.
* mdebugread.c (mdebug_build_psymtabs): Same.
* dbxread.c (start_psymtab): Initialize the reader-specific
structure's `textlow' and `texthigh' from the new psymtab's.
* mdebugread.c (parse_partial_symbols, new_psymtab): Same.
* dbxread.c (read_dbx_symtab, end_psymtab, read_ofile_symtab): Use
the reader-specific `textlow' and `texthigh', not the generic
psymtab fields.
* mdebugread.c (parse_lines, parse_partial_symbols,
psymtab_to_symtab_1): Same.
* partial-stab.h: Same.
2001-10-24 17:10:18 +00:00
Alan Modra 3a42e9d062 * coffread.c: Replace all occurrences of bfd_read with bfd_bread.
* dbxread.c: Likewise.
	* dwarf2read.c: Likewise.
	* dwarfread.c: Likewise.
	* somread.c: Likewise.
	* ultra3-nat.c: Likewise.
	* xcoffread.c: Likewise.
2001-09-20 03:03:40 +00:00
Kevin Buettner 9a058a09a9 Don't use error result from find_stab_function_addr(). 2001-09-06 20:50:48 +00:00
Elena Zannoni d3d55eeb77 2001-09-04 Elena Zannoni <ezannoni@redhat.com>
From Daniel Jacobowitz  <drow@mvista.com>
	* dbxread.c (free_header_files): Make global.
	(init_header_files): Likewise.
	* stabsread.h (free_header_files): Add prototype.
	(init_header_files): Likewise.
	* mdebugread.c (mdebug_build_psymtabs): Initialize
	properly before using the stabs debug reader.
2001-09-05 02:54:15 +00:00
Elena Zannoni ef96bde82e 2001-09-04 Elena Zannoni <ezannoni@redhat.com>
From Daniel Jacobowitz  <drow@mvista.com>
	* dbxread.c (dbx_symfile_read): Only reinitialize
	the psymbol list if mainline or if both static
	and global lists are empty.
	* dwarf2read.c (dwarf2_build_psymtabs): Likewise.
	* dwarfread.c (dwarf_build_psymtabs): Likewise.
	* xcoffread.c (xcoff_initial_scan): Likewise.
	* os9kread.c (os9k_symfile_read): Likewise.
2001-09-05 02:13:11 +00:00
H.J. Lu 40b3352ba7 2001-08-14 Daniel Jacobowitz <drow@mvista.com>
H.J. Lu  (hjl@gnu.org)

	* partial-stab.h: valu should be a CORE_ADDR.

2001-08-14  H.J. Lu  (hjl@gnu.org)

	* dbxread.c (SWAP_SYMBOL): Removed.
	(INTERNALIZE_SYMBOL): Check sign extended vma.
2001-08-15 05:02:28 +00:00
Andrew Cagney 51cc5b0737 * symtab.c (main_name): New function.
(set_main_name): New function.
* symtab.h: Declare.
* TODO: Update

From 2000-03-05 Anthony Green <green@redhat.com>:
* dbxread.c (process_one_symbol): Handle the N_MAIN stab by
setting main_name.
* blockframe.c (inside_main_func): Use main_name instead of
"main".
* symtab.c (find_main_psymtab): Ditto.
* source.c (select_source_symtab): Ditto.
* nlmread.c (nlm_symfile_read): Ditto.
* rs6000-tdep.c (skip_prologue): Ditto.
2001-07-07 17:19:50 +00:00
Jim Blandy 015a42b4cf (Changes from Daniel Berlin, with revisions by Jim Blandy.)
Abstract out operations specific to particular C++ ABI's, and
invoke them through a function table.  This removes the C++ ABI
dependencies scattered throughout the code, and allows us to
cleanly add support for new C++ ABI's.
* cp-abi.h, cp-abi.h, gnu-v2-abi.c, hpacc-abi.c: New files.
* c-typeprint.c, c-valprint.c, dbxread.c, eval.c, gdbtypes.c,
jv-typeprint.c, linespec.c, symtab.c, typeprint.c, valops.c:
#include "cp-abi.h".  These files all use functions now declared
there.
* symtab.h (OPNAME_PREFIX_P, VTBL_PREFIX_P, DESTRUCTOR_PREFIX_P):
Deleted.  These services are now provided by functions declared in
cp-abi.h.
* value.h (value_rtti_type, value_virtual_fn_field): Same.
* values.c (value_virtual_fn_field): Same, for this definition.
* valops.c (value_rtti_type): Same.
* c-typeprint.c (c_type_print_base): Use the functions from
"cp-abi.h", instead of the old macros, or hard-coded ABI-specific
tests.
* dbxread.c (record_minimal_symbol): Same.
* gdbtypes.c (get_destructor_fn_field, virtual_base_index,
virtual_base_index_skip_primaries): Same.
* jv-typeprint.c (java_type_print_base): Same.
* linespec.c (find_methods, decode_line_1): Same.
* symtab.c (gdb_mangle_name): Same.
* Makefile.in (SFILES): Add the new .c files mentioned above.
(cp_abi_h): New variable.
(COMMON_OBS): Add gnu-v2-abi.o, hpacc-abi.o, and cp-abi.o.
(cp-abi.o, gnu-v2-abi.o, hpacc-abi.o): New targets.
(c-typeprint.o, c-valprint.o, dbxread.o, eval.o, gdbtypes.o,
jv-typeprint.o, symtab.o, linespec.o, typeprint.o, valops.o): Add
dependency on $(cp_abi_h).
2001-04-27 00:19:09 +00:00
J.T. Conklin 3172dc307b * arch-utils.c (#include "gdbthread.h"): Removed.
(#include "symfile.h"): Removed.
(XMALLOC): Removed unused macro.
* breakpoint.c (tbreak_command): Removed local declaration.
(awatch_command, do_enable_breakpoint, set_breakpoint_count):
Remove duplicate declarations.
(bpstat_should_step, bpstat_have_active_hw_watchpoints)
(remove_solib_event_breakpoints): Fix indentation botch.
* c-typeprint.c (#include "command.h"): Removed.
(#include "gdbcmd.h"): Removed.
* ch-exp.c (ch_terminal_match_float_literal, parse_expr)
(parse_primval, parse_untyped_expr, parse_opt_untyped_expr):
Removed duplicate declarations.
* ch-typeprint.c (#include "command.h"): Removed.
(#include "gdbcmd.h"): Removed.
* corefile.c (#include "frame.h"): Removed
(#include "symfile.h"): Removed.
(#include "language.h"): Removed.
* dbxread.c (#include "command.h"): Removed.
* environ.c (#include "gdbcore.h"): Removed.
* event-loop.c (#include "top.h"): Removed.
* f-typeprint.c (#include "command.h"): Removed.
(#include "gdbcmd.h"): Removed.
(#include "language.h"): Removed.
(#include "typeprint.h"): Removed.
(#include "frame.h"): Removed.
* gdbtypes.h (print_type_scalar): Removed declaration.
* infcmd.c (#include "completer.h"): Removed.
* language.c (#include "frame.h"): Removed.
* m2-typeprint.c (#include "command.h"): Removed.
(#include "gdbcmd.h"): Removed.
(#include "language.h"): Removed.
* m2-valprint.c (#include "valprint.h"): Removed.
* p-typeprint.c (#include "command.h"): Removed.
(#include "gdbcmd.h"): Removed.
* p-valprint.c (#include "typeprint.h"): Removed.
* parse.c (#include "linespec.h"): Removed.
* regcache.c (#include "frame.h"): Removed.
* remote.c (#include "frame.h"): Removed.
(getpkt_sane): Make static.
* source.c (#include "completer.h"): Removed.
* stack.c (#include "symfile.h"): Removed.
(#include "objfiles.h"): Removed.
* symfile.c (#include "completer.h"): Removed.
* tracepoint.c (#include "completer.h"): Removed.
* values.c (#include "frame.h"): Removed.
* varobj.c (#include "valprint.h"): Removed.
* wrapper.c (#include "frame.h"): Removed.

* memattr.c (create_mem_region): Removed unused variable.
* remote-nrom.c: Removed spurious semicolon after init_nrom_ops.
-------------------------------------------------------------------
2001-03-27 20:36:24 +00:00
Elena Zannoni b9179dbce9 2001-03-25 Elena Zannoni <ezannoni@kwikemart.cygnus.com>
From  Andrew Cagney  <ac131313@redhat.com>

        * coffread.c (coff_symtab_read): Initialize
 	``fcn_first_line_addr''.  Check that the ``.bf'' always preceeds
 	the ``.ef'' info.
	* dbxread.c (find_text_range): Initialize ``start'' and ``end''.
2001-03-26 02:48:23 +00:00
J.T. Conklin 5565b5569b 2001-03-06 J.T. Conklin <jtc@redback.com>
* symtab.h (decode_line_1): Removed declaration.

        * symfile.c (#include <assert.h>): Removed.

        * arch-utils.c (#include <ctype.h>): Removed.
        * c-typeprint.c: Likewise.
        * dbxread.c: Likewise.
        * gdbtypes.c: Likewise.
        * target.c: Likewise.
        * os9kread.c: Likewise.

        * c-valprint.c (#include "demangle.h"): Removed.
        * ch-typeprint.c: Likewise.
        * eval.c: Likewise.
        * f-typeprint.c: Likewise.
        * f-valprint.c: Likewise.
        * m2-typeprint.c: Likewise.
        * typeprint.c: Likewise.
        * p-typeprint.c: Likewise.
        * valarith.c: Likewise.
        * valprint.c: Likewise.

        * m2-typeprint.c (#include "gdb_string.h"): Removed.
        * nlmread.c: Likewise.

        * mdebugread.c (#include "gdb-stabs.h"): Removed.
        * minsyms.c: Likewise.
        * mipsread.c: Likewise.
        * nlmread.c: Likewise.

        * m2-typeprint.c (#include "obstack.h"): Removed.
        * m2-valprint.c: Likewise.

        * event-loop.c (#include <setjmp.h>): Removed.
2001-03-07 02:57:08 +00:00
Kevin Buettner b6ba6518e9 Update/correct copyright notices. 2001-03-06 08:22:02 +00:00
Kevin Buettner e1e9e218c1 Replace calls to abort() with calls to internal_error(). 2001-02-25 04:45:12 +00:00
Jason Merrill 8052a17a6a * dbxread.c (read_ofile_symtab): Stay with AUTO_DEMANGLING for G++.
(process_one_symbol): Likewise.
        * dwarfread.c (handle_producer): Likewise.
2001-01-19 14:53:44 +00:00
Kevin Buettner b8c9b27d1e Replace free() with xfree(). 2000-12-15 01:01:51 +00:00
Michael Snyder 0fb34c3a10 2000-12-08 Michael Snyder <msnyder@mvstp600e.cygnus.com>
* alpha-tdep.c: Fix typo in comment.
        * dbxread.c: Fix typo in comment.
        * fr30-tdep.c: Fix typo: newline missing after comment.
        * mcore-tdep.c: Fix typo in comment.
2000-12-08 19:59:25 +00:00
David Anderson 114d1f2c1d Spelling correction in comment: dependant->dependent 2000-09-01 23:45:13 +00:00
Kevin Buettner 9df3df999d Protoization. 2000-08-21 17:30:58 +00:00
Kevin Buettner fba45db2fa Protoization. 2000-07-30 01:48:28 +00:00
Kevin Buettner 507f3c78fb Eliminate PARAMS from function pointer declarations. 2000-06-04 00:41:10 +00:00
Kevin Buettner a14ed312fd PARAMS removal. 2000-05-28 01:12:42 +00:00
Andrew Cagney 74b7792f0f Purge (almost) make_cleanup_func. 2000-05-22 09:02:23 +00:00
Andrew Cagney 56e290f494 Cleanup discard_minimal_symbols cleanup. 2000-05-16 04:07:39 +00:00
Elena Zannoni b8fbeb1874 Elena Zannoni <ezannoni@kwikemart.cygnus.com>
* objfiles.h (SECT_OFF_DATA, SECT_OFF_TEXT, SECT_OFF_BSS,
        SECT_OFF_RODATA): Define as functions of OBJFILE.  Add
        sect_index_text, sect_index_data, sect_index_rodata,
        sect_index_bss to objfile structure.
        * gdb-stabs.h (SECT_OFF_DATA, SECT_OFF_TEXT, SECT_OFF_BSS,
        SECT_OFF_RODATA): Remove.
        * objfiles.c (allocate_objfile): Initialize
        sect_index_{text,data,bss,rodata} to -1, for error detection.

        * symfile.c (default_symfile_offsets): Initialize
        sect_index_{text,data,bss,rodata} from bfd information.
        * xcoffread.c (xcoff_symfile_offsets): Ditto.
        * somread.c (som_symfile_offsets): Initialize
        sect_index_{text,data,bss,rodata}.

        * coffread.c, dbxread.c, elfread.c, hp-psymtab-read.c,
        hp-symtab-read.c, hpread.c, mdebugread.c, minsyms.c,
        mipsread.c, objfiles.c, os9kread.c, pa64solib.c, partial-stab.h,
        remote-os9k.c, remote-vx.c, remote.c, rs6000-nat.c, somsolib.c,
        stabsread.c, symfile.c, xcoffread.c:
        Update use of SECT_OFF_{TEXT,DATA,BSS,RODATA} to depend on the
        current objfile.

        * xcoffread.c: Add new field objfile to find_targ_sec_arg.
2000-05-04 16:52:34 +00:00
Jason Molenda c3f6f71df3 import gdb-2000-01-05 snapshot 2000-01-06 03:07:20 +00:00
Jason Molenda c2d11a7da0 import gdb-1999-12-06 snapshot 1999-12-07 03:56:43 +00:00
Jason Molenda c2c6d25f0d import gdb-1999-09-21 1999-09-22 03:28:34 +00:00
Stan Shebs d4f3574e77 import gdb-1999-09-08 snapshot 1999-09-09 00:02:17 +00:00
Jason Molenda 96baa820df import gdb-1999-08-09 snapshot 1999-08-09 21:36:23 +00:00
Jason Molenda a0b3c4fd32 import gdb-1999-08-02 snapshot 1999-08-02 23:48:37 +00:00
Jason Molenda c5aa993b1f import gdb-1999-07-07 post reformat 1999-07-07 20:19:36 +00:00
Jason Molenda 392a587b05 import gdb-1999-05-25 snapshot 1999-05-25 18:09:09 +00:00
Stan Shebs 7a292a7adf import gdb-19990422 snapshot 1999-04-26 18:34:20 +00:00
Stan Shebs c906108c21 Initial creation of sourceware repository 1999-04-16 01:35:26 +00:00
Stan Shebs 071ea11e85 Initial creation of sourceware repository 1999-04-16 01:34:07 +00:00
Peter Schauer 655a27b099 Improve support for SunPro F77.
* dbxread.c (end_psymtab, process_one_symbol):  Handle minimal
	symbols with trailing underscore names.
	* minsyms.c (find_stab_function_addr):  Ditto.
	* dbxread.c (process_one_symbol):  Ignore N_ALIAS for now.
	* partial-stab.h (case N_ALIAS):  Ditto.
	* stabsread.c (read_sun_builtin_type):  Handle boolean types.
1998-06-28 18:36:50 +00:00
Doug Evans 705b12dfdf * dbxread.c (read_dbx_symtab): Don't lower texthigh for last psymtab. 1998-06-05 20:57:54 +00:00
Jeff Law b84b918329 * mdebugread.c (psymtab_to_symtab_1): Handle new live range stabs
entries.

        * dbxread.c: More comment cleanups.
        * stabsread.c: Fix various violations of the GNU coding and
        formatting standards.  Update/add comments to make code clearer.
        (resolve_reference): Delete unused function.
        (ref_search_val): Remove function.  It didn't belong in stabsread.c
        (resolve_live_range): No longer returns a value.  Do not add it
        to the live range list until the entire range stab has been parsed.
        (get_substring): Remove duplicate declaration.
        (resolve_symbol_reference): Now static.  Remove unnecessary code
        to deal with cleanups.
         (ref_add): Use xrealloc instea of realloc.
        (process_reference): Reorganize slightly to make clearer.
        * stabsread.h (resolve_symbol_reference): Remove declaration.
        (resolve_reference): Likewise.
        * symtab.c (find_active_alias): New function.
        (lookup_block_symbol): Use find_active_alias.
        * symtab.h (struct range_list): Fix dangling struct live_range
        reference.
        (ref_search_val): Remove decl.

        * symtab.h (struct range_list): Renamed from struct live_range.
        (struct symbol): Remove struct live_range_info substruct.
        Bring the alias list and range list fields up to the toplevel
        as "aliases" and "ranges".
        (SYMBOL_ALIASES, SYMBOL_RANGES): Corresponding changes.
        (SYMBOL_RANGE_START, SYMBOL_RANGE_END, SYMBOL_RANGE_NEXT): Delete.
        * stabsread.c: Corresponding changes.
Bring first round of cleanups over from r5900 branch.
1997-10-22 23:28:30 +00:00