Left-over part of commit 84b2a020da
The _end marker must be aligned to 4-bytes to ensure that the last
element written does not reach beyond the address of _end. This is
also necessary as the termination condition is an equality test
instead of an ordered test so (_end - _fbss) must be a multiple of
4-bytes. The alignment is already correct for mti*.ld files, fix
it for all remaining MIPS scripts that don't already align to at
least 4.
The _fdata symbol in MIPS linker scripts is aligned to a 16-byte
boundary. The ALIGN function does not implicitly update current
location counter. If sections positioned after the assignment
do not have the same natural alignment as the ALIGN function then
the start of the section group will not coincide with the value
of the symbol.
Given the linker command sequence:
symbol = ALIGN (NN);
(.section*)
where the idiom implies a desire to mark the beginning of .section
with symbol, there must be an assignment to the location counter
between the assignment to symbol and the .section pattern.
libgloss/
* mips/array.ld: Update the location counter to match _fdata.
* mips/cfe.ld: Likewise.
* mips/ddb-kseg0.ld: Likewise.
* mips/ddb.ld: Likewise.
* mips/dve.ld: Likewise.
* mips/idt.ld: Likewise.
* mips/idt32.ld: Likewise.
* mips/idt64.ld: Likewise.
* mips/idtecoff.ld: Likewise.
* mips/jmr3904app-java.ld: Likewise.
* mips/jmr3904app.ld: Likewise.
* mips/jmr3904dram-java.ld: Likewise.
* mips/jmr3904dram.ld: Likewise.
* mips/lsi.ld: Likewise.
* mips/mti32.ld: Likewise.
* mips/mti64.ld: Likewise.
* mips/mti64_64.ld: Likewise.
* mips/mti64_n32.ld: Likewise.
* mips/nullmon.ld: Likewise.
* mips/pmon.ld: Likewise.
* mips/sde32.ld: Likewise.
* mips/sde64.ld: Likewise.
The compiler driver positions the linker script at the end of the linker
command-line, after crtend.o. As a result, any INPUT objects and archive
GROUPs introduced by the linker script are placed after crtend.o and the
end-of-frame marker provided by crtend.o ends up in between .eh_frames
instead of being at the end.
This has always been a problem, but a binutils update to clean-up
redundant NULL markers in .eh_frame exposes it as a execution failure in
exception-handling tests. This patch re-orders .eh_frames in all
MIPS linker scripts so that the one from crtend.o is always placed last.
libgloss/
* mips/array.ld: Re-order to place .eh_frame from crtend.o
after all other .eh_frame sections.
* mips/cfe.ld: Likewise.
* mips/ddb-kseg0.ld: Likewise.
* mips/ddb.ld: Likewise.
* mips/dve.ld: Likewise.
* mips/idt.ld: Likewise.
* mips/idt32.ld: Likewise.
* mips/idt64.ld: Likewise.
* mips/jmr3904app.ld: Likewise.
* mips/lsi.ld: Likewise.
* mips/mti32.ld: Likewise.
* mips/mti64.ld: Likewise.
* mips/mti64_64.ld: Likewise.
* mips/mti64_n32.ld: Likewise.
* mips/nullmon.ld: Likewise.
* mips/pmon.ld: Likewise.
* mips/sde32.ld: Likewise.
* mips/sde64.ld: Likewise.
Remove FPU availability check, just use the pre-processor flags
to indicicate what the user wanted.
* mips/abiflags.S: New file.
* mips/regs.S (SR_MSA): Define macro.
* mips/mti32.ld: Place .MIPS.abiflags and wrap in marker symbols.
* mips/mti64.ld: Likewise.
* mips/mti64_64.ld: Likewise.
* mips/mti64_n32.ld: Likewise.
* mips/crt0.S: Remove .set noreorder throughout.
(zerobss): Open code the bltu macro instruction so that the
zero-loop does not have a NOP in the branch delay slot.
Nigel Stephens <nigel@mips.com>
* mips/crt0.S (_start): Use all available float registers. Don't touch
SR_PE on post-mips2 CPUs, it means soft reset there.
* mips/regs.S (C0_COUNT): Fix comment that kept this from being
defined.
* mips/vr4300.S: Use C0_COUNT as appropriate instead of hardcoding $9.
* mips/vr5xxx.S: Likewise.
* mips/crt0_cfe.S: New file.
* mips/cfe_mem.c: New file.
* mips/cfe_prestart.S: Remove.
* mips/cfe.ld: Adjust to use crt0_cfe.o as the startup file, and
and use _start as the entry point. Align BSS to 32-byte boundary.
* mips/cfe.c: Reimplement to fit on top of a crt0_cfe.o file.
* mips/cfe_api.h (__libcfe_stack_size, __libcfe_mem_limit)
(__libcfe_meminit, __libcfe_stack_top): New prototypes.
* mips/Makefile.in (CFEOBJS): Replace cfe_prestart.o with cfe_mem.o.
(cfe.o, cfe_api.o, cfe_mem.o, crt0_cfe.o): New targets.
* mips/configure.in: Build and install crt0_cfe.o when CFE support
is built.
* mips/configure: Regenerate.
* mips/configure.in (mipsisa32el-*-*): Handle in the same way
as mipsisa32-*-*.
(mipsisa32r2-*-*, mipsisa32r2el-*-*): New, handled in the same
way as mipsisa32-*-*.
* mips/configure: Regenerate.
* mips/Makefile.in (GENOBJS2): New variable to name other
commonly used objects.
(DVEOBJS, JMR3904OBJS): Reference GENOBJS2.
* mips/Makefile.in: Add support for Broadcom CFE firmware.
* mips/configure.in: (mipsisa32*-*-*, *): Likewise.
* mips/configure: Regenerate.
* mips/cfe.c: New file.
* mips/cfe.ld: New file.
* mips/cfe_api.c: New file.
* mips/cfe_api.h: New file.
* mips/cfe_api_int.h: New file.
* mips/cfe_error.h: New file.
* mips/cfe_prestart.S: New file.