aboutsummaryrefslogtreecommitdiff
path: root/gdb/news-xdep.c
blob: 58a9191dc2d104b4370384d17b7727acd653a957 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
/* Low level interface to ptrace, for GDB when running under Unix.
   Copyright (C) 1986, 1987, 1989 Free Software Foundation, Inc.

This file is part of GDB.

GDB is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 1, or (at your option)
any later version.

GDB is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with GDB; see the file COPYING.  If not, write to
the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */

#ifdef __GNUC__
/* Bad implement execle(3). It's depend for "/bin/cc".

   main()
   {
     printf("execle:\n");
     execle(FILE, ARGS, envp);
     exit(1);
   }

   GCC:
   link a6,#0
   pea LC5	; call printf
   jbsr _printf
   ;		; (not popd stack)
   pea _envp	; call execle
   clrl sp@-
   pea LC4
   pea LC4
   pea LC4
   pea LC3
   pea LC6
   jbsr _execle
   addw #32,sp	; delayed pop !!

   /bin/cc:
   link.l	fp,#L23
   movem.l	#L24,(sp)
   pea	L26		; call printf
   jbsr	_printf
   addq.l	#4,sp	; <--- popd stack !!
   pea	_envp		; call execle
   clr.l	-(sp)
   pea	L32
   
   */

execle(name, args)
     char *name, *args;
{
  register char	**env = &args;
  while (*env++)
    ;
  execve(name, (char **)&args, (char **)*env);
}
#endif