-
Notifications
You must be signed in to change notification settings - Fork 17
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
test: Add test for option "linktype"
Signed-off-by: Eugene Loh <eugene.loh@oracle.com> Reviewed-by: Kris Van Hees <kris.van.hees@oracle.com>
- Loading branch information
Showing
2 changed files
with
90 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 |