Browse Source

+ Added section about shared lib relocations on Win32

michael 22 years ago
parent
commit
0dee6d7362
1 changed files with 106 additions and 1 deletions
  1. 106 1
      docs/prog.tex

+ 106 - 1
docs/prog.tex

@@ -3796,14 +3796,23 @@ be used for special purposes by software developpers.
 \end{description}
 \end{description}
 
 
 \subsection{procedural types}
 \subsection{procedural types}
+<<<<<<< prog.tex
+
+A procedural type is stored as a generic pointer, which stores
+the address of the routine.
+=======
 
 
 A procedural type to a normal procedure or function is stored as a generic pointer, 
 A procedural type to a normal procedure or function is stored as a generic pointer, 
 which stores the address of the entry point of the routine. 
 which stores the address of the entry point of the routine. 
+>>>>>>> 1.29
 
 
+<<<<<<< prog.tex
+=======
 In the case of a method procedural type, the storage consists of two pointers,
 In the case of a method procedural type, the storage consists of two pointers,
 the first being a pointer to the entry point of the method, and the second
 the first being a pointer to the entry point of the method, and the second
 one being a pointer to \var{self} (the object instance).
 one being a pointer to \var{self} (the object instance).
 
 
+>>>>>>> 1.29
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 % The alignment of data elements
 % The alignment of data elements
 \section{Data alignment}
 \section{Data alignment}
@@ -5013,6 +5022,33 @@ gcc -o ctest2 ctest2.c -ldl
 The \var{-ldl} tells gcc that the program needs the \file{libdl.so} library
 The \var{-ldl} tells gcc that the program needs the \file{libdl.so} library
 to load dynamical libraries.
 to load dynamical libraries.
 
 
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Some windows issues
+\section{Some Windows issues}
+\label{shlibwinissues}
+By default, \fpc (actually, the linker used by \fpc)
+creates libraries that are not relocatable. This means that they must be
+loaded at a fixed address in memory: this address is called the
+ImageBase address. If two \fpc generated libraries are loaded by a
+program, there will be a conflict, because the first librarie already
+occupies the memory location where the second library should be loaded.
+
+There are 2 switches in Free Pascal which control the generation of
+shared libraries under \windows:
+\begin{description}
+\item[-WR] Generate a relocatable library. This library can be moved to
+another location in memory if the ImageBase address it wants is already
+in use.
+\item[-WB] Specify the ImageBase address for the generated library.
+The standard ImageBase used by \fpc is \var{0x10000000}. This switch
+allows to change that by specifying another address, for instance
+\var{-WB11000000}.
+\end{description}
+The first option is preferred, as a program may load many libraries
+present on the system, and they could already be using the ImageBase
+address. The second option is faster, as no relocation needs to be
+done if the ImageBase address is not yet in use.
+
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 % using resources
 % using resources
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -6782,6 +6818,75 @@ operating systems no longer define LINUX starting with version 1.0.7.
 % Appendix H : Operating system specific behavior
 % Appendix H : Operating system specific behavior
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 
 
+<<<<<<< prog.tex
+\chapter{Stack configuration}
+\label{ch:AppH}
+
+This gives some important information on stack settings under
+the different operating systems. It might be important when
+porting applications to other operating systems.
+
+\section{DOS}
+
+Under the DOS targets, the default stack is set to 256 kB.
+This can be modified with the GO32V2 target using a special
+DJGPP utility \file{stubedit}. It is to note that the stack
+size may be enlarged with the compiler switch (\var{-Cs}).
+If the size specified with \var{-Cs} is \emph{greater} 
+than the default stack size, it will be used instead, 
+otherwise the default stack size is used.
+
+\section{Linux}
+
+Under \linux, stack size is only limited by the available memory of
+the system.
+
+\section{Netbsd}
+
+Under \netbsd, stack size is only limited by the available memory of
+the system.
+
+\section{Freebsd}
+
+Under \freebsd, stack size is only limited by the available memory of
+the system.
+
+\section{BeOS}
+
+Under \beos, stack size is fixed at 256Kb. It currently
+cannot be changed, it is recommended to turn on stack
+checking when compiling for this target platform.
+
+\section{Windows}
+
+Under \windows, stack size is only limited by the available memory of
+the system.
+
+\section{OS/2}
+
+Under \ostwo, stack size is specified at a default
+value of 8 Mbytes. This currently cannot be changed
+directly.
+
+\section{Amiga}
+
+Under AmigaOS, stack size is determined by the user, which sets this
+value using the stack program. Typical sizes range from 4 kB to 40 kB.
+The stack size currently cannot be changed, it is recommended to turn
+on stack checking when compiling for this target platform.
+
+\section{Atari}
+
+Under Atari TOS, stack size is currently limited to 8 kB.
+The stack size currently cannot be changed, it is recommended to turn
+on stack checking when compiling for this target platform.
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Appendix I : Operating system specific behavior
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+=======
+>>>>>>> 1.27
 \chapter{Operating system specific behavior}
 \chapter{Operating system specific behavior}
 \label{ch:AppH}
 \label{ch:AppH}
 
 
@@ -6812,4 +6917,4 @@ Win32 & 4 & ESI, EDI, EBX\\
 \hline
 \hline
 \end{FPCltable}
 \end{FPCltable}
 
 
-\end{document}
+\end{document}