1/*
2#notarget: cris*-*-elf
3*/
4
5#include <unistd.h>
6#include <errno.h>
7#include <stdio.h>
8#include <stdlib.h>
9#include <string.h>
10
11int main (int argc, char *argv[])
12{
13  char buf[1024];
14  char buf2[1024];
15  int err;
16
17  /* This is a special feature handled in the simulator.  The "42"
18     should be formed from getpid () if this was a real program.  */
19  err = readlink ("/proc/42/exe", buf, sizeof (buf));
20  if (err < 0)
21    {
22      if (err == -1 && errno == ENOSYS)
23	printf ("ENOSYS\n");
24      printf ("xyzzy\n");
25      exit (0);
26    }
27
28  /* Don't use an abort in the following; it might cause the printf to
29     not make it all the way to output and make debugging more
30     difficult.  */
31
32  /* We assume the program is called with no path, so we might need to
33     prepend it.  */
34  if (getcwd (buf2, sizeof (buf2)) != buf2)
35    {
36      perror ("getcwd");
37      exit (1);
38    }
39
40  if (argv[0][0] == '/')
41    {
42#ifdef SYSROOTED
43      if (strchr (argv[0] + 1, '/') != NULL)
44	{
45	  printf ("%s != %s\n", argv[0], strrchr (argv[0] + 1, '/'));
46	  exit (1);
47	}
48#endif
49      if (strcmp (argv[0], buf) != 0)
50	{
51	  printf ("%s != %s\n", buf, argv[0]);
52	  exit (1);
53	}
54    }
55  else if (argv[0][0] != '.')
56    {
57      if (buf2[strlen (buf2) - 1] != '/')
58	strcat (buf2, "/");
59      strcat (buf2, argv[0]);
60      if (strcmp (buf2, buf) != 0)
61	{
62	  printf ("%s != %s\n", buf, buf2);
63	  exit (1);
64	}
65    }
66  else
67    {
68      strcat (buf2, argv[0] + 1);
69      if (strcmp (buf, buf2) != 0)
70	{
71	  printf ("%s != %s\n", buf, buf2);
72	  exit (1);
73	}
74    }
75
76  printf ("pass\n");
77  exit (0);
78}
79
80
81