Skip to contentSkip to conversation

Need ld.so help

DISCUSSION Dan Malek 2 participants 2 messages Dec 27, 1998

lore
Share & tools
lore

Dan Malek

author
#0 lore raw

I discovered the problem I am having with the embedded 8xx processors and cache is that there are several assumptions about cache block size in various functions. The 8xx processors have a 4 word (16 byte) cache line while other PPCs have a 8 word line. This causes problems when trying to flush and invalidate caches.

One place this is done is dynamic linking functions of ld.so, where it is assumed a cache line is 8 words. Unfortunately, I have been unable to build ld.so from the glibc SRPM. I am using the 961212-1h SRPM from the linuxppc.org server, and the appropriate egcs and binutils. All of the other libraries I build from this SRPM are fine. From looking at the RPM of the same version, all of the resulting *.so files appear to be nearly identical, except for ld.so which is much larger than found in the RPM.

The details....I have tracked it down to the elf_get_dynamic_info() function, called from _dl_start(). The failure occurs following the 'while' loop. It appears info[DT_RELA] is OK, or at least not NULL. However, info[DT_RELAENT] is NULL, causing the program to segfault at this point.

I don't understand enough about the libraries to know where to look from here, so I need some help :-)

Oh yeah, the SRPM didn't build quite right. I had to hand patch stdlib/exit.c.....

Thanks.

    -- Dan

[[ This message was sent via the linuxppc-dev mailing list. Replies are ]] [[ not forced back to the list, so be sure to Cc linuxppc-dev if your ]] [[ reply is of general interest. To unsubscribe from linuxppc-dev, send ]] [[ the message 'unsubscribe' to [email protected] ]]

#1 lore raw
Quoted 24 lines · On 27-Dec-98 Dan Malek wrote:

I discovered the problem I am having with the embedded 8xx processors and cache is that there are several assumptions about cache block size in various functions. The 8xx processors have a 4 word (16 byte) cache line while other PPCs have a 8 word line. This causes problems when trying to flush and invalidate caches.

One place this is done is dynamic linking functions of ld.so, where it is assumed a cache line is 8 words. Unfortunately, I have been unable to build ld.so from the glibc SRPM. I am using the 961212-1h SRPM from the linuxppc.org server, and the appropriate egcs and binutils. All of the other libraries I build from this SRPM are fine. From looking at the RPM of the same version, all of the resulting *.so files appear to be nearly identical, except for ld.so which is much larger than found in the RPM.

The details....I have tracked it down to the elf_get_dynamic_info() function, called from _dl_start(). The failure occurs following the 'while' loop. It appears info[DT_RELA] is OK, or at least not NULL. However, info[DT_RELAENT] is NULL, causing the program to segfault at this point.

Quoted 6 lines

I don't understand enough about the libraries to know where to look from here, so I need some help :-)

Oh yeah, the SRPM didn't build quite right. I had to hand patch stdlib/exit.c.....

I'm confused. Are all of these problems attributable to the cache-line size stuff? Or are there other problems?

I [obviously] build the libraries directly from the SRPMS, so I'd like to understand what your problems are.

Which software pieces are you running?
EGCS?
BINUTILS?
GLIBC?
Kernel?

------------------------------------------------------------------------

Gary Thomas                              |
email: [email protected]                  | "Fine wine is a necessity of
   ... opinions expressed here are mine  |        life for me"
       and no one else would claim them! |
                                         |      Thomas Jefferson

------------------------------------------------------------------------

[[ This message was sent via the linuxppc-dev mailing list. Replies are ]] [[ not forced back to the list, so be sure to Cc linuxppc-dev if your ]] [[ reply is of general interest. To unsubscribe from linuxppc-dev, send ]] [[ the message 'unsubscribe' to [email protected] ]]