Skip to content

Commit

Permalink
test: Add test for option "linktype"
Browse files Browse the repository at this point in the history
Signed-off-by: Eugene Loh <eugene.loh@oracle.com>
Reviewed-by: Kris Van Hees <kris.van.hees@oracle.com>
  • Loading branch information
euloh authored and kvanhees committed May 24, 2023
1 parent d1b1918 commit d2c5c87
Show file tree
Hide file tree
Showing 2 changed files with 90 additions and 0 deletions.
10 changes: 10 additions & 0 deletions test/unittest/options/tst.linktype.r
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
link pass:
objdump recognizes elf
link pass: -xlinktype=elf
objdump recognizes elf
link pass: -xlinktype=dof
objdump does NOT recognize file format
link FAIL: -xlinktype=foo
objdump does NOT recognize file format
-- @@stderr --
dtrace: failed to set -x linktype: Invalid value for specified option
80 changes: 80 additions & 0 deletions test/unittest/options/tst.linktype.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,80 @@
#!/bin/bash
#
# Oracle Linux DTrace.
# Copyright (c) 2023, Oracle and/or its affiliates. All rights reserved.
# Licensed under the Universal Permissive License v 1.0 as shown at
# http://oss.oracle.com/licenses/upl.
#

# @@nosort

dtrace=$1
CC=/usr/bin/gcc
CFLAGS=

DIRNAME="$tmpdir/linktype.$$.$RANDOM"
mkdir -p $DIRNAME
cd $DIRNAME

# set up the prov.d file and compile

cat > prov.d <<EOF
provider test_prov {
probe go();
};
EOF

$dtrace -h -s prov.d
if [ $? -ne 0 ]; then
echo "failed to generate header file" >& 2
exit 1
fi

# set up the test.c file and compile

cat > test.c <<EOF
#include <sys/types.h>
#include "prov.h"
int main(int argc, char **argv)
{
TEST_PROV_GO();
return 0;
}
EOF

${CC} ${CFLAGS} -c test.c
if [ $? -ne 0 ]; then
echo "failed to compile test.c" >& 2
exit 1
fi

# link with different -xlinktype values

function mytest() {
$dtrace -G $1 -s prov.d test.o

# report whether the link succeeded
if [ $? -ne 0 ]; then
echo "link FAIL:" $1
else
echo "link pass:" $1
fi

# report whether the file format is recognized
objdump --file-headers prov.o |& awk '
/format not recognized/ {
print "objdump does NOT recognize file format";
exit(0);
}
/file format elf/ {
print "objdump recognizes elf";
exit(0);
}'
}

mytest " " # link should pass, file format should be recognized
mytest -xlinktype=elf # link should pass, file format should be recognized
mytest -xlinktype=dof # link should pass, file format should NOT be recognized
mytest -xlinktype=foo # link should FAIL, file format should NOT be recognized

exit 0

0 comments on commit d2c5c87

Please sign in to comment.