modules ?

Peter Grehan grehan at freebsd.org
Tue Jul 20 19:08:42 PDT 2004


(Oops, this didn't make it to -ppc first time)

 > Are modules supposed to work?  Attempting to load
 > a kld built on powerpc yields tons of warnings about
 > not supporting R_PPC_REL24 relocations:
 >
 >     unexpected relocation type 10
 > <...>     link_elf: symbol minor undefined
 >
 >
 > Is there a linker script, or some CFLAGs that I'm missing?


  Sorry for the delay, just got back to email.

  There's 2 outstanding diffs. First one:

diff -u -r1.163 kmod.mk
--- kmod.mk     29 Jun 2004 18:56:14 -0000      1.163
+++ kmod.mk     16 Jul 2004 07:34:06 -0000
@@ -125,6 +125,11 @@
  .endif
  LDFLAGS+=      -d -warn-common

+# PG XXX ppc-specific module flags
+.if ${MACHINE_ARCH} == "powerpc"
+CFLAGS+=       -mlongcall
+.endif
+
  CFLAGS+=       ${DEBUG_FLAGS}

  This forces the compiler to generate a call via the CTR register
with a 32-bit load. The normal call sequence uses "blr" with a 24-bit
displacement, which doesn't work with modules being loaded in the
4th gig and the kernel residing in the first.

  I was going to ask ruslan if this was the correct place to commit
this CFLAGS change. However, if you think it's OK, I'll do it.

  The second is a gcc patch, since internal libcalls (e.g. 64-bit arith)
don't respect the "-mlongcall" attribute. I've yet to file a bug against
gcc for this one.

diff -u -r1.1.1.9 rs6000.c
--- rs6000.c    7 Nov 2003 02:43:04 -0000       1.1.1.9
+++ rs6000.c    15 Jul 2004 03:40:09 -0000
@@ -2914,6 +2914,9 @@
        && lookup_attribute ("longcall", TYPE_ATTRIBUTES (fntype))
        && !lookup_attribute ("shortcall", TYPE_ATTRIBUTES (fntype)))
      cum->call_cookie = CALL_LONG;
+  else if (!fntype)
+    if (rs6000_default_long_calls)
+      cum->call_cookie = CALL_LONG;

    if (TARGET_DEBUG_ARG)

later,

Peter.




More information about the freebsd-ppc mailing list