1#!/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) 88