blob: bb75402ebeb68491c56f7252f80e0e426c3c2836 [file] [log] [blame]
#!/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 <output dir>"
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 <stdint.h>
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"