blob: 9aec1574f176500b82161e8b4fa61d26c5d1bec3 [file] [log] [blame]
Stephen Hines6975a662012-05-03 12:26:44 -07001#!/usr/bin/env python
2#
3# Copyright (C) 2011 The Android Open Source Project
4#
5# Licensed under the Apache License, Version 2.0 (the "License");
6# you may not use this file except in compliance with the License.
7# You may obtain a copy of the License at
8#
9# http://www.apache.org/licenses/LICENSE-2.0
10#
11# Unless required by applicable law or agreed to in writing, software
12# distributed under the License is distributed on an "AS IS" BASIS,
13# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14# See the License for the specific language governing permissions and
15# limitations under the License.
16#
17
18
19"""Convert data files to assembly output."""
20
21import sys
22
23
24def PrintHeader(var_name):
25 """Print out header for assembly file."""
26 sys.stdout.write("""
27#ifdef __APPLE_CC__
28/*\n\
29 * The mid-2007 version of gcc that ships with Macs requires a\n\
30 * comma on the .section line, but the rest of the world thinks\n\
31 * that's a syntax error. It also wants globals to be explicitly\n\
32 * prefixed with \"_\" as opposed to modern gccs that do the\n\
33 * prefixing for you.\n\
34 */\n\
35.globl _%s\n\
36 .section .rodata,\n\
37 .align 8\n\
38_%s:\n\
39#else\n\
40.globl %s\n\
41 .section .rodata\n\
42 .align 8\n\
43%s:\n\
44#endif\n\
45""" % (var_name, var_name, var_name, var_name))
46
47
48def File2Asm(var_name):
49 """Convert file to assembly output."""
50 PrintHeader(var_name)
51
52 input_size = 0
53 col = 0
54 while True:
55 buf = sys.stdin.read(1024)
56 if len(buf) <= 0:
57 break
58 input_size += len(buf)
59 for c in buf:
60 if col == 0:
61 sys.stdout.write(".byte ")
62 sys.stdout.write("0x%02x" % ord(c))
63 col += 1
64 if col == 8:
65 sys.stdout.write("\n")
66 col = 0
67 elif col % 4 == 0:
68 sys.stdout.write(", ")
69 else:
70 sys.stdout.write(",")
71 if col != 0:
72 sys.stdout.write("\n")
73
74 # encode file size
75 PrintHeader(var_name + "_size")
76 sys.stdout.write(" .long %d\n" % input_size)
77
78
79def main(argv):
80 if len(argv) < 2:
81 print "usage: %s <name>" % argv[0]
82 return 1
83
84 File2Asm(argv[1])
85
86if __name__ == "__main__":
87 main(sys.argv)