summaryrefslogtreecommitdiff
path: root/rts/Linker.c
Commit message (Collapse)AuthorAgeFilesLines
...
* When dynamic-by-default, don't use the GHCi linkerIan Lynagh2012-10-131-0/+18
| | | | We instead link objects into a temporary DLL and dlopen that
* Produce new-style Cmm from the Cmm parserSimon Marlow2012-10-081-289/+288
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The main change here is that the Cmm parser now allows high-level cmm code with argument-passing and function calls. For example: foo ( gcptr a, bits32 b ) { if (b > 0) { // we can make tail calls passing arguments: jump stg_ap_0_fast(a); } return (x,y); } More details on the new cmm syntax are in Note [Syntax of .cmm files] in CmmParse.y. The old syntax is still more-or-less supported for those occasional code fragments that really need to explicitly manipulate the stack. However there are a couple of differences: it is now obligatory to give a list of live GlobalRegs on every jump, e.g. jump %ENTRY_CODE(Sp(0)) [R1]; Again, more details in Note [Syntax of .cmm files]. I have rewritten most of the .cmm files in the RTS into the new syntax, except for AutoApply.cmm which is generated by the genapply program: this file could be generated in the new syntax instead and would probably be better off for it, but I ran out of enthusiasm. Some other changes in this batch: - The PrimOp calling convention is gone, primops now use the ordinary NativeNodeCall convention. This means that primops and "foreign import prim" code must be written in high-level cmm, but they can now take more than 10 arguments. - CmmSink now does constant-folding (should fix #7219) - .cmm files now go through the cmmPipeline, and as a result we generate better code in many cases. All the object files generated for the RTS .cmm files are now smaller. Performance should be better too, but I haven't measured it yet. - RET_DYN frames are removed from the RTS, lots of code goes away - we now have some more canned GC points to cover unboxed-tuples with 2-4 pointers, which will reduce code size a little.
* More OS X build fixesIan Lynagh2012-09-141-2/+2
|
* Deprecate lnat, and use StgWord insteadSimon Marlow2012-09-071-4/+4
| | | | | | | | | | | | lnat was originally "long unsigned int" but we were using it when we wanted a 64-bit type on a 64-bit machine. This broke on Windows x64, where long == int == 32 bits. Using types of unspecified size is bad, but what we really wanted was a type with N bits on an N-bit machine. StgWord is exactly that. lnat was mentioned in some APIs that clients might be using (e.g. StackOverflowHook()), so we leave it defined but with a comment to say that it's deprecated.
* OS X: use mmap() instead of malloc for allocating the bss (#7040)Simon Marlow2012-08-211-0/+5
|
* add X86_64_GOTTPOFF relocation for errnoSimon Marlow2012-08-211-0/+25
| | | | Submitted by: Markus Pfeiffer <markus.pfeiffer@morphism.de> on cvs-ghc
* Export startProfTimer and stopProfTimer symbols.Paolo Capriotti2012-08-201-2/+3
| | | | This fixes unresolved symbols error when dynamically linking base.
* Merge branch 'master' of darcs.haskell.org:/srv/darcs//ghcIan Lynagh2012-08-131-4/+33
|\
| * Fix GHCi segfault during startup on linux-powerpc (#2972).Erik de Castro Lopo2012-08-131-4/+33
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Slightly modified version of a patch from Ben Collins <bcollins@ubuntu.com> who did the final debugging that showed the segfault was being caused the memory protection mechanism. Due to the requirement of "jump islands" to handle 24 bit relative jump offsets, GHCi on PowerPC did not use mmap to load object files like the other architectures. Instead, it allocated memory using malloc and fread to load the object code. However there is a quirk in the GNU libc malloc implementation. For memory regions over certain size (dynamic and configurable), malloc will use mmap to obtain the required memory instead of sbrk and malloc's call to mmap sets the memory readable and writable, but not executable. That means when GHCi loads code into a memory region that was mmapped instead of malloc-ed and tries to execute it we get a segfault. This solution drops the malloc/fread object loading in favour of using mmap and then puts the jump island for each object code module at the end of the mmaped region for that object. This patch may also be a solution on other ELF based powerpc systems but does not work on darwin-powerpc.
* | Follow RTS symbol changes in Linker.cIan Lynagh2012-08-101-0/+2
|/
* Fix compile on linux-powerpc64. (#7084).Erik de Castro Lopo2012-07-311-0/+2
|
* Add getGCStatsEnabled function.Paolo Capriotti2012-06-191-0/+1
|
* Build fix for Hurd.Paolo Capriotti2012-06-171-2/+2
| | | | | | Patch by Samuel Thibault. See http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=659530.
* Fix build on win64Ian Lynagh2012-06-161-0/+1
|
* Don't use 64-bit support functions on MIPS N32.Michał Masłowski2012-06-091-1/+1
| | | | | It uses native 64-bit instructions instead of these, despite having 32-bit pointers.
* Fix build on Win64Ian Lynagh2012-05-101-0/+1
|
* Don't pointlessly cast sizeof's result to size_tIan Lynagh2012-05-091-1/+1
|
* Merge branch 'master' of darcs.haskell.org:/srv/darcs//ghcIan Lynagh2012-05-081-2/+3
|\
| * Enable FileLock for win32 (#4363)Paolo Capriotti2012-05-081-2/+2
| |
| * Move getMonotonicUSec from base to the RTS.Paolo Capriotti2012-05-081-0/+1
| |
* | Add support for .text.startup sections to the LinkerIan Lynagh2012-05-071-0/+1
|/ | | | We get these in a full build on Win64
* Fix alignment when loading .a files on Win64Ian Lynagh2012-05-071-2/+17
|
* Test for misaligned sections, and fail if we find oneIan Lynagh2012-05-071-0/+4
|
* Fix RTS DLL references on Win64Ian Lynagh2012-05-061-1/+5
|
* Working towards fixing DLLs on Win64Ian Lynagh2012-05-061-2/+2
|
* Add _getpid to rtsSyms on Win64Ian Lynagh2012-05-031-0/+1
|
* More Win64 ghci fixesIan Lynagh2012-05-021-0/+161
|
* Win64 Linker improvementsIan Lynagh2012-05-021-4/+49
| | | | | | | We now detect if we are given a value that is out of range for a 32bit relocation, and fail with an error. Added a load more symbols to rtsSyms.
* Add 'free' to the list of rtsSyms on Win64Ian Lynagh2012-05-021-0/+1
| | | | | | | | | | Without this, we ended up using (gdb) info symbol 0x7ff756a10ac msvcrt!free in section .text of C:\Windows\system32\msvcrt.dll for free, rather than (gdb) info symbol 0x2584128 free in section .text of C:\m64\ghci2\q/../inplace/bin/ghc-stage2.exe but we were trying to put the address into a 32bit relocation.
* Tell checkProddableBlock how many bytes we want to writeIan Lynagh2012-05-011-18/+23
| | | | | | | | | It doesn't suffice for checkProddableBlock to just check whether the largest possible write could be made at the address we are writing, as if we are making a smaller write then checkProddableBlock may conservatively think we will write off the end of the block. Thus we now tell checkProddableBlock how many bytes we will write.
* Revert "Revert "More Win32 build fixes""Ian Lynagh2012-05-011-27/+27
| | | | This reverts commit 29cd6f435f2afb332ad8faf39f5e920ff9c38d9a.
* Revert "Revert "Fix build of rts/Linker.c on Win32""Ian Lynagh2012-05-011-22/+28
| | | | This reverts commit 02cf6d6f71b5772aa4ddf1b70c192a802886e2c2.
* Revert "Revert "Get GHCi working on Win64""Ian Lynagh2012-05-011-35/+116
| | | | This reverts commit 27e585bda6ae8ab68f58abdcb9e06806414a6636.
* Revert "Get GHCi working on Win64"Manuel M T Chakravarty2012-05-011-116/+35
| | | | This reverts commit 05b55c670c7fe3fc01827ca02aafb6926c0b69cb.
* Revert "Fix build of rts/Linker.c on Win32"Manuel M T Chakravarty2012-05-011-28/+22
| | | | This reverts commit 0042c478f1169ddd9392fb39de7d0aed865a272e.
* Revert "More Win32 build fixes"Manuel M T Chakravarty2012-05-011-27/+27
| | | | This reverts commit e89ef70475fa5e9cf17af01b1b5d7fced0d2e13c.
* More Win32 build fixesIan Lynagh2012-04-301-27/+27
|
* Fixes for x86/LinuxIan Lynagh2012-04-301-4/+4
|
* Fix build of rts/Linker.c on Win32Ian Lynagh2012-04-301-22/+28
|
* Get GHCi working on Win64Ian Lynagh2012-04-301-35/+116
|
* Merge branch 'master' of darcs.haskell.org:/srv/darcs//ghcIan Lynagh2012-04-271-0/+1
|\
| * Add a new primop mkWeakNoFinalizer (#5879)Simon Marlow2012-04-271-0/+1
| |
* | Win32 build fixIan Lynagh2012-04-271-2/+2
| |
* | Fix warnings on Win64Ian Lynagh2012-04-261-8/+24
|/ | | | | | Mostly this meant getting pointer<->int conversions to use the right sizes. lnat is now size_t, rather than unsigned long, as that seems a better match for how it's used.
* Add symbol declaration for __fixunsdfdi in the linker.Paolo Capriotti2012-04-241-1/+2
|
* Add linker support for ELF on ARMBen Gamari2012-03-301-9/+336
| | | | | | | | | | | | | | | | | | | | | | | Add support for ELF objects on ARM to the runtime linker. While the list of relocation types in the "ELF for the ARM Architecture" specification spans four pages, we thankfully only see a handful of these in the wild. Thus, at the moment we only support the following .rel relocation types, * R_ARM_ABS32 * R_ARM_TARGET1 * R_ARM_REL32 * R_ARM_CALL * R_ARM_JUMP24 * R_ARM_MOVT_ABS * R_ARM_MOVW_ABS_NC * R_ARM_THM_CALL * R_ARM_THM_JUMP24 * R_ARM_THM_MOVT_ABS * R_ARM_THM_MOVW_ABS_NC * R_ARM_THM_JUMP8 * R_ARM_THM_JUMP11 Signed-off-by: Ben Gamari <bgamari.foss@gmail.com>
* Soem more Wind64 fixesIan Lynagh2012-03-161-15/+22
| | | | | We may need to do this differently once we get as far as building the RTS in the dyn ways.
* check for failed external symbol lookups (partial fix for #5748)Gregory Wright2012-01-111-15/+81
|
* Make the RTS linker API use wide-char pathnames on Windows (#5697)Simon Marlow2012-01-091-53/+83
| | | | | I haven't been able to test whether this works or not due to #5754, but at least it doesn't appear to break anything.
* Define getNumberOfProcessors() even when !THREADED_RTSSimon Marlow2011-12-071-0/+1
|