mirror of
https://git.do.srb2.org/KartKrew/Kart-Public.git
synced 2024-12-27 12:50:44 +00:00
Remove DJGPP GDB stub
Once more, SRB2 no longer works on DOS so this is irrelevant
This commit is contained in:
parent
4269f4eab6
commit
c278800d66
18 changed files with 0 additions and 3503 deletions
|
@ -1,83 +0,0 @@
|
||||||
#
|
|
||||||
# Makefile for GDB Stub for DJGPP/Mingw 0.3 source distribution
|
|
||||||
#
|
|
||||||
# Copyright 2000 by Jonathan Brogdon
|
|
||||||
#
|
|
||||||
|
|
||||||
include Makefile.cfg
|
|
||||||
|
|
||||||
default:
|
|
||||||
@$(ECHO) Welcome to GDB Stub for DJGPP & Mingw 0.3 source distribution!
|
|
||||||
@$(ECHO) To make the GDB stub type:
|
|
||||||
@$(ECHO) make all - Make library and demo programs
|
|
||||||
@$(ECHO) make library - Make only library
|
|
||||||
@$(ECHO) make demo - Make demo program
|
|
||||||
@$(ECHO) make install - Install library and header files
|
|
||||||
@$(ECHO) make uninstall - Uninstall library and header files
|
|
||||||
@$(ECHO) make clean - Remove .o files
|
|
||||||
@$(ECHO) make distclean - Remove ready binaries and .o files
|
|
||||||
@$(ECHO) make dep - Make dependences
|
|
||||||
|
|
||||||
# Inform make of phony targets
|
|
||||||
.PHONY: library demo clean blankdep dep distclean install
|
|
||||||
|
|
||||||
all: dep library demo
|
|
||||||
@$(ECHO) Library and demo program created
|
|
||||||
|
|
||||||
./lib/libgdbst.a:
|
|
||||||
@mkdir -p lib
|
|
||||||
@make -s -C ./src/library all
|
|
||||||
|
|
||||||
library: ./lib/libgdbst.a
|
|
||||||
@$(ECHO) Library created
|
|
||||||
|
|
||||||
demo: ./lib/libgdbst.a
|
|
||||||
@mkdir -p demo
|
|
||||||
@make -s -C ./src/demo all
|
|
||||||
@$(ECHO) Demo program created
|
|
||||||
|
|
||||||
clean:
|
|
||||||
@make -s -C ./src/library clean
|
|
||||||
@make -s -C ./src/demo clean
|
|
||||||
@$(ECHO) Clean complete
|
|
||||||
|
|
||||||
blankdep:
|
|
||||||
# Create blank depend.dep files to avoid errors
|
|
||||||
@$(ECHOBLANK) > ./src/library/depend.dep
|
|
||||||
@$(ECHOBLANK) > ./src/demo/depend.dep
|
|
||||||
|
|
||||||
# Now carry on as usual
|
|
||||||
dep: blankdep
|
|
||||||
@make -s -C ./src/library dep
|
|
||||||
@make -s -C ./src/demo dep
|
|
||||||
@$(ECHO) Created dependency files
|
|
||||||
|
|
||||||
# Blank all the dependencies too
|
|
||||||
distclean: blankdep
|
|
||||||
@make -s -C ./src/library distclean
|
|
||||||
@make -s -C ./src/demo distclean
|
|
||||||
@$(RM) -r ./demo/
|
|
||||||
@$(RM) -r ./lib/
|
|
||||||
@$(ECHO) Cleaned up files
|
|
||||||
|
|
||||||
install: library
|
|
||||||
ifdef DJGPP
|
|
||||||
@cp lib/*.a $(DJDIR)/lib
|
|
||||||
@ginstall -d $(DJDIR)/include
|
|
||||||
@cp include/*.h $(DJDIR)/include
|
|
||||||
@$(ECHO) GDB Stub Library for DJGPP installed
|
|
||||||
endif
|
|
||||||
|
|
||||||
uninstall:
|
|
||||||
ifdef DJGPP
|
|
||||||
@$(RM) $(DJDIR)/lib/libgdb.a
|
|
||||||
@$(RM) $(DJDIR)/include/i386-stub.h
|
|
||||||
@$(ECHO) GDB Stub Library for DJGPP uninstalled
|
|
||||||
ifdef DJGPP
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1,27 +0,0 @@
|
||||||
GDB Stub for DJGPP 0.1 Announcement
|
|
||||||
===================================
|
|
||||||
|
|
||||||
GDB Stub for DJGPP Copyright 2000 by Jonathan Brogdon
|
|
||||||
|
|
||||||
Hello.
|
|
||||||
|
|
||||||
I'd like to announce the GDB Stub for DJGPP for DJGPP, the latest version of
|
|
||||||
a GDB stub for DJGPP targets. The GDB Stub for DJGPP conforms to the GNU GDB stub
|
|
||||||
interface as specified in the GDB User's Manual. It allows for debugging of a
|
|
||||||
DJGPP target remotely over a serial link with GDB.
|
|
||||||
|
|
||||||
It comes with an example program for demonstrating remote debugging of
|
|
||||||
DJGPP targets, and documentation (man and HTML pages).
|
|
||||||
|
|
||||||
The GDB Stub for DJGPP is distributed under the GNU Library General Public License
|
|
||||||
(LGPL).
|
|
||||||
|
|
||||||
If you have any questions relating to libsocket, please mail me and I'll
|
|
||||||
be happy to help.
|
|
||||||
|
|
||||||
Thanks,
|
|
||||||
|
|
||||||
Jonathan Brogdon
|
|
||||||
<brogdo@austin.rr.com>
|
|
||||||
|
|
||||||
June 29th 2000
|
|
|
@ -1,43 +0,0 @@
|
||||||
/****************************************************************************
|
|
||||||
*
|
|
||||||
* i386-stub.h
|
|
||||||
*
|
|
||||||
* Description: Data definitions and constants for low level
|
|
||||||
* GDB server support.
|
|
||||||
*
|
|
||||||
* Terms of use: This software is provided for use under the terms
|
|
||||||
* and conditions of the GNU General Public License.
|
|
||||||
* You should have received a copy of the GNU General
|
|
||||||
* Public License along with this program; if not, write
|
|
||||||
* to the Free Software Foundation, Inc., 59 Temple Place
|
|
||||||
* Suite 330, Boston, MA 02111-1307, USA.
|
|
||||||
*
|
|
||||||
* Credits: Created by Jonathan Brogdon
|
|
||||||
*
|
|
||||||
* History
|
|
||||||
* Engineer: Date: Notes:
|
|
||||||
* --------- ----- ------
|
|
||||||
* Jonathan Brogdon 20000617 Genesis
|
|
||||||
* Gordon Schumacher 20020212 Updated for modularity
|
|
||||||
*
|
|
||||||
****************************************************************************/
|
|
||||||
#ifndef _GDBSTUB_H_
|
|
||||||
#define _GDBSTUB_H_
|
|
||||||
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
extern "C" {
|
|
||||||
#endif
|
|
||||||
extern int gdb_serial_init(unsigned int port, unsigned int speed);
|
|
||||||
extern void gdb_target_init(void);
|
|
||||||
extern void gdb_target_close(void);
|
|
||||||
|
|
||||||
extern void set_debug_traps(void);
|
|
||||||
extern void restore_traps(void);
|
|
||||||
extern void breakpoint(void);
|
|
||||||
#ifdef __cplusplus
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
#endif /* _GDBSTUB_H_ */
|
|
|
@ -1,20 +0,0 @@
|
||||||
The makefile contains the information about the target products
|
|
||||||
available.
|
|
||||||
|
|
||||||
Note: Makefile.cfg contains macros for various tools used during
|
|
||||||
the build process. Of particular note: some folks use the echo.exe
|
|
||||||
that is available from the DJGPP (or other) site(s). Others may not
|
|
||||||
have installed this, and therefore calls to echo during the build
|
|
||||||
will use the built-in DOS echo command. When attempting to echo a
|
|
||||||
blank line, the arguments to these two echo commands are different.
|
|
||||||
Therefore, makefile.cfg contains the macro ECHOBLANK. Please set
|
|
||||||
this macro according to the needs of your environment. If you change
|
|
||||||
this in makefile.cfg, it will be picked up by all other project
|
|
||||||
makefiles.
|
|
||||||
|
|
||||||
Type 'make' to see a list of targets. When the 'install'
|
|
||||||
target is made, the libgdb.a will be copied into your $(DJDIR)/lib
|
|
||||||
directory. In addition, the i386-stub.h file will be copied into
|
|
||||||
your $(DJDIR)/include directory. The uninstall target will remove
|
|
||||||
these files.
|
|
||||||
|
|
|
@ -1,454 +0,0 @@
|
||||||
|
|
||||||
GNU LIBRARY GENERAL PUBLIC LICENSE
|
|
||||||
**********************************
|
|
||||||
|
|
||||||
Version 2, June 1991
|
|
||||||
|
|
||||||
Copyright (C) 1991 Free Software Foundation, Inc.
|
|
||||||
675 Mass Ave, Cambridge, MA 02139, USA
|
|
||||||
Everyone is permitted to copy and distribute verbatim copies
|
|
||||||
of this license document, but changing it is not allowed.
|
|
||||||
|
|
||||||
[This is the first released version of the library GPL. It is
|
|
||||||
numbered 2 because it goes with version 2 of the ordinary GPL.]
|
|
||||||
|
|
||||||
Preamble
|
|
||||||
========
|
|
||||||
|
|
||||||
The licenses for most software are designed to take away your
|
|
||||||
freedom to share and change it. By contrast, the GNU General Public
|
|
||||||
Licenses are intended to guarantee your freedom to share and change
|
|
||||||
free software--to make sure the software is free for all its users.
|
|
||||||
|
|
||||||
This license, the Library General Public License, applies to some
|
|
||||||
specially designated Free Software Foundation software, and to any
|
|
||||||
other libraries whose authors decide to use it. You can use it for
|
|
||||||
your libraries, too.
|
|
||||||
|
|
||||||
When we speak of free software, we are referring to freedom, not
|
|
||||||
price. Our General Public Licenses are designed to make sure that you
|
|
||||||
have the freedom to distribute copies of free software (and charge for
|
|
||||||
this service if you wish), that you receive source code or can get it
|
|
||||||
if you want it, that you can change the software or use pieces of it in
|
|
||||||
new free programs; and that you know you can do these things.
|
|
||||||
|
|
||||||
To protect your rights, we need to make restrictions that forbid
|
|
||||||
anyone to deny you these rights or to ask you to surrender the rights.
|
|
||||||
These restrictions translate to certain responsibilities for you if you
|
|
||||||
distribute copies of the library, or if you modify it.
|
|
||||||
|
|
||||||
For example, if you distribute copies of the library, whether gratis
|
|
||||||
or for a fee, you must give the recipients all the rights that we gave
|
|
||||||
you. You must make sure that they, too, receive or can get the source
|
|
||||||
code. If you link a program with the library, you must provide
|
|
||||||
complete object files to the recipients so that they can relink them
|
|
||||||
with the library, after making changes to the library and recompiling
|
|
||||||
it. And you must show them these terms so they know their rights.
|
|
||||||
|
|
||||||
Our method of protecting your rights has two steps: (1) copyright
|
|
||||||
the library, and (2) offer you this license which gives you legal
|
|
||||||
permission to copy, distribute and/or modify the library.
|
|
||||||
|
|
||||||
Also, for each distributor's protection, we want to make certain
|
|
||||||
that everyone understands that there is no warranty for this free
|
|
||||||
library. If the library is modified by someone else and passed on, we
|
|
||||||
want its recipients to know that what they have is not the original
|
|
||||||
version, so that any problems introduced by others will not reflect on
|
|
||||||
the original authors' reputations.
|
|
||||||
|
|
||||||
Finally, any free program is threatened constantly by software
|
|
||||||
patents. We wish to avoid the danger that companies distributing free
|
|
||||||
software will individually obtain patent licenses, thus in effect
|
|
||||||
transforming the program into proprietary software. To prevent this,
|
|
||||||
we have made it clear that any patent must be licensed for everyone's
|
|
||||||
free use or not licensed at all.
|
|
||||||
|
|
||||||
Most GNU software, including some libraries, is covered by the
|
|
||||||
ordinary GNU General Public License, which was designed for utility
|
|
||||||
programs. This license, the GNU Library General Public License,
|
|
||||||
applies to certain designated libraries. This license is quite
|
|
||||||
different from the ordinary one; be sure to read it in full, and don't
|
|
||||||
assume that anything in it is the same as in the ordinary license.
|
|
||||||
|
|
||||||
The reason we have a separate public license for some libraries is
|
|
||||||
that they blur the distinction we usually make between modifying or
|
|
||||||
adding to a program and simply using it. Linking a program with a
|
|
||||||
library, without changing the library, is in some sense simply using
|
|
||||||
the library, and is analogous to running a utility program or
|
|
||||||
application program. However, in a textual and legal sense, the linked
|
|
||||||
executable is a combined work, a derivative of the original library,
|
|
||||||
and the ordinary General Public License treats it as such.
|
|
||||||
|
|
||||||
Because of this blurred distinction, using the ordinary General
|
|
||||||
Public License for libraries did not effectively promote software
|
|
||||||
sharing, because most developers did not use the libraries. We
|
|
||||||
concluded that weaker conditions might promote sharing better.
|
|
||||||
|
|
||||||
However, unrestricted linking of non-free programs would deprive the
|
|
||||||
users of those programs of all benefit from the free status of the
|
|
||||||
libraries themselves. This Library General Public License is intended
|
|
||||||
to permit developers of non-free programs to use free libraries, while
|
|
||||||
preserving your freedom as a user of such programs to change the free
|
|
||||||
libraries that are incorporated in them. (We have not seen how to
|
|
||||||
achieve this as regards changes in header files, but we have achieved
|
|
||||||
it as regards changes in the actual functions of the Library.) The
|
|
||||||
hope is that this will lead to faster development of free libraries.
|
|
||||||
|
|
||||||
The precise terms and conditions for copying, distribution and
|
|
||||||
modification follow. Pay close attention to the difference between a
|
|
||||||
"work based on the library" and a "work that uses the library". The
|
|
||||||
former contains code derived from the library, while the latter only
|
|
||||||
works together with the library.
|
|
||||||
|
|
||||||
Note that it is possible for a library to be covered by the ordinary
|
|
||||||
General Public License rather than by this special one.
|
|
||||||
|
|
||||||
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
|
|
||||||
|
|
||||||
0. This License Agreement applies to any software library which
|
|
||||||
contains a notice placed by the copyright holder or other
|
|
||||||
authorized party saying it may be distributed under the terms of
|
|
||||||
this Library General Public License (also called "this License").
|
|
||||||
Each licensee is addressed as "you".
|
|
||||||
|
|
||||||
A "library" means a collection of software functions and/or data
|
|
||||||
prepared so as to be conveniently linked with application programs
|
|
||||||
(which use some of those functions and data) to form executables.
|
|
||||||
|
|
||||||
The "Library", below, refers to any such software library or work
|
|
||||||
which has been distributed under these terms. A "work based on the
|
|
||||||
Library" means either the Library or any derivative work under
|
|
||||||
copyright law: that is to say, a work containing the Library or a
|
|
||||||
portion of it, either verbatim or with modifications and/or
|
|
||||||
translated straightforwardly into another language. (Hereinafter,
|
|
||||||
translation is included without limitation in the term
|
|
||||||
"modification".)
|
|
||||||
|
|
||||||
"Source code" for a work means the preferred form of the work for
|
|
||||||
making modifications to it. For a library, complete source code
|
|
||||||
means all the source code for all modules it contains, plus any
|
|
||||||
associated interface definition files, plus the scripts used to
|
|
||||||
control compilation and installation of the library.
|
|
||||||
|
|
||||||
Activities other than copying, distribution and modification are
|
|
||||||
not covered by this License; they are outside its scope. The act
|
|
||||||
of running a program using the Library is not restricted, and
|
|
||||||
output from such a program is covered only if its contents
|
|
||||||
constitute a work based on the Library (independent of the use of
|
|
||||||
the Library in a tool for writing it). Whether that is true
|
|
||||||
depends on what the Library does and what the program that uses
|
|
||||||
the Library does.
|
|
||||||
|
|
||||||
1. You may copy and distribute verbatim copies of the Library's
|
|
||||||
complete source code as you receive it, in any medium, provided
|
|
||||||
that you conspicuously and appropriately publish on each copy an
|
|
||||||
appropriate copyright notice and disclaimer of warranty; keep
|
|
||||||
intact all the notices that refer to this License and to the
|
|
||||||
absence of any warranty; and distribute a copy of this License
|
|
||||||
along with the Library.
|
|
||||||
|
|
||||||
You may charge a fee for the physical act of transferring a copy,
|
|
||||||
and you may at your option offer warranty protection in exchange
|
|
||||||
for a fee.
|
|
||||||
|
|
||||||
2. You may modify your copy or copies of the Library or any portion
|
|
||||||
of it, thus forming a work based on the Library, and copy and
|
|
||||||
distribute such modifications or work under the terms of Section 1
|
|
||||||
above, provided that you also meet all of these conditions:
|
|
||||||
|
|
||||||
a. The modified work must itself be a software library.
|
|
||||||
|
|
||||||
b. You must cause the files modified to carry prominent notices
|
|
||||||
stating that you changed the files and the date of any change.
|
|
||||||
|
|
||||||
c. You must cause the whole of the work to be licensed at no
|
|
||||||
charge to all third parties under the terms of this License.
|
|
||||||
|
|
||||||
d. If a facility in the modified Library refers to a function or
|
|
||||||
a table of data to be supplied by an application program that
|
|
||||||
uses the facility, other than as an argument passed when the
|
|
||||||
facility is invoked, then you must make a good faith effort
|
|
||||||
to ensure that, in the event an application does not supply
|
|
||||||
such function or table, the facility still operates, and
|
|
||||||
performs whatever part of its purpose remains meaningful.
|
|
||||||
|
|
||||||
(For example, a function in a library to compute square roots
|
|
||||||
has a purpose that is entirely well-defined independent of the
|
|
||||||
application. Therefore, Subsection 2d requires that any
|
|
||||||
application-supplied function or table used by this function
|
|
||||||
must be optional: if the application does not supply it, the
|
|
||||||
square root function must still compute square roots.)
|
|
||||||
|
|
||||||
These requirements apply to the modified work as a whole. If
|
|
||||||
identifiable sections of that work are not derived from the
|
|
||||||
Library, and can be reasonably considered independent and separate
|
|
||||||
works in themselves, then this License, and its terms, do not
|
|
||||||
apply to those sections when you distribute them as separate
|
|
||||||
works. But when you distribute the same sections as part of a
|
|
||||||
whole which is a work based on the Library, the distribution of
|
|
||||||
the whole must be on the terms of this License, whose permissions
|
|
||||||
for other licensees extend to the entire whole, and thus to each
|
|
||||||
and every part regardless of who wrote it.
|
|
||||||
|
|
||||||
Thus, it is not the intent of this section to claim rights or
|
|
||||||
contest your rights to work written entirely by you; rather, the
|
|
||||||
intent is to exercise the right to control the distribution of
|
|
||||||
derivative or collective works based on the Library.
|
|
||||||
|
|
||||||
In addition, mere aggregation of another work not based on the
|
|
||||||
Library with the Library (or with a work based on the Library) on
|
|
||||||
a volume of a storage or distribution medium does not bring the
|
|
||||||
other work under the scope of this License.
|
|
||||||
|
|
||||||
3. You may opt to apply the terms of the ordinary GNU General Public
|
|
||||||
License instead of this License to a given copy of the Library.
|
|
||||||
To do this, you must alter all the notices that refer to this
|
|
||||||
License, so that they refer to the ordinary GNU General Public
|
|
||||||
License, version 2, instead of to this License. (If a newer
|
|
||||||
version than version 2 of the ordinary GNU General Public License
|
|
||||||
has appeared, then you can specify that version instead if you
|
|
||||||
wish.) Do not make any other change in these notices.
|
|
||||||
|
|
||||||
Once this change is made in a given copy, it is irreversible for
|
|
||||||
that copy, so the ordinary GNU General Public License applies to
|
|
||||||
all subsequent copies and derivative works made from that copy.
|
|
||||||
|
|
||||||
This option is useful when you wish to copy part of the code of
|
|
||||||
the Library into a program that is not a library.
|
|
||||||
|
|
||||||
4. You may copy and distribute the Library (or a portion or
|
|
||||||
derivative of it, under Section 2) in object code or executable
|
|
||||||
form under the terms of Sections 1 and 2 above provided that you
|
|
||||||
accompany it with the complete corresponding machine-readable
|
|
||||||
source code, which must be distributed under the terms of Sections
|
|
||||||
1 and 2 above on a medium customarily used for software
|
|
||||||
interchange.
|
|
||||||
|
|
||||||
If distribution of object code is made by offering access to copy
|
|
||||||
from a designated place, then offering equivalent access to copy
|
|
||||||
the source code from the same place satisfies the requirement to
|
|
||||||
distribute the source code, even though third parties are not
|
|
||||||
compelled to copy the source along with the object code.
|
|
||||||
|
|
||||||
5. A program that contains no derivative of any portion of the
|
|
||||||
Library, but is designed to work with the Library by being
|
|
||||||
compiled or linked with it, is called a "work that uses the
|
|
||||||
Library". Such a work, in isolation, is not a derivative work of
|
|
||||||
the Library, and therefore falls outside the scope of this License.
|
|
||||||
|
|
||||||
However, linking a "work that uses the Library" with the Library
|
|
||||||
creates an executable that is a derivative of the Library (because
|
|
||||||
it contains portions of the Library), rather than a "work that
|
|
||||||
uses the library". The executable is therefore covered by this
|
|
||||||
License. Section 6 states terms for distribution of such
|
|
||||||
executables.
|
|
||||||
|
|
||||||
When a "work that uses the Library" uses material from a header
|
|
||||||
file that is part of the Library, the object code for the work may
|
|
||||||
be a derivative work of the Library even though the source code is
|
|
||||||
not. Whether this is true is especially significant if the work
|
|
||||||
can be linked without the Library, or if the work is itself a
|
|
||||||
library. The threshold for this to be true is not precisely
|
|
||||||
defined by law.
|
|
||||||
|
|
||||||
If such an object file uses only numerical parameters, data
|
|
||||||
structure layouts and accessors, and small macros and small inline
|
|
||||||
functions (ten lines or less in length), then the use of the object
|
|
||||||
file is unrestricted, regardless of whether it is legally a
|
|
||||||
derivative work. (Executables containing this object code plus
|
|
||||||
portions of the Library will still fall under Section 6.)
|
|
||||||
|
|
||||||
Otherwise, if the work is a derivative of the Library, you may
|
|
||||||
distribute the object code for the work under the terms of Section
|
|
||||||
6. Any executables containing that work also fall under Section 6,
|
|
||||||
whether or not they are linked directly with the Library itself.
|
|
||||||
|
|
||||||
6. As an exception to the Sections above, you may also compile or
|
|
||||||
link a "work that uses the Library" with the Library to produce a
|
|
||||||
work containing portions of the Library, and distribute that work
|
|
||||||
under terms of your choice, provided that the terms permit
|
|
||||||
modification of the work for the customer's own use and reverse
|
|
||||||
engineering for debugging such modifications.
|
|
||||||
|
|
||||||
You must give prominent notice with each copy of the work that the
|
|
||||||
Library is used in it and that the Library and its use are covered
|
|
||||||
by this License. You must supply a copy of this License. If the
|
|
||||||
work during execution displays copyright notices, you must include
|
|
||||||
the copyright notice for the Library among them, as well as a
|
|
||||||
reference directing the user to the copy of this License. Also,
|
|
||||||
you must do one of these things:
|
|
||||||
|
|
||||||
a. Accompany the work with the complete corresponding
|
|
||||||
machine-readable source code for the Library including
|
|
||||||
whatever changes were used in the work (which must be
|
|
||||||
distributed under Sections 1 and 2 above); and, if the work
|
|
||||||
is an executable linked with the Library, with the complete
|
|
||||||
machine-readable "work that uses the Library", as object code
|
|
||||||
and/or source code, so that the user can modify the Library
|
|
||||||
and then relink to produce a modified executable containing
|
|
||||||
the modified Library. (It is understood that the user who
|
|
||||||
changes the contents of definitions files in the Library will
|
|
||||||
not necessarily be able to recompile the application to use
|
|
||||||
the modified definitions.)
|
|
||||||
|
|
||||||
b. Accompany the work with a written offer, valid for at least
|
|
||||||
three years, to give the same user the materials specified in
|
|
||||||
Subsection 6a, above, for a charge no more than the cost of
|
|
||||||
performing this distribution.
|
|
||||||
|
|
||||||
c. If distribution of the work is made by offering access to copy
|
|
||||||
from a designated place, offer equivalent access to copy the
|
|
||||||
above specified materials from the same place.
|
|
||||||
|
|
||||||
d. Verify that the user has already received a copy of these
|
|
||||||
materials or that you have already sent this user a copy.
|
|
||||||
|
|
||||||
For an executable, the required form of the "work that uses the
|
|
||||||
Library" must include any data and utility programs needed for
|
|
||||||
reproducing the executable from it. However, as a special
|
|
||||||
exception, the source code distributed need not include anything
|
|
||||||
that is normally distributed (in either source or binary form)
|
|
||||||
with the major components (compiler, kernel, and so on) of the
|
|
||||||
operating system on which the executable runs, unless that
|
|
||||||
component itself accompanies the executable.
|
|
||||||
|
|
||||||
It may happen that this requirement contradicts the license
|
|
||||||
restrictions of other proprietary libraries that do not normally
|
|
||||||
accompany the operating system. Such a contradiction means you
|
|
||||||
cannot use both them and the Library together in an executable
|
|
||||||
that you distribute.
|
|
||||||
|
|
||||||
7. You may place library facilities that are a work based on the
|
|
||||||
Library side-by-side in a single library together with other
|
|
||||||
library facilities not covered by this License, and distribute
|
|
||||||
such a combined library, provided that the separate distribution
|
|
||||||
of the work based on the Library and of the other library
|
|
||||||
facilities is otherwise permitted, and provided that you do these
|
|
||||||
two things:
|
|
||||||
|
|
||||||
a. Accompany the combined library with a copy of the same work
|
|
||||||
based on the Library, uncombined with any other library
|
|
||||||
facilities. This must be distributed under the terms of the
|
|
||||||
Sections above.
|
|
||||||
|
|
||||||
b. Give prominent notice with the combined library of the fact
|
|
||||||
that part of it is a work based on the Library, and explaining
|
|
||||||
where to find the accompanying uncombined form of the same
|
|
||||||
work.
|
|
||||||
|
|
||||||
8. You may not copy, modify, sublicense, link with, or distribute the
|
|
||||||
Library except as expressly provided under this License. Any
|
|
||||||
attempt otherwise to copy, modify, sublicense, link with, or
|
|
||||||
distribute the Library is void, and will automatically terminate
|
|
||||||
your rights under this License. However, parties who have
|
|
||||||
received copies, or rights, from you under this License will not
|
|
||||||
have their licenses terminated so long as such parties remain in
|
|
||||||
full compliance.
|
|
||||||
|
|
||||||
9. You are not required to accept this License, since you have not
|
|
||||||
signed it. However, nothing else grants you permission to modify
|
|
||||||
or distribute the Library or its derivative works. These actions
|
|
||||||
are prohibited by law if you do not accept this License.
|
|
||||||
Therefore, by modifying or distributing the Library (or any work
|
|
||||||
based on the Library), you indicate your acceptance of this
|
|
||||||
License to do so, and all its terms and conditions for copying,
|
|
||||||
distributing or modifying the Library or works based on it.
|
|
||||||
|
|
||||||
10. Each time you redistribute the Library (or any work based on the
|
|
||||||
Library), the recipient automatically receives a license from the
|
|
||||||
original licensor to copy, distribute, link with or modify the
|
|
||||||
Library subject to these terms and conditions. You may not impose
|
|
||||||
any further restrictions on the recipients' exercise of the rights
|
|
||||||
granted herein. You are not responsible for enforcing compliance
|
|
||||||
by third parties to this License.
|
|
||||||
|
|
||||||
11. If, as a consequence of a court judgment or allegation of patent
|
|
||||||
infringement or for any other reason (not limited to patent
|
|
||||||
issues), conditions are imposed on you (whether by court order,
|
|
||||||
agreement or otherwise) that contradict the conditions of this
|
|
||||||
License, they do not excuse you from the conditions of this
|
|
||||||
License. If you cannot distribute so as to satisfy simultaneously
|
|
||||||
your obligations under this License and any other pertinent
|
|
||||||
obligations, then as a consequence you may not distribute the
|
|
||||||
Library at all. For example, if a patent license would not permit
|
|
||||||
royalty-free redistribution of the Library by all those who
|
|
||||||
receive copies directly or indirectly through you, then the only
|
|
||||||
way you could satisfy both it and this License would be to refrain
|
|
||||||
entirely from distribution of the Library.
|
|
||||||
|
|
||||||
If any portion of this section is held invalid or unenforceable
|
|
||||||
under any particular circumstance, the balance of the section is
|
|
||||||
intended to apply, and the section as a whole is intended to apply
|
|
||||||
in other circumstances.
|
|
||||||
|
|
||||||
It is not the purpose of this section to induce you to infringe any
|
|
||||||
patents or other property right claims or to contest validity of
|
|
||||||
any such claims; this section has the sole purpose of protecting
|
|
||||||
the integrity of the free software distribution system which is
|
|
||||||
implemented by public license practices. Many people have made
|
|
||||||
generous contributions to the wide range of software distributed
|
|
||||||
through that system in reliance on consistent application of that
|
|
||||||
system; it is up to the author/donor to decide if he or she is
|
|
||||||
willing to distribute software through any other system and a
|
|
||||||
licensee cannot impose that choice.
|
|
||||||
|
|
||||||
This section is intended to make thoroughly clear what is believed
|
|
||||||
to be a consequence of the rest of this License.
|
|
||||||
|
|
||||||
12. If the distribution and/or use of the Library is restricted in
|
|
||||||
certain countries either by patents or by copyrighted interfaces,
|
|
||||||
the original copyright holder who places the Library under this
|
|
||||||
License may add an explicit geographical distribution limitation
|
|
||||||
excluding those countries, so that distribution is permitted only
|
|
||||||
in or among countries not thus excluded. In such case, this
|
|
||||||
License incorporates the limitation as if written in the body of
|
|
||||||
this License.
|
|
||||||
|
|
||||||
13. The Free Software Foundation may publish revised and/or new
|
|
||||||
versions of the Library General Public License from time to time.
|
|
||||||
Such new versions will be similar in spirit to the present version,
|
|
||||||
but may differ in detail to address new problems or concerns.
|
|
||||||
|
|
||||||
Each version is given a distinguishing version number. If the
|
|
||||||
Library specifies a version number of this License which applies
|
|
||||||
to it and "any later version", you have the option of following
|
|
||||||
the terms and conditions either of that version or of any later
|
|
||||||
version published by the Free Software Foundation. If the Library
|
|
||||||
does not specify a license version number, you may choose any
|
|
||||||
version ever published by the Free Software Foundation.
|
|
||||||
|
|
||||||
14. If you wish to incorporate parts of the Library into other free
|
|
||||||
programs whose distribution conditions are incompatible with these,
|
|
||||||
write to the author to ask for permission. For software which is
|
|
||||||
copyrighted by the Free Software Foundation, write to the Free
|
|
||||||
Software Foundation; we sometimes make exceptions for this. Our
|
|
||||||
decision will be guided by the two goals of preserving the free
|
|
||||||
status of all derivatives of our free software and of promoting
|
|
||||||
the sharing and reuse of software generally.
|
|
||||||
|
|
||||||
NO WARRANTY
|
|
||||||
|
|
||||||
15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
|
|
||||||
WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE
|
|
||||||
LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
|
|
||||||
HOLDERS AND/OR OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT
|
|
||||||
WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT
|
|
||||||
NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
|
|
||||||
FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE
|
|
||||||
QUALITY AND PERFORMANCE OF THE LIBRARY IS WITH YOU. SHOULD THE
|
|
||||||
LIBRARY PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY
|
|
||||||
SERVICING, REPAIR OR CORRECTION.
|
|
||||||
|
|
||||||
16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
|
|
||||||
WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY
|
|
||||||
MODIFY AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE
|
|
||||||
LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL,
|
|
||||||
INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR
|
|
||||||
INABILITY TO USE THE LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF
|
|
||||||
DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU
|
|
||||||
OR THIRD PARTIES OR A FAILURE OF THE LIBRARY TO OPERATE WITH ANY
|
|
||||||
OTHER SOFTWARE), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN
|
|
||||||
ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
|
|
||||||
|
|
||||||
END OF TERMS AND CONDITIONS
|
|
||||||
|
|
|
@ -1,67 +0,0 @@
|
||||||
#
|
|
||||||
# Makefile.cfg for GDB stub for DJGPP and Mingw
|
|
||||||
#
|
|
||||||
# libgdbst Copyright 2000 by Jonathan Brogodn
|
|
||||||
#
|
|
||||||
|
|
||||||
#
|
|
||||||
# GNU compiler & tools' flags
|
|
||||||
#
|
|
||||||
CC = gcc
|
|
||||||
CFLAGS = -Wall -Werror -march=i486 -O2 -g
|
|
||||||
|
|
||||||
# Archiver
|
|
||||||
AR = ar
|
|
||||||
ARFLAGS = -r
|
|
||||||
|
|
||||||
# Stripper
|
|
||||||
STRIP = strip
|
|
||||||
|
|
||||||
# Assembler
|
|
||||||
AS = as
|
|
||||||
ASFLAGS =
|
|
||||||
|
|
||||||
# Linker
|
|
||||||
LD = ld
|
|
||||||
LDFLAGS =
|
|
||||||
|
|
||||||
# Remove
|
|
||||||
RM = rm -f
|
|
||||||
|
|
||||||
# Echo
|
|
||||||
ECHO = echo
|
|
||||||
|
|
||||||
# Echo Blank
|
|
||||||
#ECHOBLANK = echo ""
|
|
||||||
ECHOBLANK = echo.
|
|
||||||
|
|
||||||
#
|
|
||||||
# check for OS... badly
|
|
||||||
#
|
|
||||||
|
|
||||||
ifndef DJDIR
|
|
||||||
ifndef DJGPP
|
|
||||||
WINDOWS=1
|
|
||||||
endif
|
|
||||||
endif
|
|
||||||
|
|
||||||
ifndef windir
|
|
||||||
ifndef WINDOWS
|
|
||||||
DJGPP=1
|
|
||||||
endif
|
|
||||||
endif
|
|
||||||
|
|
||||||
#
|
|
||||||
# Rules
|
|
||||||
#
|
|
||||||
.SUFFIXES: .c .asm .o
|
|
||||||
|
|
||||||
.asm.o:
|
|
||||||
@$(CC) $(CFLAGS) -I$(INC_PATH) -c -o ./$@ ./$<
|
|
||||||
|
|
||||||
.s.o:
|
|
||||||
@$(AS) $(ASFLAGS) ./$<
|
|
||||||
|
|
||||||
.c.o :
|
|
||||||
@$(CC) $(CFLAGS) -c -I$(INC_PATH) -c -o ./$@ ./$<
|
|
||||||
|
|
|
@ -1,171 +0,0 @@
|
||||||
GDB Stub for DJGPP 0.2 Readme File
|
|
||||||
==================================
|
|
||||||
|
|
||||||
Copyright
|
|
||||||
---------
|
|
||||||
GDB Stub for DJGPP is distributed under the terms of the GNU Library
|
|
||||||
General Public License (GNU LGPL) - please see the document LICENSE,
|
|
||||||
which should be found in the same directory as this file.
|
|
||||||
|
|
||||||
Copyright (c) 2000 by Jonathan Brogdon, 2002 by Gordon Schumacher
|
|
||||||
|
|
||||||
What It Does
|
|
||||||
------------
|
|
||||||
The GDB stub is used to debug a DJGPP target remotely over a one of
|
|
||||||
the PC COM ports. GDB, running on a host machine, communicates with
|
|
||||||
the target using the GDB serial protocol over the serial link. For
|
|
||||||
more information on the GDB stub, see "Debugging with GDB, The GNU
|
|
||||||
Source-Level Debugger", by Richard M. Stallman and Roland H. Pesch
|
|
||||||
(http://sources.redhat.com/gdb/download/onlinedocs/gdb.html)
|
|
||||||
|
|
||||||
How It Works
|
|
||||||
------------
|
|
||||||
|
|
||||||
Exceptions:
|
|
||||||
|
|
||||||
The GDB stub needs to handle all processor exceptions. Since these
|
|
||||||
exceptions already handled by DJGPP, we cannot handle them directly.
|
|
||||||
DJGPP maps all processor exceptions to signals. Therefore, we can
|
|
||||||
install the GDB stub handler as the signal handler for those signals
|
|
||||||
that represent processor exceptions. The following table shows the
|
|
||||||
processor exception to signal mapping:
|
|
||||||
|
|
||||||
Exception/Interrupt: Exception #: Signal:
|
|
||||||
------------------- ----------- ------
|
|
||||||
Divide Error 0 SIGFPE
|
|
||||||
Debug Exception 1 SIGTRAP
|
|
||||||
NMI Interrupt 2 No signal defined
|
|
||||||
Breakpoint 3 SIGTRAP
|
|
||||||
INTO-detected overflow 4 SIGFPE
|
|
||||||
BOUND Range Exceeded 5 SIGSEGV
|
|
||||||
Invalid Opcode 6 No signal defined
|
|
||||||
Coprocessor not available 7 SIGNOFP
|
|
||||||
Double Fault 8 SIGSEGV
|
|
||||||
Coprocessor Seg overrun 9 SIGSEGV
|
|
||||||
Invalid Task State Seg 10 No signal defined
|
|
||||||
Segment not present 11 SIGSEGV
|
|
||||||
Stack Fault 12 SIGSEGV
|
|
||||||
General Protection Fault 13 SIGSEGV
|
|
||||||
Page Fault 14 SIGSEGV
|
|
||||||
Intel Reserved 15 No signal defined
|
|
||||||
Coprocessor Error 16 SIGFPE
|
|
||||||
|
|
||||||
The GDB stub handler services requests from the GDB host. These
|
|
||||||
requests are seen by the GDB stub handler as command messages from
|
|
||||||
the GDB host. These commands and command formats are defined in
|
|
||||||
"Debugging with GDB, The GNU Source-Level Debugger", by Richard M.
|
|
||||||
Stallman and Roland H. Pesch (http://sources.redhat.com/gdb/
|
|
||||||
download/onlinedocs/gdb.html -- one of many sources).
|
|
||||||
|
|
||||||
Serial Interface:
|
|
||||||
|
|
||||||
Interface functions for sending and receiving characters from the
|
|
||||||
serial interface must be provided by the engineer porting the GDB
|
|
||||||
stub. The following funtions must be provided to support the
|
|
||||||
implementation.
|
|
||||||
|
|
||||||
int getDebugChar(void);
|
|
||||||
void putDebugChar(int c);
|
|
||||||
|
|
||||||
There are a variety of serial libraries for DJGPP. The user may
|
|
||||||
already be using one of these libraries in their application, and
|
|
||||||
installing more than one serial library often causes conflicts.
|
|
||||||
To this end, a modular function layer was written that allows any
|
|
||||||
serial library to be used with the GDB stub. Layers have been
|
|
||||||
written to support SVAsync, DZComm, and the _bios_serialcom()
|
|
||||||
function. At the time of this writing, DZComm appears to work the
|
|
||||||
best for serial debugging.
|
|
||||||
|
|
||||||
Hard Coded Breakpoint:
|
|
||||||
|
|
||||||
A breakpoint() function is provided to manually invoke the stub.
|
|
||||||
This function, inserts a breakpoint instruction directly in the code
|
|
||||||
to invoke the GDB stub handler.
|
|
||||||
|
|
||||||
How You Use It
|
|
||||||
--------------
|
|
||||||
First, you need to select a serial library. In the i386-supp.c file,
|
|
||||||
there are lines of the form
|
|
||||||
|
|
||||||
// #include "some_layer.h"
|
|
||||||
|
|
||||||
Uncomment the line for the serial library you intend to use - or add
|
|
||||||
a new include line for a file written for some other library.
|
|
||||||
In the main() function of your target program, you should initilize
|
|
||||||
the GDB serial handlers and the GDB stub. The following functions
|
|
||||||
are provided in the GDB stub library for this purpose.
|
|
||||||
|
|
||||||
gdb_serial_init(unsigned int port, unsigned int speed);
|
|
||||||
gdb_target_init(void);
|
|
||||||
|
|
||||||
Where, port is the COM port number, and speed is the baud rate for
|
|
||||||
the serial link.
|
|
||||||
|
|
||||||
After initialing the GDB serial interface and target, you should
|
|
||||||
invoke the breakpoint() function somewhere. You may choose to do
|
|
||||||
this immediately after initialization, or at a specific location in
|
|
||||||
your code where you wish to set a breakpoint. By putting the
|
|
||||||
breakpoint() function in the beginning of main(), you can use the
|
|
||||||
GDB host to set a breakpoint at any place in your code.
|
|
||||||
|
|
||||||
Make sure that you use the '-g' option when compiling your files with
|
|
||||||
gcc.
|
|
||||||
|
|
||||||
After the target executable is running, start up gdb on the host,
|
|
||||||
passing the target executable as an argument.
|
|
||||||
|
|
||||||
Example: gdb demo.exe
|
|
||||||
|
|
||||||
Now, tell gdb which serial interface to use for communicating to
|
|
||||||
the target.
|
|
||||||
|
|
||||||
Example: (gdb) target remote COM1
|
|
||||||
|
|
||||||
This example uses COM1 on the host to communicate with the target.
|
|
||||||
GDB is now 'listening' on COM for a valid GDB serial packet.
|
|
||||||
|
|
||||||
Once your GDB host finds your target, you may need to tell GDB where
|
|
||||||
to find any source files which were used to generate your program.
|
|
||||||
Use the directory command to do this.
|
|
||||||
|
|
||||||
Example: (gdb) directory ../src/demo
|
|
||||||
|
|
||||||
That's it. You should now be able to single step through code, set
|
|
||||||
breakpoints, set variables, examine variables, any anthing else that
|
|
||||||
you would normally use GDB to accomplish.
|
|
||||||
|
|
||||||
What You Build
|
|
||||||
--------------
|
|
||||||
Read the INSTALL file for more information on installing the GDB stub
|
|
||||||
library. After installing the library, your code should include
|
|
||||||
i386-stub.h for function prototypes. In addition, your code should
|
|
||||||
link against the libgdb.a library. The source for a demonstration
|
|
||||||
program has been included with this distributias an example.
|
|
||||||
As an alternative, you can simply include the i386-stub and i386-supp
|
|
||||||
files and the layer header for the serial library you plan to use into
|
|
||||||
your project and link them in directly.
|
|
||||||
|
|
||||||
For More Info
|
|
||||||
-------------
|
|
||||||
See "Debugging with GDB, The GNU Source-Level Debugger", by Richard
|
|
||||||
M. Stallman and Roland H. Pesch (http://sources.redhat.com/gdb/
|
|
||||||
download/onlinedocs/gdb.html -- one of many sources).
|
|
||||||
|
|
||||||
TODO
|
|
||||||
----
|
|
||||||
Port for network operation.
|
|
||||||
|
|
||||||
Contact Info
|
|
||||||
------------
|
|
||||||
My contact info is below. If you have any comments, suggestions, bug
|
|
||||||
reports or problems, please mail me, and I'll see what I can do.
|
|
||||||
|
|
||||||
Regards,
|
|
||||||
Jonathan Brogdon
|
|
||||||
<brogdon@austin.rr.com>
|
|
||||||
6th June 2000
|
|
||||||
|
|
||||||
Modular update:
|
|
||||||
Gordon Schumacher
|
|
||||||
<gordons@valleyhold.org>
|
|
||||||
12th February 2002
|
|
|
@ -1,46 +0,0 @@
|
||||||
#define POLY 0x8408
|
|
||||||
/*
|
|
||||||
// 16 12 5
|
|
||||||
// this is the CCITT CRC 16 polynomial X + X + X + 1.
|
|
||||||
// This works out to be 0x1021, but the way the algorithm works
|
|
||||||
// lets us use 0x8408 (the reverse of the bit pattern). The high
|
|
||||||
// bit is always assumed to be set, thus we only use 16 bits to
|
|
||||||
// represent the 17 bit value.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include "crc.h"
|
|
||||||
|
|
||||||
WORD crc16(char *data_p, WORD length)
|
|
||||||
{
|
|
||||||
unsigned char i;
|
|
||||||
unsigned int data;
|
|
||||||
unsigned int crc = 0xffff;
|
|
||||||
|
|
||||||
if (length == 0)
|
|
||||||
return (~crc);
|
|
||||||
|
|
||||||
do
|
|
||||||
{
|
|
||||||
for (i=0, data=(unsigned int)0xff & *data_p++;
|
|
||||||
i < 8;
|
|
||||||
i++, data >>= 1)
|
|
||||||
{
|
|
||||||
if ((crc & 0x0001) ^ (data & 0x0001))
|
|
||||||
crc = (crc >> 1) ^ POLY;
|
|
||||||
else crc >>= 1;
|
|
||||||
}
|
|
||||||
} while (--length);
|
|
||||||
|
|
||||||
crc = ~crc;
|
|
||||||
data = crc;
|
|
||||||
crc = (crc << 8) | ((data >> 8) & 0xff);
|
|
||||||
|
|
||||||
return (crc);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1,42 +0,0 @@
|
||||||
#
|
|
||||||
# Makefile for GDB Stub demo
|
|
||||||
# Written by Jonathan Brogodn
|
|
||||||
#
|
|
||||||
# GDB Stub for DJGPP Copyright 2000 by Jonathan Brogdon
|
|
||||||
#
|
|
||||||
|
|
||||||
include ../../Makefile.cfg
|
|
||||||
|
|
||||||
CFLAGS += -g
|
|
||||||
CFLAGS += -I../../include -I../include -I.
|
|
||||||
CFLAGS += -DDEBUG_COM_PORT=1
|
|
||||||
CFLAGS += -DDEBUG_COM_PORT_SPEED=9600
|
|
||||||
CFLAGS += -DREMOTE_DEBUGGING
|
|
||||||
|
|
||||||
# Objects to build
|
|
||||||
OBJS = serdbg.o crc_16.o
|
|
||||||
|
|
||||||
all: demo
|
|
||||||
|
|
||||||
demo: $(OBJS)
|
|
||||||
ifdef DJGPP
|
|
||||||
@$(LD) $(LDFLAGS) -Map ./$@.map -o../../demo/$@.exe $(DJDIR)/lib/crt0.o $(OBJS) -L$(DJDIR)/lib -L../../lib -lgdbst -ldzcom -lc -lgcc
|
|
||||||
endif
|
|
||||||
ifdef WINDOWS
|
|
||||||
@$(LD) $(LDFLAGS) -Map ./$@.map -o../../demo/$@.exe $(DJDIR)/lib/crt0.o $(OBJS) -L../../lib -lgdbst -lwsock32 -lc -lgcc
|
|
||||||
endif
|
|
||||||
|
|
||||||
clean:
|
|
||||||
@$(RM) $(OBJS)
|
|
||||||
@$(RM) *.map
|
|
||||||
|
|
||||||
distclean: clean
|
|
||||||
@$(RM) $(OBJS)
|
|
||||||
@$(RM) depend.dep
|
|
||||||
@$(RM) ../../demo/*.exe
|
|
||||||
|
|
||||||
dep:
|
|
||||||
@$(CC) $(CFLAGS) -M *.c > depend.dep
|
|
||||||
|
|
||||||
$(OBJS):
|
|
||||||
include depend.dep
|
|
|
@ -1,102 +0,0 @@
|
||||||
/***********************************************************************
|
|
||||||
* serdbg.c
|
|
||||||
*
|
|
||||||
* Description: Pretty simple demonstration program. It accomplishes
|
|
||||||
* the following.
|
|
||||||
*
|
|
||||||
* 1. Allocate a block of memory Feel free to change
|
|
||||||
* size (memBlockSize) with debugger.
|
|
||||||
*
|
|
||||||
* 2. Writes a word pattern to the entire block. Feel
|
|
||||||
* free to change the pattern (memPatternWord) with
|
|
||||||
* debugger.
|
|
||||||
*
|
|
||||||
* 3. Computes the CRC-16 on the block. Feel free to
|
|
||||||
* check the size with the debuger.
|
|
||||||
*
|
|
||||||
* 4. Free the memory block allocated in step 1. Repeat
|
|
||||||
* step 1. If you wish to exit, set doneFlag to 0 with
|
|
||||||
* the debugger.
|
|
||||||
*
|
|
||||||
* Credits: Created by Jonathan Brogdon
|
|
||||||
*
|
|
||||||
* Terms of use: Use as you will.
|
|
||||||
*
|
|
||||||
* Global Data: None.
|
|
||||||
* Global Functions: main
|
|
||||||
*
|
|
||||||
* History
|
|
||||||
* Engineer: Date: Notes:
|
|
||||||
* --------- ----- ------
|
|
||||||
* Jonathan Brogdon 070500 Genesis
|
|
||||||
*
|
|
||||||
***********************************************************************/
|
|
||||||
#include <stdio.h>
|
|
||||||
#include <stdlib.h>
|
|
||||||
#include <i386-stub.h>
|
|
||||||
#include <crc.h>
|
|
||||||
|
|
||||||
#define MEM_BLOCK_SIZE 100 /* Words */
|
|
||||||
#define MEM_PATTERN_WORD 0x55AA
|
|
||||||
|
|
||||||
void write_mem_pattern(unsigned short*, unsigned short, unsigned short);
|
|
||||||
|
|
||||||
/************************************************************************
|
|
||||||
*
|
|
||||||
* main()
|
|
||||||
*
|
|
||||||
************************************************************************/
|
|
||||||
int main(int argc, char *argv[])
|
|
||||||
{
|
|
||||||
volatile int doneFlag = 0;
|
|
||||||
unsigned short crcValue = 0;
|
|
||||||
unsigned short * memBlockPtr = NULL;
|
|
||||||
short memBlockSize = MEM_BLOCK_SIZE;
|
|
||||||
short memPatternWord = MEM_PATTERN_WORD;
|
|
||||||
|
|
||||||
#ifdef REMOTE_DEBUGGING
|
|
||||||
/* Only setup if demonstrating remote debugging */
|
|
||||||
gdb_serial_init(DEBUG_COM_PORT,DEBUG_COM_PORT_SPEED);
|
|
||||||
gdb_target_init();
|
|
||||||
breakpoint();
|
|
||||||
#endif
|
|
||||||
|
|
||||||
while(doneFlag != 1)
|
|
||||||
{
|
|
||||||
memBlockSize = MEM_BLOCK_SIZE;
|
|
||||||
memPatternWord = MEM_PATTERN_WORD;
|
|
||||||
memBlockPtr = (unsigned short *) malloc((int)memBlockSize);
|
|
||||||
|
|
||||||
write_mem_pattern(memBlockPtr, memBlockSize, memPatternWord);
|
|
||||||
|
|
||||||
crcValue = crc16((char *)memBlockPtr,memBlockSize);
|
|
||||||
|
|
||||||
free(memBlockPtr);
|
|
||||||
}
|
|
||||||
|
|
||||||
exit(0);
|
|
||||||
}
|
|
||||||
|
|
||||||
/************************************************************************
|
|
||||||
*
|
|
||||||
* write_mem_pattern()
|
|
||||||
*
|
|
||||||
* Description: Writes a word pattern to a block of RAM.
|
|
||||||
*
|
|
||||||
************************************************************************/
|
|
||||||
void write_mem_pattern(unsigned short *block, unsigned short blockSize, unsigned short patternWord)
|
|
||||||
{
|
|
||||||
int index = 0;
|
|
||||||
|
|
||||||
for(index = 0; index < blockSize; index++)
|
|
||||||
{
|
|
||||||
block[index] = patternWord;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1,20 +0,0 @@
|
||||||
/*
|
|
||||||
* CRC.H - header file for CRC functions
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef _CRC_H_
|
|
||||||
#define _CRC_H_
|
|
||||||
|
|
||||||
#include <stdlib.h> /* For size_t */
|
|
||||||
|
|
||||||
typedef unsigned char BYTE;
|
|
||||||
typedef unsigned short WORD;
|
|
||||||
typedef unsigned long DWORD;
|
|
||||||
|
|
||||||
/*
|
|
||||||
** File: CRC-16.C
|
|
||||||
*/
|
|
||||||
|
|
||||||
WORD crc16(char *data_p, WORD length);
|
|
||||||
|
|
||||||
#endif /* _CRC_H_ */
|
|
|
@ -1,30 +0,0 @@
|
||||||
/****************************************************************************
|
|
||||||
*
|
|
||||||
* i386-supp.h
|
|
||||||
*
|
|
||||||
* Description: Data definitions and constants for low level
|
|
||||||
* GDB stub support.
|
|
||||||
*
|
|
||||||
* Terms of use: This software is provided for use under the terms
|
|
||||||
* and conditions of the GNU General Public License.
|
|
||||||
* You should have received a copy of the GNU General
|
|
||||||
* Public License along with this program; if not, write
|
|
||||||
* to the Free Software Foundation, Inc., 59 Temple Place
|
|
||||||
* Suite 330, Boston, MA 02111-1307, USA.
|
|
||||||
*
|
|
||||||
* Credits: Created by Jonathan Brogdon
|
|
||||||
*
|
|
||||||
* History
|
|
||||||
* Engineer: Date: Notes:
|
|
||||||
* --------- ----- ------
|
|
||||||
* Jonathan Brogdon 20000629 Genesis
|
|
||||||
* Gordon Schumacher 20020212 Updated for modularity
|
|
||||||
*
|
|
||||||
****************************************************************************/
|
|
||||||
#ifndef _GDBSUPP_H_
|
|
||||||
#define _GDBSUPP_H_
|
|
||||||
|
|
||||||
extern int putDebugChar(char c);
|
|
||||||
extern int getDebugChar(void);
|
|
||||||
|
|
||||||
#endif /* _GDBSUPP_H_ */
|
|
|
@ -1,137 +0,0 @@
|
||||||
//=======================================================================================================
|
|
||||||
// bios_layer.h - Serial command layer for standard BIOS calls
|
|
||||||
// It's here if you want it, but I wouldn't suggest it...
|
|
||||||
//=======================================================================================================
|
|
||||||
|
|
||||||
//=======================================================================================================
|
|
||||||
//=======================================================================================================
|
|
||||||
|
|
||||||
#ifndef _BIOS_LAYER_H
|
|
||||||
#define _BIOS_LAYER_H
|
|
||||||
|
|
||||||
|
|
||||||
//===============================================================================
|
|
||||||
// Include files
|
|
||||||
//===============================================================================
|
|
||||||
|
|
||||||
#include <pc.h>
|
|
||||||
|
|
||||||
//===============================================================================
|
|
||||||
// Static variable definitions
|
|
||||||
//===============================================================================
|
|
||||||
|
|
||||||
unsigned comport;
|
|
||||||
|
|
||||||
//===============================================================================
|
|
||||||
// Inline function definitions
|
|
||||||
//===============================================================================
|
|
||||||
|
|
||||||
#define BIOS_SER_TIMEOUT 1000000
|
|
||||||
|
|
||||||
// Initialize the serial library
|
|
||||||
// Should return 0 if no error occurred
|
|
||||||
__inline int GDBStub_SerInit(int port)
|
|
||||||
{
|
|
||||||
comport = (unsigned) port;
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// Set the serial port speed (and other configurables)
|
|
||||||
// Should return 0 if the speed is set properly
|
|
||||||
__inline int GDBStub_SerSpeed(int speed)
|
|
||||||
{
|
|
||||||
unsigned bps;
|
|
||||||
|
|
||||||
switch (speed)
|
|
||||||
{
|
|
||||||
case 110:
|
|
||||||
bps = _COM_110;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 150:
|
|
||||||
bps = _COM_150;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 300:
|
|
||||||
bps = _COM_300;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 600:
|
|
||||||
bps = _COM_600;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 1200:
|
|
||||||
bps = _COM_1200;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 2400:
|
|
||||||
bps = _COM_2400;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 4800:
|
|
||||||
bps = _COM_4800;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 9600:
|
|
||||||
default:
|
|
||||||
bps = _COM_9600;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
_bios_serialcom(_COM_INIT, comport,
|
|
||||||
bps | _COM_NOPARITY | _COM_CHR8 | _COM_STOP1);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// Check to see if there's room in the buffer to send data
|
|
||||||
// Should return 0 if it is okay to send
|
|
||||||
__inline int GDBStub_SerSendOk(void)
|
|
||||||
{
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// Send a character to the serial port
|
|
||||||
// Should return 0 if the send succeeds
|
|
||||||
__inline int GDBStub_SerSend(int c)
|
|
||||||
{
|
|
||||||
register int ret;
|
|
||||||
register int timeout = 0;
|
|
||||||
|
|
||||||
do
|
|
||||||
{
|
|
||||||
ret = _bios_serialcom(_COM_SEND, comport, (unsigned) c);
|
|
||||||
} while((ret != 0) && (timeout++ < BIOS_SER_TIMEOUT));
|
|
||||||
return (timeout >= BIOS_SER_TIMEOUT);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// Check to see if there are characters waiting in the buffer
|
|
||||||
// Should return 0 if there's data waiting
|
|
||||||
__inline int GDBStub_SerRecvOk(void)
|
|
||||||
{
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// Read a character from the serial port
|
|
||||||
// Should return the character read
|
|
||||||
__inline int GDBStub_SerRecv(void)
|
|
||||||
{
|
|
||||||
register int data;
|
|
||||||
register int timeout = 0;
|
|
||||||
|
|
||||||
do
|
|
||||||
{
|
|
||||||
data = _bios_serialcom(_COM_RECEIVE, comport, 0) & 0xff;
|
|
||||||
} while((data > 0xff) && (timeout++ < BIOS_SER_TIMEOUT));
|
|
||||||
|
|
||||||
return data;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#endif
|
|
|
@ -1,169 +0,0 @@
|
||||||
//=======================================================================================================
|
|
||||||
// dzc_layer.h - Serial command layer for DZcomm
|
|
||||||
//
|
|
||||||
//=======================================================================================================
|
|
||||||
|
|
||||||
//=======================================================================================================
|
|
||||||
//=======================================================================================================
|
|
||||||
|
|
||||||
#ifndef _DZC_LAYER_H
|
|
||||||
#define _DZC_LAYER_H
|
|
||||||
|
|
||||||
|
|
||||||
//===============================================================================
|
|
||||||
// Include files
|
|
||||||
//===============================================================================
|
|
||||||
|
|
||||||
#include <dzcomm.h>
|
|
||||||
|
|
||||||
//===============================================================================
|
|
||||||
// Static variable definitions
|
|
||||||
//===============================================================================
|
|
||||||
|
|
||||||
comm_port *comport;
|
|
||||||
|
|
||||||
//===============================================================================
|
|
||||||
// Inline function definitions
|
|
||||||
//===============================================================================
|
|
||||||
|
|
||||||
// Initialize the serial library
|
|
||||||
// Should return 0 if no error occurred
|
|
||||||
__inline int GDBStub_SerInit(int port)
|
|
||||||
{
|
|
||||||
int ret;
|
|
||||||
comm com;
|
|
||||||
|
|
||||||
ret = dzcomm_init();
|
|
||||||
if (ret != 0)
|
|
||||||
{
|
|
||||||
switch (port)
|
|
||||||
{
|
|
||||||
case 4:
|
|
||||||
com = _com4;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 3:
|
|
||||||
com = _com3;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 2:
|
|
||||||
com = _com2;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 1:
|
|
||||||
default:
|
|
||||||
com = _com1;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
comport = comm_port_init(com);
|
|
||||||
}
|
|
||||||
return (ret == 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Set the serial port speed (and other configurables)
|
|
||||||
// Should return 0 if the speed is set properly
|
|
||||||
__inline int GDBStub_SerSpeed(int speed)
|
|
||||||
{
|
|
||||||
baud_bits bps;
|
|
||||||
|
|
||||||
switch (speed)
|
|
||||||
{
|
|
||||||
case 110:
|
|
||||||
bps = _110;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 150:
|
|
||||||
bps = _150;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 300:
|
|
||||||
bps = _300;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 600:
|
|
||||||
bps = _600;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 1200:
|
|
||||||
bps = _1200;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 2400:
|
|
||||||
bps = _2400;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 4800:
|
|
||||||
bps = _4800;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 9600:
|
|
||||||
bps = _9600;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 19200:
|
|
||||||
bps = _19200;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 38400:
|
|
||||||
bps = _38400;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 57600:
|
|
||||||
bps = _57600;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 115200:
|
|
||||||
default:
|
|
||||||
bps = _115200;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
comm_port_set_baud_rate(comport, bps);
|
|
||||||
comm_port_set_parity(comport, NO_PARITY);
|
|
||||||
comm_port_set_data_bits(comport, BITS_8);
|
|
||||||
comm_port_set_stop_bits(comport, STOP_1);
|
|
||||||
comm_port_set_flow_control(comport, RTS_CTS);
|
|
||||||
comm_port_install_handler(comport);
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Check to see if there's room in the buffer to send data
|
|
||||||
// Should return 0 if it is okay to send
|
|
||||||
__inline int GDBStub_SerSendOk(void)
|
|
||||||
{
|
|
||||||
return (comm_port_out_full(comport) == 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Send a character to the serial port
|
|
||||||
// Should return 0 if the send succeeds
|
|
||||||
__inline int GDBStub_SerSend(int c)
|
|
||||||
{
|
|
||||||
return comm_port_out(comport, (unsigned char) c);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Check to see if there are characters waiting in the buffer
|
|
||||||
// Should return 0 if there's data waiting
|
|
||||||
__inline int GDBStub_SerRecvOk(void)
|
|
||||||
{
|
|
||||||
return (comm_port_in_empty(comport) == 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Read a character from the serial port
|
|
||||||
// Should return the character read
|
|
||||||
__inline int GDBStub_SerRecv(void)
|
|
||||||
{
|
|
||||||
return comm_port_test(comport);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/*==================================================================
|
|
||||||
|
|
||||||
$Log: $
|
|
||||||
|
|
||||||
|
|
||||||
===============================================================*/
|
|
File diff suppressed because it is too large
Load diff
|
@ -1,424 +0,0 @@
|
||||||
/***********************************************************************
|
|
||||||
* i386-supp.c
|
|
||||||
*
|
|
||||||
* Description: Support functions for the i386 GDB target stub.
|
|
||||||
*
|
|
||||||
* Credits: Created by Jonathan Brogdon
|
|
||||||
*
|
|
||||||
* Terms of use: This software is provided for use under the terms
|
|
||||||
* and conditions of the GNU General Public License.
|
|
||||||
* You should have received a copy of the GNU General
|
|
||||||
* Public License along with this program; if not, write
|
|
||||||
* to the Free Software Foundation, Inc., 59 Temple Place
|
|
||||||
* Suite 330, Boston, MA 02111-1307, USA.
|
|
||||||
*
|
|
||||||
* Global Data: None.
|
|
||||||
* Global Functions:
|
|
||||||
* gdb_serial_init
|
|
||||||
* gdb_target_init
|
|
||||||
* gdb_target_close
|
|
||||||
* putDebugChar
|
|
||||||
* getDebugChar
|
|
||||||
*
|
|
||||||
* History
|
|
||||||
* Engineer: Date: Notes:
|
|
||||||
* --------- ----- ------
|
|
||||||
* Jonathan Brogdon 20000617 Genesis
|
|
||||||
* Gordon Schumacher 20020212 Updated for modularity
|
|
||||||
*
|
|
||||||
***********************************************************************/
|
|
||||||
|
|
||||||
|
|
||||||
#ifdef DJGPP
|
|
||||||
#include <bios.h>
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef _WIN32
|
|
||||||
#define WIN32_LEAN_AND_MEAN
|
|
||||||
#include <windows.h>
|
|
||||||
#include <winsock.h>
|
|
||||||
#include <errno.h>
|
|
||||||
#define DEBUGBUFFERSIZE 1024
|
|
||||||
HANDLE ser_port = (HANDLE)(-1);
|
|
||||||
|
|
||||||
//#include "utility/utility.h"
|
|
||||||
#ifdef _MSC_VER
|
|
||||||
#ifndef DEBUG_SERIAL
|
|
||||||
#pragma comment(lib, "wsock32")
|
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include <stdlib.h>
|
|
||||||
#include <i386-stub.h>
|
|
||||||
|
|
||||||
#ifdef DJGPP
|
|
||||||
//#include "bios_layer.h" // Include this for BIOS calls - NOT RECOMMENDED!
|
|
||||||
//#include "sva_layer.h" // Include this for SVAsync usage
|
|
||||||
#include "dzc_layer.h" // Include this for DZComm usage
|
|
||||||
|
|
||||||
|
|
||||||
#endif
|
|
||||||
#define SER_TIMEOUT 1000000
|
|
||||||
|
|
||||||
#ifdef _WIN32
|
|
||||||
static LPTOP_LEVEL_EXCEPTION_FILTER s_prev_exc_handler = 0;
|
|
||||||
|
|
||||||
|
|
||||||
#define I386_EXCEPTION_CNT 17
|
|
||||||
|
|
||||||
LONG WINAPI exc_protection_handler(EXCEPTION_POINTERS* exc_info)
|
|
||||||
{
|
|
||||||
int exc_nr = exc_info->ExceptionRecord->ExceptionCode & 0xFFFF;
|
|
||||||
|
|
||||||
if (exc_nr < I386_EXCEPTION_CNT) {
|
|
||||||
//LOG(FmtString(TEXT("exc_protection_handler: Exception %x"), exc_nr));
|
|
||||||
|
|
||||||
#if 0
|
|
||||||
if (exc_nr==11 || exc_nr==13 || exc_nr==14) {
|
|
||||||
if (mem_fault_routine)
|
|
||||||
mem_fault_routine();
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
++exc_info->ContextRecord->Eip;
|
|
||||||
}
|
|
||||||
|
|
||||||
return EXCEPTION_CONTINUE_EXECUTION;
|
|
||||||
}
|
|
||||||
|
|
||||||
LONG WINAPI exc_handler(EXCEPTION_POINTERS* exc_info)
|
|
||||||
{
|
|
||||||
int exc_nr = exc_info->ExceptionRecord->ExceptionCode & 0xFFFF;
|
|
||||||
|
|
||||||
if (exc_nr < I386_EXCEPTION_CNT) {
|
|
||||||
//LOG(FmtString("Exception %x", exc_nr));
|
|
||||||
//LOG(FmtString("EIP=%08X EFLAGS=%08X", exc_info->ContextRecord->Eip, exc_info->ContextRecord->EFlags));
|
|
||||||
|
|
||||||
// step over initial breakpoint
|
|
||||||
if (s_initial_breakpoint) {
|
|
||||||
s_initial_breakpoint = 0;
|
|
||||||
++exc_info->ContextRecord->Eip;
|
|
||||||
}
|
|
||||||
|
|
||||||
SetUnhandledExceptionFilter(exc_protection_handler);
|
|
||||||
|
|
||||||
win32_exception_handler(exc_info);
|
|
||||||
//LOG(FmtString("EIP=%08X EFLAGS=%08X", exc_info->ContextRecord->Eip, exc_info->ContextRecord->EFlags));
|
|
||||||
|
|
||||||
SetUnhandledExceptionFilter(exc_handler);
|
|
||||||
|
|
||||||
return EXCEPTION_CONTINUE_EXECUTION;
|
|
||||||
}
|
|
||||||
|
|
||||||
return EXCEPTION_CONTINUE_SEARCH;
|
|
||||||
}
|
|
||||||
|
|
||||||
void disable_debugging()
|
|
||||||
{
|
|
||||||
if (s_prev_exc_handler) {
|
|
||||||
SetUnhandledExceptionFilter(s_prev_exc_handler);
|
|
||||||
s_prev_exc_handler = 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if !(defined(DJGPP) || defined(_WIN32))
|
|
||||||
void exceptionHandler(int exc_nr, void* exc_addr)
|
|
||||||
{
|
|
||||||
if (exc_nr>=0 && exc_nr<I386_EXCEPTION_CNT)
|
|
||||||
exc_handlers[exc_nr] = exc_addr;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/***********************************************************************
|
|
||||||
* gdb_serial_init
|
|
||||||
*
|
|
||||||
* Description: Initializes the serial port for remote debugging.
|
|
||||||
*
|
|
||||||
* Inputs:
|
|
||||||
* port - the PC COM port to use.
|
|
||||||
* speed - the COM port speed.
|
|
||||||
* Outputs: None.
|
|
||||||
* Returns: 0 for success
|
|
||||||
*
|
|
||||||
***********************************************************************/
|
|
||||||
int gdb_serial_init(unsigned int port, unsigned int speed)
|
|
||||||
{
|
|
||||||
#ifdef DJGPP
|
|
||||||
int ret;
|
|
||||||
|
|
||||||
ret = GDBStub_SerInit(port);
|
|
||||||
if (ret == 0)
|
|
||||||
ret = GDBStub_SerSpeed(speed);
|
|
||||||
|
|
||||||
return ret;
|
|
||||||
#elif defined(_WIN32)
|
|
||||||
DCB dcb ;
|
|
||||||
|
|
||||||
port = 0; //TODO
|
|
||||||
|
|
||||||
s_prev_exc_handler = SetUnhandledExceptionFilter(exc_handler);
|
|
||||||
|
|
||||||
ser_port = CreateFile( "COM1", GENERIC_READ | GENERIC_WRITE,
|
|
||||||
0, // exclusive access
|
|
||||||
NULL, // no security attrs
|
|
||||||
OPEN_EXISTING,
|
|
||||||
FILE_ATTRIBUTE_NORMAL,
|
|
||||||
NULL );
|
|
||||||
if( ser_port == (HANDLE)(-1) )
|
|
||||||
{
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
// buffers
|
|
||||||
SetupComm( ser_port, DEBUGBUFFERSIZE, DEBUGBUFFERSIZE ) ;
|
|
||||||
|
|
||||||
// purge buffers
|
|
||||||
PurgeComm( ser_port, PURGE_TXABORT | PURGE_RXABORT |
|
|
||||||
PURGE_TXCLEAR | PURGE_RXCLEAR ) ;
|
|
||||||
|
|
||||||
// setup port to 9600 8N1
|
|
||||||
dcb.DCBlength = sizeof( DCB ) ;
|
|
||||||
|
|
||||||
GetCommState( ser_port, &dcb ) ;
|
|
||||||
|
|
||||||
dcb.BaudRate = speed;
|
|
||||||
dcb.ByteSize = 8;
|
|
||||||
dcb.Parity = NOPARITY ;
|
|
||||||
dcb.StopBits = ONESTOPBIT ;
|
|
||||||
|
|
||||||
dcb.fDtrControl = DTR_CONTROL_ENABLE ;
|
|
||||||
dcb.fRtsControl = RTS_CONTROL_ENABLE ;
|
|
||||||
|
|
||||||
dcb.fBinary = TRUE ;
|
|
||||||
dcb.fParity = FALSE ;
|
|
||||||
|
|
||||||
SetCommState( ser_port, &dcb ) ;
|
|
||||||
|
|
||||||
return 1;
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
/***********************************************************************
|
|
||||||
* gdb_target_init
|
|
||||||
*
|
|
||||||
* Description: This function inializes the GDB target.
|
|
||||||
*
|
|
||||||
* Inputs: None.
|
|
||||||
* Outputs: None.
|
|
||||||
* Returns: None.
|
|
||||||
*
|
|
||||||
***********************************************************************/
|
|
||||||
void gdb_target_init(void)
|
|
||||||
{
|
|
||||||
set_debug_traps();
|
|
||||||
atexit(restore_traps);
|
|
||||||
}
|
|
||||||
|
|
||||||
/***********************************************************************
|
|
||||||
* gdb_target_close
|
|
||||||
*
|
|
||||||
* Description: This function closes the GDB target.
|
|
||||||
*
|
|
||||||
* Inputs: None.
|
|
||||||
* Outputs: None.
|
|
||||||
* Returns: None.
|
|
||||||
*
|
|
||||||
***********************************************************************/
|
|
||||||
void gdb_target_close(void)
|
|
||||||
{
|
|
||||||
restore_traps();
|
|
||||||
}
|
|
||||||
|
|
||||||
/***********************************************************************
|
|
||||||
* putDebugChar
|
|
||||||
*
|
|
||||||
* Description: sends a character to the debug COM port.
|
|
||||||
*
|
|
||||||
* Inputs:
|
|
||||||
* c - the data character to be sent
|
|
||||||
* Outputs: None.
|
|
||||||
* Returns: 0 for success
|
|
||||||
*
|
|
||||||
***********************************************************************/
|
|
||||||
int putDebugChar(char c)
|
|
||||||
{
|
|
||||||
register int timeout = 0;
|
|
||||||
#ifdef DJGPP
|
|
||||||
|
|
||||||
while ((GDBStub_SerSendOk() == 0) && (timeout < SER_TIMEOUT))
|
|
||||||
timeout++;
|
|
||||||
return GDBStub_SerSend(c);
|
|
||||||
#elif defined(_WIN32)
|
|
||||||
DWORD buffer[DEBUGBUFFERSIZE];
|
|
||||||
COMSTAT ComStat ;
|
|
||||||
DWORD dwErrorFlags;
|
|
||||||
DWORD dwLength;
|
|
||||||
|
|
||||||
if(ser_port == (HANDLE)-1)
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
buffer[0] = c;
|
|
||||||
|
|
||||||
retrywrite:
|
|
||||||
ClearCommError( ser_port, &dwErrorFlags, &ComStat ) ;
|
|
||||||
dwLength = ComStat.cbOutQue;
|
|
||||||
|
|
||||||
if (dwLength < DEBUGBUFFERSIZE || timeout > SER_TIMEOUT)
|
|
||||||
{
|
|
||||||
if(WriteFile( ser_port, buffer, 1, &dwLength, NULL ))
|
|
||||||
return 1;
|
|
||||||
else if(timeout > SER_TIMEOUT)
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
else timeout++;
|
|
||||||
goto retrywrite;
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
/***********************************************************************
|
|
||||||
* getDebugChar
|
|
||||||
*
|
|
||||||
* Description: gets a character from the debug COM port.
|
|
||||||
*
|
|
||||||
* Inputs: None.
|
|
||||||
* Outputs: None.
|
|
||||||
* Returns: character data from the serial support.
|
|
||||||
*
|
|
||||||
***********************************************************************/
|
|
||||||
int getDebugChar(void)
|
|
||||||
{
|
|
||||||
register int timeout = 0;
|
|
||||||
#ifdef DJGPP
|
|
||||||
register int ret = -1;
|
|
||||||
|
|
||||||
while ((GDBStub_SerRecvOk() == 0) && (timeout < SER_TIMEOUT))
|
|
||||||
timeout++;
|
|
||||||
if (timeout < SER_TIMEOUT)
|
|
||||||
ret = GDBStub_SerRecv();
|
|
||||||
|
|
||||||
return ret;
|
|
||||||
#elif defined(_WIN32)
|
|
||||||
DWORD buffer[DEBUGBUFFERSIZE];
|
|
||||||
COMSTAT ComStat ;
|
|
||||||
DWORD dwErrorFlags;
|
|
||||||
DWORD dwLength;
|
|
||||||
|
|
||||||
if(ser_port == (HANDLE)-1)
|
|
||||||
return -1;
|
|
||||||
|
|
||||||
retryread:
|
|
||||||
ClearCommError( ser_port, &dwErrorFlags, &ComStat ) ;
|
|
||||||
dwLength = min( DEBUGBUFFERSIZE, ComStat.cbInQue ) ;
|
|
||||||
|
|
||||||
if (dwLength > 0 || timeout > SER_TIMEOUT)
|
|
||||||
{
|
|
||||||
if(ReadFile( ser_port, buffer, 1, &dwLength, NULL ))
|
|
||||||
return buffer[0];
|
|
||||||
else if(timeout > SER_TIMEOUT)
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
else timeout++;
|
|
||||||
goto retryread;
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
#if 0
|
|
||||||
static SOCKET s_rem_fd = INVALID_SOCKET;
|
|
||||||
|
|
||||||
int init_gdb_connect()
|
|
||||||
{
|
|
||||||
#ifdef _WIN32
|
|
||||||
WORD wVersionRequested;
|
|
||||||
WSADATA wsa_data;
|
|
||||||
#endif
|
|
||||||
SOCKADDR_IN srv_addr;
|
|
||||||
SOCKADDR_IN rem_addr;
|
|
||||||
SOCKET srv_socket;
|
|
||||||
int rem_len;
|
|
||||||
|
|
||||||
memset(&srv_addr,0,sizeof(srv_addr));
|
|
||||||
s_prev_exc_handler = SetUnhandledExceptionFilter(exc_handler);
|
|
||||||
|
|
||||||
#ifdef _WIN32
|
|
||||||
wVersionRequested= MAKEWORD( 2, 2 );
|
|
||||||
if (WSAStartup(wVersionRequested, &wsa_data)) {
|
|
||||||
fprintf(stderr, "WSAStartup() failed");
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
srv_addr.sin_family = AF_INET;
|
|
||||||
srv_addr.sin_addr.s_addr = htonl(INADDR_ANY);
|
|
||||||
srv_addr.sin_port = htons(9999);
|
|
||||||
|
|
||||||
srv_socket = socket(PF_INET, SOCK_STREAM, 0);
|
|
||||||
if (srv_socket == INVALID_SOCKET) {
|
|
||||||
perror("socket()");
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (bind(srv_socket, (struct sockaddr*) &srv_addr, sizeof(srv_addr)) == -1) {
|
|
||||||
perror("bind()");
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (listen(srv_socket, 4) == -1) {
|
|
||||||
perror("listen()");
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
rem_len = sizeof(rem_addr);
|
|
||||||
|
|
||||||
for(;;) {
|
|
||||||
s_rem_fd = accept(srv_socket, (struct sockaddr*)&rem_addr, &rem_len);
|
|
||||||
|
|
||||||
if (s_rem_fd == INVALID_SOCKET) {
|
|
||||||
if (errno == EINTR)
|
|
||||||
continue;
|
|
||||||
|
|
||||||
perror("accept()");
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
int getDebugChar()
|
|
||||||
{
|
|
||||||
char buffer[DEBUGBUFFERSIZE];
|
|
||||||
int r;
|
|
||||||
|
|
||||||
if (s_rem_fd == INVALID_SOCKET)
|
|
||||||
return EOF;
|
|
||||||
|
|
||||||
r = recv(s_rem_fd, buffer, 1, 0);
|
|
||||||
if (r == -1) {
|
|
||||||
perror("recv()");
|
|
||||||
//LOG(TEXT("debugger connection broken"));
|
|
||||||
s_rem_fd = INVALID_SOCKET;
|
|
||||||
return EOF;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!r)
|
|
||||||
return EOF;
|
|
||||||
|
|
||||||
return buffer[0];
|
|
||||||
}
|
|
||||||
|
|
||||||
void putDebugChar(int c)
|
|
||||||
{
|
|
||||||
if (s_rem_fd == INVALID_SOCKET) {
|
|
||||||
const char buffer[] = {c};
|
|
||||||
|
|
||||||
if (!send(s_rem_fd, buffer, 1, 0)) {
|
|
||||||
perror("send()");
|
|
||||||
//LOG(TEXT("debugger connection broken"));
|
|
||||||
exit(-1);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#endif
|
|
|
@ -1,30 +0,0 @@
|
||||||
#
|
|
||||||
# Makefile for GDB Stub for DJGPP
|
|
||||||
#
|
|
||||||
# GDB Stub for DJGPP Copyright 2000 by Jonathan Brogdon
|
|
||||||
#
|
|
||||||
|
|
||||||
include ../../Makefile.cfg
|
|
||||||
|
|
||||||
CFLAGS += -I../../include -I../include
|
|
||||||
|
|
||||||
LOBJS = i386-stub.o i386-supp.o
|
|
||||||
|
|
||||||
all: library
|
|
||||||
|
|
||||||
library: $(LOBJS)
|
|
||||||
@$(RM) ../../lib/libgdbst.a
|
|
||||||
@$(AR) rcs ../../lib/libgdbst.a $(LOBJS)
|
|
||||||
|
|
||||||
dep:
|
|
||||||
@$(CC) $(CFLAGS) -M *.c > depend.dep
|
|
||||||
|
|
||||||
clean:
|
|
||||||
@$(RM) $(LOBJS)
|
|
||||||
|
|
||||||
distclean: clean
|
|
||||||
@$(RM) ../../lib/libgdbst.a
|
|
||||||
@$(RM) depend.dep
|
|
||||||
|
|
||||||
$(OBJS) $(LOBJS):
|
|
||||||
include depend.dep
|
|
|
@ -1,83 +0,0 @@
|
||||||
//=======================================================================================================
|
|
||||||
// sva_layer.h - Serial command layer for SVAsync
|
|
||||||
//
|
|
||||||
//=======================================================================================================
|
|
||||||
|
|
||||||
//=======================================================================================================
|
|
||||||
//=======================================================================================================
|
|
||||||
|
|
||||||
#ifndef _SVA_LAYER_H
|
|
||||||
#define _SVA_LAYER_H
|
|
||||||
|
|
||||||
|
|
||||||
//===============================================================================
|
|
||||||
// Include files
|
|
||||||
//===============================================================================
|
|
||||||
|
|
||||||
#include "svasync.h"
|
|
||||||
|
|
||||||
//===============================================================================
|
|
||||||
// Inline function definitions
|
|
||||||
//===============================================================================
|
|
||||||
|
|
||||||
// Initialize the serial library
|
|
||||||
// Should return 0 if no error occurred
|
|
||||||
__inline int GDBStub_SerInit(int port)
|
|
||||||
{
|
|
||||||
int ret, init;
|
|
||||||
|
|
||||||
ret = init = SVAsyncInit(port - 1);
|
|
||||||
if (ret == 0)
|
|
||||||
ret = SVAsyncFifoInit();
|
|
||||||
if (init == 0)
|
|
||||||
atexit(SVAsyncStop);
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// Set the serial port speed (and other configurables)
|
|
||||||
// Should return 0 if the speed is set properly
|
|
||||||
__inline int GDBStub_SerSpeed(int speed)
|
|
||||||
{
|
|
||||||
SVAsyncSet(speed, BITS_8 | NO_PARITY | STOP_1);
|
|
||||||
SVAsyncHand(DTR | RTS);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// Check to see if there's room in the buffer to send data
|
|
||||||
// Should return 0 if it is okay to send
|
|
||||||
__inline int GDBStub_SerSendOk(void)
|
|
||||||
{
|
|
||||||
return !SVAsyncOutStat();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// Send a character to the serial port
|
|
||||||
// Should return 0 if the send succeeds
|
|
||||||
__inline int GDBStub_SerSend(int c)
|
|
||||||
{
|
|
||||||
SVAsyncOut((char) c);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// Check to see if there are characters waiting in the buffer
|
|
||||||
// Should return 0 if there's data waiting
|
|
||||||
__inline int GDBStub_SerRecvOk(void)
|
|
||||||
{
|
|
||||||
return SVAsyncInStat();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// Read a character from the serial port
|
|
||||||
// Should return the character read
|
|
||||||
__inline int GDBStub_SerRecv(void)
|
|
||||||
{
|
|
||||||
return SVAsyncIn();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#endif
|
|
Loading…
Reference in a new issue