Re: Correct usage of nosys
Niklas Dusenlund <[email protected]>
| Newsgroups | gmane.comp.lib.newlib |
|---|---|
| Message-ID | <CAAHv3KGHbDD1hHNbtTdt6eH-Kce2_ykdzOBsO1ezpYVaKmZa0g@mail.gmail.com> |
I am calling printf and I have an implementation of `_write` (in the same file that I attempted to add `_fstat`) that works. I already produce the map file for other purposes. How do I use that to see the "call trees"? - Niklas On Tue, 18 Feb 2025 at 12:54, Richard Earnshaw (lists) < [email protected]> wrote: > On 18/02/2025 08:18, Niklas Dusenlund wrote: > > Hi! > > > > I'm compiling for ARM cortex-m0. When I enable the nosys specs I get the > following warnings: > > > > ``` > > > /usr/local/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/bin/ld: > /usr/local/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/libc_nano.a(libc_a-fstatr.o): > in function `_fstat_r': > > fstatr.c:(.text._fstat_r+0x1c): warning: _fstat is not implemented and > will always fail > > > /usr/local/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/bin/ld: > /usr/local/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/libc_nano.a(libc_a-fstatr.o): > note: the message above does not take linker garbage collection into account > > > /usr/local/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/bin/ld: > /usr/local/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/libc_nano.a(libc_a-isattyr.o): > in function `_isatty_r': > > isattyr.c:(.text._isatty_r+0x18): warning: _isatty is not implemented > and will always fail > > > /usr/local/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/bin/ld: > /usr/local/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/libc_nano.a(libc_a-isattyr.o): > note: the message above does not take linker garbage collection into account > > ``` > > > > I have no intention of using fstat or isatty. But if I implement the > missing functions like this: > > > > ``` > > int _fstat(int fildes, struct stat *st) { > > errno = ENOSYS; > > return -1; > > } > > int _isatty(int file) { return -1; } > > ``` > > > > I get the following errors: > > > > ``` > > > /usr/local/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/bin/ld: > /usr/local/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/libc_nano.a(libc_a-isattyr.o): > in function `_isatty_r': > > isattyr.c:(.text._isatty_r+0x18): undefined reference to `_isatty' > > > /usr/local/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/bin/ld: > /usr/local/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/libc_nano.a(libc_a-fstatr.o): > in function `_fstat_r': > > fstatr.c:(.text._fstat_r+0x1c): undefined reference to `_fstat' > > ``` > > > > If I remove the nosys specs I also get undefined references to _exit and > _sbrk. > > > > In older versions of newlib I could use nano+nosys without warnings. > What is the appropriate way with the latest newlib? If I need to link in my > own stubs, how do I actually do that? > > > > - Niklas > > _fstat_r is the low-level implementation of fstat (), but something else > is probably calling that. > > This can happen if there is a chain of function calls from your code to > this function. To find out why you'll need to get the linker to produce a > map file with -Map=<file>. The map will show which function was called > that resulted in _fstat_r being needed and you can then recurse back to > find which function in your code needed something that resulted in that. > > Are you, for example, calling printf somewhere, or using an assert? > > R. >