+ RTL for AIX

git-svn-id: http://svn.freepascal.org/svn/fpc/trunk@20786 3ad0048d-3df7-0310-abae-a5850022a9f2
  + aix support in fpcmake and fpmake

git-svn-id: http://svn.freepascal.org/svn/fpc/trunk@20787 3ad0048d-3df7-0310-abae-a5850022a9f2
  * link libbsd for AIX, because several UNIX routines are part of its BSD
    Compatibility library

git-svn-id: http://svn.freepascal.org/svn/fpc/trunk@20788 3ad0048d-3df7-0310-abae-a5850022a9f2
  - removed cg.g_indirect_sym_load() calls from pass_generate_code; this
    routine is called from tcgppcgen.fixref()/tcgx86.make_simple_ref()
    when necessary

git-svn-id: http://svn.freepascal.org/svn/fpc/trunk@20789 3ad0048d-3df7-0310-abae-a5850022a9f2
  + AIX target definition and info for the compiler and ppudump

git-svn-id: http://svn.freepascal.org/svn/fpc/trunk@20790 3ad0048d-3df7-0310-abae-a5850022a9f2
  * AIX-specific struct alignment rules
   o doubles are aligned to 8 bytes outside records, but to 4 bytes
     inside them
   o same as for Darwin/PPC: if the first field of a record has 8 byte
     alignment (including double!), then the struct itself gets 8 byte
     alignment

git-svn-id: http://svn.freepascal.org/svn/fpc/trunk@20791 3ad0048d-3df7-0310-abae-a5850022a9f2
  * just like Darwin and Classic Mac OS, AIX uses the system crt* files and
    hence contains a dummy "main" that refers to the system unit
    FPC_SYSTEMMAIN, which in turn jumps to the main program's PASCALMAIN
  * we call FPC_SYSTEMMAIN instead of jumping to it like on Darwin, so that
    the TOC gets set correctly

git-svn-id: http://svn.freepascal.org/svn/fpc/trunk@20792 3ad0048d-3df7-0310-abae-a5850022a9f2
  + AIX symbol handling: load symbol address from the TOC
  * fixed code dealing with symbol+offsets on 64 bit platforms in
    case of offsets > 32 bit (and to use smallint() typecasts
    instead of lo(), since the return value of lo() depends on
    the type passed in)

git-svn-id: http://svn.freepascal.org/svn/fpc/trunk@20793 3ad0048d-3df7-0310-abae-a5850022a9f2
  + AIX support for a_call_reg()
  * renamed some ppc64 stackframe offset constants to the same names as their
    32 bit counterparts so they can be used in shared ppc code

git-svn-id: http://svn.freepascal.org/svn/fpc/trunk@20794 3ad0048d-3df7-0310-abae-a5850022a9f2
  * moved g_external_wrapper() code from powerpc64/cgcpu to ppcgen/cgppc,
   made it 32/64 bit neutral and adjusted it so it can be used for
   linux/ppc64, aix/ppc and aix/ppc64

git-svn-id: http://svn.freepascal.org/svn/fpc/trunk@20795 3ad0048d-3df7-0310-abae-a5850022a9f2
  * on AIX, functions are called via function descriptors whose name
    is '.' followed by the function symbol name (like on linux/ppc64)

git-svn-id: http://svn.freepascal.org/svn/fpc/trunk@20796 3ad0048d-3df7-0310-abae-a5850022a9f2
  * detect RTOC-based accesses on AIX in inline assembly, and change the
    symbol names to those of the associated TOC entries

git-svn-id: http://svn.freepascal.org/svn/fpc/trunk@20797 3ad0048d-3df7-0310-abae-a5850022a9f2
  + TExternalAssembler.AsmWrite(ansistring) (from JVM branch), needed to be
    able to write long tasmdirective strings required by AIX target

git-svn-id: http://svn.freepascal.org/svn/fpc/trunk@20798 3ad0048d-3df7-0310-abae-a5850022a9f2
  * converted tai directive string from pshortstring to ansistring (some
    AIX directives are quite long)

git-svn-id: http://svn.freepascal.org/svn/fpc/trunk@20799 3ad0048d-3df7-0310-abae-a5850022a9f2
  * initialize dirhint field of created tasmconds

git-svn-id: http://svn.freepascal.org/svn/fpc/trunk@20800 3ad0048d-3df7-0310-abae-a5850022a9f2
  + generic implementation of ReplaceForbiddenAsmSymbolChars() instead
    of the AVR-specific ifdef'ed variant
   o since the only special character we use in mangled names on all platforms
     is $, added a new field to tasminfo called "dollarsign" that holds the
     character $'s should be replaced with (if it doesn't have to be replaced,
     leave it at $)

git-svn-id: http://svn.freepascal.org/svn/fpc/trunk@20801 3ad0048d-3df7-0310-abae-a5850022a9f2
  * changed last parameter of g_indirect_sym_load() to a set and also
    pass on whether the symbol refers to code or data (important for
    AIX weak symbols; note that AIX does not support undefined weak
    external symbols, and FPC does not yet support weakly defining
    non-external symbols, so this functionality isn't really used yet)

git-svn-id: http://svn.freepascal.org/svn/fpc/trunk@20802 3ad0048d-3df7-0310-abae-a5850022a9f2
  + AIX assembler writer
   o .short/.long/.llong are automatically aligned to 2/4/8 byte multiples
     by the AIX assembler (and for compatibility reasons, also by the
     GNU assembler when targeting AIX) -> change to .vbyte statements
  o .ascii does not allow non-ASCII characters in the AIX assembler
    -> change to .byte sequences like gcc on AIX

git-svn-id: http://svn.freepascal.org/svn/fpc/trunk@20803 3ad0048d-3df7-0310-abae-a5850022a9f2
  * parameter passing support for AIX:
   o the last bytes of records passed by value whose size is not a multiple
     of the register size must be passed in the upper (leftmost) bytes of
     a register

git-svn-id: http://svn.freepascal.org/svn/fpc/trunk@20804 3ad0048d-3df7-0310-abae-a5850022a9f2
  * on AIX, you also can't have a label without data coming at the end of the
    resource string table -> use same workaround as for Darwin

git-svn-id: http://svn.freepascal.org/svn/fpc/trunk@20805 3ad0048d-3df7-0310-abae-a5850022a9f2