H. Peter Anvin [Tue, 7 Apr 2009 02:12:34 +0000 (19:12 -0700)]
nasm.nsi: add NASM Manual; automate version generation
Add the NASM Manual (as a PDF) to the Windows installer, and abstract
out the version number.
Shao Miller [Tue, 7 Apr 2009 02:07:37 +0000 (19:07 -0700)]
Add NSIS script to make a Windows installer
Here is an NSIS script for making a simple NASM package. It creates a
NASM folder with some of the important binaries in it, as well as a
simple batch file to get a CLI with the NASM folder included in the
PATH. Expects to be built from inside the bin/ directory. Fairly
primitive. Feedback welcome. - Shao
Victor van den Elzen [Sun, 29 Mar 2009 01:09:13 +0000 (03:09 +0200)]
Add STRUC change to changes.src
Victor van den Elzen [Fri, 27 Mar 2009 02:53:59 +0000 (03:53 +0100)]
FR 2499968: structures with non-zero base offset
Add an optional second argument to struc, document it and test it.
Also removed trailing whitespace in nasmdoc.src in the process.
H. Peter Anvin [Thu, 19 Mar 2009 13:52:07 +0000 (06:52 -0700)]
disasm: fix reversed REP vs REPNE in eatbyte()
F2 is REPNE, F3 is REP(E)
H. Peter Anvin [Thu, 19 Mar 2009 06:10:19 +0000 (23:10 -0700)]
disasm: when no instruction is found, consider a naked prefix
If we can't find a matching instruction, rather than printing it as a
"db" literal, consider first if we can disassemble it as a naked prefix.
H. Peter Anvin [Wed, 18 Mar 2009 23:21:45 +0000 (16:21 -0700)]
NASM 2.06rc8
Andy Polyakov [Wed, 18 Mar 2009 21:49:23 +0000 (14:49 -0700)]
outcoff: BR 2685756: fix SAFESEH with an internal symbol
Fix the SAFESEH directive for the specific case of a symbol internal
to the program. With the optimizer enabled, it would otherwise fail
unless the symbol is external.
Michael Scherer [Wed, 18 Mar 2009 21:26:29 +0000 (22:26 +0100)]
outelf32/64: fix uninitialized rbtree
Fix crash caused by uninitialised memory that lead to dangling pointer
in the rbtree. This can be seen by compiling zsnes 1.50, with a file
that define many symbols, such as fxemu2c.asm.
H. Peter Anvin [Wed, 18 Mar 2009 01:26:47 +0000 (18:26 -0700)]
BR 2690688: Fix opcodes for FMA instructions
Two bugs with respect to the FMA instructions:
- the variant increment is supposed to be 0x10, not 0x01.
- the base opcode for scalar VFNMADD is 0x9d, not 0x9c
H. Peter Anvin [Tue, 17 Mar 2009 23:18:41 +0000 (16:18 -0700)]
Add test from BR 2690688
Add the test case from BR 2690688 to the test collection.
H. Peter Anvin [Tue, 17 Mar 2009 23:13:10 +0000 (16:13 -0700)]
BR 2690688: add missing VFM instructions
The Perl script which auto-generated the VFM instructions had
incorrectly conflated the VEX.W and VEX.L bits, with the result that
only half the valid instructions were generated.
H. Peter Anvin [Mon, 16 Mar 2009 23:32:42 +0000 (16:32 -0700)]
BR 2689316: PEXTRQ requires REX.W
The PEXTRQ instruction requires a REX.W prefix.
H. Peter Anvin [Mon, 16 Mar 2009 18:51:07 +0000 (11:51 -0700)]
genfma: fix spelling of the VFNM instructions
Fix the spelling of the scalar VFNM instruction in genfma.pl, too,
just in case we need to pull this script out again...
H. Peter Anvin [Mon, 16 Mar 2009 18:49:27 +0000 (11:49 -0700)]
insns.dat: fix VFNM instructions incorrectly spelled as VFMN
The scalar versions of the VFNM instructions had been incorrectly
spelled VFMN.
H. Peter Anvin [Sun, 15 Mar 2009 21:38:54 +0000 (14:38 -0700)]
NASM 2.06rc7
H. Peter Anvin [Sun, 8 Mar 2009 05:54:31 +0000 (21:54 -0800)]
BR 2672117: handle long lines for db/dw/etc.
Handle long arrays on a single line in db/dw/etc.
H. Peter Anvin [Sun, 1 Mar 2009 21:57:40 +0000 (13:57 -0800)]
autoconf: detect the broken bool in OpenWatcom 1.8
OpenWatcom 1.8 has a C99 mode, which implements _Bool and
<stdbool.h>. Unfortunately the implementation is broken, and doesn't
let _Bool be implicitly converted to integer (as required by the C99
spec). Detect this case in autoconf.
H. Peter Anvin [Sun, 1 Mar 2009 08:22:16 +0000 (00:22 -0800)]
Most instruction codes are octal, so print errors that way too
Most of our instruction opcodes are written in octal. Thus, it makes
sense to print them that way if we ever have an error message.
H. Peter Anvin [Fri, 27 Feb 2009 00:37:55 +0000 (16:37 -0800)]
optimization.asm: more sbyte tests
A few more sbyte optimization tests.
H. Peter Anvin [Fri, 27 Feb 2009 00:34:56 +0000 (16:34 -0800)]
sbyte: optimization is OK if UNKNOWN isn't set
We can optimize the sbytes if the UNKNOWN flag isn't set
H. Peter Anvin [Fri, 27 Feb 2009 00:34:07 +0000 (16:34 -0800)]
optimization.asm: add sbyte tests
H. Peter Anvin [Thu, 26 Feb 2009 22:58:06 +0000 (14:58 -0800)]
NASM 2.06rc6
H. Peter Anvin [Thu, 26 Feb 2009 22:48:03 +0000 (14:48 -0800)]
BR 2413265: don't pessimize displacements
Optimize displacements, don't pessimize them. When running in the
optimizer, we always keep track of when a reference is forward. That
doesn't mean it is unknown.
H. Peter Anvin [Thu, 26 Feb 2009 22:47:17 +0000 (14:47 -0800)]
optimization.asm: add EA optimization tests
Add tests for EA optimizations
H. Peter Anvin [Thu, 26 Feb 2009 22:36:19 +0000 (14:36 -0800)]
nasm.c: another readability cleanup
Yet another change for readability
H. Peter Anvin [Thu, 26 Feb 2009 22:34:48 +0000 (14:34 -0800)]
nasm.c: readability cleanup for seg:off parsing
The code to pick apart seg:off in nasm.c was virtually unreadable due
to mechanized line breaking.
Victor van den Elzen [Wed, 25 Feb 2009 16:49:23 +0000 (17:49 +0100)]
Rename convergence.asm to optimization.asm
Victor van den Elzen [Wed, 25 Feb 2009 16:32:00 +0000 (17:32 +0100)]
Do not confuse segmentless adresses and unknown forward references
Also be optimistic with immediate forward references.
H. Peter Anvin [Tue, 24 Feb 2009 02:27:29 +0000 (18:27 -0800)]
Add VPCLMUL instructions
H. Peter Anvin [Tue, 24 Feb 2009 01:51:25 +0000 (17:51 -0800)]
assemble: only be optimistic with NO_SEG if we're really in pass 1
Only be optimistic about the reachability of a symbol with NO_SEG if
we are truly in pass 1, i.e. it could possibly be just a forward
reference. After we have done a single pass, if it is still NO_SEG,
then it is an absolute symbol and need to be treated as such.
H. Peter Anvin [Tue, 24 Feb 2009 01:47:25 +0000 (17:47 -0800)]
convergence.asm: add test of jmp to an absolute address
A JMP to an absolute address can't be short. Thus, we must not try to
make it so.
Victor van den Elzen [Mon, 23 Feb 2009 04:16:35 +0000 (05:16 +0100)]
Add test file for optimal convergence
Some edge cases where starting with a long form
converges suboptimally.
Victor van den Elzen [Mon, 23 Feb 2009 03:35:00 +0000 (04:35 +0100)]
BR 2420167: jmp not always optimized
Begin by assuming short jumps are possible to prevent suboptimal convergence.
H. Peter Anvin [Sun, 22 Feb 2009 04:45:42 +0000 (20:45 -0800)]
PCLMUL is apparently targeted for Westmere with the AES stuff
The PCLMUL instruction is apparently targetted for Westmere.
H. Peter Anvin [Sun, 22 Feb 2009 03:02:58 +0000 (19:02 -0800)]
NASM 2.06rc5
H. Peter Anvin [Sun, 22 Feb 2009 02:58:15 +0000 (18:58 -0800)]
BR 2557903: fix disassembly of a set of SSE MOV* instructions
Fix the disassembly of the alternate forms of register-register
MOVAPD, MOVDQA, MOVDQU, MOVQ, MOVSD, and MOVUPD.
NASM never generates these, but they would be disassembled
incorrectly.
H. Peter Anvin [Sun, 22 Feb 2009 02:51:17 +0000 (18:51 -0800)]
BR 2541252: Fix issues in insns.dat, mostly related to LZCNT and POPCNT
Fix various flags on LZCNT and POPCNT, and fix a few instructions
tagged \360\332, which makes no sense.
H. Peter Anvin [Sun, 22 Feb 2009 02:26:20 +0000 (18:26 -0800)]
changes.src: document WAIT and %$$ fixes
H. Peter Anvin [Sun, 22 Feb 2009 02:22:56 +0000 (18:22 -0800)]
BR 2592476: Treat WAIT as a prefix even though it's really an instruction
WAIT is technically an instruction, but from an assembler standpoint
it behaves as if it had been a prefix. In particular, it has to be
ordered *before* any real hardware prefixes.
H. Peter Anvin [Sun, 22 Feb 2009 01:55:08 +0000 (17:55 -0800)]
br704736: handle deep context-local macros
The documentation says that constructs with %$...$foo can be used
to access macros from deeper in the context stack. From what
I can tell, that has never actually worked, since we'd enter names
like %$foo into the context-local macro name table. Instead, only
insert the tail of the macro name into the context-local table;
expand get_ctx to also return a pointer to the macro name proper;
this is rather straightforward since we'd usually save away that
name at the point get_ctx is called anyway.
H. Peter Anvin [Sun, 22 Feb 2009 01:54:31 +0000 (17:54 -0800)]
nasmlib: make nasm_strcat() take const arguments
None of the strings passed to nasm_strcat() are modified, to
make them const.
H. Peter Anvin [Sun, 22 Feb 2009 01:27:51 +0000 (17:27 -0800)]
outelf32/64: remove align_str in favor of fwritezero()
Drop the use of yet another local all-zero buffer, align_str, in favor
of calling fwritezero().
H. Peter Anvin [Sun, 22 Feb 2009 01:27:13 +0000 (17:27 -0800)]
outbin: fix typo: "sections" not "section"
Fix silly typo: the variable is "sections" not "section"...
H. Peter Anvin [Mon, 9 Feb 2009 10:03:33 +0000 (11:03 +0100)]
Unify all-zero buffers; add fwritezero()
We have a number of all-zero buffers in the code. Put a single
all-zero buffer in nasmlib.c. Additionally, add fwritezero()
which can be used to write an arbitrary number of all-zero bytes;
this prevents the situation where the all-zero buffer is simply
too small.
H. Peter Anvin [Sun, 22 Feb 2009 01:19:05 +0000 (17:19 -0800)]
BR 2611906: proper error message for start < origin
When a section other than .text has a start < origin, we would
segfault; fix that.
Furthermore, at bin_cleanup() we don't have usable file/line
information, so pass ERR_NOFILE to the error() function. Perhaps less
than ideal, but better than printing a null pointer.
H. Peter Anvin [Sun, 22 Feb 2009 00:58:34 +0000 (16:58 -0800)]
NASM 2.06rc4
H. Peter Anvin [Sun, 22 Feb 2009 00:56:52 +0000 (16:56 -0800)]
Fix opcode for VADDSUBPS; operands for VBLEND; add SSE for AES ops
Fix the opcode for VADDSUBPS
Fix the operands for VBLEND
Corrent the instruction flags for the AES ops (they're SSE)
H. Peter Anvin [Sun, 22 Feb 2009 00:43:48 +0000 (16:43 -0800)]
FMA instructions won't be in Sandy Bridge
The FMA instructions aren't scheduled for Sandy Bridge after all.
They will be "in a future processor", so create a placeholder for now.
H. Peter Anvin [Wed, 18 Feb 2009 22:13:45 +0000 (14:13 -0800)]
Perl script used to generate FMA instruction patterns
Small perl script used to generate the FMA instruction patterns. May
come in useful if the spec changes again.
H. Peter Anvin [Wed, 18 Feb 2009 22:13:25 +0000 (14:13 -0800)]
changes.src: document updated AVX specification
H. Peter Anvin [Wed, 18 Feb 2009 22:07:14 +0000 (14:07 -0800)]
Update the VFMA* instructions per the AVX spec version 5
Update the VFMA* instructions to match the AVX spec version 5.
Since these are highly regular, use a small Perl script to generate
the instruction patterns.
H. Peter Anvin [Wed, 18 Feb 2009 22:05:15 +0000 (14:05 -0800)]
insns.dat: fix minor formatting anomalies
Fix minor anomalies in insns.dat.
H. Peter Anvin [Wed, 18 Feb 2009 22:04:02 +0000 (14:04 -0800)]
insns.pl: handle the new VEX.DDS flag per AVX spec version 5
The AVX spec version 5 introduces the new VEX.DDS flag; support it.
H. Peter Anvin [Fri, 13 Feb 2009 17:33:56 +0000 (09:33 -0800)]
BR 2593349: Move version message back to stdout
Checkin
4b9358928b114caaf34a69d6fdfd3b285b7a72cc changed the version
message from stdout to stderr, but:
a) doesn't motivate the change in the commit log;
b) bundles that with other changes;
c) is inconsistent with other programs;
d) was done by me and I can't remember any reason for it.
Hence conclude it was unintentional and therefore a bug. Since this
commit was done after 2.05.01 no stable release has been affected.
H. Peter Anvin [Wed, 11 Feb 2009 18:54:59 +0000 (10:54 -0800)]
NASM 2.06rc3
Charles Crayne [Thu, 29 Jan 2009 03:07:18 +0000 (19:07 -0800)]
Allow global declaration after symbol definition
This experimental feature needs to be tested for
all output formats which recognize global symbols.
Charles Crayne [Tue, 27 Jan 2009 22:43:37 +0000 (14:43 -0800)]
Fix Bugs item #2537867
Module labels.c has code to issue error message when global
directive appears after symbol definition, but the test condition
was incorrectly punctuated.
Soronel Haetir [Tue, 20 Jan 2009 02:27:11 +0000 (17:27 -0900)]
Document the as86 ..start label
I realized that a documentation change is required to inform users about the
addition of entry point support for the as86 format. The following produces
reasonable output for .txt output, but I am blind and so can't check the
other formats as readily.
H. Peter Anvin [Mon, 19 Jan 2009 07:04:45 +0000 (23:04 -0800)]
doc: clean up the "String Manipulation in Macros" section
Minor cleanups to the "String Manipulation in Macros" section.
H. Peter Anvin [Mon, 19 Jan 2009 06:59:13 +0000 (22:59 -0800)]
doc: indent the time macro example
Indent the time macro example for ease of reading.
H. Peter Anvin [Mon, 19 Jan 2009 06:55:53 +0000 (22:55 -0800)]
doc: fix typo
verson -> version
H. Peter Anvin [Mon, 19 Jan 2009 06:55:33 +0000 (22:55 -0800)]
Merge branch 'master' of git+ssh://repo.or.cz/srv/git/nasm
H. Peter Anvin [Mon, 19 Jan 2009 06:51:46 +0000 (22:51 -0800)]
doc: update the section on numeric constants
Update the section on numeric constants, and add a few more examples.
Charles Crayne [Sun, 18 Jan 2009 23:27:03 +0000 (15:27 -0800)]
Generate warning for unknown section atributes
Previously, the ELF backends silently ignored incorrect or unknown
attributes on section declarations, and therefore used default values
in cases where the user had make an error in attempting to specify
custom values.
H. Peter Anvin [Mon, 5 Jan 2009 17:08:06 +0000 (09:08 -0800)]
Fix the [warning] directive
Fix multiple bugs in the [warning] directive:
- Only parsed on pass 1
- "-" was interpreted as "+"
H. Peter Anvin [Sun, 4 Jan 2009 01:56:41 +0000 (17:56 -0800)]
outas86: slight stylistic cleanups
Minor stylistic cleanups to previous patch.
Soronel Haetir [Sun, 4 Jan 2009 01:21:52 +0000 (16:21 -0900)]
Add entry point support to as86 backend
I needed entry point support with the as86 format, and after looking through
the archives found a similar desire from someone in 2002. For some reason
such a patch never made it into the code, even though the required flag
value is present, so I offer the a patch of my own.
I compared against what is done in the .obj format and the approaches are
quite similar which I hope will aid in its acceptability. While I have
tested it extensively it does do the job asked, and I'm honestly not sure
what extensive testing of the change would look like.
H. Peter Anvin [Tue, 30 Dec 2008 04:52:28 +0000 (20:52 -0800)]
BR 2432826: Fix enforcement of the LONG bit
Somewhere we lost the enforcement of the LONG bit, as opposed to
NOLONG. Fix this in the most obvious way.
H. Peter Anvin [Tue, 30 Dec 2008 03:58:36 +0000 (19:58 -0800)]
BR 2413278: Nonoptimal forms of arithmetic instructions involving AX
At some point, we lost the optimizations for the core arithmetic
operations involving AX. Put them back.
H. Peter Anvin [Tue, 23 Dec 2008 00:37:59 +0000 (16:37 -0800)]
changes.src: document Mach-O alignment fix.
H. Peter Anvin [Sat, 20 Dec 2008 00:48:07 +0000 (16:48 -0800)]
NASM 2.06rc2
David DeHaven [Tue, 9 Dec 2008 08:18:43 +0000 (00:18 -0800)]
Mach-O alignment fix
Several projects have taken to using .text to store read-only data
when building on Mac OS X due to crashes in SSE code from the .rodata
section being mis-aligned. It seems there was a misunderstanding about
how ld/ld64 handles section alignment in outmacho.c so I wrote a patch
to fix it. I tested it against x264 git, modified it to use ".rodata
align=16" for the data section and use movdqa instructions (guaranteed
to crash when built with unpatched nasm) and it passed all tests in
its checkasm tool.
If you want more data I can provide, but it's late and I've had a
couple glasses of mulled wine :)
-DrD-
Victor van den Elzen [Wed, 10 Dec 2008 12:04:58 +0000 (13:04 +0100)]
BR 2413272: Warn about byte displacement overflow
Remove the special case for single byte displacements,
which was already in out() anyway.
H. Peter Anvin [Sun, 30 Nov 2008 23:53:02 +0000 (15:53 -0800)]
NASM 2.06rc1
H. Peter Anvin [Fri, 7 Nov 2008 03:55:05 +0000 (19:55 -0800)]
ELF: use rbtree for symbol searches
Linear searches are evil, so use an llrbtree to search for symbols by
offset. This doesn't change the preexisting behaviour that we only
look for global symbols.
Signed-off-by: H. Peter Anvin <hpa@zytor.com>
H. Peter Anvin [Fri, 7 Nov 2008 03:54:05 +0000 (19:54 -0800)]
rbtree: drop "const" from search function
Having the search argument and result be "const" is nice in theory,
but causes problems in practice.
Signed-off-by: H. Peter Anvin <hpa@zytor.com>
H. Peter Anvin [Thu, 6 Nov 2008 17:42:11 +0000 (09:42 -0800)]
changes.src: document POPCNT fix.
Add POPCNT fix to release notes.
Signed-off-by: H. Peter Anvin <hpa@zytor.com>
H. Peter Anvin [Thu, 6 Nov 2008 17:41:23 +0000 (09:41 -0800)]
Merge branch 'nasm-2.05.xx'
H. Peter Anvin [Thu, 6 Nov 2008 17:40:39 +0000 (09:40 -0800)]
test/popcnt.asm: simple test for the POPCNT instruction
Very simple test of POPCNT instructions.
Signed-off-by: H. Peter Anvin <hpa@zytor.com>
H. Peter Anvin [Thu, 6 Nov 2008 17:39:48 +0000 (09:39 -0800)]
The POPCNT instruction does not need sizes on memory operands
The POPCNT instruction should not require sizes on memory operands.
Add the appropriate size flags for that to work.
Signed-off-by: H. Peter Anvin <hpa@zytor.com>
H. Peter Anvin [Thu, 6 Nov 2008 17:35:02 +0000 (09:35 -0800)]
BR 2229703: POPCNT r64,rm64 not POPCNT r64,rm32
The 64-bit version of the POPCNT instruction takes r64,rm64; not
r64,rm32.
Signed-off-by: H. Peter Anvin <hpa@zytor.com>
H. Peter Anvin [Tue, 4 Nov 2008 22:24:34 +0000 (14:24 -0800)]
preproc: BR 2222615: fix segfault on bogus %ifmacro
BR 2222615: Fix segmentation fault on %ifmacro without an argument.
Signed-off-by: H. Peter Anvin <hpa@zytor.com>
H. Peter Anvin [Wed, 5 Nov 2008 23:55:40 +0000 (15:55 -0800)]
doc: better description of %line
The implication that %line allows NASM to digest cpp output is just
plain wrong, at least without additional intermediate processing. Be
a little more circumspect.
Signed-off-by: H. Peter Anvin <hpa@zytor.com>
Victor van den Elzen [Wed, 5 Nov 2008 13:11:46 +0000 (14:11 +0100)]
Fix BR #916647
nasm.c should respect the default debug format of the output format,
instead of replacing it with the first format in the list.
This is cleaner and allows the list to be sorted normally.
This commit rewrites commit
116994111b which was very fragile.
H. Peter Anvin [Tue, 4 Nov 2008 22:26:32 +0000 (14:26 -0800)]
changes.src: document if for %ifmacro.
Document fixed %ifmacro.
Signed-off-by: H. Peter Anvin <hpa@zytor.com>
H. Peter Anvin [Tue, 4 Nov 2008 22:25:12 +0000 (14:25 -0800)]
test: add test for BR 2222615
Add a test for %ifmacro, per BR 2222615.
Signed-off-by: H. Peter Anvin <hpa@zytor.com>
H. Peter Anvin [Tue, 4 Nov 2008 22:24:34 +0000 (14:24 -0800)]
preproc: BR 2222615: fix segfault on bogus %ifmacro
BR 2222615: Fix segmentation fault on %ifmacro without an argument.
Signed-off-by: H. Peter Anvin <hpa@zytor.com>
Charles Crayne [Tue, 4 Nov 2008 02:21:24 +0000 (18:21 -0800)]
Prevent erroneous extra "final" pass
Specifically check for end of final pass.
H. Peter Anvin [Mon, 3 Nov 2008 04:41:29 +0000 (20:41 -0800)]
doc/changes.src: document ELF TLS
Add ELF TLS to the release notes.
Signed-off-by: H. Peter Anvin <hpa@zytor.com>
H. Peter Anvin [Mon, 3 Nov 2008 04:40:16 +0000 (20:40 -0800)]
doc: minor edit to the TLS documentation examples.
Minimize the TLS documentation examples (we don't need "dword" in a
mov from ebx, for example.) This is just to avoid user confusion.
Signed-off-by: H. Peter Anvin <hpa@zytor.com>
Charles Crayne [Sun, 2 Nov 2008 00:09:36 +0000 (17:09 -0700)]
Document differences between TLS coding in ELF32 and ELF64
Absolute relocation wrt ..tlsie for ELF32
Relative relocation wrt ..gottpoff for ELF64
Charles Crayne [Sat, 1 Nov 2008 23:48:31 +0000 (16:48 -0700)]
ELF32 support for offset to IE GOT entry
Add new WRT type ..tlsie.
Generate R_386_TLS_IE relocation entries
for references to thread local variables.
H. Peter Anvin [Sat, 1 Nov 2008 19:57:05 +0000 (12:57 -0700)]
version.pl: snapshot releases *only* have digits in the tail
Snapshot releases have *only* digits in the tail. "git describe"
produces tails that have digits in them, but aren't numeric.
Signed-off-by: H. Peter Anvin <hpa@zytor.com>
H. Peter Anvin [Fri, 31 Oct 2008 23:53:49 +0000 (16:53 -0700)]
Move all version strings to a single compilation unit (ver.c)
Move all the version strings to a single compilation unit, ver.c; this
does not include the version macros, which are fed into macros.c.
Signed-off-by: H. Peter Anvin <hpa@zytor.com>
Charles Crayne [Fri, 31 Oct 2008 04:59:42 +0000 (21:59 -0700)]
ELF32 bit support of .tdata and .tbss sections
Set default attributes for .tdata and .tbss sections
Implement new attribute 'tls' for arbitrary section names
Flag variables in sections with tls attribute with STT_TLS
H. Peter Anvin [Thu, 30 Oct 2008 17:58:28 +0000 (10:58 -0700)]
rbtree: drop the data pointer; instead rely on being embedded
Drop the data pointer, and instead assume the struct rbtree will be
embedded in a bigger data structure (to be extracted via
container_of()).
Signed-off-by: H. Peter Anvin <hpa@zytor.com>
H. Peter Anvin [Thu, 30 Oct 2008 17:52:08 +0000 (10:52 -0700)]
compiler.h: add offsetof() and container_of()
offsetof() is a C99 construct; provided here as an ersatz for older
systems.
container_of() is a nonstandard but highly useful construct, which
allows data structure control items like tree structures to be
embedded in larger data structures without the penalty of extra
pointers and allocations.
Signed-off-by: H. Peter Anvin <hpa@zytor.com>
H. Peter Anvin [Thu, 30 Oct 2008 06:29:23 +0000 (23:29 -0700)]
Left-leaning red-black tree data structure
Implement library functions for "left-leaning red-black trees" with
uint64_t keys. This is meant for looking up symbols by address in the
backends that need to do so, e.g. ELF.
A good question is if there is a better way to do this, that recovers
the original symbol, but that's a future issue.
Signed-off-by: H. Peter Anvin <hpa@zytor.com>
H. Peter Anvin [Tue, 28 Oct 2008 06:01:57 +0000 (23:01 -0700)]
Fix header guards for outlib.h
Fix typo in header guards for outlib.h
Signed-off-by: H. Peter Anvin <hpa@zytor.com>