Commit graph

27 commits

Author SHA1 Message Date
Duncan Ogilvie
8b6c7b237c
Fix allocator mismatch (#107) 2023-05-12 21:19:37 -07:00
Peter Johnson
94ab1135a3 Remove $Id$ and RCSID() usage.
These are useless now that we're using git.
2011-08-19 10:43:16 -07:00
Peter Johnson
69fc913eec Clean up a number of obsolete autoconf-detected standard C things.
svn path=/trunk/yasm/; revision=1892
2007-07-13 20:56:28 +00:00
Peter Johnson
3122ac66be Fix #107: Float input "1.000000" hit an edge case in the code that caused
the rounding increment at the end of float conversion to wrap the mantissa
from all 1's to 0, resulting in an incorrect result.

svn path=/trunk/yasm/; revision=1836
2007-05-11 02:19:36 +00:00
Peter Johnson
469e54fa4a Update all copyright dates.
svn path=/trunk/yasm/; revision=1827
2007-04-22 05:09:49 +00:00
Peter Johnson
00473ca981 Bite the bullet and convert tabs to spaces. Previously yasm's source has
been using a mix of tabs and 4 spaces to indent; this looks horrible if
tab size is ever not 8.  While I debated converting to tab-only indentation
that would have been a far higher impact to the source.

svn path=/trunk/yasm/; revision=1825
2007-04-22 03:32:46 +00:00
Peter Johnson
4c33af41ec Revamp error/warning handling, using a model similar to Python's internal
exception handling.  There are now two layers an error or warning goes
through before it hits the user: first an error is logged via
yasm_error_set() (or yasm_warn_set() for a warning).  Only one error may
be set, whereas multiple warnings can be set (yasm_warn_set maintains a
linked list).  Then, calling yasm_errwarn_propagate() propagates any error
and/or warning(s) to an errwarns structure and associates the
errors/warnings with a line number at that time; this call also clears the
pending errors/warnings and allows new ones to be set.  The propagate
function can safely be called when there are no pending error/warnings.

In addition, there are some helper errwarn functions that allow clearing of
an error/warning without propagating, getting it separately, etc.

Still yet to be done: changing most/all uses of yasm_internal_error() into
yasm_error_set(YASM_ERROR_ASSERTION).

The main advantage this change has is making libyasm functions feel much
more library like, and separating the user code line numbers from the inner
function error handling (e.g. intnum create functions only needed the line
number to trigger errors; this is no longer required).

The set/propagate/etc functions use global data structures to avoid passing
around a pointer to every function.  This would need to be made thread-local
data in a threaded app.  Errwarns containers (that keep associated line
numbers) are no longer global, so multiple source streams can be processed
separately with no conflict (at least if there's only a single thread of
execution).

svn path=/trunk/yasm/; revision=1521
2006-05-04 07:55:32 +00:00
Michael Urman
68340f7ba7 Modify the output for 'make check' to be much less verbose, and thus
much easier to see the bad news when necessary. Thanks go to Peter for
updates to the C tests. Kudos to him having us send most of our tests
through a single shell script!

svn path=/trunk/yasm/; revision=1203
2005-03-16 05:26:35 +00:00
Peter Johnson
5d04dc4701 * libyasm/tests/Makefile.inc: Build bitvect_test and floatnum_test with
standard CFLAGS and LDFLAGS, and as check_PROGRAMS, not noinst_PROGRAMS.

* bitvect_test.c: Update with prototypes to avoid compiler warnings.
* floatnum_test.c: Likewise.


svn path=/trunk/yasm/; revision=1179
2004-11-15 04:02:24 +00:00
Peter Johnson
55d8a8f874 Remove Check suite; hand-write the two tests that use it. While we're
here, remove the bitrotted tests memexpr_test and bytecode_test.

* check: Deleted.
* Makefile.am: Unhook Check suite from build.
* configure.ac: Remove tests for things needed only for Check suite.

* memexpr_test.c: Delete.
* bytecode_test.c: Delete.
* libyasm/tests/Makefile.inc: Delete commented-out references to above.

* bitvect_test.c: Rewrite to not use Check suite.
* floatnum_test.c: Likewise.
* libyasm/tests/Makefile.inc: Don't reference Check suite.


svn path=/trunk/yasm/; revision=1178
2004-11-15 00:19:04 +00:00
Peter Johnson
1a86c34026 * On most files: re-enable $IdPath$ as $Id$, and enable Id keyword expansion.
svn path=/trunk/yasm/; revision=1137
2004-09-04 01:24:57 +00:00
Peter Johnson
55438b7229 Massive libyasm / module interface update - Phase 1
As yasm has evolved, various minor additions have been made to libyasm to
support the new features.  These minor additions have accumulated, and
some contain significant redundancies.  In addition, the core focus of
yasm has begun to move away from the front-end commandline program "yasm"
to focusing on libyasm, a collection of reusable routines for use in all
sorts of programs dealing with code at the assembly level, and the modules
that provide specific features for parsing such code.

This libyasm/module update focuses on cleaning up much of the cruft that
has accumulated in libyasm, standardizing function names, eliminating
redundancies, making many of the core objects more reusable for future
extensions, and starting to make libyasm and the modules thread-safe by
eliminating static variables.

Specific changes include:
 - Making a symbol table data structure (no longer global).  It follows a
   factory model for creating symrecs.
 - Label symbols now refer only to bytecodes; bytecodes have a pointer to
   their containing section.
 - Standardizing on *_create() and *_destroy() for allocation/deallocation.
 - Adding a standardized callback mechanism for all data structures that
   allow associated data.  Allowed the removal of objfmt and
   dbgfmt-specific data callbacks in their interfaces.
 - Unmodularizing linemgr, but allowing multiple linemap instances (linemgr
   is now renamed linemap).
 - Remove references to lindex; all virtual lines (from linemap) are now
   just "line"s.
 - Eliminating the bytecode "type" enum, instead adding a standardized
   callback mechanism for custom (and standard internal) bytecode types.
   This will make it much easier to add new bytecodes, and eliminate the
   possibility of type collisions.  This also allowed the removal of the
   of_data and df_data bytecodes, as objfmts and dbgfmts can now easily
   implement their own bytecodes, and the cleanup of arch's bytecode usage.
 - Remove the bytecodehead and sectionhead pseudo-containers, instead
   making true containers: section now implements all the functions of
   bytecodehead, and the new object data structure implements all the
   functions of sectionhead.
 - Add object data structure: it's a container that contains sections, a
   symbol table, and a line mapping for a single object.  Every former use
   of sectionhead now takes an object.
 - Make arch interface and all standard architectures thread-safe:
   yasm_arch_module is the module interface; it contains a create()
   function that returns a yasm_arch * to store local yasm_arch data; all
   yasm_arch_module functions take the yasm_arch *.
 - Make nasm parser thread-safe.

To be done in phase 2: making other module interfaces thread-safe.  Note
that while the module interface may be thread-safe, not all modules may be
written in such a fashion (hopefully all the "standard" ones will be, but
this is yet to be determined).

svn path=/trunk/yasm/; revision=1058
2003-10-02 05:03:50 +00:00
Peter Johnson
d151392af8 Big output_expr(), intnum_tobytes(), and floatnum_tobytes() changes:
- Switch to bit-based output, including shift capability
 - This means the standard intnum output functions can be used for non-byte
   oriented archs like LC-3b (implemented)
 - Default out of range (overflow) warnings for intnum (bugzilla bug 14)
 - Change floating point overflow/underflow errors to warnings
To do (hooks but not implemented):
 - Shifting floatnums into destination
 - Floatnum destinations larger than floatnum value
 - Big endian support for intnum and floatnum
Related simultaneous changes:
 - Use bc instead of ep in objfmt output_expr() functions; while bc->line
   should == (*ep)->line, in case they differ, we want to use the bc->line
   so as not to confuse users.
 - lc3b-mp22NC test was not properly offsetting the accessed variables, but
   since the variable "sections" started at an aligned offset, the output
   was actually correct.  The new intnum warnings uncovered this issue, so
   fix code to be correct (and not generate warnings).

svn path=/trunk/yasm/; revision=1017
2003-07-25 03:27:21 +00:00
Peter Johnson
0786a76895 Make libyasm a "real" library, including installing header files.
Start separating modules and frontends from libyasm internals.

svn path=/trunk/yasm/; revision=849
2003-03-15 05:07:49 +00:00
Peter Johnson
d9f68d6d4b Unmodularize errwarn, while making key errwarn functions replaceable.
Also removes dependency of libyasm on libintl (gettext), so it can be linked
-no-undefined now!

svn path=/trunk/yasm/; revision=842
2003-03-10 08:55:41 +00:00
Peter Johnson
a2e07e1e10 The Great Renaming (prefixing with yasm_), Part 1.
svn path=/trunk/yasm/; revision=838
2003-03-08 19:15:40 +00:00
Peter Johnson
b1faf6329c Relicense under 2-clause BSD license.
svn path=/trunk/yasm/; revision=835
2003-02-21 03:50:29 +00:00
Peter Johnson
9f6cb6783f Modularize errwarn. gettext()-ize in errwarn, not in every module, eliminating
libintl dependency in modules.
Also standardize initialize() and cleanup() functions.
Move replace_extension() from file.c to main.c.
Clean up some extern variable declarations in various places (particularly
nasm-compatible parser).

svn path=/trunk/yasm/; revision=792
2002-11-01 10:05:03 +00:00
Peter Johnson
a83fc9c8f6 Change order of arguments for get_ and check_ functions to better match other
functions (floatnum * as first arg).

svn path=/trunk/yasm/; revision=281
2001-10-15 04:34:11 +00:00
Peter Johnson
193392dcb6 Fix LOTS of little nits. Primary changes:
- New intnum module to replace using just unsigned long (for >32 bit values).
   Read values using BitVector instead of strtoul().
 - Brought both floatnum and intnum into expr (still need to integrate calc for
   floatnum).
 - Add traversal function to ternary tree (for use by symrec_foreach).
 - Change floatnum output interface from single/double/extended to byte size.
 - Try to make floatnum/intnum interfaces very similar.  Still needs work.
 - Add/fix *_print functions, including interating ones for sections/bytecodes.
 - Fix handling of $ and $$.  Both now are properly parsed and bytecode'd.
 - Print out all sections and symbol table in main() in preparation for work
   on "cleanup" functionality between parser and optimizer stages (really part
   of the parser stage).

svn path=/trunk/yasm/; revision=270
2001-10-11 05:34:50 +00:00
Peter Johnson
48a36cdf22 Make most data structures opaque, keeping internals truly internal and making the
overall structure much more modular.
The test files, which need access to the internals of the structures being
tested, now include the source file instead of the header file to gain access
to all internal formats and functions.

svn path=/trunk/yasm/; revision=261
2001-10-03 20:42:17 +00:00
Peter Johnson
ebc6a12111 Test floatnum_new().
svn path=/trunk/yasm/; revision=260
2001-10-03 08:02:08 +00:00
Peter Johnson
8ce112a3fa Completely revamp format and extensiveness of testing.
Currently two tests fail (the approx 1.e-38 in single and double precision).
Need still to add tests for ASCII->internal conversion.

svn path=/trunk/yasm/; revision=256
2001-10-03 07:14:48 +00:00
Peter Johnson
055e7e2a30 Add copyright and GPL comments.
svn path=/trunk/yasm/; revision=254
2001-10-03 02:47:46 +00:00
Peter Johnson
98e25fc1f6 Add some (optional through configure) additional warning flags. Add options
to configure to enable profiling and enable -Werror.  Make changes to ensure
everything builds with all additional warnings and -Werror enabled.  Most of
these changes consist of adding "const" modifiers for functions that get
constant literal strings.

svn path=/trunk/yasm/; revision=252
2001-10-03 01:44:47 +00:00
Peter Johnson
1377150f6e Finish ASCII->internal FP conversion and clean up single/double/extended
conversion functions.  For accuracy, change from 64-bit to 80-bit internal
mantissa.  Modify tests to match new internal format.
TODO: Denormalized numbers, and write more tests!

svn path=/trunk/yasm/; revision=251
2001-10-02 23:24:15 +00:00
Peter Johnson
279abb1b37 Implement floating point size conversions (with help from BitVector).
Interface changed slightly (only affects symrec.c right now).  Tests committed
to check a single case (pi) with all three size conversion functions.
Still need to write to/from ASCII string functions (the hard part).

svn path=/trunk/yasm/; revision=247
2001-09-27 07:55:36 +00:00