On Thu, 18 Mar 2004, Maciej W. Rozycki wrote:
> Essentially all platforms that currently set the address to something
> that's not aligned to a 64kB boundry. I'd like binutils to be fixed
> instead, though -- I'll try to track the problem down and cook a patch
> before 2.15. I think the problem may be considered serious enough the
> release may even be deferred for a few days if necessary (since I believe
> it's quite close).
After a study of the relevant BFD code, I'm now pretty sure it does its
job right -- the .text section which is placed at a fixed offset by the
linker script only imposes an alignment of 4 and the 64kB alignment is
required by the segment the section is placed in. So BFD does the right
job by lowering the segment's VMA so that the .text section is placed at
the requested offset.
What's important, segment alignment happens under the assumption a binary
will be used in a paged environment. This is not normally the case with a
MIPS Linux kernel, so I think the right solution is to ask the linker not
to do page aligning using the "-n" option. Here's a patch that should do
that.
Ralf, OK to apply this?
Maciej
--
+ Maciej W. Rozycki, Technical University of Gdansk, Poland +
+--------------------------------------------------------------+
+ e-mail: macro@ds2.pg.gda.pl, PGP key available +
patch-mips-2.4.25-20040322-nmagic-0
diff -up --recursive --new-file
linux-mips-2.4.25-20040322.macro/arch/mips/Makefile
linux-mips-2.4.25-20040322/arch/mips/Makefile
--- linux-mips-2.4.25-20040322.macro/arch/mips/Makefile 2004-03-11
03:57:07.000000000 +0000
+++ linux-mips-2.4.25-20040322/arch/mips/Makefile 2004-03-23
11:45:26.000000000 +0000
@@ -46,7 +46,7 @@ check_gcc = $(shell if $(CC) $(1) -S -o
GCCFLAGS := -I $(TOPDIR)/include/asm/gcc
GCCFLAGS += -G 0 -mno-abicalls -fno-pic -pipe
GCCFLAGS += $(call check_gcc, -finline-limit=100000,)
-LINKFLAGS += -G 0 -static # -N
+LINKFLAGS += -G 0 -static -n
MODFLAGS += -mlong-calls
ifdef CONFIG_DEBUG_INFO
diff -up --recursive --new-file
linux-mips-2.4.25-20040322.macro/arch/mips64/Makefile
linux-mips-2.4.25-20040322/arch/mips64/Makefile
--- linux-mips-2.4.25-20040322.macro/arch/mips64/Makefile 2004-01-03
03:56:46.000000000 +0000
+++ linux-mips-2.4.25-20040322/arch/mips64/Makefile 2004-03-23
11:45:39.000000000 +0000
@@ -39,7 +39,7 @@ endif
GCCFLAGS := -I $(TOPDIR)/include/asm/gcc
GCCFLAGS += -mabi=64 -G 0 -mno-abicalls -fno-pic -Wa,--trap -pipe
GCCFLAGS += $(call check_gcc, -finline-limit=100000,)
-LINKFLAGS += -G 0 -static # -N
+LINKFLAGS += -G 0 -static -n
MODFLAGS += -mlong-calls
ifdef CONFIG_DEBUG_INFO
|