Bart De VOS pointed out that removing absolute paths from the libc linker scripts is plainly wrong.
It dates from dawn ages of the original crosstool code, and is not well explained. At that time, binutils might not understand the sysroot stuff, and it was necessary to remove absolute paths in that case.
/trunk/scripts/build/libc/glibc.sh | 14 2 12 0 ++------------
1 file changed, 2 insertions(+), 12 deletions(-)
1 diff -durN gcc-3.4.6.orig/gcc/config/sh/sh.c gcc-3.4.6/gcc/config/sh/sh.c
2 --- gcc-3.4.6.orig/gcc/config/sh/sh.c 2004-09-03 08:51:30.000000000 +0200
3 +++ gcc-3.4.6/gcc/config/sh/sh.c 2007-08-15 23:01:48.000000000 +0200
6 this = FUNCTION_ARG (cum, Pmode, ptr_type_node, 1);
8 + /* In PIC case, we set PIC register to compute the target address. We
9 + can use a scratch register to save and restore the original value
10 + except for SHcompact. For SHcompact, use stack. */
11 + if (flag_pic && TARGET_SHCOMPACT)
13 + push (PIC_OFFSET_TABLE_REGNUM);
14 + emit_insn (gen_GOTaddr2picreg ());
17 /* For SHcompact, we only have r0 for a scratch register: r1 is the
18 static chain pointer (even if you can't have nested virtual functions
19 right now, someone might implement them sometime), and the rest of the
20 @@ -9189,8 +9198,24 @@
21 assemble_external (function);
22 TREE_USED (function) = 1;
24 + /* We can use scratch1 to save and restore the original value of
25 + PIC register except for SHcompact. */
26 + if (flag_pic && ! TARGET_SHCOMPACT)
28 + emit_move_insn (scratch1,
29 + gen_rtx_REG (Pmode, PIC_OFFSET_TABLE_REGNUM));
30 + emit_insn (gen_GOTaddr2picreg ());
32 funexp = XEXP (DECL_RTL (function), 0);
33 emit_move_insn (scratch2, funexp);
36 + if (! TARGET_SHCOMPACT)
37 + emit_move_insn (gen_rtx_REG (Pmode, PIC_OFFSET_TABLE_REGNUM),
40 + pop (PIC_OFFSET_TABLE_REGNUM);
42 funexp = gen_rtx_MEM (FUNCTION_MODE, scratch2);
43 sibcall = emit_call_insn (gen_sibcall (funexp, const0_rtx, NULL_RTX));
44 SIBLING_CALL_P (sibcall) = 1;