libmisc/serdbg: Remove obsolete serial debug

Closes #2828.
This commit is contained in:
Joel Sherrill
2023-02-09 09:05:58 -06:00
parent c0fad60c59
commit 77e7bd97dc
9 changed files with 0 additions and 1228 deletions

View File

@@ -1,168 +0,0 @@
/* SPDX-License-Identifier: BSD-2-Clause */
/*
* RTEMS remote gdb over serial line
*
* This file declares intialization functions to add
* a gdb remote debug stub to an RTEMS system.
*/
/*
* Copyright (c) 2002 IMD Ingenieurbuero fuer Microcomputertechnik
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*/
#ifndef _SERDBG_H
#define _SERDBG_H
#include <rtems.h>
#include <termios.h>
#ifdef __cplusplus
extern "C" {
#endif
typedef struct {
uint32_t baudrate; /* debug baud rate, e.g. 57600 */
void (*callout)(void); /* callout pointer during polling */
int (*open_io)(const char *dev_name, uint32_t baudrate); /* I/O open fnc */
const char *devname; /* debug device, e.g. "/dev/tty01" */
bool skip_init_bkpt; /* if TRUE, do not stop when initializing */
} serdbg_conf_t;
/*
* must be defined in init module...
*/
extern serdbg_conf_t serdbg_conf;
/*=========================================================================*\
| Function: |
\*-------------------------------------------------------------------------*/
void putDebugChar
(
/*-------------------------------------------------------------------------*\
| Purpose: |
| send character to remote debugger |
+---------------------------------------------------------------------------+
| Input Parameters: |
\*-------------------------------------------------------------------------*/
char c /* char to send */
);
/*-------------------------------------------------------------------------*\
| Return Value: |
| <none> |
\*=========================================================================*/
/*=========================================================================*\
| Function: |
\*-------------------------------------------------------------------------*/
int getDebugChar
(
/*-------------------------------------------------------------------------*\
| Purpose: |
| get character from remote debugger |
+---------------------------------------------------------------------------+
| Input Parameters: |
\*-------------------------------------------------------------------------*/
void /* <none> */
);
/*-------------------------------------------------------------------------*\
| Return Value: |
| <none> |
\*=========================================================================*/
/*=========================================================================*\
| Function: |
\*-------------------------------------------------------------------------*/
void serdbg_exceptionHandler
(
/*-------------------------------------------------------------------------*\
| Purpose: |
| hook directly to an exception vector |
+---------------------------------------------------------------------------+
| Input Parameters: |
\*-------------------------------------------------------------------------*/
int vecnum, /* vector index to hook at */
void *vector /* address of handler function */
);
/*-------------------------------------------------------------------------*\
| Return Value: |
| <none> |
\*=========================================================================*/
/*=========================================================================*\
| Function: |
\*-------------------------------------------------------------------------*/
int serdbg_init
(
/*-------------------------------------------------------------------------*\
| Purpose: |
| initialize remote gdb session over serial line |
+---------------------------------------------------------------------------+
| Input Parameters: |
\*-------------------------------------------------------------------------*/
void
);
/*-------------------------------------------------------------------------*\
| Return Value: |
| rtems_status_code |
\*=========================================================================*/
/*
* stuff from serdbgio.c
*/
/*=========================================================================*\
| Function: |
\*-------------------------------------------------------------------------*/
int serdbg_open
/*-------------------------------------------------------------------------*\
| Purpose: |
| try to open given serial debug port |
+---------------------------------------------------------------------------+
| Input Parameters: |
\*-------------------------------------------------------------------------*/
(
const char *dev_name, /* name of device to open */
uint32_t baudrate /* baud rate to use */
);
/*-------------------------------------------------------------------------*\
| Return Value: |
| 0 on success, -1 and errno otherwise |
\*=========================================================================*/
extern int serdbg_init_dbg(void);
/*
* Assumed to be provided by the BSP
*/
extern void set_debug_traps(void);
extern void breakpoint(void);
#ifdef __cplusplus
}
#endif
#endif /* _SERDBG_H */

View File

@@ -1,101 +0,0 @@
/* SPDX-License-Identifier: BSD-2-Clause */
/**
* @file
*
* @brief Adds a GDB remote Debug Stub to an RTEMS System
*/
/*
* Copyright (c) 2002 IMD Ingenieurbuero fuer Microcomputertechnik
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*/
#ifndef _SERDBGCNF_H
#define _SERDBGCNF_H
#include <rtems/serdbg.h>
#ifdef __cplusplus
extern "C" {
#endif
#ifdef CONFIGURE_INIT
/*
* fallback for baud rate to use
*/
#ifndef CONFIGURE_SERDBG_BAUDRATE
#define CONFIGURE_SERDBG_BAUDRATE 9600
#endif
/*
* fallback for device name to use
*/
#ifndef CONFIGURE_SERDBG_DEVNAME
#define CONFIGURE_SERDBG_DEVNAME "/dev/tty01"
#endif
/*
* fill in serdbg_conf structure
*/
serdbg_conf_t serdbg_conf = {
CONFIGURE_SERDBG_BAUDRATE,
#ifdef CONFIGURE_SERDBG_CALLOUT
CONFIGURE_SERDBG_CALLOUT,
#else
NULL,
#endif
#ifdef CONFIGURE_SERDBG_USE_POLLED_TERMIOS
serdbg_open,
#else
NULL,
#endif
CONFIGURE_SERDBG_DEVNAME,
#ifdef CONFIGURE_SERDBG_SKIP_INIT_BKPT
true,
#else
false,
#endif
};
int serdbg_init(void) {
#ifdef CONFIGURE_USE_SERDBG
return serdbg_init_dbg();
#else
return 0;
#endif
}
#endif /* CONFIGURE_INIT */
#ifdef __cplusplus
}
#endif
#endif /* _SERDBGCNF_H */

View File

@@ -1,116 +0,0 @@
/* SPDX-License-Identifier: BSD-2-Clause */
/*
* This file declares intialization functions to add
* printk polled output via termios polled drivers.
*/
/*
* Copyright (c) 2002 IMD Ingenieurbuero fuer Microcomputertechnik
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*/
#ifndef _TERMIOS_PRINTK_H
#define _TERMIOS_PRINTK_H
#include <rtems.h>
#include <termios.h>
#ifdef __cplusplus
extern "C" {
#endif
typedef struct {
uint32_t baudrate; /* debug baud rate, e.g. 57600 */
void (*callout)(void); /* callout pointer during polling */
const char *devname; /* debug device, e.g. "/dev/tty01" */
} termios_printk_conf_t;
/*
* must be defined in init module...
*/
extern termios_printk_conf_t termios_printk_conf;
/*=========================================================================*\
| Function: |
\*-------------------------------------------------------------------------*/
void termios_printk_outputchar
/*-------------------------------------------------------------------------*\
| Purpose: |
| send one character to serial port |
+---------------------------------------------------------------------------+
| Input Parameters: |
\*-------------------------------------------------------------------------*/
(
char c /* character to print */
);
/*-------------------------------------------------------------------------*\
| Return Value: |
| <none> |
\*=========================================================================*/
/*=========================================================================*\
| Function: |
\*-------------------------------------------------------------------------*/
int termios_printk_inputchar
/*-------------------------------------------------------------------------*\
| Purpose: |
| wait for one character from serial port |
+---------------------------------------------------------------------------+
| Input Parameters: |
\*-------------------------------------------------------------------------*/
(
void /* none */
);
/*-------------------------------------------------------------------------*\
| Return Value: |
| received character |
\*=========================================================================*/
/*=========================================================================*\
| Function: |
\*-------------------------------------------------------------------------*/
int termios_printk_open
/*-------------------------------------------------------------------------*\
| Purpose: |
| try to open given serial debug port |
+---------------------------------------------------------------------------+
| Input Parameters: |
\*-------------------------------------------------------------------------*/
(
const char *dev_name, /* name of device to open */
uint32_t baudrate /* baud rate to use */
);
/*-------------------------------------------------------------------------*\
| Return Value: |
| 0 on success, -1 and errno otherwise |
\*=========================================================================*/
#ifdef __cplusplus
}
#endif
#endif /* _TERMIOS_PRINTK_H */

View File

@@ -1,91 +0,0 @@
/* SPDX-License-Identifier: BSD-2-Clause */
/**
* @file
*
* @brief Adds printk Support via Polled termios
*/
/*
* Copyright (c) 2002 IMD Ingenieurbuero fuer Microcomputertechnik
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*/
#ifndef _TERMIOS_PRINTK_CNF_H
#define _TERMIOS_PRINTK_CNF_H
#include <rtems/termios_printk.h>
#ifdef __cplusplus
extern "C" {
#endif
#ifdef CONFIGURE_INIT
/*
* fallback for baud rate to use
*/
#ifndef CONFIGURE_TERMIOS_PRINTK_BAUDRATE
#define CONFIGURE_TERMIOS_PRINTK_BAUDRATE 9600
#endif
/*
* fallback for device name to use
*/
#ifndef CONFIGURE_TERMIOS_PRINTK_DEVNAME
#define CONFIGURE_TERMIOS_PRINTK_DEVNAME "/dev/console"
#endif
#ifdef CONFIGURE_USE_TERMIOS_PRINTK
/*
* fill in termios_printk_conf structure
*/
termios_printk_conf_t termios_printk_conf = {
CONFIGURE_TERMIOS_PRINTK_BAUDRATE,
#ifdef CONFIGURE_TERMIOS_PRINTK_CALLOUT
CONFIGURE_TERMIOS_PRINTK_CALLOUT,
#else
NULL,
#endif
CONFIGURE_TERMIOS_PRINTK_DEVNAME,
};
#endif
int termios_printk_init(void) {
#ifdef CONFIGURE_USE_TERMIOS_PRINTK
return termios_printk_open(termios_printk_conf.devname,
termios_printk_conf.baudrate);
#else
return 0;
#endif
}
#endif /* CONFIGURE_INIT */
#ifdef __cplusplus
}
#endif
#endif /* _TERMIOS_PRINTK_CNF_H */

View File

@@ -1,134 +0,0 @@
This directory contains three useful packages related to the termios I/O
system:
PACKAGE SERDBGIO
================
"serdbgio" provides the "serial gdb" standard I/O functions "getDebugChar"
and "putDebugChar" for any device driver supporting polled termios mode.
The initialization function "serdbg_open" opens the v.24 port intended
for the serial debug connection, and sets the desired baud rate. The
"getDebugChar" and "putDebugChar" functions then interact with the
corresponding driver using the calls intended for polled termios
operation.
Specification for the debug device, baud rate and other parameters is
done in a global structure of type "serdbg_conf_t". A configuration
mechanism quite similar to the overall RTEMS configuration is available.
PACKAGE SERDBG
==============
"serdbg" provides a means to optionally initialize and/or start a
serial gdb session as soon as possible, this means as soon as all
drivers have been initialized. The serial debug I/O functions can
either be integrated as special routines of the BSP drivers, or using
the package "serdbgio"
PACKAGE TERMIOS_PRINTK
======================
"termios_printk" provides a standard output function suitable to use
with "printk". It uses the same technique as serdbgio, hooking the
interface between a polled device driver and the termios system.
REQUIREMENTS
============
- These two packages can be used with any polled termios device
driver.
- For standard initialization, they need a modified "bsppost.c"
to perform the initialization calls.
USAGE
=====
For using these packages add the following to your "init" module or
your "system.h" file (Note: most macro settings fall back to a
default, if not set.):
/*
* CONFIGURE_USE_SERDBG
* set this macro, if you want to connect gdb over a serial line
* when set, the debug stub will be connected after driver
* initialization in "bsppost.c"
*/
#define CONFIGURE_USE_SERDBG
/*
* CONFIGURE_SERDBG_SKIP_INIT_BKPT
* set this macro, if you do not want the gdb interface to wait for a
* debugger connection directly after initialization
* If you set this macro, the gdb stub will only hook various
* exception vectors when called from "bsppost.c".
*/
/* #define CONFIGURE_SERDBG_SKIP_INIT_BKPT */
/*
* CONFIGURE_SERDBG_USE_POLLED_TERMIOS
* set this macro, if you want "serdbgio" to provide the I/O
* functions for the serial gdb connection
*/
#define CONFIGURE_SERDBG_USE_POLLED_TERMIOS
/*
* CONFIGURE_SERDBG_DEVNAME
* use this macro to specify the serial device to use
* for "serdbgio".
* Only used, when CONFIGURE_SERDBG_USE_POLLED_TERMIOS is set
*/
#define CONFIGURE_SERDBG_DEVNAME "/dev/tty03"
/*
* CONFIGURE_SERDBG_BAUDRATE
* use this macro to specify the baud rate to use
* for "serdbgio".
* Only used, when CONFIGURE_SERDBG_USE_POLLED_TERMIOS is set
*/
#define CONFIGURE_SERDBG_BAUDRATE 57600
/*
* CONFIGURE_SERDBG_CALLOUT
* use this macro to specify a routine that will called during I/O polling
* Only used, when CONFIGURE_SERDBG_USE_POLLED_TERMIOS is set
* This function of type "void pollfnc(void)" can be used for e.g.
* tickling a watchdog
*/
/* #define CONFIGURE_SERDBG_CALLOUT tickle_my_watchdog_fnc */
#include <serdbgcnf.h>
/*
* CONFIGURE_USE_TERMIOS_PRINTK
* set this macro, if you want printk output to be sent to a serial
* driver using the polled termios interface
* when set, the printk output function will be connected after driver
* initialization in "bsppost.c"
*/
#define CONFIGURE_USE_TERMIOS_PRINTK
/*
* CONFIGURE_TERMIOS_PRINTK_DEVNAME
* use this macro to specify the serial device to use
* for printk output.
* Only used, when CONFIGURE_USE_TERMIOS_PRINTK is set
*/
#define CONFIGURE_TERMIOS_PRINTK_DEVNAME "/dev/console"
/*
* CONFIGURE_TERMIOS_PRINTK_BAUDRATE
* use this macro to specify the baudrate to use
* for printk output.
* Only used, when CONFIGURE_USE_TERMIOS_PRINTK is set
*/
#define CONFIGURE_TERMIOS_PRINTK_BAUDRATE 9600
/*
* CONFIGURE_TERMIOS_PRINTK_CALLOUT
* use this macro to specify a routine that will called during I/O polling
* This function of type "void pollfnc(void)" can be used for e.g.
* tickling a watchdog
*/
/* #define CONFIGURE_TERMIOS_PRINTK_CALLOUT tickle_my_watchdog_fnc */
#include <termios_printk_cnf.h>

View File

@@ -1,105 +0,0 @@
/* SPDX-License-Identifier: BSD-2-Clause */
/*
* RTEMS remote gdb over serial line
*
* This file contains intialization and utility functions to add
* a gdb remote debug stub to an RTEMS system.
*/
/*
* Copyright (c) 2002 IMD Ingenieurbuero fuer Microcomputertechnik
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*/
#ifdef HAVE_CONFIG_H
#include "config.h"
#endif
#include <rtems.h>
#include <stdio.h>
#include <string.h>
#include <fcntl.h>
#include <errno.h>
#include <rtems/serdbg.h>
/*=========================================================================*\
| Function: |
\*-------------------------------------------------------------------------*/
int serdbg_init_dbg
(
/*-------------------------------------------------------------------------*\
| Purpose: |
| initialize remote gdb session over serial line |
+---------------------------------------------------------------------------+
| Input Parameters: |
\*-------------------------------------------------------------------------*/
void
)
/*-------------------------------------------------------------------------*\
| Return Value: |
| rtems_status_code |
\*=========================================================================*/
{
static bool is_initialized = false;
rtems_status_code rc = RTEMS_SUCCESSFUL;
if (is_initialized) {
return RTEMS_SUCCESSFUL;
}
is_initialized = true;
/*
* try to open serial device
*/
if (rc == RTEMS_SUCCESSFUL) {
if ((serdbg_conf.open_io != NULL) &&
(0 > serdbg_conf.open_io(serdbg_conf.devname,serdbg_conf.baudrate))) {
fprintf(stderr,
"remote_gdb_init: cannot open device %s "
"for gdb connection:%s\n",serdbg_conf.devname,strerror(errno));
rc = RTEMS_IO_ERROR;
}
}
/*
* initialize gdb stub
*/
if (rc == RTEMS_SUCCESSFUL) {
set_debug_traps();
}
/*
* now activate gdb stub
*/
if ((rc == RTEMS_SUCCESSFUL) &&
!serdbg_conf.skip_init_bkpt) {
breakpoint();
}
/*
* return to original function
* this may be already unter gdb control
*/
return rc;
}

View File

@@ -1,264 +0,0 @@
/* SPDX-License-Identifier: BSD-2-Clause */
/*
* TERMIOS serial gdb interface support
* the functions in this file allow the standard gdb stubs like
* "m68k-stub.c" to access any serial interfaces that work with
* RTEMS termios in polled mode
*/
/*
* Copyright (c) 2002 IMD Ingenieurbuero fuer Microcomputertechnik
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*/
#ifdef HAVE_CONFIG_H
#include "config.h"
#endif
#include <rtems.h>
#include <rtems/libio_.h>
#include <errno.h>
#include <unistd.h> /* close */
#include <stdio.h>
#include <fcntl.h>
#include <termios.h>
#include <rtems/termiostypes.h>
#include <rtems/serdbg.h>
/*
* internal variables
*/
int serdbg_fd = -1;
struct rtems_termios_tty *serdbg_tty;
/*=========================================================================*\
| Function: |
\*-------------------------------------------------------------------------*/
int serdbg_open
/*-------------------------------------------------------------------------*\
| Purpose: |
| try to open given serial debug port |
+---------------------------------------------------------------------------+
| Input Parameters: |
\*-------------------------------------------------------------------------*/
(
const char *dev_name, /* name of device to open */
uint32_t baudrate /* baud rate to use */
)
/*-------------------------------------------------------------------------*\
| Return Value: |
| 0 on success, -1 and errno otherwise |
\*=========================================================================*/
{
bool err_occurred = false;
rtems_libio_t *iop = NULL;
struct termios act_termios;
tcflag_t baudcode = B0;
#define FD_STORE_CNT 3
int fd_store[FD_STORE_CNT];
int fd_store_used = 0;
/*
* translate baudrate into baud code
*/
switch(baudrate) {
case 50: baudcode = B50; break;
case 75: baudcode = B75; break;
case 110: baudcode = B110; break;
case 134: baudcode = B134; break;
case 150: baudcode = B150; break;
case 200: baudcode = B200; break;
case 300: baudcode = B300; break;
case 600: baudcode = B600; break;
case 1200: baudcode = B1200; break;
case 1800: baudcode = B1800; break;
case 2400: baudcode = B2400; break;
case 4800: baudcode = B4800; break;
case 9600: baudcode = B9600; break;
case 19200: baudcode = B19200; break;
case 38400: baudcode = B38400; break;
case 57600: baudcode = B57600; break;
case 115200: baudcode = B115200; break;
case 230400: baudcode = B230400; break;
case 460800: baudcode = B460800; break;
default : err_occurred = true; errno = EINVAL; break;
}
/*
* open device for serdbg operation
* skip any fds that are between 0..2, because they are
* reserved for stdin/out/err
*/
if (!err_occurred &&
(dev_name != NULL) &&
(dev_name[0] != '\0')) {
do {
serdbg_fd = open(dev_name,O_RDWR);
if (serdbg_fd < 0) {
err_occurred = true;
}
else {
if (serdbg_fd < 3) {
if (fd_store_used >= FD_STORE_CNT) {
err_occurred = true;
}
else {
fd_store[fd_store_used++] = serdbg_fd;
}
}
}
} while (!err_occurred &&
(serdbg_fd < 3));
}
/*
* close any fds, that have been placed in fd_store
* so fd 0..2 are reusable again
*/
while (--fd_store_used >= 0) {
close(fd_store[fd_store_used]);
}
/*
* capture tty structure
*/
if (!err_occurred) {
iop = rtems_libio_iop(serdbg_fd);
serdbg_tty = iop->data1;
}
/*
* set device baudrate
* (and transp mode, this is not really needed)
* ...
*/
/*
* ... get fd settings
*/
if (!err_occurred &&
(0 != tcgetattr(serdbg_fd,&act_termios))) {
err_occurred = true;
}
if (!err_occurred) {
act_termios.c_iflag
&= ~(IGNBRK|BRKINT|PARMRK|ISTRIP
|INLCR|IGNCR|ICRNL|IXON);
act_termios.c_oflag
&= ~OPOST;
act_termios.c_lflag
&= ~(ECHO|ECHONL|ICANON|ISIG|IEXTEN);
cfsetospeed(&act_termios,baudcode);
cfsetispeed(&act_termios,baudcode);
if (0 != tcsetattr(serdbg_fd,TCSANOW,&act_termios)) {
err_occurred = true;
}
}
return (err_occurred
? -1
: 0);
}
void putDebugChar(char c) __attribute__ ((__weak__));
/*=========================================================================*\
| Function: |
\*-------------------------------------------------------------------------*/
void putDebugChar
/*-------------------------------------------------------------------------*\
| Purpose: |
| send one character to serial port |
+---------------------------------------------------------------------------+
| Input Parameters: |
\*-------------------------------------------------------------------------*/
(
char c /* character to print */
)
/*-------------------------------------------------------------------------*\
| Return Value: |
| <none> |
\*=========================================================================*/
{
/*
* call serdbg polling callout, if available
*/
if (serdbg_conf.callout != NULL) {
serdbg_conf.callout();
}
/*
* check, whether debug serial port is available
*/
if ((serdbg_tty != NULL) &&
(serdbg_tty->device.write != NULL)) {
/*
* send character to debug serial port
*/
serdbg_tty->device.write(serdbg_tty->minor,&c,1);
}
}
int getDebugChar(void) __attribute__ ((__weak__));
/*=========================================================================*\
| Function: |
\*-------------------------------------------------------------------------*/
int getDebugChar
/*-------------------------------------------------------------------------*\
| Purpose: |
| wait for one character from serial port |
+---------------------------------------------------------------------------+
| Input Parameters: |
\*-------------------------------------------------------------------------*/
(
void /* none */
)
/*-------------------------------------------------------------------------*\
| Return Value: |
| received character |
\*=========================================================================*/
{
int c = -1;
/*
* check, whether debug serial port is available
*/
if ((serdbg_tty != NULL) &&
(serdbg_tty->device.pollRead != NULL)) {
do {
/*
* call serdbg polling callout, if available
*/
if (serdbg_conf.callout != NULL) {
serdbg_conf.callout();
}
/*
* get character from debug serial port
*/
c = serdbg_tty->device.pollRead(serdbg_tty->minor);
} while (c < 0);
}
return c;
}

View File

@@ -1,245 +0,0 @@
/* SPDX-License-Identifier: BSD-2-Clause */
/*
* TERMIOS printk support
* this module performs low-level printk output using
* a polled termios driver
*/
/*
* Copyright (c) 2002 IMD Ingenieurbuero fuer Microcomputertechnik
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*/
#ifdef HAVE_CONFIG_H
#include "config.h"
#endif
#include <rtems.h>
#include <rtems/libio_.h>
#include <errno.h>
#include <stdio.h>
#include <fcntl.h>
#include <termios.h>
#include <rtems/termiostypes.h>
#include <rtems/bspIo.h>
#include <rtems/termios_printk.h>
/*
* internal variables
*/
int termios_printk_fd = -1;
struct rtems_termios_tty *termios_printk_tty;
static void _termios_printk_null_char(
char c RTEMS_UNUSED)
{
return;
}
BSP_output_char_function_type BSP_output_char = _termios_printk_null_char;
BSP_polling_getchar_function_type BSP_poll_char;
/*=========================================================================*\
| Function: |
\*-------------------------------------------------------------------------*/
void termios_printk_outputchar
/*-------------------------------------------------------------------------*\
| Purpose: |
| send one character to serial port |
+---------------------------------------------------------------------------+
| Input Parameters: |
\*-------------------------------------------------------------------------*/
(
char c /* character to print */
)
/*-------------------------------------------------------------------------*\
| Return Value: |
| <none> |
\*=========================================================================*/
{
/*
* check, whether printk serial port is available
*/
if ((termios_printk_tty != NULL) &&
(termios_printk_tty->device.write != NULL)) {
/*
* call termios_printk polling callout, if available
*/
if (termios_printk_conf.callout != NULL) {
termios_printk_conf.callout();
}
/*
* send character to debug serial port
*/
termios_printk_tty->device.write(termios_printk_tty->minor,&c,1);
}
}
/*=========================================================================*\
| Function: |
\*-------------------------------------------------------------------------*/
int termios_printk_inputchar
/*-------------------------------------------------------------------------*\
| Purpose: |
| wait for one character from serial port |
+---------------------------------------------------------------------------+
| Input Parameters: |
\*-------------------------------------------------------------------------*/
(
void /* none */
)
/*-------------------------------------------------------------------------*\
| Return Value: |
| received character |
\*=========================================================================*/
{
int c = -1;
/*
* check, whether debug serial port is available
*/
if ((termios_printk_tty != NULL) &&
(termios_printk_tty->device.pollRead != NULL)) {
do {
/*
* call termios_printk polling callout, if available
*/
if (termios_printk_conf.callout != NULL) {
termios_printk_conf.callout();
}
/*
* get character from debug serial port
*/
c = termios_printk_tty->device.pollRead(termios_printk_tty->minor);
} while (c < 0);
}
return c;
}
/*=========================================================================*\
| Function: |
\*-------------------------------------------------------------------------*/
int termios_printk_open
/*-------------------------------------------------------------------------*\
| Purpose: |
| try to open given serial debug port |
+---------------------------------------------------------------------------+
| Input Parameters: |
\*-------------------------------------------------------------------------*/
(
const char *dev_name, /* name of device to open */
uint32_t baudrate /* baud rate to use */
)
/*-------------------------------------------------------------------------*\
| Return Value: |
| 0 on success, -1 and errno otherwise |
\*=========================================================================*/
{
bool err_occurred = false;
rtems_libio_t *iop = NULL;
struct termios act_termios;
tcflag_t baudcode = B0;
if (termios_printk_fd >= 0) {
/*
* already initialized
*/
return 0;
}
/*
* translate baudrate into baud code
*/
switch(baudrate) {
case 50: baudcode = B50; break;
case 75: baudcode = B75; break;
case 110: baudcode = B110; break;
case 134: baudcode = B134; break;
case 150: baudcode = B150; break;
case 200: baudcode = B200; break;
case 300: baudcode = B300; break;
case 600: baudcode = B600; break;
case 1200: baudcode = B1200; break;
case 1800: baudcode = B1800; break;
case 2400: baudcode = B2400; break;
case 4800: baudcode = B4800; break;
case 9600: baudcode = B9600; break;
case 19200: baudcode = B19200; break;
case 38400: baudcode = B38400; break;
case 57600: baudcode = B57600; break;
case 115200: baudcode = B115200; break;
case 230400: baudcode = B230400; break;
case 460800: baudcode = B460800; break;
default : err_occurred = true; errno = EINVAL; break;
}
/*
* open device for serdbg operation
*/
if (!err_occurred &&
(dev_name != NULL) &&
(dev_name[0] != '\0')) {
termios_printk_fd = open(dev_name,O_RDWR);
if (termios_printk_fd < 0) {
err_occurred = true;
}
}
/*
* capture tty structure
*/
if (!err_occurred) {
iop = rtems_libio_iop(termios_printk_fd);
termios_printk_tty = iop->data1;
}
/*
* set device baudrate
* (and transp mode, this is not really needed)
* ...
*/
/*
* ... get fd settings
*/
if (!err_occurred &&
(0 != tcgetattr(termios_printk_fd,&act_termios))) {
err_occurred = true;
}
if (!err_occurred) {
cfsetospeed(&act_termios,baudcode);
cfsetispeed(&act_termios,baudcode);
if (0 != tcsetattr(termios_printk_fd,TCSANOW,&act_termios)) {
err_occurred = true;
}
}
if (!err_occurred) {
BSP_output_char = termios_printk_outputchar;
BSP_poll_char = termios_printk_inputchar;
}
return (err_occurred
? -1
: 0);
}

View File

@@ -165,8 +165,6 @@ install:
- cpukit/include/rtems/rtems-rfs.h
- cpukit/include/rtems/rtemsdialer.h
- cpukit/include/rtems/scheduler.h
- cpukit/include/rtems/serdbg.h
- cpukit/include/rtems/serdbgcnf.h
- cpukit/include/rtems/serial_mouse.h
- cpukit/include/rtems/seterr.h
- cpukit/include/rtems/shell.h
@@ -178,8 +176,6 @@ install:
- cpukit/include/rtems/stdio-redirect.h
- cpukit/include/rtems/stringto.h
- cpukit/include/rtems/sysinit.h
- cpukit/include/rtems/termios_printk.h
- cpukit/include/rtems/termios_printk_cnf.h
- cpukit/include/rtems/termiostypes.h
- cpukit/include/rtems/thread.h
- cpukit/include/rtems/timecounter.h