The Artima Developer Community
Sponsored Link

Agile Buzz Forum
Work-around for dllcc issues with VW 7.x on newer glibc (Linux)

0 replies on 1 page.

Welcome Guest
  Sign In

Go back to the topic listing  Back to Topic List Click to reply to this topic  Reply to this Topic Click to search messages in this forum  Search Forum Click for a threaded view of the topic  Threaded View   
Previous Topic   Next Topic
Flat View: This topic has 0 replies on 1 page
James Robertson

Posts: 29924
Nickname: jarober61
Registered: Jun, 2003

David Buck, Smalltalker at large
Work-around for dllcc issues with VW 7.x on newer glibc (Linux) Posted: Sep 29, 2003 2:37 PM
Reply to this message Reply

This post originated from an RSS feed registered with Agile Buzz by James Robertson.
Original Post: Work-around for dllcc issues with VW 7.x on newer glibc (Linux)
Feed Title: Cincom Smalltalk Blog - Smalltalk with Rants
Feed URL: http://www.cincomsmalltalk.com/rssBlog/rssBlogView.xml
Feed Description: James Robertson comments on Cincom Smalltalk, the Smalltalk development community, and IT trends and issues in general.
Latest Agile Buzz Posts
Latest Agile Buzz Posts by James Robertson
Latest Posts From Cincom Smalltalk Blog - Smalltalk with Rants

Advertisement
Some people using VW 7.x have reported freezes or crashes of VW on Linux distros with newer revs of glibc - particularly on RedHat 8 and RedHat 9. We've had a look at the problem, and believe that we have a bug in VW. Here's how to deal with this at present:

Some new linux systems install multiple libc.so.6 libraries, typically in /lib, /lib/i686, and /lib/tls. The difference between the libraries is the version of the kernel they assume to be running. Each library states this assumption in an ELF section named .note.ABI-tag that can be viewed using


  #> objdump -s -j .note.ABI-tag <ELF file>

The last 3 32-bit unsigned ints in this tag contain the kernel version, or "operating system ABI", required by the library. This was done as part of the new Native Posix Threads implementation. One big difference is that newer kernels have an api that defines the 'errno' global in thread-local storage instead of as a traditional global variable.

UnixSystemSupport has a #libraryDirectories attribute that includes '/lib', '/usr/shlib', and '/usr/lib'. On Martin's system, the loader resolves the engine's symbols in /lib/tls/libc-2.3.2.so and /lib/tls/libm-2.3.2.so. However, because the paths are hard-coded in the attributes of UnixSystemSupport, this causes VW to open /lib/libc-2.3.2.so when it tries to find the function pointers needed by the OSTimeZone package. Additionally, this second libc-2.3.2.so is loaded in RTLD_GLOBAL mode by primitive 330.

I discovered that I could eliminate the system freeze in two different ways:

  • set LD_ASSUME_KERNEL=2.2.5 in the environment before running vw

This causes the loader to resolve the engine against the libc in /lib. Since the UnixSystemSupport methods search for the same library there is only one glibc library loaded.

  • empty the #libraryDirectories attribute on UnixSystemSupport and add 'libc.so.6' to the head of the #libraryFiles list.

This causes dlopen() to be called on the name "libc.so.6" which uses the platform's library search path. This ensures that the libc.so.6 that gets loaded is the same library as the loader used when it loaded the engine.

That's part of the text - with work-arounds you can apply in your image - for the internal bug report on this issue. Let us know if you have problems with this!

Read: Work-around for dllcc issues with VW 7.x on newer glibc (Linux)

Topic: And down went the power.... Previous Topic   Next Topic Topic: Newsletter publishers feel the burn

Sponsored Links



Google
  Web Artima.com   

Copyright © 1996-2019 Artima, Inc. All Rights Reserved. - Privacy Policy - Terms of Use