annotate extra/as @ 448:5cccf90bf838 3.0 tip

Fixed bug with complex external references generating invalid relocations in the object file
author lost@l-w.ca
date Fri, 05 Nov 2010 22:27:00 -0600
parents 1c31e9005ff7
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
339
eb230fa7d28e Prepare for migration to hg
lost
parents:
diff changeset
1 #!/bin/sh
eb230fa7d28e Prepare for migration to hg
lost
parents:
diff changeset
2 #
eb230fa7d28e Prepare for migration to hg
lost
parents:
diff changeset
3 # Copyright 2009 by William Astle <lost@l-w.ca>
eb230fa7d28e Prepare for migration to hg
lost
parents:
diff changeset
4 #
eb230fa7d28e Prepare for migration to hg
lost
parents:
diff changeset
5 #This file is part of LWASM.
eb230fa7d28e Prepare for migration to hg
lost
parents:
diff changeset
6 #
eb230fa7d28e Prepare for migration to hg
lost
parents:
diff changeset
7 #LWASM is free software: you can redistribute it and/or modify it under the
eb230fa7d28e Prepare for migration to hg
lost
parents:
diff changeset
8 #terms of the GNU General Public License as published by the Free Software
eb230fa7d28e Prepare for migration to hg
lost
parents:
diff changeset
9 #Foundation, either version 3 of the License, or (at your option) any later
eb230fa7d28e Prepare for migration to hg
lost
parents:
diff changeset
10 #version.
eb230fa7d28e Prepare for migration to hg
lost
parents:
diff changeset
11 #
eb230fa7d28e Prepare for migration to hg
lost
parents:
diff changeset
12 #This program is distributed in the hope that it will be useful, but WITHOUT
eb230fa7d28e Prepare for migration to hg
lost
parents:
diff changeset
13 #ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
eb230fa7d28e Prepare for migration to hg
lost
parents:
diff changeset
14 #FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
eb230fa7d28e Prepare for migration to hg
lost
parents:
diff changeset
15 #more details.
eb230fa7d28e Prepare for migration to hg
lost
parents:
diff changeset
16 #
eb230fa7d28e Prepare for migration to hg
lost
parents:
diff changeset
17 #You should have received a copy of the GNU General Public License along with
eb230fa7d28e Prepare for migration to hg
lost
parents:
diff changeset
18 #this program. If not, see <http://www.gnu.org/licenses/>.
eb230fa7d28e Prepare for migration to hg
lost
parents:
diff changeset
19
eb230fa7d28e Prepare for migration to hg
lost
parents:
diff changeset
20 # this was based somewhat on the "as" script from gcc6809
eb230fa7d28e Prepare for migration to hg
lost
parents:
diff changeset
21
eb230fa7d28e Prepare for migration to hg
lost
parents:
diff changeset
22 #echo "LWASM-as $0 $*"
eb230fa7d28e Prepare for migration to hg
lost
parents:
diff changeset
23
eb230fa7d28e Prepare for migration to hg
lost
parents:
diff changeset
24 show_version () {
eb230fa7d28e Prepare for migration to hg
lost
parents:
diff changeset
25 cat <<END
eb230fa7d28e Prepare for migration to hg
lost
parents:
diff changeset
26 LWASM (GNU assembler frontend) 2.3
eb230fa7d28e Prepare for migration to hg
lost
parents:
diff changeset
27 This program is free software; you may redistribute it under the terms of
eb230fa7d28e Prepare for migration to hg
lost
parents:
diff changeset
28 the GNU General Public License. This program has absolutely no warranty.
eb230fa7d28e Prepare for migration to hg
lost
parents:
diff changeset
29 END
eb230fa7d28e Prepare for migration to hg
lost
parents:
diff changeset
30 }
eb230fa7d28e Prepare for migration to hg
lost
parents:
diff changeset
31
eb230fa7d28e Prepare for migration to hg
lost
parents:
diff changeset
32 fatal_error () {
eb230fa7d28e Prepare for migration to hg
lost
parents:
diff changeset
33 echo $* 1>&2
eb230fa7d28e Prepare for migration to hg
lost
parents:
diff changeset
34 exit 1
eb230fa7d28e Prepare for migration to hg
lost
parents:
diff changeset
35 }
eb230fa7d28e Prepare for migration to hg
lost
parents:
diff changeset
36
eb230fa7d28e Prepare for migration to hg
lost
parents:
diff changeset
37 # Assume nothing.
eb230fa7d28e Prepare for migration to hg
lost
parents:
diff changeset
38
eb230fa7d28e Prepare for migration to hg
lost
parents:
diff changeset
39 input_file=
eb230fa7d28e Prepare for migration to hg
lost
parents:
diff changeset
40 output_file=
eb230fa7d28e Prepare for migration to hg
lost
parents:
diff changeset
41 list_file=
eb230fa7d28e Prepare for migration to hg
lost
parents:
diff changeset
42 options=
eb230fa7d28e Prepare for migration to hg
lost
parents:
diff changeset
43 list_file_enabled=n
eb230fa7d28e Prepare for migration to hg
lost
parents:
diff changeset
44
eb230fa7d28e Prepare for migration to hg
lost
parents:
diff changeset
45 # Parse the command-line options. See the GNU 'as' man page for
eb230fa7d28e Prepare for migration to hg
lost
parents:
diff changeset
46 # an explanation of all these options. Our goal is to translate
eb230fa7d28e Prepare for migration to hg
lost
parents:
diff changeset
47 # them into lwasm form.
eb230fa7d28e Prepare for migration to hg
lost
parents:
diff changeset
48
eb230fa7d28e Prepare for migration to hg
lost
parents:
diff changeset
49 while [ "$1" != "" ]; do
eb230fa7d28e Prepare for migration to hg
lost
parents:
diff changeset
50 arg=$1; shift
eb230fa7d28e Prepare for migration to hg
lost
parents:
diff changeset
51 case $arg in
eb230fa7d28e Prepare for migration to hg
lost
parents:
diff changeset
52 -m6809)
eb230fa7d28e Prepare for migration to hg
lost
parents:
diff changeset
53 true
eb230fa7d28e Prepare for migration to hg
lost
parents:
diff changeset
54 ;;
eb230fa7d28e Prepare for migration to hg
lost
parents:
diff changeset
55 -gn)
eb230fa7d28e Prepare for migration to hg
lost
parents:
diff changeset
56 # Generate NoICE debug symbols
eb230fa7d28e Prepare for migration to hg
lost
parents:
diff changeset
57 # ignored - no output formats support debugging symbols
eb230fa7d28e Prepare for migration to hg
lost
parents:
diff changeset
58 ;;
eb230fa7d28e Prepare for migration to hg
lost
parents:
diff changeset
59 -gs)
eb230fa7d28e Prepare for migration to hg
lost
parents:
diff changeset
60 # Generate SDCC debug symbols
eb230fa7d28e Prepare for migration to hg
lost
parents:
diff changeset
61 # ignored - no output formats supprt debugging symbols
eb230fa7d28e Prepare for migration to hg
lost
parents:
diff changeset
62 ;;
eb230fa7d28e Prepare for migration to hg
lost
parents:
diff changeset
63 # --globalize-symbols)
eb230fa7d28e Prepare for migration to hg
lost
parents:
diff changeset
64 # # Make all symbols global
eb230fa7d28e Prepare for migration to hg
lost
parents:
diff changeset
65 # # lwasm does not support globalizing everything by default
eb230fa7d28e Prepare for migration to hg
lost
parents:
diff changeset
66 # ;;
eb230fa7d28e Prepare for migration to hg
lost
parents:
diff changeset
67 -m*)
eb230fa7d28e Prepare for migration to hg
lost
parents:
diff changeset
68 fatal_error "invalid CPU option '$arg'"
eb230fa7d28e Prepare for migration to hg
lost
parents:
diff changeset
69 ;;
eb230fa7d28e Prepare for migration to hg
lost
parents:
diff changeset
70 --)
eb230fa7d28e Prepare for migration to hg
lost
parents:
diff changeset
71 fatal_error "standard input not supported"
eb230fa7d28e Prepare for migration to hg
lost
parents:
diff changeset
72 ;;
eb230fa7d28e Prepare for migration to hg
lost
parents:
diff changeset
73 # -a*)
eb230fa7d28e Prepare for migration to hg
lost
parents:
diff changeset
74 # options="${options}lc"
eb230fa7d28e Prepare for migration to hg
lost
parents:
diff changeset
75 # list_file_enabled=y
eb230fa7d28e Prepare for migration to hg
lost
parents:
diff changeset
76 # ;;
eb230fa7d28e Prepare for migration to hg
lost
parents:
diff changeset
77 -I*)
eb230fa7d28e Prepare for migration to hg
lost
parents:
diff changeset
78 #include_file=${arg#-I}
eb230fa7d28e Prepare for migration to hg
lost
parents:
diff changeset
79 #echo "warning: include path '$include_file' ignored"
eb230fa7d28e Prepare for migration to hg
lost
parents:
diff changeset
80 ;;
eb230fa7d28e Prepare for migration to hg
lost
parents:
diff changeset
81 -MD)
eb230fa7d28e Prepare for migration to hg
lost
parents:
diff changeset
82 fatal_error "assembler option '$arg' not supported"
eb230fa7d28e Prepare for migration to hg
lost
parents:
diff changeset
83 ;;
eb230fa7d28e Prepare for migration to hg
lost
parents:
diff changeset
84 -o)
eb230fa7d28e Prepare for migration to hg
lost
parents:
diff changeset
85 output_file=$1; shift
eb230fa7d28e Prepare for migration to hg
lost
parents:
diff changeset
86 ;;
eb230fa7d28e Prepare for migration to hg
lost
parents:
diff changeset
87 -v|-version)
eb230fa7d28e Prepare for migration to hg
lost
parents:
diff changeset
88 show_version
eb230fa7d28e Prepare for migration to hg
lost
parents:
diff changeset
89 ;;
eb230fa7d28e Prepare for migration to hg
lost
parents:
diff changeset
90 --version)
eb230fa7d28e Prepare for migration to hg
lost
parents:
diff changeset
91 show_version
eb230fa7d28e Prepare for migration to hg
lost
parents:
diff changeset
92 exit 0
eb230fa7d28e Prepare for migration to hg
lost
parents:
diff changeset
93 ;;
eb230fa7d28e Prepare for migration to hg
lost
parents:
diff changeset
94 -D|-f|-K|--traditional-format|-w|-x|-Z|-W|--no-warn)
eb230fa7d28e Prepare for migration to hg
lost
parents:
diff changeset
95 # These options are accepted but ignored by GNU as.
eb230fa7d28e Prepare for migration to hg
lost
parents:
diff changeset
96 true
eb230fa7d28e Prepare for migration to hg
lost
parents:
diff changeset
97 ;;
eb230fa7d28e Prepare for migration to hg
lost
parents:
diff changeset
98 # =*)
eb230fa7d28e Prepare for migration to hg
lost
parents:
diff changeset
99 # # Set the name of the listing file
eb230fa7d28e Prepare for migration to hg
lost
parents:
diff changeset
100 # list_file=${arg#=}
eb230fa7d28e Prepare for migration to hg
lost
parents:
diff changeset
101 # ;;
eb230fa7d28e Prepare for migration to hg
lost
parents:
diff changeset
102 -*)
eb230fa7d28e Prepare for migration to hg
lost
parents:
diff changeset
103 echo "as (m6809): unrecognized option $arg"
eb230fa7d28e Prepare for migration to hg
lost
parents:
diff changeset
104 exit 1
eb230fa7d28e Prepare for migration to hg
lost
parents:
diff changeset
105 ;;
eb230fa7d28e Prepare for migration to hg
lost
parents:
diff changeset
106 *)
eb230fa7d28e Prepare for migration to hg
lost
parents:
diff changeset
107 input_file=$arg
eb230fa7d28e Prepare for migration to hg
lost
parents:
diff changeset
108 ;;
eb230fa7d28e Prepare for migration to hg
lost
parents:
diff changeset
109 esac
eb230fa7d28e Prepare for migration to hg
lost
parents:
diff changeset
110 done
eb230fa7d28e Prepare for migration to hg
lost
parents:
diff changeset
111
eb230fa7d28e Prepare for migration to hg
lost
parents:
diff changeset
112 # Complain if no input files given. We don't support redirecting
eb230fa7d28e Prepare for migration to hg
lost
parents:
diff changeset
113 # from standard input.
eb230fa7d28e Prepare for migration to hg
lost
parents:
diff changeset
114
eb230fa7d28e Prepare for migration to hg
lost
parents:
diff changeset
115 if [ "x$input_file" = "x" ]; then
eb230fa7d28e Prepare for migration to hg
lost
parents:
diff changeset
116 fatal_error "no input file specified"
eb230fa7d28e Prepare for migration to hg
lost
parents:
diff changeset
117 fi
eb230fa7d28e Prepare for migration to hg
lost
parents:
diff changeset
118
eb230fa7d28e Prepare for migration to hg
lost
parents:
diff changeset
119 # Invoke the real (lwasm) assembler.
eb230fa7d28e Prepare for migration to hg
lost
parents:
diff changeset
120 # The -o option specifies the output file name
eb230fa7d28e Prepare for migration to hg
lost
parents:
diff changeset
121 # --obj creates object files
eb230fa7d28e Prepare for migration to hg
lost
parents:
diff changeset
122 # --pragma=undefextern causes undefined symbols to be assumed external
eb230fa7d28e Prepare for migration to hg
lost
parents:
diff changeset
123 # --pragma=cescapes allows C escape syntax in strings
eb230fa7d28e Prepare for migration to hg
lost
parents:
diff changeset
124 #echo lwasm -o "$output_file" $options --obj --pragma=undefextern --pragma=cescapes $input_file
eb230fa7d28e Prepare for migration to hg
lost
parents:
diff changeset
125 lwasm -o "$output_file" $options --obj --pragma=undefextern --pragma=cescapes --pragma=importundefexport $input_file
eb230fa7d28e Prepare for migration to hg
lost
parents:
diff changeset
126 rc=$?
eb230fa7d28e Prepare for migration to hg
lost
parents:
diff changeset
127
eb230fa7d28e Prepare for migration to hg
lost
parents:
diff changeset
128 # OK, see if the assembler succeeded or not.
eb230fa7d28e Prepare for migration to hg
lost
parents:
diff changeset
129 # If it failed, the source is copied to /tmp/as6809_error.s
eb230fa7d28e Prepare for migration to hg
lost
parents:
diff changeset
130 # so that it can be inspected. GCC will normally delete any
eb230fa7d28e Prepare for migration to hg
lost
parents:
diff changeset
131 # temporary .s files that it generates. This makes debugging
eb230fa7d28e Prepare for migration to hg
lost
parents:
diff changeset
132 # the compiler easier.
eb230fa7d28e Prepare for migration to hg
lost
parents:
diff changeset
133 #
eb230fa7d28e Prepare for migration to hg
lost
parents:
diff changeset
134 # lwasm does not create an output file if it errors out but it also doesn't
eb230fa7d28e Prepare for migration to hg
lost
parents:
diff changeset
135 # remove an existing file if it fails so we remove it anyway...
eb230fa7d28e Prepare for migration to hg
lost
parents:
diff changeset
136
eb230fa7d28e Prepare for migration to hg
lost
parents:
diff changeset
137 if [ "$rc" != "0" ]; then
eb230fa7d28e Prepare for migration to hg
lost
parents:
diff changeset
138 cp -p $input_file /tmp/as6809_error.s
eb230fa7d28e Prepare for migration to hg
lost
parents:
diff changeset
139 rm -f $asoutput_file
eb230fa7d28e Prepare for migration to hg
lost
parents:
diff changeset
140 exit $rc
eb230fa7d28e Prepare for migration to hg
lost
parents:
diff changeset
141 fi
eb230fa7d28e Prepare for migration to hg
lost
parents:
diff changeset
142
eb230fa7d28e Prepare for migration to hg
lost
parents:
diff changeset
143 # we don't need anything fancy here since lwasm supports specifying output
eb230fa7d28e Prepare for migration to hg
lost
parents:
diff changeset
144 # file names....