Addr68k_from_LADDR always produced a 2-byte aligned pointer which
was frequently cast to a type requiring 4-byte alignment.
This commit changes Addr68k_from_LADDR uses to one of two new
inline procedures, NativeAligned2FromLAddr or NativeAligned4FromLAddr,
which produce a result with the appropriate alignment for the context.
This permits checking for cases where the Lisp address is not
appropriately aligned for the usage context, and localizes compiler
warnings to these two procedures.
Similarly, the Addr68k_from_StkOffset macros are replaced by
NativeAligned2FromStackOffset and NativeAligned4FromStackOffset.
NativeAligned4FromLPage replaces Addr68k_from_LPAGE as page address
will always be at least 4-byte aligned.
LAddrFromNative, LPageFromNative, and StackOffsetFromNative complete
the set, replacing LADDR_from_68k, LPAGE_from_68k, and
StkOffset_from_68K (note K not k) respectively.
Instead of using a single macro that converts from a lisp pointer to
a native pointer to a 2-byte aligned item then perhaps casting to objects
that require 4-byte alignment... use separate functions for 2-byte and
4-byte aligned pointer results. The clients should be explicit about
which alignment they require, and the conversion functions can check
(perhaps in DEBUG mode) that the resulting pointer is on an appropriate
boundary.
This commit defines the functions but does not introduce any uses.
Many of the warnings were newly visible after the DBPRINT macro
was modified, but the pedantic warnings also caught existing printf
family usage which was not strictly correct.
Mostly replacing 0x%x with %p for pointers, adding (void *) for
those and other pointers, %td for ptrdiff_t, but also changing
some function parameters from UNSIGNED (uintptr_t) to int
where that was the more appropriate type.
Combines arith2.c ... arith4.c files and their associated header files
into new arithops.c/arithopsdefs.h files, and adjusts the CMakeLists.txt,
and old-style makefile-tail. Also updates makefile-dos,
inlnPS2.h, and inlndos.h to reflect these changes, though these are not
used.
Combines the array..array6 files and their associated header files
into new arrayops.c/arrayopsdefs.h files, and adjusts the CMakeLists.txt
and old-style makefile-tail to reflect these changes.
Remove unused #define PERCENT_OF_SCREEN in MyWindow.h
Move structures for dir.c to dirdefs.h where they are used
Resolve S_CHAR vs S_CHARACTER in favor of S_CHARACTER and cleanup #defines
Fix = vs == bug in FSDEBUG code in dir.c
Eliminate duplicate/unused constant definitions in gcr.c
Declare static internal function bytecmp in mkatom.c
Update many source and include files to include headers for what they use
If the debugging printf macros are elided by the preprocessor
rather than being removed by the compiler's optimizer then
the debugging statements may get out-of-date as variables are
modified. Wrap the non-debug case in "if (0) ..." instead.
* arithmetic opcode implementations should return LispPTR rather than int
* all callers of ERROR_EXIT() have return type LispPTR, therefore ERROR_EXIT should too
* N_[I]GETNUMBER, [N_]ARITH_SWITCH need (int) casts for some large constants that would otherwise be unsigned
* Expand use of macro N_ARITH_BODY_1_UNSIGNED and correct types
* Remove unused macros N_ARITH_BODY_1 and N_ARITH_BODY_1_UNSIGNED
* Cast to correct type for storing to TopOfStack, and return type of TIMER_EXIT()
* Pedantic C compilers want an extern declaration separate from initialization
* Remove duplicate definitions for fns in initdspdefs.h from display.h
* Remove misleading comments on structure member offsets and reorder to minimize padding
These routines were stubs that did nothing and were not called from anywhere
so lack value in even providing a template or hook for a fuller implementation.
Also note that "stackcheck" conflicts with a predefined symbol in some runtime
libraries. Should these be implemented in the future they should use a
maiko-specific name.
Add m68k to recognized CPUs (machinetype)
Add amigaos to recognized operating systems (osversion)
Add ability to override "config.guess" output w/ LDEARCH= to osversion
Add platform.h clauses to recognize AmigaOS 3 using gcc to cross-compile
makepathname() is only ever called with one of two constant string
arguments, in one case (DOS) such that it only does a strncpy(...),
and the other case (non-DOS) expanding "~" to the current user's home
directory. Additional code duplicates realpath() functionality but is
never used.
Commit c46fcce307 fixed a warning for
incompatible pointers to nnewframe() but did not consider that the
order of the DLwords is swapped depending on the endianness of the
system it is running on. Add the necessary GETBASEWORD() macros to
access the items when constructing the pointer.
nnewframe() as called from the EVAL implementation expects to be passed
the address of an array of two DLwords. Do that, and compose the 32-bit
result correctly rather than passing the address of a (32-bit) LispPTR
and then having to swapx() that result to get the expected value.
* Correct warning: cast to smaller integer type -- X_init/lispbitmap
* Fixes to INTRSAFE, INTRSAFE0 and ensure TIMEOUT, TIMEOUT0 used appropriately
INTRSAFE and INTRSAFE0 must clear errno before executing the library or system
call because not all library calls set errno on success.
Avoid casting pointers or larger integer values down to smaller ints before
comparing to 0 or -1, and use NULL (a pointer) rather than 0.
Fix cases where the result of the library call is a pointer rather than an int
to use TIMEOUT0 instead of TIMEOUT, testing for NULL rather than -1
on timeout (errno == EINTR)
* Remove useless validity check of LASTVMEMFILEPAGE_word pointer
* Convert pointer arithmetic type in drawline from int to ptrdiff_t
* Add NOTE warning about a 32-bit vs 64-bit issue affecting currently unused GET_NATIVE_ADDR_FROM_LISP_PTR
No calls to make_atom() depend on the ability to parse the atom's
pname as a number. Additionally, the parse_number() implementation
used here was non-functional.
We remove parse_number() and adjust the parameter list of make_atom()
to remove the non_numericp flag.