I�m having a problem because INSMOD is not loading one module correctly.
Here�s the system:
        RH 5.2 w/Real-Time Linux 0.9J extensions to the kernel
        gcc-2.7.2.3-14
        binutils (ld) 2.9.1.0.15-1
        modutils  (insmod) 2.1.85-9

An interface board I�m using has its 64K dual-ported segment located in
PC-address space at 0x000D0000, so I�m trying to get the module compiled so
that a particular `segment� falls at that address so I can use direct
addressing of registers instead of having to dereference pointers for every
access.

Here�s how the memory is declared in the C-function that uses it:

        unsigned char     DualPortedMemory[2]  
                __attribute__ ((section (".DPM" ) ) )   
                        ={0x68,0x89};

and here�s the loader command-file (invoked with -T load_cmds) on the
ld-line of the make-file:


MEMORY  {
                 DUALPORT (rw)  :  ORIGIN = 0x000D0000   , LENGTH = 64K 
                }                        


SECTIONS        {
                .bss                            :       { *(.bss) }
                .text                           :       { *(.text) }
                .data                           :       { *(.data) }
                .note                           :       { *(.note) }
                .comment                        :       { *(.comment) }
                .rodata                         :       { *(.rodata)  }  
                .DPM 0x000D0000 (NOLOAD) :      { *(.DPM) }   >DUALPORT :NONE
                }

The headers of the linked-moduel (as examined with objdump) show that the
segment .DPM is located at the right address:

dummy.o:     file format elf32-i386

Sections:
Idx Name          Size          VMA          LMA           File off      Algn
                        .       .       .
  6 .DPM          00000002  000d0000  000d0000  00001218  2**0
                  ALLOC

and the load-map from the insmod command has the following:

        Sections:       Size           Address   Align
        .moduse         00000004  0807a000  2**2
        .text                   0000088e  0807a004  2**2
        .rodata                 00000358  0807a892  2**0
        .data                   0000050c  0807abec  2**2
        .bss                    0000009c  0807b0f8   2**2
        .DPM                    00000002  0807b194  2**0

showing that, despite everything I�ve tried, insmod insists on loading the
module without properly relocating the .DPM-segment to 0x000D0000.

I�ve tried just about every possible combination of things in the loader
command-file, but that doesn't seem to be the problem since the disassemby
of the loader�s output shows that references to array DualPortedMemory[]
are being correctly relocated to the .DPM segment located at the correct
address.

I�ve scanned the code for an older version of insmod (which is all I could
find quickly) and it looks like it was never designed to do what I want it
do .

1. Is there something obvious I�m missing?
2. Has anyone every done this successfully before?
3. Can anyone confirm this "bug"?

I�d like to exhaust all possible approaches before I start creating dozens
of pointers � an error-prone approach if the underlying structures change
radically.

Thanks.

        Norm


-- [rtl] ---
To unsubscribe:
echo "unsubscribe rtl" | mail [EMAIL PROTECTED] OR
echo "unsubscribe rtl <Your_email>" | mail [EMAIL PROTECTED]
---
For more information on Real-Time Linux see:
http://www.rtlinux.org/rtlinux/

Reply via email to