From: Corinna Vinschen <vinschen@redhat.com>
To: gdb-patches@sources.redhat.com
Subject: [RFA]: File-I/O patch, Documentation
Date: Thu, 21 Nov 2002 01:04:00 -0000 [thread overview]
Message-ID: <20021121100443.U24928@cygbert.vinschen.de> (raw)
[-- Attachment #1: Type: text/plain, Size: 271 bytes --]
Hi,
this is the patch containing the additional documentation for File-I/O.
Corinna
2002-11-21 Corinna Vinschen <vinschen@redhat.com>
* gdb.texinfo: Add File-I/O documentation.
--
Corinna Vinschen
Cygwin Developer
Red Hat, Inc.
mailto:vinschen@redhat.com
[-- Attachment #2: fileio-doc.patch --]
[-- Type: text/plain, Size: 29000 bytes --]
Index: doc/gdb.texinfo
===================================================================
RCS file: /cvs/src/src/gdb/doc/gdb.texinfo,v
retrieving revision 1.131
diff -u -p -r1.131 gdb.texinfo
--- doc/gdb.texinfo 11 Oct 2002 16:13:15 -0000 1.131
+++ doc/gdb.texinfo 21 Nov 2002 08:42:04 -0000
@@ -14838,6 +14838,7 @@ Takes an optional file parameter.
* Stop Reply Packets::
* General Query Packets::
* Register Packet Format::
+* File-I/O remote protocol extension::
* Examples::
@end menu
@@ -15063,9 +15064,12 @@ Reserved for future use.
Reserved for future use.
-@item @code{F} --- reserved
+@item @code{F}@var{RC}@code{,}@var{EE}@code{,}@var{CF}@code{;}@var{XX} --- Reply to target's F packet.
+@cindex @code{F} packet
-Reserved for future use.
+This packet is send by @value{GDBN} as reply to a @code{F} request packet
+sent by the target. This is part of the File-I/O protocol extension.
+@xref{File-I/O remote protocol extension}, for the specification.
@item @code{g} --- read registers
@anchor{read registers packet}
@@ -15564,6 +15568,24 @@ is a query initiated by the host debugge
any time while the program is running and the debugger should continue
to wait for @samp{W}, @samp{T}, etc.
+@item F@var{call-id}@code{,}@var{parameter@dots{}}
+
+@var{call-id} is the identifier which says which host system call should
+be called. This is just the name of the function. Translation into the
+correct system call is only applicable as it's defined in @value{GDBN}.
+@xref{File-I/O remote protocol extension}, for a list of implemented
+system calls.
+
+@var{parameter@dots{}} is a list of parameters as defined for this very
+system call.
+
+The target replies with this packet when it expects @value{GDBN} to call
+a host system call on behalf of the target. @value{GDBN} replies with
+an appropriate @code{F} packet and keeps up waiting for the next reply
+packet from the target. The latest @samp{C}, @samp{c}, @samp{S} or
+@samp{s} action is expected to be continued.
+@xref{File-I/O remote protocol extension}, for more details.
+
@end table
@node General Query Packets
@@ -15773,6 +15795,892 @@ thirty-two bit registers such as @code{s
as @code{MIPS32}.
@end table
+
+@node File-I/O remote protocol extension
+@section File-I/O remote protocol extension
+
+@menu
+* File-I/O Overview::
+* Protocol basics::
+* The @code{F} request packet::
+* The @code{F} reply packet::
+* Memory transfer::
+* The Ctrl-C message::
+* Console I/O::
+* The isatty(3) call::
+* The system(3) call::
+* List of supported calls::
+* Protocol specific representation of datatypes::
+* Constants::
+@end menu
+
+@node File-I/O Overview
+@subsection File-I/O Overview
+
+The File I/O remote protocol extension (short: File-I/O) allows the
+target to use the hosts file system and console I/O when calling various
+system calls. System calls on the target system are translated into a
+remote protocol packet to the host system which then performs the needed
+actions and returns with an adequate response packet to the target system.
+This simulates file system operations even on file system-less targets.
+
+The protocol is defined host- and target-system independent. It uses
+it's own independent representation of datatypes and values. Both,
+@value{GDBN} and the target's @value{GDBN} stub are responsible for
+translating the system dependent values into the unified protocol values
+when data is transmitted.
+
+The communication is synchronous. A system call is possible only
+when GDB is waiting for the @samp{C}, @samp{c}, @samp{S} or @samp{s}
+packets. While @value{GDBN} handles the request for a system call,
+the target is stopped to allow deterministic access to the target's
+memory. Therefore File-I/O is not interuptible by target signals. It
+is possible to interrupt File-I/O by a user interrupt (Ctrl-C), though.
+
+The target's request to perform a host system call does not finish
+the latest @samp{C}, @samp{c}, @samp{S} or @samp{s} action. That means,
+after finishing the system call, the target returns to continuing the
+previous activity (continue, step). No additional continue or step
+request from @value{GDBN} is required.
+
+@smallexample
+(gdb) continue
+ <- target requests 'system call X'
+ target is stopped, GDB executes system call
+ -> GDB returns result
+ ... target continues, GDB returns to wait for the target
+ <- target hits breakpoint and sends a Txx packet
+@end smallexample
+
+The protocol is only used for files on the host file system and
+for I/O on the console. Character or block special devices, pipes,
+named pipes or sockets or any other communication method on the host
+system are not supported by this protocol.
+
+@node Protocol basics
+@subsection Protocol basics
+
+The File-I/O protocol uses the @code{F} packet, as request as well
+as as reply packet. Since a File-I/O system call can only occur when
+@value{GDBN} is waiting for the continuing or stepping target, the
+File-I/O request is a reply that @value{GDBN} has to expect as a result
+of a former @samp{C}, @samp{c}, @samp{S} or @samp{s} packet.
+This @code{F} packet contains all information needed to allow @value{GDBN}
+to call the appropriate host system call:
+
+@itemize @bullet
+@item
+A unique identifier for the requested system call.
+
+@item
+All parameters to the system call. Pointers are given as addresses
+into the target memory. Pointers to strings are given as pointer/length
+pair. Numerical values are given as they are. Numerical control values
+are given in a protocol specific representation.
+
+@end itemize
+
+At that point @value{GDBN} has to perform the following actions.
+
+@itemize @bullet
+@item
+If parameter pointer values are given, which point to data needed as input
+to a system call, @value{GDBN} requests this data from the target with a
+standard @code{m} packet request. This additional communication has to be
+expected by the target implementation and is handled as any other @code{m}
+packet.
+
+@item
+Translating all values from protocol representation to host representation
+as needed. Datatypes are coerced into the host types.
+
+@item
+Call system call.
+
+@item
+Coerce datatypes back to protocol representation.
+
+@item
+If pointer parameters in the request packet point to buffer space in which
+a system call is expected to copy data to, the data is transmitted to the
+target using a @code{M} packet. This packet has to be expected by the
+target implementation and is handled as any other @code{M} packet.
+
+@end itemize
+
+Eventually GDB replies with another @code{F} packet which contains all
+necessary information for the target to continue. This at least contains
+
+@itemize @bullet
+@item
+Return value.
+
+@item
+Errno, if has been changed by the system call.
+
+@item
+"Ctrl-C" flag.
+
+@end itemize
+
+After having done the needed type and value coercion, the target continues
+the latest continue or step action.
+
+@node The @code{F} request packet
+@subsection The @code{F} request packet
+
+The @code{F} request packet has the following format:
+
+@table @samp
+@item @code{F}@var{call-id}@code{,}@var{parameter@dots{}}
+
+@var{call-id} is the identifier to indicate the host system call to be called.
+This is just the name of the function.
+
+@var{parameter@dots{}} are the parameters to the system call.
+
+@end table
+
+Parameters are hexadecimal integer values, either the real values in case
+of scalar datatypes, as pointers to target buffer space in case of compound
+datatypes and unspecified memory areas or as pointer/length pairs in case
+of string parameters. These are appended to the call-id, each separated
+from its predecessor by a comma. All values are transmitted in ASCII
+string representation, pointer/length pairs separated by a slash.
+
+@node The @code{F} reply packet
+@subsection The @code{F} reply packet
+
+The @code{F} reply packet has the following format:
+@table @samp
+@item @code{F}@var{retcode}@code{,}@var{errno}@code{,}@var{Ctrl-C flag}@code{;}@var{call specific attachment}
+
+@var{retcode} is the return code of the system call as hexadecimal value.
+
+@var{errno} is the errno set by the call, in protocol specific representation.
+This parameter can be omitted if the call was successful.
+
+@var{Ctrl-C flag} is only send if the user requested a break. In this
+case, @var{errno} must be send as well, even if the call was successful.
+The @var{Ctrl-C flag} itself consists of the character 'C':
+
+@smallexample
+F0,0,C
+@end smallexample
+
+or, if the call was interupted before the host call has been performed:
+
+@smallexample
+F-1,4,C
+@end smallexample
+
+assuming 4 is the protocol specific representation of EINTR.
+
+@end table
+
+@node Memory transfer
+@subsection Memory transfer
+
+Structured data which is transferred using a memory read or write as e. g.
+a @code{struct stat} is expected to be in a protocol specific format with
+all scalar multibyte datatypes being big endian. This should be done by
+the target before the @code{F} packet is sent resp. by @value{GDBN} before
+it transfers memory to the target. Transferred pointers to structured
+data should point to the already coerced data at any time.
+
+@node The Ctrl-C message
+@subsection The Ctrl-C message
+
+A special case is, if the @var{Ctrl-C flag} is set in the @value{GDBN}
+reply packet. In this case the target should behave, as if it had
+gotten a break message. The meaning for the target is "system call
+interupted by SIGINT". Consequentially, the target should actually stop
+(as with a break message) and return to @value{GDBN} with a @code{T02}
+packet. In this case, it's important for the target to know, in which
+state the system call was interrupted. Since this action is by design
+not an atomic operation, we have to differ between two cases:
+
+@itemize @bullet
+@item
+The system call hasn't been performed on the host yet.
+
+@item The system call on the host has been finished.
+
+@end itemize
+
+These two states can be distinguished by the target by the value of the
+returned errno. If it's the protocol representation of EINTR, the system
+call hasn't been performed. This is equivalent to the EINTR handling
+on POSIX systems. In any other case, the target may presume that the
+system call has been finished -- successful or not -- and should behave
+as if the break message arrived right after the system call.
+
+@value{GDBN} must behave reliable. If the system call has not been called
+yet, @value{GDBN} may send the 'F' reply immediately, setting EINTR as
+errno in the packet. If the system call on the host has been finished
+before the user requests a break, the full action must be finshed by
+@value{GDBN}. This requires sending @code{M} packets as they fit.
+The @code{F} packet may only be send when either nothing has happened
+or the full action has been completed.
+
+@node Console I/O
+@subsection Console I/O
+
+By default and if not explicitely closed by the target system, the file
+descriptors 0, 1 and 2 are connected to the @value{GDBN} console. Output
+on the @value{GDBN} console is handled as any other file output operation
+(@code{write(1, ...)} or @code{write(2, ...)}). Console input is handled
+by @value{GDBN} so that after the target read request from file descriptor
+0 all following typing is buffered until either one of the following
+conditions is met:
+
+@itemize @bullet
+@item
+The user presses Ctrl-C. The behaviour is as explained above, the read()
+system call is treated as finished.
+
+@item
+The user presses <Enter>. This is treated as end of input with a trailing
+line feed.
+
+@item
+The user presses Ctrl-D. This is treated as end of input. No trailing
+character, especially no Ctrl-D is appended to the input.
+
+@end itemize
+
+If the user has typed more characters as fit in the buffer given to
+the read call, the trailing characters are buffered in @value{GDBN} until
+either another @code{read(0, ...)} is requested by the target or debugging
+is stopped on users request.
+
+@node The isatty(3) call
+@subsection The isatty(3) call
+
+A special case in this protocol is the library call isatty(3) which
+is implemented as it's own call inside of this protocol. It returns
+1 to the target if the file descriptor given as parameter is attached
+to the GDB console, 0 otherwise. Implementing through system calls
+would require implementing ioctl() and would be more complex than
+needed.
+
+@node The system(3) call
+@subsection The system(3) call
+
+The other special case in this protocol is the system(3) call which
+is implemented as it's own call, too. @value{GDBN} is taking over the full
+task of calling the necessary host calls to perform the system(3)
+call. The return value of system(3) is simplified before it's returned
+to the target. Basically, the only signal transmitted back is EINTR
+in case the user pressed Ctrl-C. Otherwise the return value consists
+entirely of the exit status of the called command.
+
+Due to security concerns, the system(3) call is refused to be called
+by @value{GDBN}. The user has to allow this call explicitely by
+entering
+
+@table @samp
+@item @code{set remote system-call-allowed 1}
+@end table
+
+Disabling the system(3) call is done by
+
+@table @samp
+@item @code{set remote system-call-allowed 0}
+@end table
+
+The current setting is shown by typing
+
+@table @samp
+@item @code{show remote system-call-allowed}
+@end table
+
+@node List of supported calls
+@subsection List of supported calls
+
+@menu
+* open::
+* close::
+* read::
+* write::
+* lseek::
+* rename::
+* unlink::
+* stat/fstat::
+* gettimeofday::
+* isatty::
+* system::
+@end menu
+
+@node open
+@unnumberedsubsubsec open
+
+@smallexample
+Synopsis: int open(const char *pathname, int flags);
+ int open(const char *pathname, int flags, mode_t mode);
+
+Request: Fopen,pathptr/len,flags,mode
+
+ `flags' is the bitwise or of the following values:
+
+ O_CREAT If the file does not exist it will be created. The host
+ rules apply as far as file ownership and time stamps
+ are concerned.
+
+ O_EXCL When used with O_CREAT, if the file already exists it is
+ an error and open() fails.
+
+ O_TRUNC If the file already exists and the open mode allows
+ writing (O_RDWR or O_WRONLY is given) it will be
+ truncated to length 0.
+
+ O_APPEND The file is opened in append mode.
+
+ O_RDONLY The file is opened for reading only.
+
+ O_WRONLY The file is opened for writing only.
+
+ O_RDWR The file is opened for reading and writing.
+
+ Each other bit is silently ignored.
+
+ `mode' is the bitwise or of the following values:
+
+ S_IRUSR User has read permission.
+
+ S_IWUSR User has write permission.
+
+ S_IRGRP Group has read permission.
+
+ S_IWGRP Group has write permission.
+
+ S_IROTH Others have read permission.
+
+ S_IWOTH Others have write permission.
+
+ Each other bit is silently ignored.
+
+Return value: open returns the new file descriptor or -1 if an error
+ occured.
+
+Errors:
+
+ EEXIST pathname already exists and O_CREAT and O_EXCL were used.
+
+ EISDIR pathname refers to a directory.
+
+ EACCES The requested access is not allowed.
+
+ ENAMETOOLONG
+ pathname was too long.
+
+ ENOENT A directory component in pathname does not exist.
+
+ ENODEV pathname refers to a device, pipe, named pipe or socket.
+
+ EROFS pathname refers to a file on a read-only filesystem and
+ write access was requested.
+
+ EFAULT pathname is an invalid pointer value.
+
+ ENOSPC No space on device to create the file.
+
+ EMFILE The process already has the maximum number of files open.
+
+ ENFILE The limit on the total number of files open on the system
+ has been reached.
+
+ EINTR The call was interrupted by the user.
+@end smallexample
+
+@node close
+@unnumberedsubsubsec close
+
+@smallexample
+Synopsis: int close(int fd);
+
+Request: Fclose,fd
+
+Return value: close returns zero on success, or -1 if an error occurred.
+
+Errors:
+
+ EBADF fd isn't a valid open file descriptor.
+
+ EINTR The call was interrupted by the user.
+@end smallexample
+
+@node read
+@unnumberedsubsubsec read
+
+@smallexample
+Synopsis: int read(int fd, void *buf, unsigned int count);
+
+Request: Fread,fd,bufptr,count
+
+Return value: On success, the number of bytes read is returned.
+ Zero indicates end of file. If count is zero, read
+ returns zero as well. On error, -1 is returned.
+
+Errors:
+
+ EBADF fd is not a valid file descriptor or is not open for
+ reading.
+
+ EFAULT buf is an invalid pointer value.
+
+ EINTR The call was interrupted by the user.
+@end smallexample
+
+@node write
+@unnumberedsubsubsec write
+
+@smallexample
+Synopsis: int write(int fd, const void *buf, unsigned int count);
+
+Request: Fwrite,fd,bufptr,count
+
+Return value: On success, the number of bytes written are returned.
+ Zero indicates nothing was written. On error, -1
+ is returned.
+
+Errors:
+
+ EBADF fd is not a valid file descriptor or is not open for
+ writing.
+
+ EFAULT buf is an invalid pointer value.
+
+ EFBIG An attempt was made to write a file that exceeds the
+ host specific maximum file size allowed.
+
+ ENOSPC No space on device to write the data.
+
+ EINTR The call was interrupted by the user.
+@end smallexample
+
+@node lseek
+@unnumberedsubsubsec lseek
+
+@smallexample
+Synopsis: long lseek (int fd, long offset, int flag);
+
+Request: Flseek,fd,offset,flag
+
+`flag' is one of:
+
+ SEEK_SET The offset is set to offset bytes.
+
+ SEEK_CUR The offset is set to its current location plus offset
+ bytes.
+
+ SEEK_END The offset is set to the size of the file plus offset
+ bytes.
+
+Return value: On success, the resulting unsigned offset in bytes from
+ the beginning of the file is returned. Otherwise, a
+ value of -1 is returned.
+
+Errors:
+
+ EBADF fd is not a valid open file descriptor.
+
+ ESPIPE fd is associated with the GDB console.
+
+ EINVAL flag is not a proper value.
+
+ EINTR The call was interrupted by the user.
+@end smallexample
+
+@node rename
+@unnumberedsubsubsec rename
+
+@smallexample
+Synopsis: int rename(const char *oldpath, const char *newpath);
+
+Request: Frename,oldpathptr/len,newpathptr/len
+
+Return value: On success, zero is returned. On error, -1 is returned.
+
+Errors:
+
+ EISDIR newpath is an existing directory, but oldpath is not a
+ directory.
+
+ EEXIST newpath is a non-empty directory.
+
+ EBUSY oldpath or newpath is a directory that is in use by some
+ process.
+
+ EINVAL An attempt was made to make a directory a subdirectory
+ of itself.
+
+ ENOTDIR A component used as a directory in oldpath or new
+ path is not a directory. Or oldpath is a directory
+ and newpath exists but is not a directory.
+
+ EFAULT oldpathptr or newpathptr are invalid pointer values.
+
+ EACCES No access to the file or the path of the file.
+
+ ENAMETOOLONG
+ oldpath or newpath was too long.
+
+ ENOENT A directory component in oldpath or newpath does not exist.
+
+ EROFS The file is on a read-only filesystem.
+
+ ENOSPC The device containing the file has no room for the new
+ directory entry.
+
+ EINTR The call was interrupted by the user.
+@end smallexample
+
+@node unlink
+@unnumberedsubsubsec unlink
+
+@smallexample
+Synopsis: int unlink(const char *pathname);
+
+Request: Funlink,pathnameptr/len
+
+Return value: On success, zero is returned. On error, -1 is returned.
+
+Errors:
+
+ EACCES No access to the file or the path of the file.
+
+ EPERM The system does not allow unlinking of directories.
+
+ EBUSY The file pathname cannot be unlinked because it's
+ being used by another process.
+
+ EFAULT pathnameptr is an invalid pointer value.
+
+ ENAMETOOLONG
+ pathname was too long.
+
+ ENOENT A directory component in pathname does not exist.
+
+ ENOTDIR A component of the path is not a directory.
+
+ EROFS The file is on a read-only filesystem.
+
+ EINTR The call was interrupted by the user.
+@end smallexample
+
+@node stat/fstat
+@unnumberedsubsubsec stat/fstat
+
+@smallexample
+Synopsis: int stat(const char *pathname, struct stat *buf);
+ int fstat(int fd, struct stat *buf);
+
+Request: Fstat,pathnameptr/len,bufptr
+ Ffstat,fd,bufptr
+
+Return value: On success, zero is returned. On error, -1 is returned.
+
+Errors:
+
+ EBADF fd is not a valid open file.
+
+ ENOENT A directory component in pathname does not exist or the
+ path is an empty string.
+
+ ENOTDIR A component of the path is not a directory.
+
+ EFAULT pathnameptr is an invalid pointer value.
+
+ EACCES No access to the file or the path of the file.
+
+ ENAMETOOLONG
+ pathname was too long.
+
+ EINTR The call was interrupted by the user.
+@end smallexample
+
+@node gettimeofday
+@unnumberedsubsubsec gettimeofday
+
+@smallexample
+Synopsis: int gettimeofday(struct timeval *tv, void *tz);
+
+Request: Fgettimeofday,tvptr,tzptr
+
+Return value: On success, 0 is returned, -1 otherwise.
+
+Errors:
+
+ EINVAL tz is a non-NULL pointer.
+
+ EFAULT tvptr and/or tzptr is an invalid pointer value.
+@end smallexample
+
+@node isatty
+@unnumberedsubsubsec isatty
+
+@smallexample
+Synopsis: int isatty(int fd);
+
+Request: Fisatty,fd
+
+Return value: Returns 1 if fd refers to the GDB console, 0 otherwise.
+
+Errors:
+
+ EINTR The call was interrupted by the user.
+@end smallexample
+
+@node system
+@unnumberedsubsubsec system
+
+@smallexample
+Synopsis: int system(const char *command);
+
+Request: Fsystem,commandptr/len
+
+Return value: The value returned is -1 on error and the return status
+ of the command otherwise. Only the exit status of the
+ command is returned, which is extracted from the hosts
+ system return value by calling WEXITSTATUS(retval).
+ In case /bin/sh could not be executed, 127 is returned.
+
+Errors:
+
+ EINTR The call was interrupted by the user.
+@end smallexample
+
+@node Protocol specific representation of datatypes
+@subsection Protocol specific representation of datatypes
+
+@menu
+* Integral datatypes::
+* Pointer values::
+* struct stat::
+* struct timeval::
+@end menu
+
+@node Integral datatypes
+@unnumberedsubsubsec Integral datatypes
+
+The integral datatypes used in the system calls are
+
+@smallexample
+int, unsigned int, long, unsigned long, mode_t and time_t
+@end smallexample
+
+Int, unsigned int, mode_t and time_t are implemented as 32 bit values
+in this protocol.
+
+Long and unsigned long are implemented as 64 bit types.
+
+@xref{Limits}, for corresponding MIN and MAX values (similar to those
+in limits.h) to allow range checking on host and target.
+
+@node Pointer values
+@unnumberedsubsubsec Pointer values
+
+Pointers to target data is transmitted as they are. A difference
+is made for pointers to buffers for which the length isn't
+transmitted as part of the function call, namely strings. Strings
+are transmitted as a pointer/length pair, both as hex values, e. g.
+
+@smallexample
+@code{1aaf/12}
+@end smallexample
+
+which is a pointer to data of length 18 bytes at position 0x1aaf.
+The length is defined as the full string length in bytes, including
+the trailing null byte. Example:
+
+@smallexample
+"hello, world" at address 0x123456
+@end smallexample
+
+is transmitted as
+
+@smallexample
+@code{123456/d}
+@end smallexample
+
+@node struct stat
+@unnumberedsubsubsec struct stat
+
+The buffer of type struct stat used by the target and GDB is defined
+as follows:
+
+@smallexample
+struct stat @{
+ unsigned int st_dev; /* device */
+ unsigned int st_ino; /* inode */
+ mode_t st_mode; /* protection */
+ unsigned int st_nlink; /* number of hard links */
+ unsigned int st_uid; /* user ID of owner */
+ unsigned int st_gid; /* group ID of owner */
+ unsigned int st_rdev; /* device type (if inode device) */
+ unsigned long st_size; /* total size, in bytes */
+ unsigned long st_blksize; /* blocksize for filesystem I/O */
+ unsigned long st_blocks; /* number of blocks allocated */
+ time_t st_atime; /* time of last access */
+ time_t st_mtime; /* time of last modification */
+ time_t st_ctime; /* time of last change */
+@};
+@end smallexample
+
+The integral datatypes are conforming to the definition in B.1 so this
+structure is of size 64 bytes.
+
+The values of several fields have a restricted meaning and/or
+range of values.
+
+@smallexample
+st_dev: 0 file
+ 1 console
+
+st_ino: No valid meaning for the target. Transmitted unchanged.
+
+st_mode: Valid mode bits are described in Appendix C. Any other
+ bits have currently no meaning for the target.
+
+st_uid: No valid meaning for the target. Transmitted unchanged.
+
+st_gid: No valid meaning for the target. Transmitted unchanged.
+
+st_rdev: No valid meaning for the target. Transmitted unchanged.
+
+st_atime, st_mtime, st_ctime:
+ These values have a host and file system dependent
+ accuracy. Especially on Windows hosts the file systems
+ don't support exact timing values.
+@end smallexample
+
+The target gets a struct stat of the above representation and is
+responsible to coerce it to the target representation before
+continuing.
+
+Note that due to size differences between the host and target
+representation of stat members, these members could eventually
+get truncated on the target.
+
+@node struct timeval
+@unnumberedsubsubsec struct timeval
+
+The buffer of type struct timeval used by the target and GDB is defined
+as follows:
+
+@smallexample
+struct timeval @{
+ time_t tv_sec; /* second */
+ long tv_usec; /* microsecond */
+@};
+@end smallexample
+
+The integral datatypes are conforming to the definition in B.1 so this
+structure is of size 8 bytes.
+
+@node Constants
+@subsection Constants
+
+The following values are used for the constants inside of the
+protocol. GDB and target are resposible to translate these
+values before and after the call as needed.
+
+@menu
+* Open flags::
+* mode_t values::
+* Errno values::
+* Lseek flags::
+* Limits::
+@end menu
+
+@node Open flags
+@unnumberedsubsubsec Open flags
+
+All values are given in hexadecimal representation.
+
+@smallexample
+ O_RDONLY 0
+ O_WRONLY 1
+ O_RDWR 2
+ O_APPEND 8
+ O_CREAT 200
+ O_TRUNC 400
+ O_EXCL 800
+@end smallexample
+
+@node mode_t values
+@unnumberedsubsubsec mode_t values
+
+All values are given in octal representation.
+
+@smallexample
+ S_IFREG 100000
+ S_IFDIR 40000
+ S_IRUSR 400
+ S_IWUSR 200
+ S_IXUSR 100
+ S_IRGRP 40
+ S_IWGRP 20
+ S_IXGRP 10
+ S_IROTH 4
+ S_IWOTH 2
+ S_IXOTH 1
+@end smallexample
+
+@node Errno values
+@unnumberedsubsubsec Errno values
+
+All values are given in decimal representation.
+
+@smallexample
+ EPERM 1
+ ENOENT 2
+ EINTR 4
+ EBADF 9
+ EACCES 13
+ EFAULT 14
+ EBUSY 16
+ EEXIST 17
+ ENODEV 19
+ ENOTDIR 20
+ EISDIR 21
+ EINVAL 22
+ ENFILE 23
+ EMFILE 24
+ EFBIG 27
+ ENOSPC 28
+ ESPIPE 29
+ EROFS 30
+ ENAMETOOLONG 91
+ EUNKNOWN 9999
+@end smallexample
+
+ EUNKNOWN is used as a fallback error value if a host system returns
+ any error value not in the list of supported error numbers.
+
+@node Lseek flags
+@unnumberedsubsubsec Lseek flags
+
+@smallexample
+ SEEK_SET 0
+ SEEK_CUR 1
+ SEEK_END 2
+@end smallexample
+
+@node Limits
+@unnumberedsubsubsec Limits
+
+All values are given in decimal representation.
+
+@smallexample
+ INT_MIN -2147483648
+ INT_MAX 2147483647
+ UINT_MAX 4294967295
+ LONG_MIN -9223372036854775808
+ LONG_MAX 9223372036854775807
+ ULONG_MAX 18446744073709551615
+@end smallexample
@node Examples
@section Examples
next reply other threads:[~2002-11-21 9:04 UTC|newest]
Thread overview: 29+ messages / expand[flat|nested] mbox.gz Atom feed top
2002-11-21 1:04 Corinna Vinschen [this message]
2002-11-21 1:22 ` Corinna Vinschen
2002-11-23 3:04 ` Eli Zaretskii
2002-11-23 3:02 ` Eli Zaretskii
2002-11-23 8:12 ` Andrew Cagney
2002-11-25 2:52 ` Corinna Vinschen
2002-11-25 11:01 ` Eli Zaretskii
2002-11-26 6:07 ` Corinna Vinschen
2002-11-26 10:02 ` Eli Zaretskii
2002-11-27 9:08 ` Corinna Vinschen
2003-02-26 23:20 ` Andrew Cagney
2003-02-27 8:37 ` Corinna Vinschen
2003-02-27 23:05 ` Andrew Cagney
2003-02-28 8:33 ` Corinna Vinschen
2003-02-28 15:25 ` Daniel Jacobowitz
2003-02-28 15:49 ` Corinna Vinschen
2003-02-28 16:37 ` Daniel Jacobowitz
2003-02-28 15:27 ` Andrew Cagney
2003-02-28 15:47 ` Corinna Vinschen
2003-03-02 3:03 ` Andrew Cagney
2003-03-03 12:12 ` Corinna Vinschen
2003-03-04 18:53 ` Andrew Cagney
2003-03-04 19:46 ` Eli Zaretskii
2003-03-06 21:19 ` Andrew Cagney
2003-03-06 21:26 ` Andrew Cagney
2003-03-07 14:29 ` Corinna Vinschen
2003-03-07 14:55 ` Andrew Cagney
2003-03-01 12:36 ` Eli Zaretskii
2003-03-01 15:43 ` Andrew Cagney
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20021121100443.U24928@cygbert.vinschen.de \
--to=vinschen@redhat.com \
--cc=gdb-patches@sources.redhat.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox