Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
R
riscv-gcc-1
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
lvzhengyang
riscv-gcc-1
Commits
e957f438
Commit
e957f438
authored
Apr 08, 2008
by
Arnaud Charlet
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Removed.
From-SVN: r134083
parent
db17411e
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
0 additions
and
387 deletions
+0
-387
gcc/ada/gnatbl.c
+0
-387
No files found.
gcc/ada/gnatbl.c
deleted
100644 → 0
View file @
db17411e
/****************************************************************************
* *
* GNAT COMPILER TOOLS *
* *
* G N A T B L *
* *
* C Implementation File *
* *
* Copyright (C) 1992-2007, Free Software Foundation, Inc. *
* *
* GNAT is free software; you can redistribute it and/or modify it under *
* terms of the GNU General Public License as published by the Free Soft- *
* ware Foundation; either version 3, or (at your option) any later ver- *
* sion. GNAT is distributed in the hope that it will be useful, but WITH- *
* OUT 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 distributed with GNAT; see file COPYING3. If not, go to *
* http://www.gnu.org/licenses for a complete copy of the license. *
* *
* *
* GNAT was originally developed by the GNAT team at New York University. *
* Extensive contributions were provided by Ada Core Technologies Inc. *
* *
****************************************************************************/
#ifdef VMS
#define _POSIX_EXIT 1
#endif
#include "config.h"
#include "system.h"
#if defined (__EMX__) || defined (MSDOS)
#include <process.h>
#endif
#include "adaint.h"
/* These can be set by command line arguments */
char
*
binder_path
=
0
;
char
*
linker_path
=
0
;
char
*
exec_file_name
=
0
;
char
*
ali_file_name
=
0
;
#define BIND_ARG_MAX 512
char
*
bind_args
[
BIND_ARG_MAX
];
int
bind_arg_index
=
-
1
;
#ifdef MSDOS
char
*
coff2exe_path
=
0
;
char
*
coff2exe_args
[]
=
{(
char
*
)
0
,
(
char
*
)
0
};
char
*
del_command
=
0
;
#endif
int
verbose
=
0
;
int
o_present
=
0
;
int
g_present
=
0
;
int
link_arg_max
=
-
1
;
char
**
link_args
=
(
char
**
)
0
;
int
link_arg_index
=
-
1
;
char
*
gcc_B_arg
=
0
;
#ifndef DIR_SEPARATOR
#if defined (__EMX__)
#define DIR_SEPARATOR '\\'
#else
#define DIR_SEPARATOR '/'
#endif
#endif
static
int
linkonly
=
0
;
static
void
addarg
(
char
*
);
static
void
process_args
(
int
*
,
char
*
[]);
static
void
addarg
(
char
*
str
)
{
int
i
;
if
(
++
link_arg_index
>=
link_arg_max
)
{
char
**
new_link_args
=
(
char
**
)
xcalloc
(
link_arg_max
+
1000
,
sizeof
(
char
*
));
for
(
i
=
0
;
i
<=
link_arg_max
;
i
++
)
new_link_args
[
i
]
=
link_args
[
i
];
if
(
link_args
)
free
(
link_args
);
link_arg_max
+=
1000
;
link_args
=
new_link_args
;
}
link_args
[
link_arg_index
]
=
str
;
}
static
void
process_args
(
int
*
p_argc
,
char
*
argv
[])
{
int
i
,
j
;
for
(
i
=
1
;
i
<
*
p_argc
;
i
++
)
{
/* -I is passed on to gnatbind */
if
(
!
strncmp
(
argv
[
i
],
"-I"
,
2
))
{
bind_arg_index
+=
1
;
if
(
bind_arg_index
>=
BIND_ARG_MAX
)
{
fprintf
(
stderr
,
"Too many arguments to gnatbind
\n
"
);
exit
(
-
1
);
}
bind_args
[
bind_arg_index
]
=
argv
[
i
];
}
/* -B is passed on to gcc */
if
(
!
strncmp
(
argv
[
i
],
"-B"
,
2
))
gcc_B_arg
=
argv
[
i
];
/* -v turns on verbose option here and is passed on to gcc */
if
(
!
strcmp
(
argv
[
i
],
"-v"
))
verbose
=
1
;
if
(
!
strcmp
(
argv
[
i
],
"-o"
))
{
o_present
=
1
;
exec_file_name
=
argv
[
i
+
1
];
}
if
(
!
strcmp
(
argv
[
i
],
"-g"
))
g_present
=
1
;
if
(
!
strcmp
(
argv
[
i
],
"-gnatbind"
))
{
/* Explicit naming of binder. Grab the value then remove the
two arguments from the argument list. */
if
(
i
+
1
>=
*
p_argc
)
{
fprintf
(
stderr
,
"Missing argument for -gnatbind
\n
"
);
exit
(
1
);
}
binder_path
=
__gnat_locate_exec
(
argv
[
i
+
1
],
(
char
*
)
"."
);
if
(
!
binder_path
)
{
fprintf
(
stderr
,
"Could not locate binder: %s
\n
"
,
argv
[
i
+
1
]);
exit
(
1
);
}
for
(
j
=
i
+
2
;
j
<
*
p_argc
;
j
++
)
argv
[
j
-
2
]
=
argv
[
j
];
(
*
p_argc
)
-=
2
;
i
--
;
}
else
if
(
!
strcmp
(
argv
[
i
],
"-linkonly"
))
{
/* Don't call the binder. Set the flag and then remove the
argument from the argument list. */
linkonly
=
1
;
for
(
j
=
i
+
1
;
j
<
*
p_argc
;
j
++
)
argv
[
j
-
1
]
=
argv
[
j
];
*
p_argc
-=
1
;
i
--
;
}
else
if
(
!
strcmp
(
argv
[
i
],
"-gnatlink"
))
{
/* Explicit naming of binder. Grab the value then remove the
two arguments from the argument list. */
if
(
i
+
1
>=
*
p_argc
)
{
fprintf
(
stderr
,
"Missing argument for -gnatlink
\n
"
);
exit
(
1
);
}
linker_path
=
__gnat_locate_exec
(
argv
[
i
+
1
],
(
char
*
)
"."
);
if
(
!
linker_path
)
{
fprintf
(
stderr
,
"Could not locate linker: %s
\n
"
,
argv
[
i
+
1
]);
exit
(
1
);
}
for
(
j
=
i
+
2
;
j
<
*
p_argc
;
j
++
)
argv
[
j
-
2
]
=
argv
[
j
];
*
p_argc
-=
2
;
i
--
;
}
}
}
extern
int
main
(
int
,
char
**
);
int
main
(
int
argc
,
char
**
argv
)
{
int
i
,
j
;
int
done_an_ali
=
0
;
int
retcode
;
#ifdef VMS
/* Warning: getenv only retrieves the first directory in VAXC$PATH */
char
*
pathval
=
xstrdup
(
__gnat_to_canonical_dir_spec
(
getenv
(
"VAXC$PATH"
),
0
));
#else
char
*
pathval
=
getenv
(
"PATH"
);
#endif
char
*
spawn_args
[
5
];
int
spawn_index
=
0
;
#if defined (__EMX__) || defined(MSDOS)
char
*
tmppathval
=
malloc
(
strlen
(
pathval
)
+
3
);
strcpy
(
tmppathval
,
".;"
);
pathval
=
strcat
(
tmppathval
,
pathval
);
#endif
process_args
(
&
argc
,
argv
);
if
(
argc
==
1
)
{
fprintf
(
stdout
,
"Usage: %s 'name'.ali
\n
"
,
argv
[
0
]);
fprintf
(
stdout
,
" [-o exec_name] -- by default it is 'name'
\n
"
);
fprintf
(
stdout
,
" [-v] -- verbose mode
\n
"
);
fprintf
(
stdout
,
" [-linkonly] -- doesn't call binder
\n
"
);
fprintf
(
stdout
,
" [-gnatbind name] -- full name for gnatbind
\n
"
);
fprintf
(
stdout
,
" [-gnatlink name] -- full name for linker (gcc)
\n
"
);
fprintf
(
stdout
,
" [list of objects] -- non Ada binaries
\n
"
);
fprintf
(
stdout
,
" [linker options] -- other options for linker
\n
"
);
exit
(
1
);
}
if
(
!
binder_path
&&
!
linkonly
)
binder_path
=
__gnat_locate_exec
((
char
*
)
"gnatbind"
,
pathval
);
if
(
!
binder_path
&&
!
linkonly
)
{
fprintf
(
stderr
,
"Couldn't locate gnatbind
\n
"
);
exit
(
1
);
}
if
(
!
linker_path
)
linker_path
=
__gnat_locate_exec
((
char
*
)
"gnatlink"
,
pathval
);
if
(
!
linker_path
)
{
fprintf
(
stderr
,
"Couldn't locate gnatlink
\n
"
);
exit
(
1
);
}
#ifdef MSDOS
coff2exe_path
=
__gnat_locate_regular_file
(
"coff2exe.bat"
,
pathval
);
if
(
!
coff2exe_path
)
{
fprintf
(
stderr
,
"Couldn't locate %s
\n
"
,
"coff2exe.bat"
);
exit
(
1
);
}
else
coff2exe_args
[
0
]
=
coff2exe_path
;
#endif
addarg
(
linker_path
);
for
(
i
=
1
;
i
<
argc
;
i
++
)
{
int
arg_len
=
strlen
(
argv
[
i
]);
if
(
arg_len
>
4
&&
!
strcmp
(
&
argv
[
i
][
arg_len
-
4
],
".ali"
))
{
if
(
done_an_ali
)
{
fprintf
(
stderr
,
"Sorry - cannot handle more than one ALI file
\n
"
);
exit
(
1
);
}
done_an_ali
=
1
;
if
(
__gnat_is_regular_file
(
argv
[
i
]))
{
ali_file_name
=
argv
[
i
];
if
(
!
linkonly
)
{
/* Run gnatbind */
spawn_index
=
0
;
spawn_args
[
spawn_index
++
]
=
binder_path
;
spawn_args
[
spawn_index
++
]
=
ali_file_name
;
for
(
j
=
0
;
j
<=
bind_arg_index
;
j
++
)
spawn_args
[
spawn_index
++
]
=
bind_args
[
j
];
spawn_args
[
spawn_index
]
=
0
;
if
(
verbose
)
{
int
i
;
for
(
i
=
0
;
i
<
2
;
i
++
)
printf
(
"%s "
,
spawn_args
[
i
]);
putchar
(
'\n'
);
}
retcode
=
__gnat_portable_spawn
(
spawn_args
);
if
(
retcode
!=
0
)
exit
(
retcode
);
}
}
else
addarg
(
argv
[
i
]);
}
#ifdef MSDOS
else
if
(
!
strcmp
(
argv
[
i
],
"-o"
))
{
addarg
(
argv
[
i
]);
if
(
i
<
argc
)
i
++
;
{
char
*
ptr
=
strstr
(
argv
[
i
],
".exe"
);
arg_len
=
strlen
(
argv
[
i
]);
coff2exe_args
[
1
]
=
malloc
(
arg_len
+
1
);
strcpy
(
coff2exe_args
[
1
],
argv
[
i
]);
if
(
ptr
!=
NULL
&&
strlen
(
ptr
)
==
4
)
coff2exe_args
[
1
][
arg_len
-
4
]
=
0
;
addarg
(
coff2exe_args
[
1
]);
}
}
#endif
else
addarg
(
argv
[
i
]);
}
if
(
!
done_an_ali
)
{
fprintf
(
stderr
,
"No
\"
.ali
\"
file specified
\n
"
);
exit
(
1
);
}
addarg
(
ali_file_name
);
addarg
(
NULL
);
if
(
verbose
)
{
int
i
;
for
(
i
=
0
;
i
<
link_arg_index
;
i
++
)
printf
(
"%s "
,
link_args
[
i
]);
putchar
(
'\n'
);
}
retcode
=
__gnat_portable_spawn
(
link_args
);
if
(
retcode
!=
0
)
exit
(
retcode
);
#ifdef MSDOS
retcode
=
__gnat_portable_spawn
(
coff2exe_args
);
if
(
retcode
!=
0
)
exit
(
retcode
);
if
(
!
g_present
)
{
del_command
=
malloc
(
strlen
(
coff2exe_args
[
1
])
+
5
);
sprintf
(
del_command
,
"del %s"
,
coff2exe_args
[
1
]);
retcode
=
system
(
del_command
);
}
#endif
exit
(
0
);
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment