mirror of
https://github.com/espressif/binutils-gdb.git
synced 2025-08-02 19:46:09 +08:00
sim/testsuite/cris: Remove faulty use of basename in C tests
Calls to basename were added here as part of commit e1e1ae6e9b5e "sim: testsuite: fix objdir handling", but that commit missed adding "#include <libgen.h>" or the equivalent GNU extension, see basename(3). Fixing that shows a logical error in the change to openpf1.c; the non-/-prefixed code-path was changed instead of the "/"-prefixed code-path, which is the one executed after that commit. For "newlib" these tests failed linking after that commit. Recent newlib has the (asm-renamed) GNU-extension-variant of basename, but we're better off not using it at all. Unfortunately, compilation failures for C tests run by the machinery in c.exp are currently just marked "unresolved", in contrast to C and assembler tests run by calling run_sim_test. The interaction of calling with the full program-path vs. use of --sysroot exposes a consistency problem: when --sysroot is used, argv[0] isn't the path by which the program can find itself. It's undecided whether argv[0] for the program running in the simulator should be edited (related to the naked argument to the simulator before passing on to the simulated program) to remove a leading --sysroot. Either way, such a change would be out of scope for this commit. * c/stat3.c (mybasename): New macro. Use it instead of basename. * c/openpf1.c: Correct basename-related change and update related comment.
This commit is contained in:

committed by
Hans-Peter Nilsson

parent
81011383d9
commit
4b0e74fd18
@ -3,8 +3,8 @@
|
||||
|
||||
We assume, with EXE being the name of the executable:
|
||||
- The simulator executes with cwd the same directory where the executable
|
||||
is located (so argv[0] contains a plain filename without directory
|
||||
components).
|
||||
is located (also argv[0] contains a plain filename without directory
|
||||
components -or- argv[0] contains the full non-sysroot path to EXE).
|
||||
- There's no /EXE on the host file system. */
|
||||
|
||||
#include <stdio.h>
|
||||
@ -21,8 +21,10 @@ int main (int argc, char *argv[])
|
||||
if (fnam == NULL)
|
||||
abort ();
|
||||
strcpy (fnam, "/");
|
||||
strcat (fnam, basename (argv[0]));
|
||||
strcat (fnam, argv[0]);
|
||||
}
|
||||
else
|
||||
fnam = strrchr (argv[0], '/');
|
||||
|
||||
f = fopen (fnam, "rb");
|
||||
if (f == NULL)
|
||||
|
@ -7,13 +7,14 @@
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include <stdlib.h>
|
||||
#define mybasename(x) ({ const char *x_ = (x), *y_ = strrchr (x_, '/'); y_ != NULL ? y_ + 1 : x_; })
|
||||
|
||||
int main (int argc, char *argv[])
|
||||
{
|
||||
char path[1024] = "/";
|
||||
struct stat buf;
|
||||
|
||||
strcat (path, basename (argv[0]));
|
||||
strcat (path, mybasename(argv[0]));
|
||||
if (stat (".", &buf) != 0
|
||||
|| !S_ISDIR (buf.st_mode))
|
||||
abort ();
|
||||
|
Reference in New Issue
Block a user