Commit Graph

8918 Commits

Author SHA1 Message Date
tom_at_work
9ce34c63c9 Fix shared library loading and unloading for Linux platforms. Shared library initialization and finalization are now called correctly at program startup for compile-time linked dynamic libraries on powerpc-/powerpc64-/arm-/i386- and x86_64-linux.
Every startup code must now provide an additional entry point called "_dynamic_start" that is set as new the entry point if the program links to a Pascal shared library. Its purpose is to set up an exit hook usually passed via a register, which should be called during program finalization if non-nil.

We use this additional entry point because this register only has meaningful content when there are any compile-time linked shared libraries, otherwise it often contains random garbage. The difference between the _dynamic_start and the original code is minimal; actually in all implementations the _dynamic_start code passes on control to the old startup code, so we use an additional entry point instead of an additional startup file.

Detailed changes and fixes list:
compiler:
  always link to the dynamic loader (ld.so) when compiling shared libraries. Fixes crashes in the loader during shared library finalization on some Linuxes
  remove additional ENTRY() section in arm linker script
  select either _dynamic_start or _start as entry point depending on whether this is a static or dynamic executable
powerpc*:
  do not set System.isLibrary in startup code, it will be set during library initialization anyway
  trap in case of reaching code locations that should not be reached instead of looping (possibly endlessly)
powerpc:
  register atexit() function pointer if supplied to the executable and call it during shutdown
  correctly set argc/argv/envp in shared library code and return correctly to the caller after initialization
  pass on exitcode in shared library haltproc
  use the more recent exit_group system call if available for shutdown
powerpc64
  fix .ptrgl stub, do not set the environment register to the value of the GOT entry in the function descriptor
arm
  do not set System.isLibrary in startup code, it will be set during library initialization anyway
  reload exitcode to pass to shutdown
mips,mipsel,sparc
  added stubs to allow correct linking

git-svn-id: trunk@19036 -
2011-09-08 21:17:35 +00:00
marco
1f5333a80a * fixes from Mantis #20194, derived from patch and description by G. Fink.
git-svn-id: trunk@19035 -
2011-09-08 20:42:39 +00:00
sergei
0c3c8a8745 * Cast HashValue to Longint, otherwise empty strings (which have hash=$FFFFFFFF) cause range check error when RTL is compiled with -Cr.
git-svn-id: trunk@19034 -
2011-09-08 19:15:34 +00:00
pierre
4b743a7a61 * IsLibrary is a byte-sized boolean, thus use stb instruction to set value
git-svn-id: trunk@19022 -
2011-09-07 21:57:37 +00:00
pierre
958425157f * Try to implement dllprt0 for linux powerpc processor
git-svn-id: trunk@19009 -
2011-09-07 12:53:50 +00:00
florian
2f780a7a28 * fixes compilation of atmega128 unit
git-svn-id: trunk@18974 -
2011-09-04 19:39:39 +00:00
sergei
689d4b3ecc + Mantis #19651: Generate table of typed string constants which are initialized with resourcestrings, so they are updated when SetResourceStrings or SetUnitResourceStrings is called.
git-svn-id: trunk@18968 -
2011-09-04 16:01:26 +00:00
florian
dbd33fd6a5 * use thread var only if the target supports threading
git-svn-id: trunk@18967 -
2011-09-04 14:27:23 +00:00
florian
b17a9385e5 * use generic first_int_to_real 64 bit values on sparc
* compile part of softfpu into the system unit as consequence of using the generic first_int_to_real

git-svn-id: trunk@18961 -
2011-09-03 19:58:32 +00:00
marco
0cc60e05f2 * IsSamemonth analog to IsSameDay. Mantis #19876
git-svn-id: trunk@18950 -
2011-09-02 19:44:54 +00:00
pierre
f0aa48b083 * Remove use of direct U_UNIT_NAME or TC_UNIT_NAME
symbols in assembler sources.
  Added to corresponding system variables or typed constants a
  public name 'operatingsystem_XXX' alias and used that alias in assembler
  source.

git-svn-id: trunk@18943 -
2011-09-02 12:51:48 +00:00
pierre
a127c411b2 Use pulbic name aliases for argc,arg,envp used in assmebler files
git-svn-id: trunk@18942 -
2011-09-02 10:54:06 +00:00
marco
01d686c11d * paper size constants updated, patch by G. Fink, Mantis #20120
git-svn-id: trunk@18932 -
2011-09-01 08:40:51 +00:00
florian
0781ac1f82 + support for lpc1768 by David Welch
git-svn-id: trunk@18927 -
2011-08-31 20:17:23 +00:00
Tomas Hajny
55685d11b2 * fixes for FileExists and DirectoryExists
git-svn-id: trunk@18885 -
2011-08-28 22:22:29 +00:00
florian
e3e1e4b7c6 * fpc_LibInitializeUnits can be empty if the target has no shared lib support
git-svn-id: trunk@18871 -
2011-08-27 22:45:49 +00:00
florian
519df6d3a8 * fix compilation without exit code
git-svn-id: trunk@18870 -
2011-08-27 22:45:07 +00:00
florian
2c42d8e1e8 * be able to use feature fileio without feature random
git-svn-id: trunk@18869 -
2011-08-27 22:44:37 +00:00
florian
26a9bbbd13 * fix sysdir.inc dummy for embedded targets
git-svn-id: trunk@18868 -
2011-08-27 22:43:53 +00:00
florian
a683b7e9f1 * make IsLibrary a constant if the target has no dyn. lib support
git-svn-id: trunk@18867 -
2011-08-27 22:43:06 +00:00
florian
d21fde5604 * disable thumb2_bare for now
git-svn-id: trunk@18864 -
2011-08-27 21:20:33 +00:00
florian
34b033ba72 + armv4t
* use armv4t and armv7m, in the makefiles instead of armv7 and cortexm3

git-svn-id: trunk@18863 -
2011-08-27 20:21:42 +00:00
marco
9772257404 * fix for mantis #20047 ddeconnect VAR Parameter issue that can take NIL.
git-svn-id: trunk@18853 -
2011-08-26 13:16:37 +00:00
florian
a774f4681a * completed atmega128-Unit by Christian
git-svn-id: trunk@18849 -
2011-08-25 21:59:29 +00:00
florian
a08dfdf803 o slightly modified patch by John Clymer:
* converts the embedded information into controller specific records (arm and avr)
  * new cpu-specific units for several Stellaris (Fury and Tempest class) targets, 
  + STM32F103RB
  - old Stellaris unit has been removed

git-svn-id: trunk@18848 -
2011-08-25 21:46:26 +00:00
florian
e5c796e9fd * when compiling for arm-embedded, sub-arch is also passed to the compiler
+ compile cpu-specific rtl units depending on the sub-arch
* some makefiles regenerated

git-svn-id: trunk@18847 -
2011-08-25 21:41:08 +00:00
Tomas Hajny
7f7a4518f7 * FileExists fixed - wildcards not accepted any longer
git-svn-id: trunk@18846 -
2011-08-25 21:34:44 +00:00
Tomas Hajny
8952607ff0 * 64-bit versions of TFileStatus* and TFileFindBuf* types added
git-svn-id: trunk@18844 -
2011-08-25 21:19:44 +00:00
Tomas Hajny
6aecc69389 * FindFirst enhanced for file sizes >2 GB
git-svn-id: trunk@18843 -
2011-08-25 21:17:30 +00:00
florian
3ea50bf440 * fix USBMem as requested by Jeppe on IRC
git-svn-id: trunk@18804 -
2011-08-21 19:29:20 +00:00
florian
88c2c77319 + is_sse3_cpu, put into cpu unit, so x86-64 and i386 can share source code
git-svn-id: trunk@18785 -
2011-08-20 12:01:48 +00:00
florian
41f25c2b21 * fixes cmem.malloc et al. for windows as proposed by Ludo Brands, resolves #15571
git-svn-id: trunk@18256 -
2011-08-18 08:47:44 +00:00
florian
859757003f * fix SafeLoadLibrary: fixed defines, sse control word should be stored as well
git-svn-id: trunk@18255 -
2011-08-18 08:37:15 +00:00
florian
3e4469937c * fix Types.UnionRect as proposed by Piotr Karasinski, resolves #20006
git-svn-id: trunk@18246 -
2011-08-17 12:01:23 +00:00
florian
4c95e9fce5 * commented pdata type as proposed in #20004 by Michalis Kamburelis, resolves #20004
git-svn-id: trunk@18244 -
2011-08-17 11:47:41 +00:00
florian
ae8c250c3e * fix indention
git-svn-id: trunk@18238 -
2011-08-17 09:20:28 +00:00
florian
9b88297389 * patch by Michalis Kamburelis to keep the ending of TFPSList filled with zeros (space between count and capacity), resolves #20005
git-svn-id: trunk@18237 -
2011-08-17 09:05:58 +00:00
florian
0cc53cc5df + patch from Benito van der Zander to enable heaptrc to dump leaked or faulty memory blocks (function disabled by default), resolves #19691
git-svn-id: trunk@18231 -
2011-08-16 20:47:15 +00:00
pierre
1c2a5f9819 + Update all Makefile's modified by
change in utils/fpcm/fpcmake.ini in prevous commit.

  Adapt also other files to that change:

  * compiler/globals.pas: Replace $FPCTARGET by os_string if
  tf_use_8_3 flag is set for target_info also.

  * tests/Makefile.fpc: Modify TEST_TARGETSUFFIX in the same way
  as TARGETSUFFIX was modified in previous commit.

  * tests/utils/dotest.pp:
    + New variable UseOSOnly, set to true if only target OS name
    should be used for subdirectories.

git-svn-id: trunk@18228 -
2011-08-16 20:10:19 +00:00
florian
c32bc3a22a * patch by Nikolay Nikolov to support Alt-Tab and Ctrl-Tab on the linux console, resolves #19247
git-svn-id: trunk@18225 -
2011-08-16 18:58:50 +00:00
florian
b5ebe6307f * fix got loading si_c32, resolves #19520 (still uses the call/pop approach because it is faster on modern CPUs)
git-svn-id: trunk@18224 -
2011-08-16 18:45:39 +00:00
florian
6cb6d9ffaf * patch by Michalis Kamburelis to make FGL lists First and Last properties that are settable, resolves #19874
git-svn-id: trunk@18223 -
2011-08-16 17:11:48 +00:00
pierre
04a2d0bc94 * Handle -1 return if GetFileAttr call inside DirectoryExists
git-svn-id: trunk@18220 -
2011-08-16 15:01:20 +00:00
florian
8833c1cfa3 * patch by Petr-K to fix 3*3 matrix inversion, resolves #19828
+ tests

git-svn-id: trunk@18213 -
2011-08-14 21:46:47 +00:00
florian
e18aa6e208 * version update
git-svn-id: trunk@18212 -
2011-08-14 21:42:50 +00:00
florian
3787ed993c * made some fields in fgl.pp private as proposed by Michalis Kamburelis, resolves #19873
git-svn-id: trunk@18210 -
2011-08-14 19:52:01 +00:00
florian
63403e5199 * *Dir(<ansistring>) functions need to check io result as well, resolves #19977
git-svn-id: trunk@18209 -
2011-08-14 19:00:07 +00:00
florian
4a34192510 * fix TFPGList.Extract to return the correct values by a patch by Michalis Kamburelis, resolves #19960
git-svn-id: trunk@18205 -
2011-08-14 13:57:33 +00:00
michael
64514714c2 * Added invalid stream operation string constant
git-svn-id: trunk@18200 -
2011-08-13 21:19:45 +00:00
michael
96e5333dc2 * Added fakeSeekForward for benefit of descendant streams.
* Override GetSize/Position for memory/stringstream for efficiency
* Added InvalidSeek exception throwing. Should be overridden to throw custom exceptions.

git-svn-id: trunk@18190 -
2011-08-13 18:45:48 +00:00