#!/bin/bash # Copyright 2016 Google Inc. All Rights Reserved. # # 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. if [ "$#" == "0" ] ; then echo "Usage: make_test_files.sh " exit 1 fi cd $1 OUTPUT_DIR=`pwd` TMP=`mktemp -d` CC="${CC:-cc}" echo Writing output to $OUTPUT_DIR echo Working in $TMP cd $TMP function publish() { echo $1 cp $1 $OUTPUT_DIR } function make_tmp_obj() { FILE=$1 CONTENTS="$2" CFILE=`basename $1`.c echo "$CONTENTS" > $CFILE $CC -g -fPIC -o $FILE -c $CFILE } function make_obj() { FILE=$1 CONTENTS="$2" make_tmp_obj $FILE "$CONTENTS" publish $FILE } function make_ar() { FILE=$1 shift ar rcs $FILE "$@" publish $FILE } function make_so() { FILE=$1 shift $CC -g -shared -o $FILE "$@" publish $FILE } function make_binary() { FILE=$1 shift $CC -o $FILE "$@" publish $FILE } make_obj "01-empty.o" "" make_obj "02-simple.o" " #include uint64_t bss_a = 0; uint32_t bss_b = 0; uint64_t data_a = 1; uint32_t data_b = 2; const uint64_t rodata_a = 1; const uint32_t rodata_b = 2; uint32_t func1() { return bss_b / 17; } uint32_t func2() { return data_b / 17; }" make_tmp_obj "foo.o" " int foo_x[1000] = {0}; int foo_y = 0; int foo_func() { return foo_y / 17; } " make_tmp_obj "bar.o" " int bar_x[1000] = {1}; int bar_y = 1; int bar_z = 0; int bar_func() { return bar_y / 17; } " make_tmp_obj "a_filename_longer_than_sixteen_chars.o" " int long_filename_x[3] = {1}; int long_filename_y = 2; " make_ar "03-simple.a" "foo.o" "bar.o" "a_filename_longer_than_sixteen_chars.o" make_so "04-simple.so" "foo.o" "bar.o" make_tmp_obj "main.o" "int main() {}" make_binary "05-binary.bin" "foo.o" "bar.o" "main.o" # Make an object like foo.o but with different sizes. make_tmp_obj "foo2.o" " int foo_x[500] = {0}; long long foo_y = 0; int foo_func() { return foo_y / 17 * 37 / 21; } " make_ar "06-diff.a" "foo2.o" "bar.o" "a_filename_longer_than_sixteen_chars.o" cp "05-binary.bin" "07-binary-stripped.bin" strip "07-binary-stripped.bin" publish "07-binary-stripped.bin"