Commit Graph

726 Commits

Author SHA1 Message Date
sergei
af4935e346 + Support dynamic copy relocations.
* For unresolved weak symbols, provide dynamic binding only if they are referenced via GOT or PLT (ld-compatible behavior).
* Made more TElfExeOutput properties/methods usable by descendant classes.
* x86_64/cpuelf.pas: some refactoring, handle DTPOFF relocations, prohibit TPOFF relocations in shared objects.
* i386/cpuelf.pas: set symref_from_text flags for copy relocations to work correctly.

git-svn-id: trunk@23375 -
2013-01-13 17:44:14 +00:00
sergei
b197919953 * Handle relocation section prefixes (.rel/.rela) in internal linker script based on ElfTarget.relocs_use_addend, getting rid of $ifdef's.
+ Linker script adjustments for ARM target.

git-svn-id: trunk@23338 -
2013-01-07 15:13:05 +00:00
florian
318f0e5cab * enable section smartlinking for powerpc-linux to reduce compilation
times, some testing with qemu-ppc showed no problems

git-svn-id: trunk@23305 -
2013-01-03 23:04:29 +00:00
pierre
1dd964960c * Enable use of amd64 ld GNU linker for i386 by adding target and emul command line args for freebsd
git-svn-id: trunk@23282 -
2013-01-01 23:00:02 +00:00
Károly Balogh
8fe2828e5a it seems Coldfire needs tf_requires_proper_alignment, fixes taddr1/2 tests, maybe others too (but someone with clue about RTTI should confirm)
git-svn-id: trunk@23270 -
2013-01-01 04:51:47 +00:00
pierre
ab52c48520 Add DynLinkStr support
git-svn-id: trunk@23180 -
2012-12-18 15:08:59 +00:00
sergei
0196c62ee8 + Initial work to support versions of ELF dynamic symbols.
git-svn-id: trunk@23170 -
2012-12-18 08:25:57 +00:00
sergei
73030ddb57 + Support smart-linked .rdata section with external linker for Windows targets after r23025.
git-svn-id: trunk@23084 -
2012-12-01 15:04:23 +00:00
pierre
93b2c1a717 Use dwarf2 as default debug format for Win64 target OS
git-svn-id: trunk@23081 -
2012-11-29 14:20:13 +00:00
sergei
a7e7d97da6 * ELF linker: fixed written values of STT_TLS symbols, they must be relative to PT_TLS segment address.
* Made name of dynamic interpreter variable, it is now set correctly for each target.
- Removed setting header flags for ARM. This functionality belongs to CPU-specific unit anyway, and probably must be implemented using object attributes in modern ABIs.

git-svn-id: trunk@23032 -
2012-11-19 09:07:45 +00:00
sergei
49501413e1 + Support library grouping in internal linker script, use it to load C libraries.
git-svn-id: trunk@22962 -
2012-11-09 14:38:11 +00:00
Jonas Maebe
cf717c4b75 * use -iphone_os_min rather than -ios_version_min, because the former
(older) version of the parameter is still supported by current linker
    versions, but the older version isn't supported by older linker
    versions

git-svn-id: trunk@22954 -
2012-11-08 20:17:42 +00:00
Tomas Hajny
c5ad42e82f * fix for missing space in emxbind parameters for resource files linking
git-svn-id: trunk@22854 -
2012-10-26 20:52:53 +00:00
Tomas Hajny
9a935fb172 * fix for missing space in emxbind parameters for resource files linking
git-svn-id: trunk@22853 -
2012-10-26 20:52:11 +00:00
sergei
f94ba86bb9 * ModulesLinkToLibc: another fix. We also have to look in ImportLibraryList because items contained there aren't yet merged into linkothersharedlibs when this function is called.
git-svn-id: trunk@22831 -
2012-10-23 14:51:35 +00:00
florian
04543b179f o merge of the branch laksen/arm-embedded of Jeppe Johansen:
fixes a couple of arm-embedded stuff, 
  adds some controllers, start of fpv4_s16 support, for a complete list of
  changes see below:
------------------------------------------------------------------------
r22787 | laksen | 2012-10-20 22:00:36 +0200 (Sa, 20 Okt 2012) | 1 line

Properly do NR_DEFAULTFLAGS detection/allocation/deallocation
------------------------------------------------------------------------
r22782 | laksen | 2012-10-20 07:44:55 +0200 (Sa, 20 Okt 2012) | 1 line

Fixed flags detections code for wide->short optimization code for Thumb-2
------------------------------------------------------------------------
r22778 | laksen | 2012-10-19 20:23:14 +0200 (Fr, 19 Okt 2012) | 1 line

Added coprocessor registers, and support for 6 operands(MCR/MRC instructions, etc)
------------------------------------------------------------------------
r22647 | laksen | 2012-10-14 21:28:08 +0200 (So, 14 Okt 2012) | 1 line

Added register specifications to lpc1768.pp. From Joan Duran
------------------------------------------------------------------------
r22646 | laksen | 2012-10-14 21:10:20 +0200 (So, 14 Okt 2012) | 4 lines

Fixed some minor formating issues
Implemented a small heap mananger
Implemented console IO
Changed default LineEnding to CrLf(to ease console IO parsing)
------------------------------------------------------------------------
r22599 | laksen | 2012-10-09 08:58:58 +0200 (Di, 09 Okt 2012) | 1 line

Added all STM32F1 configurations
------------------------------------------------------------------------
r22597 | laksen | 2012-10-08 22:10:45 +0200 (Mo, 08 Okt 2012) | 1 line

Added initial support for the Cortex-M4F FPv4_S16 FPU
------------------------------------------------------------------------
r22596 | laksen | 2012-10-08 22:04:14 +0200 (Mo, 08 Okt 2012) | 1 line

Added FPv4_d16 FPU instructions, and a few extra registers
------------------------------------------------------------------------
r22592 | laksen | 2012-10-08 16:07:40 +0200 (Mo, 08 Okt 2012) | 2 lines

Added support for IT block merging
Added a peephole pattern check for UXTB->UXTH chains
------------------------------------------------------------------------
r22590 | laksen | 2012-10-08 14:30:00 +0200 (Mo, 08 Okt 2012) | 3 lines

Add CBNZ/CBZ instructions
Create preliminary Thumb-2 PeepHoleOptPass2 code, hacked together from the ARM mode code
Added a number of simple size optimizations for common Thumb-2 instructions
------------------------------------------------------------------------
r22582 | laksen | 2012-10-08 06:49:39 +0200 (Mo, 08 Okt 2012) | 3 lines

Fix optimizations of Thumb-2 code
Fix problem with loading of condition operand for IT instructions
Properly split IT blocks when register allocator tries to spill inside a block.
------------------------------------------------------------------------
r22581 | laksen | 2012-10-08 05:15:40 +0200 (Mo, 08 Okt 2012) | 4 lines

Fixed assembler calling command line for cpus>ARMv5TE. EDSP instructions will generate errors while assembling, due to RTL assembler routines
Updated boot code for all Cortex-M3 controllers, and sc32442b to use weak linking for exception tables.
Cortex-M3 devices now also share initialization routine to simplify maintenance
STM32F10x classes now have specific units which fit the interrupt source names and counts
------------------------------------------------------------------------
r22580 | laksen | 2012-10-08 05:10:44 +0200 (Mo, 08 Okt 2012) | 2 lines

Added support for .section, .set, .weak, and .thumb_set directive for GAS assembler reader
IFDEF'ed JVM specific assembler directives, to prevent ait_* set to exceed 32 elements
------------------------------------------------------------------------
r22579 | laksen | 2012-10-08 02:10:52 +0200 (Mo, 08 Okt 2012) | 3 lines

Remove all traces of the interrupt vector table generation mechanism
Clean up cpuinfo tables
Fixed ARMv7M bug(BLX <label> doesn't exist on that version)

git-svn-id: trunk@22792 -
2012-10-21 08:39:52 +00:00
sergei
6d70009f06 + ELF linker. Works on x86_64-linux and i386-linux good enough to pass the testsuite, but still requires a lot of work in nearly all aspects. In particular, no attempt to resolve symbols from shared libs is done, everything is just treated as imports. Symbol versioning isn't supported either.
x86_64 is the most elaborated, has some degree of indirect function (GNU_IFUNC) and TLS support, so it is even able to link with static libc/pthreads code (tw14265) and produce an executable that can launch (but still fails due to invalid DWARF unwind info).

i386 produces working shared libraries if they are compiled with -Cg, without one your mileage may vary. tw14265 does not link yet due to missing COMDAT group support.

git-svn-id: trunk@22775 -
2012-10-19 17:21:08 +00:00
sergei
0e8829e4e2 * ModulesLinkToLibc: Search for both bare and prefixed names of libc. When this function is invoked, import library names are not yet normalized and either one may be present. Failure to detect libc may end up in using wrong sysinit unit, this fortunately affects only i386-linux (other Linux targets aren't using Pascal sysinit units yet).
git-svn-id: trunk@22620 -
2012-10-12 20:47:07 +00:00
pierre
714bb61b51 Set res field to res_elf for linux mips/mipsel systems
git-svn-id: trunk@22605 -
2012-10-09 14:10:23 +00:00
Jeppe Johansen
14879a9e82 Added all STM32F1 configurations
git-svn-id: branches/laksen/arm-embedded@22599 -
2012-10-09 06:58:58 +00:00
pierre
e2f5e11778 Add tf_pic_uses_got for sparc linux and sparc solaris
git-svn-id: trunk@22485 -
2012-09-27 15:54:21 +00:00
tom_at_work
f5ddc02a5c + add debian armel library search path
+ for armhf, use the more canonical ld-linux-armhf.so.3 as defdynlinker

git-svn-id: trunk@22416 -
2012-09-17 21:13:37 +00:00
Jonas Maebe
bd31004fdb + describe for each supported target the default guaranteed stack alignment
git-svn-id: trunk@22278 -
2012-09-02 14:32:12 +00:00
pierre
f1687fe8a6 Do not include CPUMIPS32 in extradefines for mips/mipsel systems as it is added in options unit
Do not include MIPSEL in extradefines for system_mipsel_linux as this forbids cross-compilation

git-svn-id: trunk@22263 -
2012-08-28 13:51:29 +00:00
florian
ad3aa937d3 * respect Dontlinkstdlibpath when adding a default library search path
git-svn-id: trunk@22011 -
2012-08-04 17:29:07 +00:00
florian
2b6fc9b1ee + at least raspian has no soft links in /usr/lib to crt*.o, so add their location to the search path
git-svn-id: trunk@22004 -
2012-08-04 08:16:02 +00:00
sergei
2638bc01d9 * Fixed error introduced in r21732. For libraries, startup is always dllprt0.o, regardless of profiling/linking to libc. Mantis #22397.
git-svn-id: trunk@21824 -
2012-07-09 12:18:34 +00:00
sergei
1a25aed68d * Renamed a method for consistency (let script building methods start with ScriptAdd).
git-svn-id: trunk@21814 -
2012-07-07 22:49:05 +00:00
pierre
0a21c01737 Use 8 for max record alignment for mips/mipsel
git-svn-id: trunk@21782 -
2012-07-04 16:34:51 +00:00
sergei
32e399159f * Factored common parts that can be/should be reused in the internal linker.
git-svn-id: trunk@21732 -
2012-06-28 20:21:17 +00:00
sergei
346fbef445 * Factored a common linker script building block into separate method.
git-svn-id: trunk@21730 -
2012-06-28 17:18:02 +00:00
pierre
d2dc860b1b Use 4 for mips(eb/el) recordalignmax field
git-svn-id: trunk@21669 -
2012-06-21 11:49:49 +00:00
pierre
ca497405b8 Avoid double call to set_source_info for mipsel
git-svn-id: trunk@21614 -
2012-06-14 15:51:49 +00:00
pierre
600dd162af Merge of rev21557 by Foxsen
Make macro MIPS/CPUMIPS/MIPS32 common for big endian and little endian mips processors
use MIPSEL* for little endian systems
use MIPSEB* for big endian systems

git-svn-id: trunk@21599 -
2012-06-13 22:25:38 +00:00
pierre
9fc6f91cd0 Set correct source info for mips/mipsel
git-svn-id: trunk@21545 -
2012-06-08 10:07:46 +00:00
pierre
ac38901d2a * Patch from Fuxin Zhang: set first_pram_offset to 0 for mips and mipsel CPUs
git-svn-id: trunk@21534 -
2012-06-07 23:11:16 +00:00
pierre
069cd9f250 Fix go32v2 staticClibprefix used by internal linker
git-svn-id: trunk@21442 -
2012-05-31 09:34:53 +00:00
sergei
3a89544cd6 + Internal linker for go32v2:
* Enable smart linking on go32v2
  * Adapted external linker script for long section names (ld 2.17 from fpcbuild repository does not seem to actually remove unused sections though)
  * Do not pass '-lc' twice to external linker
  * Pass -Map with correct filename to external linker if -Xm is specified on command line
  * Debug sections for DJCOFF must have zero memory position and flag COFF_STYP_INFO (not COFF_STYP_NOLOAD).

git-svn-id: trunk@21435 -
2012-05-30 13:45:36 +00:00
sergei
6571b4d140 * Factored code to create internal link script for debug sections into a separate procedure.
git-svn-id: trunk@21410 -
2012-05-28 13:28:21 +00:00
Jonas Maebe
c27f9da1b2 * always surround ld link.res SEARCH_DIR() arguments with double quotes,
rather than with single/double quotes depending on the target platform
    (ld only supports double quotes), and rather than only quoting when
    necessary (wastes time since quotes are always allowed, and double
    quotes inside a directory name cannot be escaped for ld; they are
    simply not supported by the program) (mantis #22059, follow-up to
    r21069 and r21208)

git-svn-id: trunk@21343 -
2012-05-20 13:30:51 +00:00
Jonas Maebe
ccf895af5a * link.res is a real linkerscript when we target binutils, not when we
target the AIX linker
  * never quote file names added to link.res when it's not a linkerscript
    (only newline is a separator in the case)

git-svn-id: trunk@21342 -
2012-05-20 13:30:42 +00:00
Jonas Maebe
0841ee6e4f * GNU ld only supports double quotes in its response file -> requote there
as well under Unix (mantis #21928, caused by r21069)

git-svn-id: trunk@21208 -
2012-05-03 12:41:16 +00:00
Jonas Maebe
14cfe770a4 * replaced most (if not all) remaining fields/parameters in the compiler
that deal with paths/filenames with TPathStr (= ansistring) to prevent
    cutting off long paths (no change in speed when compiling the compiler,
    1% extra memory usage)

git-svn-id: trunk@21120 -
2012-04-29 17:36:23 +00:00
Jonas Maebe
834026bfb5 * synchronised with trunk up to r21067
git-svn-id: branches/jvmbackend@21068 -
2012-04-26 21:24:20 +00:00
Jonas Maebe
cecdff01e0 * corrected sharedClibext for AIX/ppc32
git-svn-id: trunk@21048 -
2012-04-25 20:28:09 +00:00
Jonas Maebe
52d1172f6d * correctly call assembler for AIX/ppc64
* corrected target flags for AIX/ppc64
  * corrected some file extensions for AIX/ppc64

git-svn-id: trunk@21047 -
2012-04-25 20:28:05 +00:00
Jonas Maebe
6502717e67 * align all code/data sections to sizeof(pint), instead of sometimes
to 0 or 1 (section alignment <> alignment of individual data
    elements in section on some platforms, such as AIX)
  * set constalignmin and varalignmin to 8 bytes for AIX/ppc64

git-svn-id: trunk@21044 -
2012-04-25 20:27:41 +00:00
pierre
f0afaef920 Use linux/i386 aligmnents for NetBSD/OpenBSD i386
git-svn-id: trunk@20937 -
2012-04-20 12:09:41 +00:00
Jonas Maebe
aee5380ae0 * merged trunk up to r20882
o support for the new codepage-aware ansistrings in the jvm branch
   o empty ansistrings are now always represented by a nil pointer rather than
     by an empty string, because an empty string also has a code page which
     can confuse code (although this will make ansistrings harder to use
     in Java code)
   o more string helpers code shared between the general and jvm rtl
   o support for indexbyte/word in the jvm rtl (warning: first parameter
     is an open array rather than an untyped parameter there, so
     indexchar(pcharvar^,10,0) will be equivalent to
     indexchar[pcharvar^],10,0) there, which is different from what is
     intended; changing it to an untyped parameter wouldn't help though)
   o default() support is not yet complete
   o calling fpcres is currently broken due to limitations in
     sysutils.executeprocess() regarding handling unix quoting and
     the compiler using the same command lines for scripts and directly
     calling external programs
   o compiling the Java compiler currently requires adding ALLOW_WARNINGS=1
     to the make command line

git-svn-id: branches/jvmbackend@20887 -
2012-04-15 15:54:10 +00:00
florian
4b7748ad11 * better suitable on x86_64-linux
git-svn-id: trunk@20876 -
2012-04-14 20:09:31 +00:00