diff options
author | The Android Open Source Project <initial-contribution@android.com> | 2009-03-03 19:28:42 -0800 |
---|---|---|
committer | The Android Open Source Project <initial-contribution@android.com> | 2009-03-03 19:28:42 -0800 |
commit | 88b607994a148f4af5bffee163e39ce8296750c6 (patch) | |
tree | fa249ff843e976cf034f2029437d3362a8396321 /tools/bin2asm | |
parent | 05806d7af62e07c6225b2e7103a1b115ecf6c9ad (diff) | |
download | build-88b607994a148f4af5bffee163e39ce8296750c6.zip build-88b607994a148f4af5bffee163e39ce8296750c6.tar.gz build-88b607994a148f4af5bffee163e39ce8296750c6.tar.bz2 |
auto import from //depot/cupcake/@135843
Diffstat (limited to 'tools/bin2asm')
-rw-r--r-- | tools/bin2asm/Android.mk | 24 | ||||
-rw-r--r-- | tools/bin2asm/data | 52 | ||||
-rw-r--r-- | tools/bin2asm/icudata.c | 72 |
3 files changed, 148 insertions, 0 deletions
diff --git a/tools/bin2asm/Android.mk b/tools/bin2asm/Android.mk new file mode 100644 index 0000000..4522a20 --- /dev/null +++ b/tools/bin2asm/Android.mk @@ -0,0 +1,24 @@ +# Copyright (C) 2008 The Android Open Source Project +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +LOCAL_PATH:= $(call my-dir) +include $(CLEAR_VARS) + +LOCAL_SRC_FILES := \ + icudata.c + +LOCAL_MODULE := icudata + +include $(BUILD_HOST_EXECUTABLE) + diff --git a/tools/bin2asm/data b/tools/bin2asm/data new file mode 100644 index 0000000..3be865f --- /dev/null +++ b/tools/bin2asm/data @@ -0,0 +1,52 @@ +/* + * Convert a data file into a .S file suitable for assembly. + * This reads from stdin and writes to stdout and takes a single + * argument for the name of the symbol in the assembly file. + */ + +#include <stdio.h> + +int main(int argc, char *argv[]) { + unsigned char buf[4096]; + size_t amt; + size_t i; + int col = 0; + char *name = argv[1]; + + printf("\ +#ifdef __APPLE_CC__\n\ +/*\n\ + * The mid-2007 version of gcc that ships with Macs requires a\n\ + * comma on the .section line, but the rest of the world thinks\n\ + * that's a syntax error. It also wants globals to be explicitly\n\ + * prefixed with \"_\" as opposed to modern gccs that do the\n\ + * prefixing for you.\n\ + */\n\ +.globl _%s\n\ + .section .rodata,\n\ + .align 8\n\ +_%s:\n\ +#else\n\ +.globl %s\n\ + .section .rodata\n\ + .align 8\n\ +%s:\n\ +#endif\n\ +", name, name, name, name); + + while (! feof(stdin)) { + amt = fread(buf, 1, sizeof(buf), stdin); + for (i = 0; i < amt; i++) { + printf((col == 0) ? ".byte %3d" : ",%3d", buf[i]); + col++; + if (col == 16) { + printf("\n"); + col = 0; + } + } + } + + if (col != 0) { + printf("\n"); + } +} diff --git a/tools/bin2asm/icudata.c b/tools/bin2asm/icudata.c new file mode 100644 index 0000000..ecd1b4b --- /dev/null +++ b/tools/bin2asm/icudata.c @@ -0,0 +1,72 @@ +/* + * Convert a data file into a .S file suitable for assembly. + * This reads from stdin and writes to stdout and takes a single + * argument for the name of the symbol in the assembly file. + */ + +#include <stdio.h> + +int main(int argc, char *argv[]) { + unsigned char buf[4096]; + size_t amt; + size_t i; + int col = 0; + char *name; + + if (argc != 2) { + fprintf(stderr, "usage: %s NAME < DAT_FILE > ASM_FILE\n", argv[0]); + for (i=0; i<argc; i++) { + fprintf(stderr, " '%s'", argv[i]); + } + fprintf(stderr, "\n"); + return 1; + } + + name = argv[1]; + + printf("\ +#ifdef __APPLE_CC__\n\ +/*\n\ + * The mid-2007 version of gcc that ships with Macs requires a\n\ + * comma on the .section line, but the rest of the world thinks\n\ + * that's a syntax error. It also wants globals to be explicitly\n\ + * prefixed with \"_\" as opposed to modern gccs that do the\n\ + * prefixing for you.\n\ + */\n\ +.globl _%s\n\ + .section .rodata,\n\ + .align 8\n\ +_%s:\n\ +#else\n\ +.globl %s\n\ + .section .rodata\n\ + .align 8\n\ +%s:\n\ +#endif\n\ +", name, name, name, name); + + while (! feof(stdin)) { + amt = fread(buf, 1, sizeof(buf), stdin); + for (i = 0; i < amt; i++) { + if (col == 0) { + printf(".byte "); + } + printf("0x%02x", buf[i]); + col++; + if (col == 16) { + printf("\n"); + col = 0; + } else if (col % 4 == 0) { + printf(", "); + } else { + printf(","); + } + } + } + + if (col != 0) { + printf("\n"); + } + + return 0; +} |