In article <1992Aug15.085244.10732@nntp.hut.fi> sakaria@vipunen.hut.fi (Sakari Aaltonen) writes:Think of it in the following way. The sharable library is nothing more than some code that is guaranteed to be in a certain spot in virtual memory (actually, the way it is set up, the name of the sharable library is buried in your program startup code). On linux, this address is the same for every process, so every process can share the code pages for the sharable libraries. When you link your program to the sharable library, the linker resolves references to routines in the sharable library by using the actual addresses of the routines. This by itself works just fine, except for the fact that when we update the library to fix bugs the addresses of the routines change and the executables will no longer work. This means that you have to relink all of your programs. A jump table is just a series of jmp instructions, one right after another. This is usually placed right at the beginning of the sharable image, and each jmp instruction jumps off to one of the routines in the sharable image. The idea is that when a new version of the library comes out, that the jump table will still be in the same location in memory, and thus all of the references in your program to the sharable library will still effectively point to the correct routines. Therefore you will still be able to run your program without having to relink it. The cost is the extra indirection of the jmp instruction. The benefit is that you will not have to relink programs whenever you update the library. In the past we have not had the jump tables, and it basically meant having to keep the source code for *everything* on line, so that we could relink whenever a new library comes out. It appears as if we are on the verge of relinking for the last time :-) That sounds very much like a jump table to me. The index is nothing more than the offset into the jump table, and you obviously need to know the library name. The idea behind both the DLLs and the jump tables is that you can modify the library (i.e. fix bugs, add new functions, etc), without invalidating any executables that are linked to the library. -Eric eric@tantalus.nrl.navy.mil (My regular new server is down right now, so I am using this address for the time being).
| Linus Torvalds | Re: Dual-Licensing Linux Kernel with GPL V2 and GPL V3 |
| Tony Lindgren | [PATCH 37/90] ARM: OMAP: MPUIO wake updates |
| Greg KH | [GIT PATCH] driver core patches against 2.6.24 |
| Miklos Szeredi | -rt doesn't compile for UML |
git: | |
| Florian Weimer | Re: Handling large files with GIT |
| Dana How | [PATCH] Prevent megablobs from gunking up git packs |
| Denis Bueno | Recovering from repository corruption |
| Peter Stahlir | Git as a filesystem |
| Richard Stallman | Real men don't attack straw men |
| Brian A. Seklecki | sshd_config(5) PermitRootLogin yes |
| Theo de Raadt | Re: dmesg IBM x3650 OpenBSD 4.3 |
| Stuart Henderson | Re: Actual BIND error - Patching OpenBSD 4.3 named ? |
| Auke Kok | [PATCH 5/6] e1000: Secondary unicast address support |
| Jon Nelson | tg3: strange errors and non-working-ness |
| Indan Zupancic | Re: Realtek 8111C transmit timed out |
| Brandeburg, Jesse | RE: 2.6.24 BUG: soft lockup - CPU#X |
| usb mic not detected | 3 hours ago | Applications and Utilities |
| Problem in Inserting a module | 4 hours ago | Linux kernel |
| Treason Uncloaked | 10 hours ago | Linux kernel |
| Shared swap partition | 21 hours ago | Linux general |
| high memory | 2 days ago | Linux kernel |
| semaphore access speed | 2 days ago | Applications and Utilities |
| the kernel how to power off the machine | 2 days ago | Linux kernel |
| Easter Eggs in windows XP | 2 days ago | Windows |
| Root password | 3 days ago | Linux general |
| Where/when DNOTIFY is used? | 3 days ago | Linux kernel |
