Annotation of pmsdk/samples/notes/cswitch, revision 1.1.1.1

1.1       root        1: When compiling a C program for PM, here are some points to note:
                      2: ----------------------------------------------------------------
                      3: 
                      4: Segment setup
                      5: -------------
                      6: 
                      7: There are 3 switches which specify segment setup (note that SS never changes):
                      8: 
                      9: -Ad    SS==DS.
                     10:        SS and DS are loaded with the same value when the program
                     11:        starts up and are assumed to be the same later on.
                     12:        This is the default.
                     13: 
                     14: -Aw    SS!=DS, DS not reloaded on function entry.
                     15:        SS is not assumed to equal DS, so if DS must contain the same value
                     16:        as SS for some operation, DS is pushed, loaded, used and popped.
                     17: 
                     18: -Au    SS!=DS, DS reloaded on function entry, for all functions.
                     19:        At the beginning of each function, DS is pushed
                     20:        then loaded with the module's data segment (usually DGROUP).
                     21:        At the end of each function, DS is popped.  Also, any other
                     22:        time DS must be changed, it is pushed, loaded, used and popped.
                     23:        The _loadds keyword has the same effect, but on a
                     24:        function-by-function basis.
                     25: 
                     26: If you have a thread whose stack lies outside the default data segment
                     27: (eg. obtained by a call to DosAllocSeg, or if you compile large-model and
                     28: use malloc()), you must specify SS!=DS.  Multi-threaded apps nearly always
                     29: have SS!=DS.
                     30: 
                     31: Any routine which is called by code which uses a different data segment
                     32: (different value in DS) must use the _loadds keyword.  Your program will
                     33: execute correctly if you use the -Au switch, but this switch generates DS
                     34: save, load and restore code for all functions, even ones which use the same
                     35: data segment.  Generally, only window procedures or dll entry points need
                     36: this code.
                     37: 
                     38: Summary:
                     39: If your program has multiple threads
                     40:        Use the -Aw switch
                     41: Else
                     42:        Use the -Ad switch
                     43: 
                     44: Use the _loadds keyword when declaring window procedures and dll entry points.
                     45: 
                     46: 
                     47: 
                     48: Window procedures
                     49: -----------------
                     50: 
                     51: The preferred method of typing window procedures is to use the
                     52: CALLBACK keyword, defined in os2def.h:
                     53: 
                     54: #define CALLBACK pascal far _loadds
                     55: 
                     56: Note that window procedures need not be exported in PM (unlike Windows).
                     57: 
                     58: The -Gw switch should not be used for PM application programs, since it
                     59: causes unnecessary code to be emitted. It will not cause incorrect
                     60: execution, but it is wasteful.
                     61: 
                     62: 
                     63: 
                     64: C switches used in the samples
                     65: ------------------------------
                     66: 
                     67: -Zi    causes symbolic information used by CodeView to be generated
                     68: 
                     69: -Zp    packs structure members
                     70: 
                     71: -Gs    turns off stack checking.  Useful if SS!=DS and C runtime libraries
                     72:        are used.
                     73: 
                     74: -G2    causes 286 instructions to be generated
                     75: 
                     76: -Gc    makes the Pascal calling convention the default
                     77: 
                     78: -Od    disables optimization.  Useful when running CodeView.
                     79: 
                     80: -NT    sets the name of the text (code) segment
                     81: 
                     82: -c     compiles without linking
                     83: 
                     84: -u     removes definitions of all predefined identifiers
                     85: 
                     86: -J     changes the default type for char from signed to unsigned
                     87: 
                     88: -W3    sets the compiler output warning level to its most sensitive

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.