Age | Commit message (Collapse) | Author | Files | Lines |
|
Many GNU tools accept -EB/-EL as short options for selecting big &
little endian modes. While the sim has an -E option, it requires
spelling out "big" and "little". Adding support for -EB & -EL is
thus quite trivial, so lets round it out to be less annoying.
|
|
Only the ppc arch supports this kind of source file override logic.
All the others expose knobs via configure flags, and for some of
these, the ppc code does as well. For others, it doesn't make sense
to ever change them. Since it's unlikely anyone is using this, drop
it all to simplify the code (and to get us a little closer to the
common sim code).
|
|
All other sim arches are using this now, so finish up the logic in
the ppc arch to enable gnulib usage here too.
|
|
We use these older names inconsistently in the sim codebase, and time
has moved on long ago, so drop support for these non-standard names.
POSIX provides O_NONBLOCK for us, so use it everywhere.
|
|
We have enough functionality from gnulib now to build sockser on
all platforms.
Non-blocking I/O is supported when F_GETFL/F_SETFL are unavailable,
but we can address that in a follow up commit. This mirrors what
is done in other places in the sim already.
|
|
The cgen framework provides a "VOID" type for code to use, but this
defines ends up conflicting with the standard Windows VOID define.
Since they actually define to the same thing ("void"), undef it here
to fix the Windows build.
We might want to reconsider the need for "VOID" in cgen, but that
will take larger discussion & coordination with the cgen project.
|
|
The sim-main.h header is a bit of a dumping ground. Every arch can
(and many do) define all sorts of weird & common names that end up
conflicting with system headers. So including it before the system
headers sets us up for pain. v850 is a good example of this -- when
building for mingw, we see weird failures:
$ i686-w64-mingw32-gcc ... -c -o dv-sockser.o ../../../../sim/v850/../common/dv-sockser.c
In file included from ../../../../sim/v850/sim-main.h:11,
from ../../../../sim/v850/../common/dv-sockser.c:24:
../../../../sim/v850/../common/sim-base.h:97:32: error: expected ')' before '->' token
97 | # define STATE_CPU(sd, n) ((sd)->cpu[0])
| ^~
While gcc is unhelpful at first, running it through the preprocessor
by hand shows more details:
$ i686-w64-mingw32-gcc ... -E -dD -o dv-sockser.i ../../../../sim/v850/../common/dv-sockser.c
$ i686-w64-mingw32-gcc -c dv-sockser.i
In file included from /usr/i686-w64-mingw32/usr/include/minwindef.h:163,
from /usr/i686-w64-mingw32/usr/include/windef.h:9,
from /usr/i686-w64-mingw32/usr/include/windows.h:69,
from /usr/i686-w64-mingw32/usr/include/winsock2.h:23,
from ../../gnulib/import/sys/socket.h:684,
from ../../gnulib/import/netinet/in.h:43,
from ../../../../sim/v850/../common/dv-sockser.c:39:
/usr/i686-w64-mingw32/usr/include/winnt.h:4803:25: error: expected ')' before '->' token
4803 | DWORD State;
| ^
| )
This is because v850 sets up this common name:
All of this needs cleaning up someday, but since the dv-sockser code
definitely should be fixed in this way, lets do that now and unblock
the v850 code.
|
|
It's unclear what this define is for as it appears to be unused, and
has never been used in the history of the mips sim. Delete it to tidy
up, and to fix build errors for Windows targets that have a standard
"PSIZE" struct in their system headers. This doesn't show up yet as
most sim files don't include many system headers, but enabling sockser
code for mingw uncovers the conflict.
Unfortunately the error produced by gcc is inscrutable, but running
it through the preprocessor manually manages to provide a pointer to
the underlying issue.
$ i686-w64-mingw32-gcc ... -c -o dv-sockser.o ../../../../sim/mips/../common/dv-sockser.c
<command-line>: error: expected identifier or '(' before numeric constant
In file included from /usr/i686-w64-mingw32/usr/include/windows.h:71,
from /usr/i686-w64-mingw32/usr/include/winsock2.h:23,
from ../../gnulib/import/sys/socket.h:684,
from ../../gnulib/import/netinet/in.h:43,
from ../../../../sim/mips/../common/dv-sockser.c:39:
/usr/i686-w64-mingw32/usr/include/wingdi.h:2934:59: error: unknown type name 'LPSIZE'; did you mean 'LPSIZEL'?
2934 | WINGDIAPI WINBOOL WINAPI GetAspectRatioFilterEx(HDC hdc,LPSIZE lpsize);
| ^~~~~~
| LPSIZEL
...
$ i686-w64-mingw32-gcc ... -E -dD -o dv-sockser.i ../../../../sim/mips/../common/dv-sockser.c
$ i686-w64-mingw32-gcc -c dv-sockser.i
In file included from /usr/i686-w64-mingw32/usr/include/windows.h:69,
from /usr/i686-w64-mingw32/usr/include/winsock2.h:23,
from ../../gnulib/import/sys/socket.h:684,
from ../../gnulib/import/netinet/in.h:43,
from ../../../../sim/mips/../common/dv-sockser.c:39:
/usr/i686-w64-mingw32/usr/include/windef.h:104:9: error: expected identifier or '(' before numeric constant
104 | } SIZE,*PSIZE,*LPSIZE;
| ^~
|
|
Now that the ppc code has been cleaned up enough to use the same set
of warning flags as the common code, delete the ppc-specific configure
logic so we can leverage what the common code already defined for us.
|
|
When compiling with --enable-werror and CFLAGS="-O0 -g -Wall", we run into:
...
src/sim/ppc/hw_memory.c: In function 'hw_memory_init_address':
src/sim/ppc/hw_memory.c:204:7: error: pointer targets in passing argument 4 \
of 'device_find_integer_array_property' differ in signedness \
[-Werror=pointer-sign]
&new_chunk->size);
^
...
Fix these by adding an explicit pointer cast. It's a bit ugly to use APIs
based on signed integers to read out unsigned values, but in practice, this
is par for the course in the ppc code.
We already use signed APIs and assign the result to unsigned values a lot:
see how device_find_integer_property returns a signed integer (cell), but
then assign it to unsigned types. The array APIs are not used that often
which is why we don't see many warnings, and we disable warnings when we
assign signed integers to unsigned integers in general.
The dtc/libfdt project (which is the standard in other projects) processes
the fdt blob as a series of bytes without any type information. Typing is
left to the caller. They have core APIs that read/write bytes, and a few
helper functions to cast/convert those bytes to the right value (e.g. u32).
In this ppc sim code, the core APIs use signed integers, and the callers
convert to unsigned, usually implicitly.
We could add some core APIs to the ppc sim that deal with raw bytes and then
add some helpers to convert to the right type, but that seems like a lot of
lifting for what boils down to a cast, and is effectively equivalent to all
the implicit assignments we use elsewhere. Long term, a lot of the ppc code
should either get converted to existing sim common code, or we should stand
up proper APIs in the common code first, or use standard libraries to do all
the processing (e.g. libfdt). Either way, this device.c code would all get
deleted, and callers (like these hw_*.c files) would get converted. Which
is also why we go with a cast rather new (but largely unused) APIs.
|
|
This aligns with common code which already uses this flag. We have
to add another local prototype to fix the failure, and add another
local decl for the SIM_DESC type. Unwinding these will require a
lot more work & conversions in the process, so going with the decl
for now unblocks the warning unification.
|
|
The basic "byte" type conflicts with Windows headers, and we already
have common types that provide the right sizes. So replace these with
the common ones to avoid issues.
CC dv-sockser.o
In file included from /usr/i686-w64-mingw32/usr/include/wtypes.h:8,
from /usr/i686-w64-mingw32/usr/include/winscard.h:10,
from /usr/i686-w64-mingw32/usr/include/windows.h:97,
from /usr/i686-w64-mingw32/usr/include/winsock2.h:23,
from ../../gnulib/import/sys/socket.h:684,
from ../../gnulib/import/netinet/in.h:43,
from .../build/sim/../../../sim/microblaze/../common/dv-sockser.c:39:
/usr/i686-w64-mingw32/usr/include/rpcndr.h:63:25: error: conflicting types for 'byte'; have 'unsigned char'
63 | typedef unsigned char byte;
| ^~~~
In file included from .../buildsim/../../../sim/microblaze/sim-main.h:21,
from .../buildsim/../../../sim/microblaze/../common/dv-sockser.c:24:
.../buildsim/../../../sim/microblaze/microblaze.h:94:25: note: previous declaration of 'byte' with type 'byte' {aka 'char'}
94 | typedef char byte;
| ^~~~
make: *** [Makefile:513: dv-sockser.o] Error 1
|
|
This copies logic used in the common sim warning configure code to fix
build errors for mingw targets. Turning format warnings on triggers
a failure in the debug.c file, so apply a minor fix at the same time.
|
|
This file is compiled for the --host & --build system which leads to
including the configure generated config.h in both environments.
This obviously doesn't work when the two targets don't look alike at
all and can cause build failures here (e.g. a mingw host & a linux
build). Since we don't actually need any config settings in this
very simple file, drop the includes entirely.
|
|
Fix sorting of the list, and update the globs to match the list used
in gdb's configure script.
|
|
The m32r Linux syscall emulation logic assumes the host environment
directly matches -- it's being run on 32-bit little endian Linux.
This breaks building for non-Linux systems, so put all the code in
__linux__ ifdef checks. This code needs a lot of love to make it
work everywhere, but let's at least unbreak it for non-Linux hosts.
|
|
In preparation for this script generating more files, change the output
argument to specify a directory. This drops the stdout behavior, but
since no one really runs this tool directly, it's not a big deal.
|
|
Code should not be using these directly, instead they should be
resolving these dynamically via cb_host_to_target_errno maps.
Fix the Blackfin code and remove the defines out of the header
so no new code can rely on them.
|
|
Now that ChangeLog entries are no longer used for sim patches,
this commit renames all relevant sim ChangeLog to ChangeLog-2021,
similar to what we would do in the context of the "Start of New
Year" procedure.
The purpose of this change is to avoid people merging ChangeLog
entries by mistake when applying existing commits that they are
currently working on.
Also throw in a .gitignore entry to keep people from adding new
ChangeLog files anywhere in the sim tree.
|
|
We're starting to move more objects to the common build that sis did
not need before, so linking them is causing problems (when common
objects end up needing symbols from non-common objects). Switch it
to the libsim.a archive which will allow the link to pull out only
what it needs.
|
|
These are copied from sim/common/Make-common.in.
On ppc the build fails without at least the 'info' target, e.g.:
Making info in ppc
make[4]: Entering directory '/<<BUILDDIR>>/gdb-10.2.2974.g5b45e89f56d+21.10.20210510155809/build/default/sim/ppc'
make[4]: *** No rule to make target 'info'. Stop.
|
|
Move these options up to the common dir so we only test & export
them once across all ports.
The setting only affects igen based ports, and they were turning
this on by default, so keep the default in place.
|
|
Now that the traps code has been unified, the configure script has no
unique logic in it, so it can be merged into the single common one.
|
|
Do this as a sep commit to try and make the history easier to review.
|
|
This makes the simulator work the same regardless of the target (bare
metal m32r-elf or Linux m32r-linux-gnu) by unifying the traps code.
It was mostly already the same with the only difference being support
for trap #2 reserved for Linux syscalls. We can move that logic to
runtime by checking the current environment operating mode instead.
|
|
This improves the logic a bit by making the host<->target translations
a bit more clear. The structs still bleed way too much between the two
worlds, but let's fix one thing at a time.
|
|
We don't want to handle Linux syscalls when in the virtual environment,
just the user environment, so adjust the Linux traps logic to check for
that specifically (instead of just skipping the operating environment).
Also tweak some testcases to explicitly specify the environment they run
under rather than relying on the default matching their needs. This gets
the tests passing for all m32r targets.
|
|
The use of __NR_ defines in here conflicts a lot with the standard
host syscalls, sometimes leading to build errors (when the numbers
happen to be the same we get duplicate case handlers), and other
times leading to misbehavior (where the m32r syscall # is not what
is actually checked).
Namespace these using the standard that we already use: change the
__NR_ to TARGET_LINUX_SYS_ with a simple `sed`.
Also add a few missing includes so the code at least compiles.
|
|
This makes it easier to override to point to an older version of guile.
The current cgen code doesn't work with guile-2, so need to point to an
older guile-1.8.
|
|
Copy most of the common build warning logic over from the common
code to help keep code behavior a bit consistent, and turn them
on by default. We disable a few flags for now until we can clean
the code up.
|
|
Now that the scache logic has been migrated into the common code,
there's nothing specific in these configure scripts, so merge them
into the common one.
The frv unique logic can be moved to a dedicated include and merged
in the common configure since the flag has been scoped to the arch.
|
|
The cgen scache module is enabled by every cgen port, and with the
same default value of 16k (which matches the common default value).
Let's pull this option out of the individual ports (via CPPFLAGS)
and into the common code (via config.h).
The object itself is compiled only for cgen ports atm, so that part
doesn't change. The scache code is initialized dynamically via the
modules.c logic. That's why the profile code needs an additional
CGEN_ARCH check.
This will allow us to collapse arch configure files more. Merging
the source files will require more future work, but integrating the
cgen & non-cgen worlds itself will take a lot.
|
|
This will make it possible to merge into the common configure by
making sure we never collide with other arches.
|
|
Use the new modules.c framework to find & initialize this module.
|
|
Use the new modules.c framework to find & initialize this module.
|
|
Use the new modules.c framework to find & initialize this module.
|
|
Use the new modules.c framework to find & initialize this module.
|
|
Now that the model logic has been migrated into the runtime, there's
nothing specific in the bfin configure code, so merge it into the
common one.
|
|
These were never fully migrated from the psim to common code, and since
we've finished moving the logic into the runtime sim state, we won't ever
need these. So punt them.
|
|
This kills off another compile-time option by moving the setting to
the individual arch runtimes. This will allow dynamic selection by
the arch when doing a single build with multiple arches.
The sim_model_init rework is a little funky. In the past it was
disabled entirely if no default model was set. We maintain the
spirit of the logic by gating the fallback logic on whether the
port has defined any models.
|
|
We want to do a single build with all arches in one binary which means
we need to namespace sim_machs on a per-arch basis. Move it from a
global variable to the sim description structure so it can be setup at
runtime.
Changing the SIM_MODEL->num from an enum to an int is unfortunate, but
we specifically don't want to maintain a centralized list anymore, and
this was never used directly in common code, just passed to per-arch
callbacks.
|
|
This code hits some format-zero-length warnings, so hack the code
like we did in the common layers.
|
|
The code is already clean, so sync this over from gdb warning.m4.
Also shuffle the order of the flags a bit to match the current gdb
warning.m4 code.
|
|
The $(arch) variable is only setup for cgen ports, so calculate this
value dynamically. We also need to generate multiple inputs in order
to properly recreate the subdir Makefile, so list them all.
|
|
We have some code tripping this warning, but it depends on the gcc
version & optimization levels. We've added some hints to the code
so some versions of gcc work better, but still not all. Let's just
disable the warning like gdb does.
|
|
Fix building on systems w/out a kill function (e.g. Windows).
|
|
This has been upstreamed into cgen itself.
|
|
The array of pointers is never modified, so mark it const so it ends
up in the read-only data section.
|
|
The compiler can still do basic format checks with vprintf style
funcs, so add the printf attribute to these.
|
|
This helps these funcs get printf format checking coverage.
The sim-io.c hack as a result is a bit unfortunate, but the compiler
throws warnings when printing with empty strings. In this one case,
we actually want that due to the side-effect of the callback halting
execution for us.
|