summaryrefslogtreecommitdiff
path: root/sys/src/cmd/6l
AgeCommit message (Collapse)Author
2020-12-29cc: add a couple notes to the comments regarding flagsBurnZeZ
2020-05-12cc: dont export gethunk(), hunk, nhunk and thunkcinap_lenrek
2020-05-12?l: remove direct hunk manipulation from linkers, just call malloc()cinap_lenrek
as with recent changes, cc's malloc() could make the hunk pointer misaligned. in the the compilers, the hunk pointer is used directly by the lexer with no effort to to keep the hunk pointer aligned. alloc/malloc still return aligned pointers, but hunk itself can be on a odd address after allocation of a odd sized amount of bytes. however, in the linkers, this assumption appears to be differnet. as most allocations mostly allocate padded structures. however, symbol lookup allocates strings on byte-size ganularity and the cc's malloc would misalign the hunk pointer after the malloc() call. while the rest of the code assumed hunk pointer was always aligned. this change removes all the hunk pointer fiddling from the linker, and we just call malloc() (which will use the fast implmenentation of cc, and should not really make much of a performance difference).
2020-04-11cc, ?[acl]: fix gethunk() and move common memory allocator code to cc/compatcinap_lenrek
for gethunk() to work, all allocators have to use it, including allocations done by libc thru malloc(), so the fake allocation functions are mandatory for everyone. to avoid duplication the code is moved to cc/compat and prototypes provided in new cc/compat.h header.
2020-04-11backout the gethunk() again, as that breaks the assemblerscinap_lenrek
the assemblers share gethunk() cc/macbody but are compiled without compat.c, so calls such as getenv() trigger malloc() which does its own sbrk() calls, breaking the continuity of the hunk. so this change needs another revision. until then, this is backed out.
2020-04-10cc, ?l: fix gethunk() to actually grow allocationcinap_lenrek
the compilers and linkers use ther own memory allocator. free memory is between hunk and hunk+nhunk. allocation works by checking if nhunk is bigger or equal to the amount needed, and if not, repeatedly call gethunk() until there is. after that, the allocated amount is added from hunk and subtracted from nhunk by the user. the problem was when the needed amount was bigger than the default NHUNK size gethunk() allocates per call. gethunk() would not actually grow nhunk, but instead just set hunk and nhunk variables to the last allocated block. this resulted in a infinite loop of calls to gethunk() until sbrk() would hit the maximum size for the BSS segment. this change makes gethunk() actually grow the hunk space, increasing nhunk, and only updating hunk when nhunk was previously zero. we assume that mysbrk() retuns increasing addresses and that the space between the previous hunk+nhunk and the new block base returned by mysbrk() is usable.
2020-04-10cc, ?a, ?l: change thunk type to uintptrSigrid
2019-08-288l, 6l: fix "unknown relation: TEXT" xfol() bug (thanks mischief)cinap_lenrek
mischief reports: this assembler input assembles with 6a but makes 6l crash. // 6a l.s // 6l l.6 // _intrr: unknown relation: TEXT in _intrr // 6l 511: suicide: sys: trap: fault write addr=0x18 pc=0x20789c TEXT noteret(SB), 1, $-4 CLI JMP _intrestore // works when commented TEXT _intrr(SB), 1, $-4 _intrestore: RET TEXT _main(SB), 1, $-4 RET
2017-11-196l: fix typo in optab table for APSLLQ (0x7e -> 0x73)cinap_lenrek
2017-06-198l, 6l: get .frame offset right undoing $-4 hackcinap_lenrek
2017-06-116l: support MOV to/from DR[1-3]aiju
2017-03-195l,6l,8l,kl,ql,vl: allow duplicate GLOBAL symbols (from Ori Bernstein)cinap_lenrek
The plan 9 assemblers support the DUPOK flag on text symbols. They parse and ignore it on GLOBL symbols. This patch makes it work in the linkers. The reason I ran into this is because my programming language (Myrddin) uses data symbols to generate type information, and it's useful to avoid duplicating all of the type info in every file that gets generated.
2015-08-166l: fix vlong byte order when running on big endian machine (thanks erik ↵cinap_lenrek
quanstro)
2015-02-176l: no need to emit rex.w prefix for MOVBQZX and MOVWQZXcinap_lenrek
as with 32 bit operand size, the upper bits 63:32 are automatically zeroed in 64bit mode. this gives a shoter instruction encoding.
2015-02-17[125678kqv][cl]: fix sprint() and strcpy() buffer overflowscinap_lenrek
2014-05-306a, 6c, 6l: fix copy propagationAram Hăvărneanu
Without an explicit signal for a truncation, copy propagation will sometimes propagate a 32-bit truncation and end up overwriting uses of the original 64-bit value. This was independently discovered and fixed in Go. See: http://golang.org/issue/1315 https://codereview.appspot.com/6002043/ Thanks Charles Forsyth for tips and advice.
2014-02-016l: fix warning, setmalloctag declaration, missing header type casescinap_lenrek
2013-02-016l: eleminate NOP X0 instructions (from eriks 6l-nop-x0 patch)cinap_lenrek
erik found that -N left NOPs in that 6l couldn't ignore. add Xn to the NOP table. bonanza; cat > fp.c #include <u.h> #include <libc.h> #include <stdio.h> void main(void) { double g; g = -0.; print("%g\n", g); printf("%g\n", g); exits(""); } bonanza; 6c -N -FVTw fp.c bonanza; 6l -o 6.fp fp.6 main: doasm: notfound from=6f to=34 (939) NOP ,X0 main: doasm: notfound from=6f to=34 (939) NOP ,X0 main: doasm: notfound from=6f to=34 (939) NOP ,X0
2012-12-106l: fix wrong opcode for MOVLQZX (import from sources)cinap_lenrek
2012-09-186c: extern register fix (import from patch/6c-extreg)cinap_lenrek
to make it easy to use normal libraries (such as libdraw, libsec, and libmp) with the kernel, which uses extern register, don't stray into the external register set when allocating values to registers.
2012-07-30import updated compilers from sourcescinap_lenrek