Re: Question about OS calls in RISCV BSP
Joel Sherrill <[email protected]>
| Newsgroups | gmane.comp.lib.newlib |
|---|---|
| Message-ID | <CAF9ehCV9X-4KS1XAYcCA32FvjWPno6=kj63nXO+uOdv6ZsmRJg@mail.gmail.com> |
On Tue, Sep 17, 2019, 7:25 PM Jim Wilson <[email protected]> wrote: > On Wed, Sep 11, 2019 at 6:40 PM Bandhav Veluri <[email protected]> wrote: > > I'm the confused about the list of functions to be implemented in a BSP. > > Newlib documentation explains 19 syscalls listed here is the "complete > set > > of system definitions <https://sourceware.org/newlib/libc.html#Syscalls > >". > > But when I look at RISC-V BSP > > < > https://github.com/riscv/riscv-newlib/tree/riscv-newlib-3.1.0/libgloss/riscv > >, > > I see lot more extra routines implemented such as getcwd, chown, chdir > etc. > > What is the exact list of subroutines a BSP has to implement? > > I think that is a minor bug in the RISC-V libgloss port. This used to > have a single syscall.c file which defined functions like open, but > that was wrong, as it conflicted with the open function in newlib > which expects to call _open in libgloss. So the RISC-V syscalls.c > file was split into multiple files, and the functions all had the > missing underscore prefixed. Unfortunately, the syscall.c file also > had a getcwd function which got renamed to _getcwd, which newlib > apparently never calls. So we have an unused function _getcwd, and we > have a missing getcwd function, but we never should have needed getcwd > in libgloss in the first place. Most of the RISC-V libgloss history > is out of tree, but I'd guess that they were trying to compile POSIX > programs, and just added every syscall they needed to get those > programs to compile. It is better to just use a linux toolchain to > compile POSIX programs, but maybe they didn't have a working linux > toolchain at the time. > Fwiw RTEMS has a robust POSIX API set if someone is interested in a RISC-V RTOS. It you also need the right toolchain. Just saying Linux isn't the only POSIX option. > > Also, any reason why is fcntl missing in the Newlib documentation's list? > > It seems one of the syscalls required by this list > > <https://github.com/eblot/newlib/tree/master/newlib/libc/syscalls>. > > Probably just forgot to update the docs when _fcntl support was added. > > Jim >