diff options
Diffstat (limited to 'llvm/test/tools/llvm-readobj/COFF')
102 files changed, 3865 insertions, 0 deletions
diff --git a/llvm/test/tools/llvm-readobj/COFF/Inputs/aix_xcoff_xlc_test8.o b/llvm/test/tools/llvm-readobj/COFF/Inputs/aix_xcoff_xlc_test8.o Binary files differnew file mode 100644 index 00000000000..ab438d6b44b --- /dev/null +++ b/llvm/test/tools/llvm-readobj/COFF/Inputs/aix_xcoff_xlc_test8.o diff --git a/llvm/test/tools/llvm-readobj/COFF/Inputs/arm64-win1.obj b/llvm/test/tools/llvm-readobj/COFF/Inputs/arm64-win1.obj Binary files differnew file mode 100644 index 00000000000..025e1db6cce --- /dev/null +++ b/llvm/test/tools/llvm-readobj/COFF/Inputs/arm64-win1.obj diff --git a/llvm/test/tools/llvm-readobj/COFF/Inputs/arm64-win2.obj b/llvm/test/tools/llvm-readobj/COFF/Inputs/arm64-win2.obj Binary files differnew file mode 100644 index 00000000000..7e506eedda6 --- /dev/null +++ b/llvm/test/tools/llvm-readobj/COFF/Inputs/arm64-win2.obj diff --git a/llvm/test/tools/llvm-readobj/COFF/Inputs/bad-relocs.obj.coff-i386 b/llvm/test/tools/llvm-readobj/COFF/Inputs/bad-relocs.obj.coff-i386 Binary files differnew file mode 100644 index 00000000000..06ec4718da1 --- /dev/null +++ b/llvm/test/tools/llvm-readobj/COFF/Inputs/bad-relocs.obj.coff-i386 diff --git a/llvm/test/tools/llvm-readobj/COFF/Inputs/basereloc.obj.coff-i386 b/llvm/test/tools/llvm-readobj/COFF/Inputs/basereloc.obj.coff-i386 Binary files differnew file mode 100644 index 00000000000..0aeed443e33 --- /dev/null +++ b/llvm/test/tools/llvm-readobj/COFF/Inputs/basereloc.obj.coff-i386 diff --git a/llvm/test/tools/llvm-readobj/COFF/Inputs/bigobj.coff-x86-64 b/llvm/test/tools/llvm-readobj/COFF/Inputs/bigobj.coff-x86-64 Binary files differnew file mode 100644 index 00000000000..fdfda5e5713 --- /dev/null +++ b/llvm/test/tools/llvm-readobj/COFF/Inputs/bigobj.coff-x86-64 diff --git a/llvm/test/tools/llvm-readobj/COFF/Inputs/codeview-cycle.obj b/llvm/test/tools/llvm-readobj/COFF/Inputs/codeview-cycle.obj Binary files differnew file mode 100644 index 00000000000..85c2d0e55fe --- /dev/null +++ b/llvm/test/tools/llvm-readobj/COFF/Inputs/codeview-cycle.obj diff --git a/llvm/test/tools/llvm-readobj/COFF/Inputs/codeview-inlinees.obj b/llvm/test/tools/llvm-readobj/COFF/Inputs/codeview-inlinees.obj Binary files differnew file mode 100644 index 00000000000..297fdcad0e1 --- /dev/null +++ b/llvm/test/tools/llvm-readobj/COFF/Inputs/codeview-inlinees.obj diff --git a/llvm/test/tools/llvm-readobj/COFF/Inputs/codeview-inlining.obj.coff b/llvm/test/tools/llvm-readobj/COFF/Inputs/codeview-inlining.obj.coff Binary files differnew file mode 100644 index 00000000000..782e991c3bc --- /dev/null +++ b/llvm/test/tools/llvm-readobj/COFF/Inputs/codeview-inlining.obj.coff diff --git a/llvm/test/tools/llvm-readobj/COFF/Inputs/codeview-label.obj b/llvm/test/tools/llvm-readobj/COFF/Inputs/codeview-label.obj Binary files differnew file mode 100644 index 00000000000..ae49a061bb7 --- /dev/null +++ b/llvm/test/tools/llvm-readobj/COFF/Inputs/codeview-label.obj diff --git a/llvm/test/tools/llvm-readobj/COFF/Inputs/codeview-merging-1.obj b/llvm/test/tools/llvm-readobj/COFF/Inputs/codeview-merging-1.obj Binary files differnew file mode 100644 index 00000000000..e51643a136d --- /dev/null +++ b/llvm/test/tools/llvm-readobj/COFF/Inputs/codeview-merging-1.obj diff --git a/llvm/test/tools/llvm-readobj/COFF/Inputs/codeview-merging-2.obj b/llvm/test/tools/llvm-readobj/COFF/Inputs/codeview-merging-2.obj Binary files differnew file mode 100644 index 00000000000..4cf24257dee --- /dev/null +++ b/llvm/test/tools/llvm-readobj/COFF/Inputs/codeview-merging-2.obj diff --git a/llvm/test/tools/llvm-readobj/COFF/Inputs/codeview-merging-anon.obj b/llvm/test/tools/llvm-readobj/COFF/Inputs/codeview-merging-anon.obj Binary files differnew file mode 100644 index 00000000000..3cb58fbd4d5 --- /dev/null +++ b/llvm/test/tools/llvm-readobj/COFF/Inputs/codeview-merging-anon.obj diff --git a/llvm/test/tools/llvm-readobj/COFF/Inputs/codeview-types.obj b/llvm/test/tools/llvm-readobj/COFF/Inputs/codeview-types.obj Binary files differnew file mode 100644 index 00000000000..b00a7c6a3e1 --- /dev/null +++ b/llvm/test/tools/llvm-readobj/COFF/Inputs/codeview-types.obj diff --git a/llvm/test/tools/llvm-readobj/COFF/Inputs/codeview-unsorted.obj b/llvm/test/tools/llvm-readobj/COFF/Inputs/codeview-unsorted.obj Binary files differnew file mode 100644 index 00000000000..08a376de3b9 --- /dev/null +++ b/llvm/test/tools/llvm-readobj/COFF/Inputs/codeview-unsorted.obj diff --git a/llvm/test/tools/llvm-readobj/COFF/Inputs/codeview-vftable.obj.coff b/llvm/test/tools/llvm-readobj/COFF/Inputs/codeview-vftable.obj.coff Binary files differnew file mode 100644 index 00000000000..388a7212eb2 --- /dev/null +++ b/llvm/test/tools/llvm-readobj/COFF/Inputs/codeview-vftable.obj.coff diff --git a/llvm/test/tools/llvm-readobj/COFF/Inputs/coff-load-config-data-end.exe b/llvm/test/tools/llvm-readobj/COFF/Inputs/coff-load-config-data-end.exe Binary files differnew file mode 100644 index 00000000000..9ec69426298 --- /dev/null +++ b/llvm/test/tools/llvm-readobj/COFF/Inputs/coff-load-config-data-end.exe diff --git a/llvm/test/tools/llvm-readobj/COFF/Inputs/coff-load-config-x64.dll b/llvm/test/tools/llvm-readobj/COFF/Inputs/coff-load-config-x64.dll Binary files differnew file mode 100644 index 00000000000..26101f93c41 --- /dev/null +++ b/llvm/test/tools/llvm-readobj/COFF/Inputs/coff-load-config-x64.dll diff --git a/llvm/test/tools/llvm-readobj/COFF/Inputs/coff-load-config-x86.dll b/llvm/test/tools/llvm-readobj/COFF/Inputs/coff-load-config-x86.dll Binary files differnew file mode 100644 index 00000000000..c334c7be721 --- /dev/null +++ b/llvm/test/tools/llvm-readobj/COFF/Inputs/coff-load-config-x86.dll diff --git a/llvm/test/tools/llvm-readobj/COFF/Inputs/coff-no-load-config.exe b/llvm/test/tools/llvm-readobj/COFF/Inputs/coff-no-load-config.exe Binary files differnew file mode 100644 index 00000000000..cd6eb5a2b2b --- /dev/null +++ b/llvm/test/tools/llvm-readobj/COFF/Inputs/coff-no-load-config.exe diff --git a/llvm/test/tools/llvm-readobj/COFF/Inputs/comdat-function-linetables.obj.coff-2012-i386 b/llvm/test/tools/llvm-readobj/COFF/Inputs/comdat-function-linetables.obj.coff-2012-i386 Binary files differnew file mode 100644 index 00000000000..4a723044801 --- /dev/null +++ b/llvm/test/tools/llvm-readobj/COFF/Inputs/comdat-function-linetables.obj.coff-2012-i386 diff --git a/llvm/test/tools/llvm-readobj/COFF/Inputs/comdat-function-linetables.obj.coff-2013-i386 b/llvm/test/tools/llvm-readobj/COFF/Inputs/comdat-function-linetables.obj.coff-2013-i386 Binary files differnew file mode 100644 index 00000000000..4adaf2edc6f --- /dev/null +++ b/llvm/test/tools/llvm-readobj/COFF/Inputs/comdat-function-linetables.obj.coff-2013-i386 diff --git a/llvm/test/tools/llvm-readobj/COFF/Inputs/const-import.lib b/llvm/test/tools/llvm-readobj/COFF/Inputs/const-import.lib Binary files differnew file mode 100644 index 00000000000..88a2ac3f836 --- /dev/null +++ b/llvm/test/tools/llvm-readobj/COFF/Inputs/const-import.lib diff --git a/llvm/test/tools/llvm-readobj/COFF/Inputs/cxx-cli-aux.cpp b/llvm/test/tools/llvm-readobj/COFF/Inputs/cxx-cli-aux.cpp new file mode 100644 index 00000000000..6386cb2e015 --- /dev/null +++ b/llvm/test/tools/llvm-readobj/COFF/Inputs/cxx-cli-aux.cpp @@ -0,0 +1,2 @@ +// cl.exe -clr -c t.cpp -Fo"cxx-cli-aux.obj.coff-i386" +__declspec(appdomain) int PerAppDomain = 0; diff --git a/llvm/test/tools/llvm-readobj/COFF/Inputs/cxx-cli-aux.obj.coff-i386 b/llvm/test/tools/llvm-readobj/COFF/Inputs/cxx-cli-aux.obj.coff-i386 Binary files differnew file mode 100644 index 00000000000..a88c670643a --- /dev/null +++ b/llvm/test/tools/llvm-readobj/COFF/Inputs/cxx-cli-aux.obj.coff-i386 diff --git a/llvm/test/tools/llvm-readobj/COFF/Inputs/directives.obj.coff-x86_64 b/llvm/test/tools/llvm-readobj/COFF/Inputs/directives.obj.coff-x86_64 Binary files differnew file mode 100644 index 00000000000..4c156dcbb03 --- /dev/null +++ b/llvm/test/tools/llvm-readobj/COFF/Inputs/directives.obj.coff-x86_64 diff --git a/llvm/test/tools/llvm-readobj/COFF/Inputs/export-arm.dll b/llvm/test/tools/llvm-readobj/COFF/Inputs/export-arm.dll Binary files differnew file mode 100644 index 00000000000..a5555628afc --- /dev/null +++ b/llvm/test/tools/llvm-readobj/COFF/Inputs/export-arm.dll diff --git a/llvm/test/tools/llvm-readobj/COFF/Inputs/export-x64.dll b/llvm/test/tools/llvm-readobj/COFF/Inputs/export-x64.dll Binary files differnew file mode 100644 index 00000000000..10b14e8fff9 --- /dev/null +++ b/llvm/test/tools/llvm-readobj/COFF/Inputs/export-x64.dll diff --git a/llvm/test/tools/llvm-readobj/COFF/Inputs/export-x86.dll b/llvm/test/tools/llvm-readobj/COFF/Inputs/export-x86.dll Binary files differnew file mode 100644 index 00000000000..9efcd3131fe --- /dev/null +++ b/llvm/test/tools/llvm-readobj/COFF/Inputs/export-x86.dll diff --git a/llvm/test/tools/llvm-readobj/COFF/Inputs/has_pdb.exe b/llvm/test/tools/llvm-readobj/COFF/Inputs/has_pdb.exe Binary files differnew file mode 100644 index 00000000000..60cc9f59fc1 --- /dev/null +++ b/llvm/test/tools/llvm-readobj/COFF/Inputs/has_pdb.exe diff --git a/llvm/test/tools/llvm-readobj/COFF/Inputs/imports.exe.coff-i386 b/llvm/test/tools/llvm-readobj/COFF/Inputs/imports.exe.coff-i386 Binary files differnew file mode 100644 index 00000000000..72077adaebe --- /dev/null +++ b/llvm/test/tools/llvm-readobj/COFF/Inputs/imports.exe.coff-i386 diff --git a/llvm/test/tools/llvm-readobj/COFF/Inputs/imports.exe.coff-x86-64 b/llvm/test/tools/llvm-readobj/COFF/Inputs/imports.exe.coff-x86-64 Binary files differnew file mode 100644 index 00000000000..5ee198e4a2e --- /dev/null +++ b/llvm/test/tools/llvm-readobj/COFF/Inputs/imports.exe.coff-x86-64 diff --git a/llvm/test/tools/llvm-readobj/COFF/Inputs/library.lib b/llvm/test/tools/llvm-readobj/COFF/Inputs/library.lib Binary files differnew file mode 100644 index 00000000000..7ad7c9052ea --- /dev/null +++ b/llvm/test/tools/llvm-readobj/COFF/Inputs/library.lib diff --git a/llvm/test/tools/llvm-readobj/COFF/Inputs/magic.coff-importlib b/llvm/test/tools/llvm-readobj/COFF/Inputs/magic.coff-importlib Binary files differnew file mode 100644 index 00000000000..b934afb41a8 --- /dev/null +++ b/llvm/test/tools/llvm-readobj/COFF/Inputs/magic.coff-importlib diff --git a/llvm/test/tools/llvm-readobj/COFF/Inputs/multifile-linetables.obj.coff-2012-i368 b/llvm/test/tools/llvm-readobj/COFF/Inputs/multifile-linetables.obj.coff-2012-i368 Binary files differnew file mode 100644 index 00000000000..213331f604e --- /dev/null +++ b/llvm/test/tools/llvm-readobj/COFF/Inputs/multifile-linetables.obj.coff-2012-i368 diff --git a/llvm/test/tools/llvm-readobj/COFF/Inputs/multifile-linetables.obj.coff-2012-x86_64 b/llvm/test/tools/llvm-readobj/COFF/Inputs/multifile-linetables.obj.coff-2012-x86_64 Binary files differnew file mode 100644 index 00000000000..a35cc11c2eb --- /dev/null +++ b/llvm/test/tools/llvm-readobj/COFF/Inputs/multifile-linetables.obj.coff-2012-x86_64 diff --git a/llvm/test/tools/llvm-readobj/COFF/Inputs/multifile-linetables.obj.coff-2013-i368 b/llvm/test/tools/llvm-readobj/COFF/Inputs/multifile-linetables.obj.coff-2013-i368 Binary files differnew file mode 100644 index 00000000000..8a901f64af8 --- /dev/null +++ b/llvm/test/tools/llvm-readobj/COFF/Inputs/multifile-linetables.obj.coff-2013-i368 diff --git a/llvm/test/tools/llvm-readobj/COFF/Inputs/multifile-linetables.obj.coff-2013-x86_64 b/llvm/test/tools/llvm-readobj/COFF/Inputs/multifile-linetables.obj.coff-2013-x86_64 Binary files differnew file mode 100644 index 00000000000..f1c2e1f25e7 --- /dev/null +++ b/llvm/test/tools/llvm-readobj/COFF/Inputs/multifile-linetables.obj.coff-2013-x86_64 diff --git a/llvm/test/tools/llvm-readobj/COFF/Inputs/multifunction-linetables.obj.coff-2012-i368 b/llvm/test/tools/llvm-readobj/COFF/Inputs/multifunction-linetables.obj.coff-2012-i368 Binary files differnew file mode 100644 index 00000000000..41479edc711 --- /dev/null +++ b/llvm/test/tools/llvm-readobj/COFF/Inputs/multifunction-linetables.obj.coff-2012-i368 diff --git a/llvm/test/tools/llvm-readobj/COFF/Inputs/multifunction-linetables.obj.coff-2012-x86_64 b/llvm/test/tools/llvm-readobj/COFF/Inputs/multifunction-linetables.obj.coff-2012-x86_64 Binary files differnew file mode 100644 index 00000000000..8d30f325d70 --- /dev/null +++ b/llvm/test/tools/llvm-readobj/COFF/Inputs/multifunction-linetables.obj.coff-2012-x86_64 diff --git a/llvm/test/tools/llvm-readobj/COFF/Inputs/multifunction-linetables.obj.coff-2013-i368 b/llvm/test/tools/llvm-readobj/COFF/Inputs/multifunction-linetables.obj.coff-2013-i368 Binary files differnew file mode 100644 index 00000000000..4269b214546 --- /dev/null +++ b/llvm/test/tools/llvm-readobj/COFF/Inputs/multifunction-linetables.obj.coff-2013-i368 diff --git a/llvm/test/tools/llvm-readobj/COFF/Inputs/multifunction-linetables.obj.coff-2013-x86_64 b/llvm/test/tools/llvm-readobj/COFF/Inputs/multifunction-linetables.obj.coff-2013-x86_64 Binary files differnew file mode 100644 index 00000000000..65a1af061c8 --- /dev/null +++ b/llvm/test/tools/llvm-readobj/COFF/Inputs/multifunction-linetables.obj.coff-2013-x86_64 diff --git a/llvm/test/tools/llvm-readobj/COFF/Inputs/needed-libs.obj.coff-am64 b/llvm/test/tools/llvm-readobj/COFF/Inputs/needed-libs.obj.coff-am64 Binary files differnew file mode 100644 index 00000000000..4cfc6e25396 --- /dev/null +++ b/llvm/test/tools/llvm-readobj/COFF/Inputs/needed-libs.obj.coff-am64 diff --git a/llvm/test/tools/llvm-readobj/COFF/Inputs/nop.exe.coff-x86-64 b/llvm/test/tools/llvm-readobj/COFF/Inputs/nop.exe.coff-x86-64 Binary files differnew file mode 100644 index 00000000000..62b3b46c369 --- /dev/null +++ b/llvm/test/tools/llvm-readobj/COFF/Inputs/nop.exe.coff-x86-64 diff --git a/llvm/test/tools/llvm-readobj/COFF/Inputs/relocs-no-symtab.obj.coff-i386 b/llvm/test/tools/llvm-readobj/COFF/Inputs/relocs-no-symtab.obj.coff-i386 Binary files differnew file mode 100644 index 00000000000..5882daf4c59 --- /dev/null +++ b/llvm/test/tools/llvm-readobj/COFF/Inputs/relocs-no-symtab.obj.coff-i386 diff --git a/llvm/test/tools/llvm-readobj/COFF/Inputs/resources/cursor_small.bmp b/llvm/test/tools/llvm-readobj/COFF/Inputs/resources/cursor_small.bmp Binary files differnew file mode 100644 index 00000000000..ce513261bc2 --- /dev/null +++ b/llvm/test/tools/llvm-readobj/COFF/Inputs/resources/cursor_small.bmp diff --git a/llvm/test/tools/llvm-readobj/COFF/Inputs/resources/okay_small.bmp b/llvm/test/tools/llvm-readobj/COFF/Inputs/resources/okay_small.bmp Binary files differnew file mode 100644 index 00000000000..e4005bf5ef9 --- /dev/null +++ b/llvm/test/tools/llvm-readobj/COFF/Inputs/resources/okay_small.bmp diff --git a/llvm/test/tools/llvm-readobj/COFF/Inputs/resources/test_resource.obj.coff b/llvm/test/tools/llvm-readobj/COFF/Inputs/resources/test_resource.obj.coff Binary files differnew file mode 100644 index 00000000000..b9a7908b1c5 --- /dev/null +++ b/llvm/test/tools/llvm-readobj/COFF/Inputs/resources/test_resource.obj.coff diff --git a/llvm/test/tools/llvm-readobj/COFF/Inputs/resources/test_resource.rc b/llvm/test/tools/llvm-readobj/COFF/Inputs/resources/test_resource.rc new file mode 100644 index 00000000000..fd616520dbe --- /dev/null +++ b/llvm/test/tools/llvm-readobj/COFF/Inputs/resources/test_resource.rc @@ -0,0 +1,44 @@ +#include "windows.h"
+
+LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
+
+myaccelerators ACCELERATORS
+{
+ "^C", 999, VIRTKEY, ALT
+ "D", 1100, VIRTKEY, CONTROL, SHIFT
+ "^R", 444, ASCII, NOINVERT
+}
+
+cursor BITMAP "cursor_small.bmp"
+okay BITMAP "okay_small.bmp"
+
+14432 MENU
+LANGUAGE LANG_CHINESE, SUBLANG_CHINESE_SIMPLIFIED
+{
+ MENUITEM "yu", 100
+ MENUITEM "shala", 101
+ MENUITEM "kaoya", 102
+}
+
+testdialog DIALOG 10, 10, 200, 300
+STYLE WS_POPUP | WS_BORDER
+CAPTION "Test"
+{
+ CTEXT "Continue:", 1, 10, 10, 230, 14
+ PUSHBUTTON "&OK", 2, 66, 134, 161, 13
+}
+
+12 ACCELERATORS
+{
+ "X", 164, VIRTKEY, ALT
+ "H", 5678, VIRTKEY, CONTROL, SHIFT
+ "^R", 444, ASCII, NOINVERT
+}
+
+"eat" MENU
+LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_AUS
+{
+ MENUITEM "fish", 100
+ MENUITEM "salad", 101
+ MENUITEM "duck", 102
+}
diff --git a/llvm/test/tools/llvm-readobj/COFF/Inputs/resources/test_resource.res b/llvm/test/tools/llvm-readobj/COFF/Inputs/resources/test_resource.res Binary files differnew file mode 100644 index 00000000000..c577ecc3d63 --- /dev/null +++ b/llvm/test/tools/llvm-readobj/COFF/Inputs/resources/test_resource.res diff --git a/llvm/test/tools/llvm-readobj/COFF/Inputs/trivial.exe.coff-arm b/llvm/test/tools/llvm-readobj/COFF/Inputs/trivial.exe.coff-arm Binary files differnew file mode 100644 index 00000000000..121d820b6b0 --- /dev/null +++ b/llvm/test/tools/llvm-readobj/COFF/Inputs/trivial.exe.coff-arm diff --git a/llvm/test/tools/llvm-readobj/COFF/Inputs/trivial.obj.coff-arm b/llvm/test/tools/llvm-readobj/COFF/Inputs/trivial.obj.coff-arm Binary files differnew file mode 100644 index 00000000000..e3b5df4c778 --- /dev/null +++ b/llvm/test/tools/llvm-readobj/COFF/Inputs/trivial.obj.coff-arm diff --git a/llvm/test/tools/llvm-readobj/COFF/Inputs/trivial.obj.coff-i386 b/llvm/test/tools/llvm-readobj/COFF/Inputs/trivial.obj.coff-i386 Binary files differnew file mode 100644 index 00000000000..7486562c978 --- /dev/null +++ b/llvm/test/tools/llvm-readobj/COFF/Inputs/trivial.obj.coff-i386 diff --git a/llvm/test/tools/llvm-readobj/COFF/Inputs/trivial.obj.coff-x86-64 b/llvm/test/tools/llvm-readobj/COFF/Inputs/trivial.obj.coff-x86-64 Binary files differnew file mode 100644 index 00000000000..8a7060e6107 --- /dev/null +++ b/llvm/test/tools/llvm-readobj/COFF/Inputs/trivial.obj.coff-x86-64 diff --git a/llvm/test/tools/llvm-readobj/COFF/Inputs/xcoff-basic-64.o b/llvm/test/tools/llvm-readobj/COFF/Inputs/xcoff-basic-64.o Binary files differnew file mode 100644 index 00000000000..d6c79abd8cf --- /dev/null +++ b/llvm/test/tools/llvm-readobj/COFF/Inputs/xcoff-basic-64.o diff --git a/llvm/test/tools/llvm-readobj/COFF/Inputs/xcoff-basic-neg-sym-count.o b/llvm/test/tools/llvm-readobj/COFF/Inputs/xcoff-basic-neg-sym-count.o Binary files differnew file mode 100644 index 00000000000..e7f63664acd --- /dev/null +++ b/llvm/test/tools/llvm-readobj/COFF/Inputs/xcoff-basic-neg-sym-count.o diff --git a/llvm/test/tools/llvm-readobj/COFF/Inputs/xcoff-basic-neg-time.o b/llvm/test/tools/llvm-readobj/COFF/Inputs/xcoff-basic-neg-time.o Binary files differnew file mode 100644 index 00000000000..f814965f4f0 --- /dev/null +++ b/llvm/test/tools/llvm-readobj/COFF/Inputs/xcoff-basic-neg-time.o diff --git a/llvm/test/tools/llvm-readobj/COFF/Inputs/xcoff-basic.o b/llvm/test/tools/llvm-readobj/COFF/Inputs/xcoff-basic.o Binary files differnew file mode 100644 index 00000000000..c84056bdb00 --- /dev/null +++ b/llvm/test/tools/llvm-readobj/COFF/Inputs/xcoff-basic.o diff --git a/llvm/test/tools/llvm-readobj/COFF/Inputs/xcoff-reloc-overflow.o b/llvm/test/tools/llvm-readobj/COFF/Inputs/xcoff-reloc-overflow.o Binary files differnew file mode 100644 index 00000000000..16f058a2986 --- /dev/null +++ b/llvm/test/tools/llvm-readobj/COFF/Inputs/xcoff-reloc-overflow.o diff --git a/llvm/test/tools/llvm-readobj/COFF/Inputs/zero-string-table.obj.coff-i386 b/llvm/test/tools/llvm-readobj/COFF/Inputs/zero-string-table.obj.coff-i386 Binary files differnew file mode 100644 index 00000000000..f41f224f609 --- /dev/null +++ b/llvm/test/tools/llvm-readobj/COFF/Inputs/zero-string-table.obj.coff-i386 diff --git a/llvm/test/tools/llvm-readobj/COFF/arm-baserelocs.test b/llvm/test/tools/llvm-readobj/COFF/arm-baserelocs.test new file mode 100644 index 00000000000..5d6b53831d5 --- /dev/null +++ b/llvm/test/tools/llvm-readobj/COFF/arm-baserelocs.test @@ -0,0 +1,7 @@ +# RUN: llvm-readobj --coff-basereloc %p/Inputs/trivial.exe.coff-arm | FileCheck %s + +# CHECK: Entry { +# CHECK: Type: ARM_MOV32(T) +# CHECK: Address: 0x9390 +# CHECK: } + diff --git a/llvm/test/tools/llvm-readobj/COFF/arm64-many-epilogs.s b/llvm/test/tools/llvm-readobj/COFF/arm64-many-epilogs.s new file mode 100644 index 00000000000..a1b53980936 --- /dev/null +++ b/llvm/test/tools/llvm-readobj/COFF/arm64-many-epilogs.s @@ -0,0 +1,26 @@ +// REQUIRES: aarch64-registered-target +// RUN: llvm-mc -filetype=obj -triple aarch64-windows %s -o - \ +// RUN: | not llvm-readobj --unwind - | FileCheck %s + +// Older versions of LLVM had a bug where we would accidentally +// truncate the number of epilogue scopes to a uint8_t; make +// sure this doesn't happen. +// +// We expect the llvm-readobj invocation to fail because the +// xdata section is truncated (to reduce the size of the testcase). + +// CHECK: EpilogueScopes: 256 + +.section .pdata,"dr" + .long "?func@@YAHXZ"@IMGREL + .long "$unwind$func@@YAHXZ"@IMGREL + + .text + .globl "?func@@YAHXZ" + .p2align 3 +"?func@@YAHXZ": + ret + +.section .xdata,"dr" +"$unwind$func@@YAHXZ": +.long 0x00000000, 0x02010100, 0x09000000, 0x0A000000 diff --git a/llvm/test/tools/llvm-readobj/COFF/arm64-win-error1.s b/llvm/test/tools/llvm-readobj/COFF/arm64-win-error1.s new file mode 100644 index 00000000000..4cf35902739 --- /dev/null +++ b/llvm/test/tools/llvm-readobj/COFF/arm64-win-error1.s @@ -0,0 +1,54 @@ +## Check that error handling for bad opcodes works. +## .xdata below contains the bad opcode 0xdf in the 4th word of .xdata. + +// REQUIRES: aarch64-registered-target +// RUN: llvm-mc -filetype=obj -triple aarch64-windows %s -o - \ +// RUN: | llvm-readobj --unwind - | FileCheck %s + +// CHECK: Prologue [ +// CHECK: 0xdf ; Bad opcode! +// CHECK: 0xff ; Bad opcode! +// CHECK: 0xd600 ; stp x19, lr, [sp, #0] +// CHECK: 0x01 ; sub sp, #16 +// CHECK: 0xe4 ; end +// CHECK: ] + + .text + .globl "?func@@YAHXZ" + .p2align 3 +"?func@@YAHXZ": + sub sp,sp,#0x10 + stp x19,lr,[sp] + sub sp,sp,#0x1F0 + mov w19,w0 + bl "?func2@@YAXXZ" + cmp w19,#2 + ble .LBB0_1 + bl "?func2@@YAHXZ" + add sp,sp,#0x1F0 + ldp x19,lr,[sp] + add sp,sp,#0x10 + ret +.LBB0_1: + mov x0,sp + bl "?func3@@YAHPEAH@Z" + add sp,sp,#0x1F0 + ldp x19,lr,[sp] + add sp,sp,#0x10 + ret + + +.section .pdata,"dr" + .long "?func@@YAHXZ"@IMGREL + .long "$unwind$func@@YAHXZ"@IMGREL + + +.section .xdata,"dr" +"$unwind$func@@YAHXZ": + .p2align 3 + .long 0x10800012 + .long 0x8 + .long 0xe + .long 0x00d6ffdf + .long 0xe3e3e401 + diff --git a/llvm/test/tools/llvm-readobj/COFF/arm64-win-error2.s b/llvm/test/tools/llvm-readobj/COFF/arm64-win-error2.s new file mode 100644 index 00000000000..74a61dd0201 --- /dev/null +++ b/llvm/test/tools/llvm-readobj/COFF/arm64-win-error2.s @@ -0,0 +1,50 @@ +## Check that the sanity check for an inconsistent header works. +## The first word contains the bad value for CodeWords, 0xf, which indicates +## that we need 0x11110 << 2 = 120 bytes of space for the unwind codes. +## It follows that the .xdata section is badly formed as only 8 bytes are +## allocated for the unwind codes. + +// REQUIRES: aarch64-registered-target +// RUN: llvm-mc -filetype=obj -triple aarch64-windows %s -o - \ +// RUN: | not llvm-readobj --unwind - 2>&1 | FileCheck %s + +// CHECK: LLVM ERROR: Malformed unwind data + + .text + .globl "?func@@YAHXZ" + .p2align 3 +"?func@@YAHXZ": + sub sp,sp,#0x10 + stp x19,lr,[sp] + sub sp,sp,#0x1F0 + mov w19,w0 + bl "?func2@@YAXXZ" + cmp w19,#2 + ble .LBB0_1 + bl "?func2@@YAHXZ" + add sp,sp,#0x1F0 + ldp x19,lr,[sp] + add sp,sp,#0x10 + ret +.LBB0_1: + mov x0,sp + bl "?func3@@YAHPEAH@Z" + add sp,sp,#0x1F0 + ldp x19,lr,[sp] + add sp,sp,#0x10 + ret + +.section .pdata,"dr" + .long "?func@@YAHXZ"@IMGREL + .long "$unwind$func@@YAHXZ"@IMGREL + + +.section .xdata,"dr" +"$unwind$func@@YAHXZ": + .p2align 3 + .long 0xf0800012 + .long 0x8 + .long 0xe + .long 0x100d61f + .long 0xe3e3e3e4 + diff --git a/llvm/test/tools/llvm-readobj/COFF/arm64-win-error3.s b/llvm/test/tools/llvm-readobj/COFF/arm64-win-error3.s new file mode 100644 index 00000000000..8e1e1e1321b --- /dev/null +++ b/llvm/test/tools/llvm-readobj/COFF/arm64-win-error3.s @@ -0,0 +1,51 @@ +## Check that error handling for going past the unwind data works. +## .xdata below contains bad opcodes in the last word. The last byte, 0xe0, +## indicates that we have come across alloc_l, which requires 4 bytes. In this +## case, unwind code processing will go past the allocated unwind data. + +// REQUIRES: aarch64-registered-target +// RUN: llvm-mc -filetype=obj -triple aarch64-windows %s -o - \ +// RUN: | llvm-readobj --unwind - | FileCheck %s + +// CHECK: Prologue [ +// CHECK: Opcode 0xe0 goes past the unwind data + + .text + .globl "?func@@YAHXZ" + .p2align 3 +"?func@@YAHXZ": + sub sp,sp,#0x10 + stp x19,lr,[sp] + sub sp,sp,#0x1F0 + mov w19,w0 + bl "?func2@@YAXXZ" + cmp w19,#2 + ble .LBB0_1 + bl "?func2@@YAHXZ" + add sp,sp,#0x1F0 + ldp x19,lr,[sp] + add sp,sp,#0x10 + ret +.LBB0_1: + mov x0,sp + bl "?func3@@YAHPEAH@Z" + add sp,sp,#0x1F0 + ldp x19,lr,[sp] + add sp,sp,#0x10 + ret + + +.section .pdata,"dr" + .long "?func@@YAHXZ"@IMGREL + .long "$unwind$func@@YAHXZ"@IMGREL + + +.section .xdata,"dr" +"$unwind$func@@YAHXZ": + .p2align 3 + .long 0x10800012 + .long 0x8 + .long 0xe + .long 0x100d61f + .long 0xe0000000 + diff --git a/llvm/test/tools/llvm-readobj/COFF/basereloc.test b/llvm/test/tools/llvm-readobj/COFF/basereloc.test new file mode 100644 index 00000000000..3256a3a4adb --- /dev/null +++ b/llvm/test/tools/llvm-readobj/COFF/basereloc.test @@ -0,0 +1,24 @@ +RUN: llvm-readobj --coff-basereloc %p/Inputs/basereloc.obj.coff-i386 | FileCheck %s + +CHECK: Format: COFF-i386 +CHECK-NEXT: Arch: i386 +CHECK-NEXT: AddressSize: 32bit +CHECK-NEXT: BaseReloc [ +CHECK-NEXT: Entry { +CHECK-NEXT: Type: HIGHLOW +CHECK-NEXT: Address: 0x1004 +CHECK-NEXT: } +CHECK-NEXT: Entry { +CHECK-NEXT: Type: HIGHLOW +CHECK-NEXT: Address: 0x100A +CHECK-NEXT: } +CHECK-NEXT: Entry { +CHECK-NEXT: Type: HIGHLOW +CHECK-NEXT: Address: 0x1010 +CHECK-NEXT: } +CHECK-NEXT: Entry { +CHECK-NEXT: Type: ABSOLUTE +CHECK-NEXT: Address: 0x1000 +CHECK-NEXT: } +CHECK-NEXT: ] + diff --git a/llvm/test/tools/llvm-readobj/COFF/bigobj.test b/llvm/test/tools/llvm-readobj/COFF/bigobj.test new file mode 100644 index 00000000000..10972144315 --- /dev/null +++ b/llvm/test/tools/llvm-readobj/COFF/bigobj.test @@ -0,0 +1,139 @@ +RUN: llvm-readobj --file-headers --sections --symbols --relocations %p/Inputs/bigobj.coff-x86-64 | FileCheck %s + +CHECK: File: {{(.*[/\\])?}}bigobj.coff-x86-64 +CHECK-NEXT: Format: COFF-x86-64 +CHECK-NEXT: Arch: x86_64 +CHECK-NEXT: AddressSize: 64bit +CHECK-NEXT: ImageFileHeader { +CHECK-NEXT: Machine: IMAGE_FILE_MACHINE_AMD64 (0x8664) +CHECK-NEXT: SectionCount: 3 +CHECK-NEXT: TimeDateStamp: 1970-01-01 00:00:00 (0x0) +CHECK-NEXT: PointerToSymbolTable: 0xB0 +CHECK-NEXT: SymbolCount: 8 +CHECK-NEXT: OptionalHeaderSize: 0 +CHECK-NEXT: Characteristics [ (0x0) +CHECK-NEXT: ] +CHECK-NEXT: } +CHECK-NEXT: Sections [ +CHECK-NEXT: Section { +CHECK-NEXT: Number: 1 +CHECK-NEXT: Name: .text (2E 74 65 78 74 00 00 00) +CHECK-NEXT: VirtualSize: 0x0 +CHECK-NEXT: VirtualAddress: 0x0 +CHECK-NEXT: RawDataSize: 0 +CHECK-NEXT: PointerToRawData: 0x0 +CHECK-NEXT: PointerToRelocations: 0x0 +CHECK-NEXT: PointerToLineNumbers: 0x0 +CHECK-NEXT: RelocationCount: 0 +CHECK-NEXT: LineNumberCount: 0 +CHECK-NEXT: Characteristics [ (0x60500020) +CHECK-NEXT: IMAGE_SCN_ALIGN_16BYTES (0x500000) +CHECK-NEXT: IMAGE_SCN_CNT_CODE (0x20) +CHECK-NEXT: IMAGE_SCN_MEM_EXECUTE (0x20000000) +CHECK-NEXT: IMAGE_SCN_MEM_READ (0x40000000) +CHECK-NEXT: ] +CHECK-NEXT: } +CHECK-NEXT: Section { +CHECK-NEXT: Number: 2 +CHECK-NEXT: Name: .data (2E 64 61 74 61 00 00 00) +CHECK-NEXT: VirtualSize: 0x0 +CHECK-NEXT: VirtualAddress: 0x0 +CHECK-NEXT: RawDataSize: 0 +CHECK-NEXT: PointerToRawData: 0x0 +CHECK-NEXT: PointerToRelocations: 0x0 +CHECK-NEXT: PointerToLineNumbers: 0x0 +CHECK-NEXT: RelocationCount: 0 +CHECK-NEXT: LineNumberCount: 0 +CHECK-NEXT: Characteristics [ (0xC0500040) +CHECK-NEXT: IMAGE_SCN_ALIGN_16BYTES (0x500000) +CHECK-NEXT: IMAGE_SCN_CNT_INITIALIZED_DATA (0x40) +CHECK-NEXT: IMAGE_SCN_MEM_READ (0x40000000) +CHECK-NEXT: IMAGE_SCN_MEM_WRITE (0x80000000) +CHECK-NEXT: ] +CHECK-NEXT: } +CHECK-NEXT: Section { +CHECK-NEXT: Number: 3 +CHECK-NEXT: Name: .bss (2E 62 73 73 00 00 00 00) +CHECK-NEXT: VirtualSize: 0x0 +CHECK-NEXT: VirtualAddress: 0x0 +CHECK-NEXT: RawDataSize: 0 +CHECK-NEXT: PointerToRawData: 0x0 +CHECK-NEXT: PointerToRelocations: 0x0 +CHECK-NEXT: PointerToLineNumbers: 0x0 +CHECK-NEXT: RelocationCount: 0 +CHECK-NEXT: LineNumberCount: 0 +CHECK-NEXT: Characteristics [ (0xC0500080) +CHECK-NEXT: IMAGE_SCN_ALIGN_16BYTES (0x500000) +CHECK-NEXT: IMAGE_SCN_CNT_UNINITIALIZED_DATA (0x80) +CHECK-NEXT: IMAGE_SCN_MEM_READ (0x40000000) +CHECK-NEXT: IMAGE_SCN_MEM_WRITE (0x80000000) +CHECK-NEXT: ] +CHECK-NEXT: } +CHECK-NEXT: ] +CHECK-NEXT: Relocations [ +CHECK-NEXT: ] +CHECK-NEXT: Symbols [ +CHECK-NEXT: Symbol { +CHECK-NEXT: Name: .file +CHECK-NEXT: Value: 0 +CHECK-NEXT: Section: IMAGE_SYM_DEBUG (-2) +CHECK-NEXT: BaseType: Null (0x0) +CHECK-NEXT: ComplexType: Null (0x0) +CHECK-NEXT: StorageClass: File (0x67) +CHECK-NEXT: AuxSymbolCount: 1 +CHECK-NEXT: AuxFileRecord { +CHECK-NEXT: FileName: fake +CHECK-NEXT: } +CHECK-NEXT: } +CHECK-NEXT: Symbol { +CHECK-NEXT: Name: .text +CHECK-NEXT: Value: 0 +CHECK-NEXT: Section: .text (1) +CHECK-NEXT: BaseType: Null (0x0) +CHECK-NEXT: ComplexType: Null (0x0) +CHECK-NEXT: StorageClass: Static (0x3) +CHECK-NEXT: AuxSymbolCount: 1 +CHECK-NEXT: AuxSectionDef { +CHECK-NEXT: Length: 0 +CHECK-NEXT: RelocationCount: 0 +CHECK-NEXT: LineNumberCount: 0 +CHECK-NEXT: Checksum: 0x0 +CHECK-NEXT: Number: 0 +CHECK-NEXT: Selection: 0x0 +CHECK-NEXT: } +CHECK-NEXT: } +CHECK-NEXT: Symbol { +CHECK-NEXT: Name: .data +CHECK-NEXT: Value: 0 +CHECK-NEXT: Section: .data (2) +CHECK-NEXT: BaseType: Null (0x0) +CHECK-NEXT: ComplexType: Null (0x0) +CHECK-NEXT: StorageClass: Static (0x3) +CHECK-NEXT: AuxSymbolCount: 1 +CHECK-NEXT: AuxSectionDef { +CHECK-NEXT: Length: 0 +CHECK-NEXT: RelocationCount: 0 +CHECK-NEXT: LineNumberCount: 0 +CHECK-NEXT: Checksum: 0x0 +CHECK-NEXT: Number: 0 +CHECK-NEXT: Selection: 0x0 +CHECK-NEXT: } +CHECK-NEXT: } +CHECK-NEXT: Symbol { +CHECK-NEXT: Name: .bss +CHECK-NEXT: Value: 0 +CHECK-NEXT: Section: .bss (3) +CHECK-NEXT: BaseType: Null (0x0) +CHECK-NEXT: ComplexType: Null (0x0) +CHECK-NEXT: StorageClass: Static (0x3) +CHECK-NEXT: AuxSymbolCount: 1 +CHECK-NEXT: AuxSectionDef { +CHECK-NEXT: Length: 0 +CHECK-NEXT: RelocationCount: 0 +CHECK-NEXT: LineNumberCount: 0 +CHECK-NEXT: Checksum: 0x0 +CHECK-NEXT: Number: 0 +CHECK-NEXT: Selection: 0x0 +CHECK-NEXT: } +CHECK-NEXT: } +CHECK-NEXT: ] diff --git a/llvm/test/tools/llvm-readobj/COFF/codeview-inlinees.test b/llvm/test/tools/llvm-readobj/COFF/codeview-inlinees.test new file mode 100644 index 00000000000..9f818dfc289 --- /dev/null +++ b/llvm/test/tools/llvm-readobj/COFF/codeview-inlinees.test @@ -0,0 +1,38 @@ +Compile the following like so to reproduce the input: +$ cl -c -O2 t.c -Z7 +void g(); +static inline void f() { g(); } +static inline void h() { g(); } +void k() { + f(); + h(); +} + +RUN: llvm-readobj --codeview %p/Inputs/codeview-inlinees.obj | FileCheck %s + +CHECK: SubSectionType: InlineeLines (0xF6) +CHECK: Inlinee: f (0x1003) +CHECK: Inlinee: h (0x1004) +CHECK-NOT: Inlinee: + +CHECK: GlobalProcIdSym { +CHECK: Kind: S_GPROC32_ID (0x1147) +CHECK: DisplayName: k +CHECK: LinkageName: k +CHECK: } +CHECK: InlineSiteSym +CHECK: Kind: S_INLINESITE (0x114D) +CHECK: Inlinee: h (0x1004) +CHECK: InlineSiteSym +CHECK: Kind: S_INLINESITE (0x114D) +CHECK: Inlinee: f (0x1003) +CHECK: InlineesSym { +CHECK-NEXT: Kind: S_INLINEES (0x1168) +CHECK-NEXT: Callers [ +CHECK-NEXT: FuncID: f (0x1003) +CHECK-NEXT: FuncID: h (0x1004) +CHECK-NEXT: ] +CHECK: } +CHECK: ProcEnd { +CHECK: Kind: S_PROC_ID_END (0x114F) +CHECK: } diff --git a/llvm/test/tools/llvm-readobj/COFF/codeview-inlining.test b/llvm/test/tools/llvm-readobj/COFF/codeview-inlining.test new file mode 100644 index 00000000000..14c4f1af75c --- /dev/null +++ b/llvm/test/tools/llvm-readobj/COFF/codeview-inlining.test @@ -0,0 +1,65 @@ +; The following two object files were generated using the following command: +; $ cl /d2Zi+ /Zc:inline /O2 /Z7 /c t.cpp +; The contents of t.cpp follow: +; static void bar() { +; __asm nop +; } +; static void baz() { +; __asm nop +; } +; static __forceinline void foo() { +; __asm nop +; #include "a.h" +; #include "b.h" +; __asm nop +; goto forwards; +; +; backwards: +; __asm nop +; return; +; +; forwards: +; __asm rep nop +; goto backwards; +; } +; int main() { +; bar(); +; baz(); +; foo(); +; } +; +; Both a.h and b.h contain "__asm nop". + +RUN: llvm-readobj -S --codeview --section-symbols %p/Inputs/codeview-inlining.obj.coff | FileCheck %s + +; FIXME: If we were more clever, we could turn FileIDs into paths. + +; CHECK: SubSectionType: InlineeLines (0xF6) +; CHECK-NEXT: SubSectionSize: 0x3C +; CHECK-NEXT: InlineeSourceLine { +; CHECK-NEXT: Inlinee: bar (0x1002) +; CHECK-NEXT: FileID: d:\src\llvm\build\t.cpp (0x30) +; CHECK-NEXT: SourceLineNum: 2 +; CHECK-NEXT: ExtraFileCount: 0 +; CHECK-NEXT: ExtraFiles [ +; CHECK-NEXT: ] +; CHECK-NEXT: } +; CHECK-NEXT: InlineeSourceLine { +; CHECK-NEXT: Inlinee: baz (0x1003) +; CHECK-NEXT: FileID: d:\src\llvm\build\t.cpp (0x30) +; CHECK-NEXT: SourceLineNum: 5 +; CHECK-NEXT: ExtraFileCount: 0 +; CHECK-NEXT: ExtraFiles [ +; CHECK-NEXT: ] +; CHECK-NEXT: } +; The 'foo' inline site has extra files due to includes. +; CHECK-NEXT: InlineeSourceLine { +; CHECK-NEXT: Inlinee: foo (0x1004) +; CHECK-NEXT: FileID: d:\src\llvm\build\a.h (0x0) +; CHECK-NEXT: SourceLineNum: 1 +; CHECK-NEXT: ExtraFileCount: 2 +; CHECK-NEXT: ExtraFiles [ +; CHECK-NEXT: FileID: d:\src\llvm\build\b.h (0x18) +; CHECK-NEXT: FileID: d:\src\llvm\build\t.cpp (0x30) +; CHECK-NEXT: ] +; CHECK-NEXT: } diff --git a/llvm/test/tools/llvm-readobj/COFF/codeview-label.test b/llvm/test/tools/llvm-readobj/COFF/codeview-label.test new file mode 100644 index 00000000000..66afcb377e9 --- /dev/null +++ b/llvm/test/tools/llvm-readobj/COFF/codeview-label.test @@ -0,0 +1,16 @@ +; RUN: llvm-readobj --codeview %S/Inputs/codeview-label.obj | FileCheck %s + +; CHECK-LABEL: Label (0x1000) { +; CHECK-NEXT: TypeLeafKind: LF_LABEL (0xE) +; CHECK-NEXT: Mode: Near (0x0) +; CHECK-NEXT: } + +; To reproduce codeview-label.obj: +; $ cat codeview-label.asm +; .model flat, C +; .code +; public foo +; foo: +; ret +; end +; $ ml -c -Zi codeview-label.asm diff --git a/llvm/test/tools/llvm-readobj/COFF/codeview-linetables.test b/llvm/test/tools/llvm-readobj/COFF/codeview-linetables.test new file mode 100644 index 00000000000..81d193ad30e --- /dev/null +++ b/llvm/test/tools/llvm-readobj/COFF/codeview-linetables.test @@ -0,0 +1,586 @@ +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; The following two object files were generated using the following command: +; D:\> cl /Z7 /c source.c +; with the following contents of D:\source.c: +; void z(void); +; +; void x(void) { +; z(); +; } +; +; void y(void) { +; z(); +; } +; +; void f(void) { +; x(); +; y(); +; z(); +; } +; using 32-/64-bit versions of CL v17.00.61030 and v18.00.21005.1 respectively. +RUN: llvm-readobj -S --codeview --section-symbols %p/Inputs/multifunction-linetables.obj.coff-2012-i368 \ +RUN: | FileCheck %s -check-prefix MFUN32 +RUN: llvm-readobj -S --codeview --section-symbols %p/Inputs/multifunction-linetables.obj.coff-2013-i368 \ +RUN: | FileCheck %s -check-prefix MFUN32 +RUN: llvm-readobj -S --codeview --section-symbols %p/Inputs/multifunction-linetables.obj.coff-2012-x86_64 \ +RUN: | FileCheck %s -check-prefix MFUN64 +RUN: llvm-readobj -S --codeview --section-symbols %p/Inputs/multifunction-linetables.obj.coff-2013-x86_64 \ +RUN: | FileCheck %s -check-prefix MFUN64 + +MFUN32: CodeViewDebugInfo [ +MFUN32-NEXT: Section: .debug$S (2) +MFUN32-NEXT: Magic: 0x4 +MFUN32-NEXT: Subsection [ +MFUN32-NEXT: SubSectionType: Symbols (0xF1) +MFUN32-NEXT: SubSectionSize: 0x52 +MFUN32: ] +MFUN32: Subsection [ +MFUN32-NEXT: SubSectionType: FrameData (0xF5) +MFUN32-NEXT: SubSectionSize: 0x24 +MFUN32: ] +MFUN32: Subsection [ +MFUN32-NEXT: SubSectionType: Symbols (0xF1) +MFUN32-NEXT: SubSectionSize: 0x4B +MFUN32: GlobalProcIdSym { +MFUN32: CodeSize: 0xA +MFUN32: DisplayName: x +MFUN32: LinkageName: _x +MFUN32: } +MFUN32: ProcEnd +MFUN32: ] +MFUN32: Subsection [ +MFUN32-NEXT: SubSectionType: Lines (0xF2) +MFUN32-NEXT: SubSectionSize: 0x30 +MFUN32: LinkageName: _x +MFUN32-NEXT: ] +MFUN32-NEXT: Subsection [ +MFUN32-NEXT: SubSectionType: FrameData (0xF5) +MFUN32-NEXT: SubSectionSize: 0x24 +MFUN32: ] +MFUN32: Subsection [ +MFUN32-NEXT: SubSectionType: Symbols (0xF1) +MFUN32-NEXT: SubSectionSize: 0x4B +MFUN32: GlobalProcIdSym { +MFUN32: CodeSize: 0xA +MFUN32: DisplayName: y +MFUN32: LinkageName: _y +MFUN32: } +MFUN32: ProcEnd +MFUN32: ] +MFUN32-NEXT: Subsection [ +MFUN32-NEXT: SubSectionType: Lines (0xF2) +MFUN32-NEXT: SubSectionSize: 0x30 +MFUN32: LinkageName: _y +MFUN32-NEXT: ] +MFUN32-NEXT: Subsection [ +MFUN32-NEXT: SubSectionType: FrameData (0xF5) +MFUN32-NEXT: SubSectionSize: 0x24 +MFUN32: ] +MFUN32: Subsection [ +MFUN32-NEXT: SubSectionType: Symbols (0xF1) +MFUN32-NEXT: SubSectionSize: 0x4B +MFUN32: GlobalProcIdSym { +MFUN32: CodeSize: 0x14 +MFUN32: DisplayName: f +MFUN32: LinkageName: _f +MFUN32: } +MFUN32: ProcEnd +MFUN32: ] +MFUN32: Subsection [ +MFUN32-NEXT: SubSectionType: Lines (0xF2) +MFUN32-NEXT: SubSectionSize: 0x40 +MFUN32: LinkageName: _f +MFUN32-NEXT: ] +MFUN32-NEXT: Subsection [ +MFUN32-NEXT: SubSectionType: FileChecksums (0xF4) +MFUN32-NEXT: SubSectionSize: 0x18 +MFUN32: ] +MFUN32-NEXT: Subsection [ +MFUN32-NEXT: SubSectionType: StringTable (0xF3) +MFUN32-NEXT: SubSectionSize: 0x46 +MFUN32: ] +MFUN32-NEXT: Subsection [ +MFUN32-NEXT: SubSectionType: Symbols (0xF1) +MFUN32-NEXT: SubSectionSize: 0x8 +MFUN32: ] +MFUN32-NEXT: FunctionLineTable [ +MFUN32-NEXT LinkageName: _x +MFUN32-NEXT Flags: 0x0 +MFUN32-NEXT CodeSize: 0xA +MFUN32-NEXT FilenameSegment [ +MFUN32-NEXT Filename: d:\source.c +MFUN32-NEXT +0x0 [ +MFUN32-NEXT LineNumberStart: 3 +MFUN32-NEXT LineNumberEndDelta: 0 +MFUN32-NEXT IsStatement: Yes +MFUN32-NEXT ] +MFUN32-NEXT +0x3 [ +MFUN32-NEXT LineNumberStart: 4 +MFUN32-NEXT LineNumberEndDelta: 0 +MFUN32-NEXT IsStatement: Yes +MFUN32-NEXT ] +MFUN32-NEXT +0x8 [ +MFUN32-NEXT LineNumberStart: 5 +MFUN32-NEXT LineNumberEndDelta: 0 +MFUN32-NEXT IsStatement: Yes +MFUN32-NEXT ] +MFUN32-NEXT ] +MFUN32-NEXT ] +MFUN32-NEXT FunctionLineTable [ +MFUN32-NEXT LinkageName: _y +MFUN32-NEXT Flags: 0x0 +MFUN32-NEXT CodeSize: 0xA +MFUN32-NEXT FilenameSegment [ +MFUN32-NEXT Filename: d:\source.c +MFUN32-NEXT +0x0 [ +MFUN32-NEXT LineNumberStart: 7 +MFUN32-NEXT LineNumberEndDelta: 0 +MFUN32-NEXT IsStatement: Yes +MFUN32-NEXT ] +MFUN32-NEXT +0x3 [ +MFUN32-NEXT LineNumberStart: 8 +MFUN32-NEXT LineNumberEndDelta: 0 +MFUN32-NEXT IsStatement: Yes +MFUN32-NEXT ] +MFUN32-NEXT +0x8 [ +MFUN32-NEXT LineNumberStart: 9 +MFUN32-NEXT LineNumberEndDelta: 0 +MFUN32-NEXT IsStatement: Yes +MFUN32-NEXT ] +MFUN32-NEXT ] +MFUN32-NEXT ] +MFUN32-NEXT FunctionLineTable [ +MFUN32-NEXT LinkageName: _f +MFUN32-NEXT Flags: 0x0 +MFUN32-NEXT CodeSize: 0x14 +MFUN32-NEXT FilenameSegment [ +MFUN32-NEXT Filename: d:\source.c +MFUN32-NEXT +0x0 [ +MFUN32-NEXT LineNumberStart: 11 +MFUN32-NEXT LineNumberEndDelta: 0 +MFUN32-NEXT IsStatement: Yes +MFUN32-NEXT ] +MFUN32-NEXT +0x3 [ +MFUN32-NEXT LineNumberStart: 12 +MFUN32-NEXT LineNumberEndDelta: 0 +MFUN32-NEXT IsStatement: Yes +MFUN32-NEXT ] +MFUN32-NEXT +0x8 [ +MFUN32-NEXT LineNumberStart: 13 +MFUN32-NEXT LineNumberEndDelta: 0 +MFUN32-NEXT IsStatement: Yes +MFUN32-NEXT ] +MFUN32-NEXT +0xD [ +MFUN32-NEXT LineNumberStart: 14 +MFUN32-NEXT LineNumberEndDelta: 0 +MFUN32-NEXT IsStatement: Yes +MFUN32-NEXT ] +MFUN32-NEXT +0x12 [ +MFUN32-NEXT LineNumberStart: 15 +MFUN32-NEXT LineNumberEndDelta: 0 +MFUN32-NEXT IsStatement: Yes +MFUN32-NEXT ] +MFUN32-NEXT ] +MFUN32-NEXT ] +MFUN32: ] + +MFUN64: CodeViewDebugInfo [ +MFUN64: Magic: 0x4 +MFUN64-NEXT: Subsection [ +MFUN64-NEXT: SubSectionType: Symbols (0xF1) +MFUN64-NEXT: SubSectionSize: 0x52 +MFUN64: ] +MFUN64: Subsection [ +MFUN64-NEXT: SubSectionType: Symbols (0xF1) +MFUN64-NEXT: SubSectionSize: 0x4B +MFUN64: GlobalProcIdSym { +MFUN64: CodeSize: 0xE +MFUN64: DisplayName: x +MFUN64: LinkageName: x +MFUN64: } +MFUN64: ProcEnd +MFUN64: ] +MFUN64-NEXT: Subsection [ +MFUN64-NEXT: SubSectionType: Lines (0xF2) +MFUN64-NEXT: SubSectionSize: 0x30 +MFUN64: LinkageName: x +MFUN64-NEXT: ] +MFUN64-NEXT: Subsection [ +MFUN64-NEXT: SubSectionType: Symbols (0xF1) +MFUN64-NEXT: SubSectionSize: 0x4B +MFUN64: GlobalProcIdSym { +MFUN64: CodeSize: 0xE +MFUN64: DisplayName: y +MFUN64: LinkageName: y +MFUN64: } +MFUN64: ProcEnd +MFUN64: ] +MFUN64-NEXT: Subsection [ +MFUN64-NEXT: SubSectionType: Lines (0xF2) +MFUN64-NEXT: SubSectionSize: 0x30 +MFUN64: LinkageName: y +MFUN64-NEXT: ] +MFUN64-NEXT: Subsection [ +MFUN64-NEXT: SubSectionType: Symbols (0xF1) +MFUN64-NEXT: SubSectionSize: 0x4B +MFUN64: GlobalProcIdSym { +MFUN64: CodeSize: 0x18 +MFUN64: DisplayName: f +MFUN64: LinkageName: f +MFUN64: } +MFUN64: ProcEnd +MFUN64: ] +MFUN64-NEXT: Subsection [ +MFUN64-NEXT: SubSectionType: Lines (0xF2) +MFUN64-NEXT: SubSectionSize: 0x40 +MFUN64: LinkageName: f +MFUN64-NEXT: ] +MFUN64-NEXT: Subsection [ +MFUN64-NEXT: SubSectionType: FileChecksums (0xF4) +MFUN64-NEXT: SubSectionSize: 0x18 +MFUN64: ] +MFUN64-NEXT: Subsection [ +MFUN64-NEXT: SubSectionType: StringTable (0xF3) +MFUN64-NEXT: SubSectionSize: 0xD +MFUN64: ] +MFUN64-NEXT: Subsection [ +MFUN64-NEXT: SubSectionType: Symbols (0xF1) +MFUN64-NEXT: SubSectionSize: 0x8 +MFUN64: ] +MFUN64-NEXT: FunctionLineTable [ +MFUN64-NEXT: LinkageName: x +MFUN64-NEXT: Flags: 0x0 +MFUN64-NEXT: CodeSize: 0xE +MFUN64-NEXT: FilenameSegment [ +MFUN64-NEXT: Filename: d:\source.c +MFUN64-NEXT: +0x0 [ +MFUN64-NEXT: LineNumberStart: 3 +MFUN64-NEXT: LineNumberEndDelta: 0 +MFUN64-NEXT: IsStatement: Yes +MFUN64-NEXT: ] +MFUN64-NEXT: +0x4 [ +MFUN64-NEXT: LineNumberStart: 4 +MFUN64-NEXT: LineNumberEndDelta: 0 +MFUN64-NEXT: IsStatement: Yes +MFUN64-NEXT: ] +MFUN64-NEXT: +0x9 [ +MFUN64-NEXT: LineNumberStart: 5 +MFUN64-NEXT: LineNumberEndDelta: 0 +MFUN64-NEXT: IsStatement: Yes +MFUN64-NEXT: ] +MFUN64-NEXT: ] +MFUN64-NEXT: ] +MFUN64-NEXT: FunctionLineTable [ +MFUN64-NEXT: LinkageName: y +MFUN64-NEXT: Flags: 0x0 +MFUN64-NEXT: CodeSize: 0xE +MFUN64-NEXT: FilenameSegment [ +MFUN64-NEXT: Filename: d:\source.c +MFUN64-NEXT: +0x0 [ +MFUN64-NEXT: LineNumberStart: 7 +MFUN64-NEXT: LineNumberEndDelta: 0 +MFUN64-NEXT: IsStatement: Yes +MFUN64-NEXT: ] +MFUN64-NEXT: +0x4 [ +MFUN64-NEXT: LineNumberStart: 8 +MFUN64-NEXT: LineNumberEndDelta: 0 +MFUN64-NEXT: IsStatement: Yes +MFUN64-NEXT: ] +MFUN64-NEXT: +0x9 [ +MFUN64-NEXT: LineNumberStart: 9 +MFUN64-NEXT: LineNumberEndDelta: 0 +MFUN64-NEXT: IsStatement: Yes +MFUN64-NEXT: ] +MFUN64-NEXT: ] +MFUN64-NEXT: ] +MFUN64-NEXT: FunctionLineTable [ +MFUN64-NEXT: LinkageName: f +MFUN64-NEXT: Flags: 0x0 +MFUN64-NEXT: CodeSize: 0x18 +MFUN64-NEXT: FilenameSegment [ +MFUN64-NEXT: Filename: d:\source.c +MFUN64-NEXT: +0x0 [ +MFUN64-NEXT: LineNumberStart: 11 +MFUN64-NEXT: LineNumberEndDelta: 0 +MFUN64-NEXT: IsStatement: Yes +MFUN64-NEXT: ] +MFUN64-NEXT: +0x4 [ +MFUN64-NEXT: LineNumberStart: 12 +MFUN64-NEXT: LineNumberEndDelta: 0 +MFUN64-NEXT: IsStatement: Yes +MFUN64-NEXT: ] +MFUN64-NEXT: +0x9 [ +MFUN64-NEXT: LineNumberStart: 13 +MFUN64-NEXT: LineNumberEndDelta: 0 +MFUN64-NEXT: IsStatement: Yes +MFUN64-NEXT: ] +MFUN64-NEXT: +0xE [ +MFUN64-NEXT: LineNumberStart: 14 +MFUN64-NEXT: LineNumberEndDelta: 0 +MFUN64-NEXT: IsStatement: Yes +MFUN64-NEXT: ] +MFUN64-NEXT: +0x13 [ +MFUN64-NEXT: LineNumberStart: 15 +MFUN64-NEXT: LineNumberEndDelta: 0 +MFUN64-NEXT: IsStatement: Yes +MFUN64-NEXT: ] +MFUN64-NEXT: ] +MFUN64-NEXT: ] +MFUN64: ] + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; The following two object files were generated using the following command: +; D:\> cl /Z7 /c input.c +; with the following contents of D:\input.c: +; void g(void); +; +; void f(void) { +; #line 1 "one.c" +; g(); +; #line 2 "two.c" +; g(); +; #line 7 "one.c" +; g(); +; } +; using 32-/64-bit versions of CL v17.00.61030 and v18.00.21005.1 respectively. +RUN: llvm-readobj -S --codeview --section-symbols %p/Inputs/multifile-linetables.obj.coff-2012-i368 \ +RUN: | FileCheck %s -check-prefix MFILE32 +RUN: llvm-readobj -S --codeview --section-symbols %p/Inputs/multifile-linetables.obj.coff-2013-i368 \ +RUN: | FileCheck %s -check-prefix MFILE32 +RUN: llvm-readobj -S --codeview --section-symbols %p/Inputs/multifile-linetables.obj.coff-2012-x86_64 \ +RUN: | FileCheck %s -check-prefix MFILE64 +RUN: llvm-readobj -S --codeview --section-symbols %p/Inputs/multifile-linetables.obj.coff-2013-x86_64 \ +RUN: | FileCheck %s -check-prefix MFILE64 + +MFILE32: CodeViewDebugInfo [ +MFILE32: Magic: 0x4 +MFILE32-NEXT: Subsection [ +MFILE32-NEXT: SubSectionType: Symbols (0xF1) +MFILE32-NEXT: SubSectionSize: 0x51 +MFILE32: ] +MFILE32: Subsection [ +MFILE32-NEXT: SubSectionType: FrameData (0xF5) +MFILE32-NEXT: SubSectionSize: 0x24 +MFILE32: ] +MFILE32: Subsection [ +MFILE32-NEXT: SubSectionType: Symbols (0xF1) +MFILE32-NEXT: SubSectionSize: 0x4B +MFILE32: GlobalProcIdSym { +MFILE32: CodeSize: 0x14 +MFILE32: DisplayName: f +MFILE32: LinkageName: _f +MFILE32: } +MFILE32: ProcEnd +MFILE32: ] +MFILE32-NEXT: Subsection [ +MFILE32-NEXT: SubSectionType: Lines (0xF2) +MFILE32-NEXT: SubSectionSize: 0x64 +MFILE32: LinkageName: _f +MFILE32-NEXT: ] +MFILE32-NEXT: Subsection [ +MFILE32-NEXT: SubSectionType: FileChecksums (0xF4) +MFILE32-NEXT: SubSectionSize: 0x28 +MFILE32: ] +MFILE32-NEXT: Subsection [ +MFILE32-NEXT: SubSectionType: StringTable (0xF3) +MFILE32-NEXT: SubSectionSize: 0x57 +MFILE32: ] +MFILE32-NEXT: Subsection [ +MFILE32-NEXT: SubSectionType: Symbols (0xF1) +MFILE32-NEXT: SubSectionSize: 0x8 +MFILE32: ] +MFILE32-NEXT: FunctionLineTable [ +MFILE32-NEXT: LinkageName: _f +MFILE32-NEXT: Flags: 0x0 +MFILE32-NEXT: CodeSize: 0x14 +MFILE32-NEXT: FilenameSegment [ +MFILE32-NEXT: Filename: d:\input.c +MFILE32-NEXT: +0x0 [ +MFILE32-NEXT: LineNumberStart: 3 +MFILE32-NEXT: LineNumberEndDelta: 0 +MFILE32-NEXT: IsStatement: Yes +MFILE32-NEXT: ] +MFILE32-NEXT: ] +MFILE32-NEXT: FilenameSegment [ +MFILE32-NEXT: Filename: d:\one.c +MFILE32-NEXT: +0x3 [ +MFILE32-NEXT: LineNumberStart: 1 +MFILE32-NEXT: LineNumberEndDelta: 0 +MFILE32-NEXT: IsStatement: Yes +MFILE32-NEXT: ] +MFILE32-NEXT: ] +MFILE32-NEXT: FilenameSegment [ +MFILE32-NEXT: Filename: d:\two.c +MFILE32-NEXT: +0x8 [ +MFILE32-NEXT: LineNumberStart: 2 +MFILE32-NEXT: LineNumberEndDelta: 0 +MFILE32-NEXT: IsStatement: Yes +MFILE32-NEXT: ] +MFILE32-NEXT: ] +MFILE32-NEXT: FilenameSegment [ +MFILE32-NEXT: Filename: d:\one.c +MFILE32-NEXT: +0xD [ +MFILE32-NEXT: LineNumberStart: 7 +MFILE32-NEXT: LineNumberEndDelta: 0 +MFILE32-NEXT: IsStatement: Yes +MFILE32-NEXT: ] +MFILE32-NEXT: +0x12 [ +MFILE32-NEXT: LineNumberStart: 8 +MFILE32-NEXT: LineNumberEndDelta: 0 +MFILE32-NEXT: IsStatement: Yes +MFILE32-NEXT: ] +MFILE32-NEXT: ] +MFILE32-NEXT: ] +MFILE32: ] + +MFILE64: CodeViewDebugInfo [ +MFILE64: Magic: 0x4 +MFILE64-NEXT: Subsection [ +MFILE64-NEXT: SubSectionType: Symbols (0xF1) +MFILE64-NEXT: SubSectionSize: 0x51 +MFILE64: ] +MFILE64: Subsection [ +MFILE64-NEXT: SubSectionType: Symbols (0xF1) +MFILE64-NEXT: SubSectionSize: 0x4B +MFILE64: GlobalProcIdSym { +MFILE64: CodeSize: 0x18 +MFILE64: DisplayName: f +MFILE64: LinkageName: f +MFILE64: } +MFILE64: ProcEnd +MFILE64: ] +MFILE64-NEXT: Subsection [ +MFILE64-NEXT: SubSectionType: Lines (0xF2) +MFILE64-NEXT: SubSectionSize: 0x64 +MFILE64: LinkageName: f +MFILE64-NEXT: ] +MFILE64-NEXT: Subsection [ +MFILE64-NEXT: SubSectionType: FileChecksums (0xF4) +MFILE64-NEXT: SubSectionSize: 0x28 +MFILE64: ] +MFILE64-NEXT: Subsection [ +MFILE64-NEXT: SubSectionType: StringTable (0xF3) +MFILE64-NEXT: SubSectionSize: 0x1E +MFILE64: ] +MFILE64-NEXT: Subsection [ +MFILE64-NEXT: SubSectionType: Symbols (0xF1) +MFILE64-NEXT: SubSectionSize: 0x8 +MFILE64: ] +MFILE64-NEXT: FunctionLineTable [ +MFILE64-NEXT: LinkageName: f +MFILE64-NEXT: Flags: 0x0 +MFILE64-NEXT: CodeSize: 0x18 +MFILE64-NEXT: FilenameSegment [ +MFILE64-NEXT: Filename: d:\input.c +MFILE64-NEXT: +0x0 [ +MFILE64-NEXT: LineNumberStart: 3 +MFILE64-NEXT: LineNumberEndDelta: 0 +MFILE64-NEXT: IsStatement: Yes +MFILE64-NEXT: ] +MFILE64-NEXT: ] +MFILE64-NEXT: FilenameSegment [ +MFILE64-NEXT: Filename: d:\one.c +MFILE64-NEXT: +0x4 [ +MFILE64-NEXT: LineNumberStart: 1 +MFILE64-NEXT: LineNumberEndDelta: 0 +MFILE64-NEXT: IsStatement: Yes +MFILE64-NEXT: ] +MFILE64-NEXT: ] +MFILE64-NEXT: FilenameSegment [ +MFILE64-NEXT: Filename: d:\two.c +MFILE64-NEXT: +0x9 [ +MFILE64-NEXT: LineNumberStart: 2 +MFILE64-NEXT: LineNumberEndDelta: 0 +MFILE64-NEXT: IsStatement: Yes +MFILE64-NEXT: ] +MFILE64-NEXT: ] +MFILE64-NEXT: FilenameSegment [ +MFILE64-NEXT: Filename: d:\one.c +MFILE64-NEXT: +0xE [ +MFILE64-NEXT: LineNumberStart: 7 +MFILE64-NEXT: LineNumberEndDelta: 0 +MFILE64-NEXT: IsStatement: Yes +MFILE64-NEXT: ] +MFILE64-NEXT: +0x13 [ +MFILE64-NEXT: LineNumberStart: 8 +MFILE64-NEXT: LineNumberEndDelta: 0 +MFILE64-NEXT: IsStatement: Yes +MFILE64-NEXT: ] +MFILE64-NEXT: ] +MFILE64: ] + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; The following object files were generated using the following command: +; C:\src> cl /Z7 /Gy /c test.cc +; with the following contents of C:\src\test.cc: +; int f() +; { +; return 0; +; } +; +; int g() +; { +; return 0; +; } +; using 32-version of CL v17.00.61030 and v18.00.21005.1 respectively. +RUN: llvm-readobj -S --codeview --section-symbols %p/Inputs/comdat-function-linetables.obj.coff-2012-i386 \ +RUN: | FileCheck %s -check-prefix MCOMDAT +RUN: llvm-readobj -S --codeview --section-symbols %p/Inputs/comdat-function-linetables.obj.coff-2013-i386 \ +RUN: | FileCheck %s -check-prefix MCOMDAT + +MCOMDAT: GlobalProcIdSym { +MCOMDAT: CodeSize: 0x7 +MCOMDAT: DisplayName: f +MCOMDAT: LinkageName: ?f@@YAHXZ +MCOMDAT: } +MCOMDAT: FunctionLineTable [ +MCOMDAT-NEXT: LinkageName: ?f@@YAHXZ +MCOMDAT-NEXT: Flags: 0x0 +MCOMDAT-NEXT: CodeSize: 0x7 +MCOMDAT-NEXT: FilenameSegment [ +MCOMDAT-NEXT: Filename: c:\src\test.cc +MCOMDAT-NEXT: +0x0 [ +MCOMDAT-NEXT: LineNumberStart: 2 +MCOMDAT-NEXT: LineNumberEndDelta: 0 +MCOMDAT-NEXT: IsStatement: Yes +MCOMDAT-NEXT: ] +MCOMDAT-NEXT: +0x3 [ +MCOMDAT-NEXT: LineNumberStart: 3 +MCOMDAT-NEXT: LineNumberEndDelta: 0 +MCOMDAT-NEXT: IsStatement: Yes +MCOMDAT-NEXT: ] +MCOMDAT-NEXT: +0x5 [ +MCOMDAT-NEXT: LineNumberStart: 4 +MCOMDAT-NEXT: LineNumberEndDelta: 0 +MCOMDAT-NEXT: IsStatement: Yes +MCOMDAT-NEXT: ] +MCOMDAT-NEXT: ] +MCOMDAT-NEXT: ] +MCOMDAT: GlobalProcIdSym { +MCOMDAT: CodeSize: 0x7 +MCOMDAT: DisplayName: g +MCOMDAT: LinkageName: ?g@@YAHXZ +MCOMDAT: } +MCOMDAT: FunctionLineTable [ +MCOMDAT-NEXT: LinkageName: ?g@@YAHXZ +MCOMDAT-NEXT: Flags: 0x0 +MCOMDAT-NEXT: CodeSize: 0x7 +MCOMDAT-NEXT: FilenameSegment [ +MCOMDAT-NEXT: Filename: c:\src\test.cc +MCOMDAT-NEXT: +0x0 [ +MCOMDAT-NEXT: LineNumberStart: 7 +MCOMDAT-NEXT: LineNumberEndDelta: 0 +MCOMDAT-NEXT: IsStatement: Yes +MCOMDAT-NEXT: ] +MCOMDAT-NEXT: +0x3 [ +MCOMDAT-NEXT: LineNumberStart: 8 +MCOMDAT-NEXT: LineNumberEndDelta: 0 +MCOMDAT-NEXT: IsStatement: Yes +MCOMDAT-NEXT: ] +MCOMDAT-NEXT: +0x5 [ +MCOMDAT-NEXT: LineNumberStart: 9 +MCOMDAT-NEXT: LineNumberEndDelta: 0 +MCOMDAT-NEXT: IsStatement: Yes +MCOMDAT-NEXT: ] +MCOMDAT-NEXT: ] +MCOMDAT-NEXT: ] diff --git a/llvm/test/tools/llvm-readobj/COFF/codeview-merging-anon.test b/llvm/test/tools/llvm-readobj/COFF/codeview-merging-anon.test new file mode 100644 index 00000000000..bbc40f9a25e --- /dev/null +++ b/llvm/test/tools/llvm-readobj/COFF/codeview-merging-anon.test @@ -0,0 +1,29 @@ +# Test what happens when the first type record (0x1000) is a LF_FIELDLIST +# record. + +# Steps to regenerate input: +# $ cat t.c +# struct { int x; } o; +# $ cl -Z7 t.c + +RUN: llvm-readobj --codeview %S/Inputs/codeview-merging-anon.obj | FileCheck %s +RUN: llvm-readobj --codeview-merged-types %S/Inputs/codeview-merging-anon.obj | FileCheck %s + +CHECK-LABEL: FieldList (0x1000) { +CHECK-NEXT: TypeLeafKind: LF_FIELDLIST (0x1203) +CHECK-NEXT: DataMember { +CHECK-NEXT: TypeLeafKind: LF_MEMBER (0x150D) +CHECK-NEXT: AccessSpecifier: Public (0x3) +CHECK-NEXT: Type: int (0x74) +CHECK-NEXT: FieldOffset: 0x0 +CHECK-NEXT: Name: x +CHECK-NEXT: } +CHECK-NEXT: } +CHECK-LABEL: Struct (0x1001) { +CHECK: TypeLeafKind: LF_STRUCTURE (0x1505) +CHECK: MemberCount: 1 +CHECK: FieldList: <field list> (0x1000) +CHECK: Name: <unnamed-tag> +CHECK: LinkageName: .?AU<unnamed-tag>@@ +CHECK: } +CHECK-LABEL: StringId diff --git a/llvm/test/tools/llvm-readobj/COFF/codeview-merging-cycle.test b/llvm/test/tools/llvm-readobj/COFF/codeview-merging-cycle.test new file mode 100644 index 00000000000..b7c63c84392 --- /dev/null +++ b/llvm/test/tools/llvm-readobj/COFF/codeview-merging-cycle.test @@ -0,0 +1,19 @@ +; RUN: not llvm-readobj --codeview-merged-types %S/Inputs/codeview-cycle.obj 2>&1 | FileCheck %s + +; CHECK: error{{.*}} Input type graph contains cycles + +; To reproduce codeview-cycle.obj: +; $ cat codeview-cycle.asm +; .model flat, C +; .code +; pfoo_list TYPEDEF PTR foo_list +; foo_list STRUCT +; next pfoo_list ? +; data dd ? +; foo_list ENDS +; public foo +; foo proc dst:ptr foo_list +; ret +; foo endp +; end +; $ ml -c -Zi codeview-cycle.asm diff --git a/llvm/test/tools/llvm-readobj/COFF/codeview-merging-ghash.test b/llvm/test/tools/llvm-readobj/COFF/codeview-merging-ghash.test new file mode 100644 index 00000000000..7c57cf0b5dc --- /dev/null +++ b/llvm/test/tools/llvm-readobj/COFF/codeview-merging-ghash.test @@ -0,0 +1,132 @@ +# RUN: yaml2obj %s -o=%t.obj +# RUN: llvm-readobj --codeview-merged-types %t.obj | FileCheck %s --check-prefix=MERGED +# RUN: llvm-readobj --codeview-merged-types --codeview-ghash %t.obj | FileCheck %s --check-prefix=MERGED + +# MERGED: Format: COFF-x86-64 +# MERGED-NEXT: Arch: x86_64 +# MERGED-NEXT: AddressSize: 64bit +# MERGED-NEXT: MergedTypeStream [ +# MERGED-NEXT: ArgList (0x1000) { +# MERGED-NEXT: TypeLeafKind: LF_ARGLIST (0x1201) +# MERGED-NEXT: NumArgs: 0 +# MERGED-NEXT: Arguments [ +# MERGED-NEXT: ] +# MERGED-NEXT: } +# MERGED-NEXT: Modifier (0x1001) { +# MERGED-NEXT: TypeLeafKind: LF_MODIFIER (0x1001) +# MERGED-NEXT: ModifiedType: void (0x3) +# MERGED-NEXT: Modifiers [ (0x3) +# MERGED-NEXT: Const (0x1) +# MERGED-NEXT: Volatile (0x2) +# MERGED-NEXT: ] +# MERGED-NEXT: } +# MERGED-NEXT: Procedure (0x1002) { +# MERGED-NEXT: TypeLeafKind: LF_PROCEDURE (0x1008) +# MERGED-NEXT: ReturnType: void (0x3) +# MERGED-NEXT: CallingConvention: NearC (0x0) +# MERGED-NEXT: FunctionOptions [ (0x0) +# MERGED-NEXT: ] +# MERGED-NEXT: NumParameters: 0 +# MERGED-NEXT: ArgListType: () (0x1000) +# MERGED-NEXT: } +# MERGED-NEXT: Pointer (0x1003) { +# MERGED-NEXT: TypeLeafKind: LF_POINTER (0x1002) +# MERGED-NEXT: PointeeType: const volatile void (0x1001) +# MERGED-NEXT: PtrType: Near64 (0xC) +# MERGED-NEXT: PtrMode: Pointer (0x0) +# MERGED-NEXT: IsFlat: 0 +# MERGED-NEXT: IsConst: 1 +# MERGED-NEXT: IsVolatile: 0 +# MERGED-NEXT: IsUnaligned: 0 +# MERGED-NEXT: IsRestrict: 0 +# MERGED-NEXT: IsThisPtr&: 0 +# MERGED-NEXT: IsThisPtr&&: 0 +# MERGED-NEXT: SizeOf: 8 +# MERGED-NEXT: } +# MERGED-NEXT: Pointer (0x1004) { +# MERGED-NEXT: TypeLeafKind: LF_POINTER (0x1002) +# MERGED-NEXT: PointeeType: const volatile void* const (0x1003) +# MERGED-NEXT: PtrType: Near64 (0xC) +# MERGED-NEXT: PtrMode: Pointer (0x0) +# MERGED-NEXT: IsFlat: 0 +# MERGED-NEXT: IsConst: 1 +# MERGED-NEXT: IsVolatile: 0 +# MERGED-NEXT: IsUnaligned: 0 +# MERGED-NEXT: IsRestrict: 0 +# MERGED-NEXT: IsThisPtr&: 0 +# MERGED-NEXT: IsThisPtr&&: 0 +# MERGED-NEXT: SizeOf: 8 +# MERGED-NEXT: } +# MERGED-NEXT: Pointer (0x1005) { +# MERGED-NEXT: TypeLeafKind: LF_POINTER (0x1002) +# MERGED-NEXT: PointeeType: const volatile void* const* const (0x1004) +# MERGED-NEXT: PtrType: Near64 (0xC) +# MERGED-NEXT: PtrMode: Pointer (0x0) +# MERGED-NEXT: IsFlat: 0 +# MERGED-NEXT: IsConst: 1 +# MERGED-NEXT: IsVolatile: 0 +# MERGED-NEXT: IsUnaligned: 0 +# MERGED-NEXT: IsRestrict: 0 +# MERGED-NEXT: IsThisPtr&: 0 +# MERGED-NEXT: IsThisPtr&&: 0 +# MERGED-NEXT: SizeOf: 8 +# MERGED-NEXT: } +# MERGED-NEXT: Pointer (0x1006) { +# MERGED-NEXT: TypeLeafKind: LF_POINTER (0x1002) +# MERGED-NEXT: PointeeType: const volatile void* const* const* const (0x1005) +# MERGED-NEXT: PtrType: Near64 (0xC) +# MERGED-NEXT: PtrMode: Pointer (0x0) +# MERGED-NEXT: IsFlat: 0 +# MERGED-NEXT: IsConst: 1 +# MERGED-NEXT: IsVolatile: 0 +# MERGED-NEXT: IsUnaligned: 0 +# MERGED-NEXT: IsRestrict: 0 +# MERGED-NEXT: IsThisPtr&: 0 +# MERGED-NEXT: IsThisPtr&&: 0 +# MERGED-NEXT: SizeOf: 8 +# MERGED-NEXT: } +# MERGED-NEXT: ] +# MERGED-NEXT: MergedIDStream [ +# MERGED-NEXT: ] + +--- !COFF +header: + Machine: IMAGE_FILE_MACHINE_AMD64 + Characteristics: [ ] +sections: + - Name: '.debug$T' + Characteristics: [ IMAGE_SCN_CNT_INITIALIZED_DATA, IMAGE_SCN_MEM_DISCARDABLE, IMAGE_SCN_MEM_READ ] + Alignment: 1 + Types: + - Kind: LF_PROCEDURE + Procedure: + ReturnType: 3 + CallConv: NearC + Options: [ None ] + ParameterCount: 0 + ArgumentList: 4097 + - Kind: LF_ARGLIST + ArgList: + ArgIndices: [ ] + - Kind: LF_POINTER + Pointer: + ReferentType: 4099 + Attrs: 66572 + - Kind: LF_POINTER + Pointer: + ReferentType: 4100 + Attrs: 66572 + - Kind: LF_POINTER + Pointer: + ReferentType: 4101 + Attrs: 66572 + - Kind: LF_MODIFIER + Modifier: + ModifiedType: 3 + Modifiers: [ None, Const, Volatile ] + - Kind: LF_POINTER + Pointer: + ReferentType: 4098 + Attrs: 66572 +symbols: +... diff --git a/llvm/test/tools/llvm-readobj/COFF/codeview-merging-unsorted.test b/llvm/test/tools/llvm-readobj/COFF/codeview-merging-unsorted.test new file mode 100644 index 00000000000..a52755a3c8a --- /dev/null +++ b/llvm/test/tools/llvm-readobj/COFF/codeview-merging-unsorted.test @@ -0,0 +1,40 @@ +; RUN: llvm-readobj --codeview %S/Inputs/codeview-unsorted.obj | FileCheck %s +; RUN: llvm-readobj --codeview-merged-types %S/Inputs/codeview-unsorted.obj | FileCheck %s --check-prefix=MERGED + +; The input type stream has records that refer to later type indices in the same +; stream: + +; CHECK: Pointer (0x1000) +; CHECK: Struct (0x1001) +; CHECK: FieldList: {{.*}} (0x1002) +; CHECK: FieldList (0x1002) +; CHECK: Pointer (0x1003) +; CHECK: Procedure (0x1004) +; CHECK: ArgListType: {{.*}} (0x1005) +; CHECK: ArgList (0x1005) + +; MERGED: Pointer (0x1000) +; MERGED: FieldList (0x1001) +; MERGED: Struct (0x1002) +; MERGED: FieldList: {{.*}} (0x1001) +; MERGED: Pointer (0x1003) +; MERGED: ArgList (0x1004) +; MERGED: Procedure (0x1005) +; MERGED: ArgListType: {{.*}} (0x1004) + + +; To reproduce codeview-unsorted.obj: +; $ cat codeview-unsorted.asm +; .model flat, C +; .code +; PBYTE TYPEDEF PTR BYTE +; foo_list STRUCT +; next PBYTE ? +; data dd ? +; foo_list ENDS +; public foo +; foo proc dst:ptr foo_list +; ret +; foo endp +; end +; $ ml -c -Zi codeview-unsorted.asm diff --git a/llvm/test/tools/llvm-readobj/COFF/codeview-merging.test b/llvm/test/tools/llvm-readobj/COFF/codeview-merging.test new file mode 100644 index 00000000000..af7b29f7e7c --- /dev/null +++ b/llvm/test/tools/llvm-readobj/COFF/codeview-merging.test @@ -0,0 +1,113 @@ +# To regenerate t1.obj and t2.obj, run the following: +# $ cat t.cpp +# #ifdef CONFIG1 +# struct A; +# struct B { +# A *a; +# }; +# int f(A *a); +# int g(B *b) { return f(b->a); } +# #else +# struct B; +# struct A { +# B *b; +# }; +# int g(B *b); +# int f(A *a) { return g(a->b); } +# #endif +# $ cl -c -DCONFIG1 -Z7 t.cpp -Fot1.obj && cl -c -Z7 t.cpp -Fot2.obj + +RUN: llvm-readobj --codeview %S/Inputs/codeview-merging-1.obj | FileCheck %s --check-prefix=OBJ1 +RUN: llvm-readobj --codeview %S/Inputs/codeview-merging-2.obj | FileCheck %s --check-prefix=OBJ2 +RUN: llvm-readobj --codeview-merged-types %S/Inputs/codeview-merging-1.obj %S/Inputs/codeview-merging-2.obj | FileCheck %s + +OBJ1: Procedure ({{.*}}) { +OBJ1-NEXT: TypeLeafKind: LF_PROCEDURE (0x1008) +OBJ1-NEXT: ReturnType: int (0x74) +OBJ1-NEXT: CallingConvention: NearC (0x0) +OBJ1-NEXT: FunctionOptions [ (0x0) +OBJ1-NEXT: ] +OBJ1-NEXT: NumParameters: 1 +OBJ1-NEXT: ArgListType: (A*) (0x1002) +OBJ1-NEXT: } +OBJ1: FuncId (0x100D) { +OBJ1-NEXT: TypeLeafKind: LF_FUNC_ID (0x1601) +OBJ1-NEXT: ParentScope: 0x0 +OBJ1-NEXT: FunctionType: int (B*) (0x100C) +OBJ1-NEXT: Name: g +OBJ1-NEXT: } +OBJ1-NEXT: FuncId (0x100E) { +OBJ1-NEXT: TypeLeafKind: LF_FUNC_ID (0x1601) +OBJ1-NEXT: ParentScope: 0x0 +OBJ1-NEXT: FunctionType: int (A*) (0x1003) +OBJ1-NEXT: Name: f +OBJ1-NEXT: } +OBJ1-NOT: FuncId + +OBJ2: FuncId (0x100D) { +OBJ2-NEXT: TypeLeafKind: LF_FUNC_ID (0x1601) +OBJ2-NEXT: ParentScope: 0x0 +OBJ2-NEXT: FunctionType: int (A*) (0x100C) +OBJ2-NEXT: Name: f +OBJ2-NEXT: } + +OBJ2: FuncId (0x1069) { +OBJ2-NEXT: TypeLeafKind: LF_FUNC_ID (0x1601) +OBJ2-NEXT: ParentScope: 0x0 +OBJ2-NEXT: FunctionType: int (B*) (0x1003) +OBJ2-NEXT: Name: g +OBJ2-NEXT: } +OBJ2-NOT: FuncId + +CHECK: MergedTypeStream [ +CHECK: Procedure ({{.*}}) { +CHECK-NEXT: TypeLeafKind: LF_PROCEDURE (0x1008) +CHECK-NEXT: ReturnType: int (0x74) +CHECK-NEXT: CallingConvention: NearC (0x0) +CHECK-NEXT: FunctionOptions [ (0x0) +CHECK-NEXT: ] +CHECK-NEXT: NumParameters: 1 +CHECK-NEXT: ArgListType: (A*) (0x1002) +CHECK-NEXT: } +CHECK: Struct (0x1007) { +CHECK-NEXT: TypeLeafKind: LF_STRUCTURE (0x1505) +CHECK-NEXT: MemberCount: 1 +CHECK-NEXT: Properties [ (0x200) +CHECK-NEXT: HasUniqueName (0x200) +CHECK-NEXT: ] +CHECK-NEXT: FieldList: <field list> (0x1006) +CHECK-NEXT: DerivedFrom: 0x0 +CHECK-NEXT: VShape: 0x0 +CHECK-NEXT: SizeOf: 8 +CHECK-NEXT: Name: B +CHECK-NEXT: LinkageName: .?AUB@@ +CHECK-NEXT: } +CHECK: ] + +CHECK: MergedIDStream [ +CHECK-NEXT: StringId (0x1000) { +CHECK-NEXT: TypeLeafKind: LF_STRING_ID (0x1605) +CHECK-NEXT: Id: 0x0 +CHECK-NEXT: StringData: d:\src\llvm\build\t.cpp +CHECK-NEXT: } +# Test that we contextually dump item ids and type ids from different databases. +CHECK-NEXT: UdtSourceLine (0x1001) { +CHECK-NEXT: TypeLeafKind: LF_UDT_SRC_LINE (0x1606) +CHECK-NEXT: UDT: B (0x1007) +CHECK-NEXT: SourceFile: d:\src\llvm\build\t.cpp (0x1000) +CHECK-NEXT: LineNumber: 3 +CHECK-NEXT: } +CHECK: FuncId (0x1002) { +CHECK-NEXT: TypeLeafKind: LF_FUNC_ID (0x1601) +CHECK-NEXT: ParentScope: 0x0 +CHECK-NEXT: FunctionType: int (B*) +CHECK-NEXT: Name: g +CHECK-NEXT: } +CHECK-NEXT: FuncId (0x1003) { +CHECK-NEXT: TypeLeafKind: LF_FUNC_ID (0x1601) +CHECK-NEXT: ParentScope: 0x0 +CHECK-NEXT: FunctionType: int (A*) +CHECK-NEXT: Name: f +CHECK-NEXT: } +CHECK-NOT: FuncId +CHECK: ] diff --git a/llvm/test/tools/llvm-readobj/COFF/codeview-types.test b/llvm/test/tools/llvm-readobj/COFF/codeview-types.test new file mode 100644 index 00000000000..3c2939611fa --- /dev/null +++ b/llvm/test/tools/llvm-readobj/COFF/codeview-types.test @@ -0,0 +1,95 @@ +// This tests that we can deserialize and reserialize every known type record. +// If you need to update the object file, enable the RUNX line below using MSVC +// from VS 2012. Newer versions of MSVC emit tons of internal types for +// attributes that pollute the test output. When Clang fully supports all these +// type records, we can regenerate the test using it instead. + +// RUNX: cl -GR- -Z7 -c -TP %s -Fo%S/Inputs/codeview-types.obj +// RUN: llvm-readobj --codeview %S/Inputs/codeview-types.obj | FileCheck %s +// RUN: llvm-readobj --codeview-merged-types %S/Inputs/codeview-types.obj | FileCheck %s + +// TYPE_RECORD +// CHECK-DAG: {{^ *Pointer (.*) {$}} +// CHECK-DAG: {{^ *Modifier (.*) {$}} +// CHECK-DAG: {{^ *Procedure (.*) {$}} +// CHECK-DAG: {{^ *MemberFunction (.*) {$}} +// CHECK-DAG: {{^ *ArgList (.*) {$}} +// CHECK-DAG: {{^ *Array (.*) {$}} +// CHECK-DAG: {{^ *Class (.*) {$}} +// CHECK-DAG: {{^ *Union (.*) {$}} +// CHECK-DAG: {{^ *Enum (.*) {$}} +// CHECK-DAG: {{^ *VFTable (.*) {$}} +// CHECK-DAG: {{^ *VFTableShape (.*) {$}} +// CHECK-DAG: {{^ *FuncId (.*) {$}} +// CHECK-DAG: {{^ *MemberFuncId (.*) {$}} +// CHECK-DAG: {{^ *BuildInfo (.*) {$}} +// CHECK-DAG: {{^ *StringId (.*) {$}} +// CHECK-DAG: {{^ *UdtSourceLine (.*) {$}} +// CHECK-DAG: {{^ *MethodOverloadList (.*) {$}} +// No TypeServer2, since that is used with /Zi + +// MEMBER_RECORD +// CHECK-DAG: {{^ *BaseClass {$}} +// CHECK-DAG: {{^ *VirtualBaseClass {$}} +// CHECK-DAG: {{^ *VFPtr {$}} +// CHECK-DAG: {{^ *StaticDataMember {$}} +// CHECK-DAG: {{^ *OverloadedMethod {$}} +// CHECK-DAG: {{^ *DataMember {$}} +// CHECK-DAG: {{^ *NestedType {$}} +// CHECK-DAG: {{^ *OneMethod {$}} +// CHECK-DAG: {{^ *Enumerator {$}} + +#if !defined(__clang__) && _MSC_VER >= 1800 +#error "use clang or MSVC 2012 to regenerate the test" +#endif + +struct VBaseA; +void FriendFunc(); + +class Class { +public: + const Class *DataMember; +private: + static int StaticDataMember; +protected: + virtual void MemberFunction(); +public: + struct Nested; + friend ::VBaseA; + friend void FriendFunc() { } + void OverloadedMethod(); + void OverloadedMethod(int); +}; + +enum Enum { + E1 = 0, + E2 = 1 +}; + +int array[4] = {1, 2, 3, 4}; + +struct Class::Nested {}; + +struct ClassWithBase : Class { + virtual void MemberFunction(); + virtual void NewVirtual(); +}; +struct VBaseA { int x; }; +struct VBaseB : virtual VBaseA { int x; }; +struct VBaseC : virtual VBaseA { int x; }; +struct VBaseD : VBaseB, VBaseC { int x; }; + +union Union { + float f; + int i; +}; + +void UseAllTypes() { + Class a; + Class::Nested b; + ClassWithBase c; + VBaseD d; + Union e; + Enum f; + FriendFunc(); +} diff --git a/llvm/test/tools/llvm-readobj/COFF/codeview-vftable.test b/llvm/test/tools/llvm-readobj/COFF/codeview-vftable.test new file mode 100644 index 00000000000..fb7acad11ea --- /dev/null +++ b/llvm/test/tools/llvm-readobj/COFF/codeview-vftable.test @@ -0,0 +1,48 @@ +; The following two object files were generated using the following command: +; $ cl /Z7 /c t.cpp +; The contents of t.cpp follow: +; struct A { +; virtual void f(); +; }; +; struct B { +; virtual void f(); +; virtual void g(); +; }; +; struct C { +; virtual void f(); +; virtual void g(); +; virtual void h(); +; }; +; A a; +; B b; +; C c; + +RUN: llvm-readobj --codeview %p/Inputs/codeview-vftable.obj.coff | FileCheck %s + +CHECK: VFTable (0x10F0) { +CHECK-NEXT: TypeLeafKind: LF_VFTABLE (0x151D) +CHECK-NEXT: CompleteClass: A +CHECK-NEXT: OverriddenVFTable: 0x0 +CHECK-NEXT: VFPtrOffset: 0x0 +CHECK-NEXT: VFTableName: ??_7A@@6B@ +CHECK-NEXT: MethodName: ?f@A@@UEAAXXZ +CHECK-NEXT: } +CHECK-NEXT: VFTable (0x10F1) { +CHECK-NEXT: TypeLeafKind: LF_VFTABLE (0x151D) +CHECK-NEXT: CompleteClass: B +CHECK-NEXT: OverriddenVFTable: ??_7A@@6B@ (0x10F0) +CHECK-NEXT: VFPtrOffset: 0x0 +CHECK-NEXT: VFTableName: ??_7B@@6B@ +CHECK-NEXT: MethodName: ?f@B@@UEAAXXZ +CHECK-NEXT: MethodName: ?g@B@@UEAAXXZ +CHECK-NEXT: } +CHECK-NEXT: VFTable (0x10F2) { +CHECK-NEXT: TypeLeafKind: LF_VFTABLE (0x151D) +CHECK-NEXT: CompleteClass: C +CHECK-NEXT: OverriddenVFTable: ??_7B@@6B@ (0x10F1) +CHECK-NEXT: VFPtrOffset: 0x0 +CHECK-NEXT: VFTableName: ??_7C@@6B@ +CHECK-NEXT: MethodName: ?f@C@@UEAAXXZ +CHECK-NEXT: MethodName: ?g@C@@UEAAXXZ +CHECK-NEXT: MethodName: ?h@C@@UEAAXXZ +CHECK-NEXT: } diff --git a/llvm/test/tools/llvm-readobj/COFF/const-import.test b/llvm/test/tools/llvm-readobj/COFF/const-import.test new file mode 100644 index 00000000000..432dee0e6eb --- /dev/null +++ b/llvm/test/tools/llvm-readobj/COFF/const-import.test @@ -0,0 +1,7 @@ +RUN: llvm-readobj --coff-exports %S/Inputs/const-import.lib | FileCheck %s + +CHECK: Type: const +CHECK: Name type: noprefix +CHECK: Symbol: __imp____CFConstantStringClassReference +CHECK: Symbol: ___CFConstantStringClassReference + diff --git a/llvm/test/tools/llvm-readobj/COFF/cxx-cli-aux.test b/llvm/test/tools/llvm-readobj/COFF/cxx-cli-aux.test new file mode 100644 index 00000000000..6b16f0fe3aa --- /dev/null +++ b/llvm/test/tools/llvm-readobj/COFF/cxx-cli-aux.test @@ -0,0 +1,40 @@ +Ensure that we can read the COFF auxiliary symbols 'section definition' and +'CLR token definition' as used in C++/CLI object files. Auxiliary section +definitions usually only follow a symbol with static storage class, but +non-const appdomain globals (external ABS) also get one. + +RUN: llvm-readobj --symbols %p/Inputs/cxx-cli-aux.obj.coff-i386 | FileCheck %s + +CHECK: Symbols [ +CHECK: Symbol { +CHECK: Name: ?PerAppDomain@@$$Q3HA +CHECK-NEXT: Value: 4 +CHECK-NEXT: Section: IMAGE_SYM_ABSOLUTE (-1) +CHECK-NEXT: BaseType: Null (0x0) +CHECK-NEXT: ComplexType: Null (0x0) +CHECK-NEXT: StorageClass: External (0x2) +CHECK-NEXT: AuxSymbolCount: 1 +CHECK-NEXT: AuxSectionDef { +CHECK-NEXT: Length: 0 +CHECK-NEXT: RelocationCount: 0 +CHECK-NEXT: LineNumberCount: 0 +CHECK-NEXT: Checksum: 0x0 +CHECK-NEXT: Number: 0 +CHECK-NEXT: Selection: NoDuplicates (0x1) +CHECK-NEXT: } +CHECK-NEXT: } + +CHECK: Symbol { +CHECK: Name: 04000001 +CHECK-NEXT: Value: 4 +CHECK-NEXT: Section: IMAGE_SYM_ABSOLUTE (-1) +CHECK-NEXT: BaseType: Null (0x0) +CHECK-NEXT: ComplexType: Null (0x0) +CHECK-NEXT: StorageClass: CLRToken (0x6B) +CHECK-NEXT: AuxSymbolCount: 1 +CHECK-NEXT: AuxCLRToken { +CHECK-NEXT: AuxType: 1 +CHECK-NEXT: Reserved: 0 +CHECK-NEXT: SymbolTableIndex: ?PerAppDomain@@$$Q3HA (19) +CHECK-NEXT: } +CHECK-NEXT: } diff --git a/llvm/test/tools/llvm-readobj/COFF/debug-directory.test b/llvm/test/tools/llvm-readobj/COFF/debug-directory.test new file mode 100644 index 00000000000..f67eb70d820 --- /dev/null +++ b/llvm/test/tools/llvm-readobj/COFF/debug-directory.test @@ -0,0 +1,34 @@ +RUN: llvm-readobj --coff-debug-directory %p/Inputs/has_pdb.exe | FileCheck %s + +CHECK: DebugDirectory [ +CHECK: DebugEntry { +CHECK: Characteristics: 0x0 +CHECK: TimeDateStamp: 2016-06-01 22:53:16 (0x574F675C) +CHECK: MajorVersion: 0x0 +CHECK: MinorVersion: 0x0 +CHECK: Type: CodeView (0x2) +CHECK: SizeOfData: 0x36 +CHECK: AddressOfRawData: 0x5B068 +CHECK: PointerToRawData: 0x5A268 +CHECK: PDBInfo { +CHECK: PDBSignature: 0x53445352 +CHECK: PDBGUID: (96 83 40 42 81 07 9D 40 90 1B 4A 3C 0D 4F 56 32) +CHECK: PDBAge: 3 +CHECK: PDBFileName: D:\src\llvm\build\has_pdb.pdb +CHECK: } +CHECK: } +CHECK: DebugEntry { +CHECK: Characteristics: 0x0 +CHECK: TimeDateStamp: 2016-06-01 22:53:16 (0x574F675C) +CHECK: MajorVersion: 0x0 +CHECK: MinorVersion: 0x0 +CHECK: Type: VCFeature (0xC) +CHECK: SizeOfData: 0x14 +CHECK: AddressOfRawData: 0x5B0A0 +CHECK: PointerToRawData: 0x5A2A0 +CHECK: RawData ( +CHECK: 0000: 00000000 C1000000 C1000000 00000000 |................| +CHECK: 0010: C0000000 |....| +CHECK: ) +CHECK: } +CHECK: ] diff --git a/llvm/test/tools/llvm-readobj/COFF/directives.test b/llvm/test/tools/llvm-readobj/COFF/directives.test new file mode 100644 index 00000000000..a932583b4e0 --- /dev/null +++ b/llvm/test/tools/llvm-readobj/COFF/directives.test @@ -0,0 +1,2 @@ +RUN: llvm-readobj --coff-directives %p/Inputs/directives.obj.coff-x86_64 | FileCheck %s +CHECK: Directive(s): /DEFAULTLIB:"LIBCMT" /DEFAULTLIB:"OLDNAMES" diff --git a/llvm/test/tools/llvm-readobj/COFF/exports-implib.test b/llvm/test/tools/llvm-readobj/COFF/exports-implib.test new file mode 100644 index 00000000000..75d0809ecbb --- /dev/null +++ b/llvm/test/tools/llvm-readobj/COFF/exports-implib.test @@ -0,0 +1,26 @@ +RUN: llvm-readobj --coff-exports %p/Inputs/library.lib | FileCheck %s + +CHECK: File: library.dll +CHECK: Format: COFF-import-file +CHECK: Type: const +CHECK: Name type: undecorate +CHECK: Symbol: __imp__constant + +CHECK: File: library.dll +CHECK: Format: COFF-import-file +CHECK: Type: data +CHECK: Name type: noprefix +CHECK: Symbol: __imp__data + +CHECK: File: library.dll +CHECK: Format: COFF-import-file +CHECK: Type: code +CHECK: Name type: name +CHECK: Symbol: __imp__function + +CHECK: File: library.dll +CHECK: Format: COFF-import-file +CHECK: Type: code +CHECK: Name type: ordinal +CHECK: Symbol: __imp__ordinal + diff --git a/llvm/test/tools/llvm-readobj/COFF/exports.test b/llvm/test/tools/llvm-readobj/COFF/exports.test new file mode 100644 index 00000000000..c0c977d9d4b --- /dev/null +++ b/llvm/test/tools/llvm-readobj/COFF/exports.test @@ -0,0 +1,11 @@ +RUN: llvm-readobj --coff-exports %p/Inputs/export-x86.dll | FileCheck %s -check-prefix CHECK -check-prefix CHECK-X86 +RUN: llvm-readobj --coff-exports %p/Inputs/export-x64.dll | FileCheck %s -check-prefix CHECK -check-prefix CHECK-X64 +RUN: llvm-readobj --coff-exports %p/Inputs/export-arm.dll | FileCheck %s -check-prefix CHECK -check-prefix CHECK-ARM + +CHECK: Export { +CHECK: Ordinal: 1 +CHECK: Name: function +CHECK-X86: RVA: 0x1000 +CHECK-X64: RVA: 0x1000 +CHECK-ARM: RVA: 0x1001 +CHECK: } diff --git a/llvm/test/tools/llvm-readobj/COFF/file-headers.test b/llvm/test/tools/llvm-readobj/COFF/file-headers.test new file mode 100644 index 00000000000..77efe0146be --- /dev/null +++ b/llvm/test/tools/llvm-readobj/COFF/file-headers.test @@ -0,0 +1,321 @@ +# RUN: yaml2obj %s --docnum=1 -o %t.arm +# RUN: llvm-readobj -h %t.arm \ +# RUN: | FileCheck %s --strict-whitespace --match-full-lines -DFILE=%t.arm --check-prefix ARM + +# ARM:File: [[FILE]] +# ARM-NEXT:Format: COFF-ARM +# ARM-NEXT:Arch: thumb +# ARM-NEXT:AddressSize: 32bit +# ARM-NEXT:ImageFileHeader { +# ARM-NEXT: Machine: IMAGE_FILE_MACHINE_ARMNT (0x1C4) +# ARM-NEXT: SectionCount: 0 +# ARM-NEXT: TimeDateStamp: 1970-01-01 00:00:00 (0x0) +# ARM-NEXT: PointerToSymbolTable: 0x0 +# ARM-NEXT: SymbolCount: 0 +# ARM-NEXT: OptionalHeaderSize: 0 +# ARM-NEXT: Characteristics [ (0x0) +# ARM-NEXT: ] +# ARM-NEXT:} +# ARM-NOT:{{.}} + +--- !COFF +header: + Machine: IMAGE_FILE_MACHINE_ARMNT + Characteristics: [ ] +sections: +symbols: + +# RUN: yaml2obj %s --docnum=2 -o %t.arm64 +# RUN: llvm-readobj -h %t.arm64 \ +# RUN: | FileCheck %s --strict-whitespace --match-full-lines -DFILE=%t.arm64 --check-prefix ARM64 + +# ARM64:File: [[FILE]] +# ARM64-NEXT:Format: COFF-ARM64 +# ARM64-NEXT:Arch: aarch64 +# ARM64-NEXT:AddressSize: 64bit +# ARM64-NEXT:ImageFileHeader { +# ARM64-NEXT: Machine: IMAGE_FILE_MACHINE_ARM64 (0xAA64) +# ARM64-NEXT: SectionCount: 0 +# ARM64-NEXT: TimeDateStamp: 1970-01-01 00:00:00 (0x0) +# ARM64-NEXT: PointerToSymbolTable: 0x0 +# ARM64-NEXT: SymbolCount: 0 +# ARM64-NEXT: OptionalHeaderSize: 0 +# ARM64-NEXT: Characteristics [ (0x0) +# ARM64-NEXT: ] +# ARM64-NEXT:} +# ARM64-NOT:{{.}} + +--- !COFF +header: + Machine: IMAGE_FILE_MACHINE_ARM64 + Characteristics: [ ] +sections: +symbols: + +# RUN: yaml2obj %s --docnum=3 -o %t.i386 +# RUN: llvm-readobj -h %t.i386 \ +# RUN: | FileCheck %s --strict-whitespace --match-full-lines -DFILE=%t.i386 --check-prefix I386 + +# I386:File: [[FILE]] +# I386-NEXT:Format: COFF-i386 +# I386-NEXT:Arch: i386 +# I386-NEXT:AddressSize: 32bit +# I386-NEXT:ImageFileHeader { +# I386-NEXT: Machine: IMAGE_FILE_MACHINE_I386 (0x14C) +# I386-NEXT: SectionCount: 0 +# I386-NEXT: TimeDateStamp: 1970-01-01 00:00:00 (0x0) +# I386-NEXT: PointerToSymbolTable: 0x0 +# I386-NEXT: SymbolCount: 0 +# I386-NEXT: OptionalHeaderSize: 0 +# I386-NEXT: Characteristics [ (0x0) +# I386-NEXT: ] +# I386-NEXT:} +# I386-NOT:{{.}} + +--- !COFF +header: + Machine: IMAGE_FILE_MACHINE_I386 + Characteristics: [ ] +sections: +symbols: + +# RUN: yaml2obj %s --docnum=4 -o %t.x86-64 +# RUN: llvm-readobj -h %t.x86-64 \ +# RUN: | FileCheck %s --strict-whitespace --match-full-lines -DFILE=%t.x86-64 --check-prefix X86-64 + +# X86-64:File: [[FILE]] +# X86-64-NEXT:Format: COFF-x86-64 +# X86-64-NEXT:Arch: x86_64 +# X86-64-NEXT:AddressSize: 64bit +# X86-64-NEXT:ImageFileHeader { +# X86-64-NEXT: Machine: IMAGE_FILE_MACHINE_AMD64 (0x8664) +# X86-64-NEXT: SectionCount: 0 +# X86-64-NEXT: TimeDateStamp: 1970-01-01 00:00:00 (0x0) +# X86-64-NEXT: PointerToSymbolTable: 0x0 +# X86-64-NEXT: SymbolCount: 0 +# X86-64-NEXT: OptionalHeaderSize: 0 +# X86-64-NEXT: Characteristics [ (0x0) +# X86-64-NEXT: ] +# X86-64-NEXT:} +# X86-64-NOT:{{.}} + +--- !COFF +header: + Machine: IMAGE_FILE_MACHINE_AMD64 + Characteristics: [ ] +sections: +symbols: + +# RUN: yaml2obj %s --docnum=5 -o %t.i386 +# RUN: llvm-readobj -h %t.i386 \ +# RUN: | FileCheck %s --strict-whitespace --match-full-lines -DFILE=%t.i386 --check-prefix I386-CUSTOM-HEADER + +# I386-CUSTOM-HEADER:File: [[FILE]] +# I386-CUSTOM-HEADER-NEXT:Format: COFF-i386 +# I386-CUSTOM-HEADER-NEXT:Arch: i386 +# I386-CUSTOM-HEADER-NEXT:AddressSize: 32bit +# I386-CUSTOM-HEADER-NEXT:ImageFileHeader { +# I386-CUSTOM-HEADER-NEXT: Machine: IMAGE_FILE_MACHINE_I386 (0x14C) +# I386-CUSTOM-HEADER-NEXT: SectionCount: 0 +# I386-CUSTOM-HEADER-NEXT: TimeDateStamp: 1970-01-01 00:00:00 (0x0) +# I386-CUSTOM-HEADER-NEXT: PointerToSymbolTable: 0x0 +# I386-CUSTOM-HEADER-NEXT: SymbolCount: 0 +# I386-CUSTOM-HEADER-NEXT: OptionalHeaderSize: 224 +# I386-CUSTOM-HEADER-NEXT: Characteristics [ (0x102) +# I386-CUSTOM-HEADER-NEXT: IMAGE_FILE_32BIT_MACHINE (0x100) +# I386-CUSTOM-HEADER-NEXT: IMAGE_FILE_EXECUTABLE_IMAGE (0x2) +# I386-CUSTOM-HEADER-NEXT: ] +# I386-CUSTOM-HEADER-NEXT:} +# I386-CUSTOM-HEADER-NEXT:ImageOptionalHeader { +# I386-CUSTOM-HEADER-NEXT: Magic: 0x10B +# I386-CUSTOM-HEADER-NEXT: MajorLinkerVersion: 0 +# I386-CUSTOM-HEADER-NEXT: MinorLinkerVersion: 0 +# I386-CUSTOM-HEADER-NEXT: SizeOfCode: 0 +# I386-CUSTOM-HEADER-NEXT: SizeOfInitializedData: 0 +# I386-CUSTOM-HEADER-NEXT: SizeOfUninitializedData: 0 +# I386-CUSTOM-HEADER-NEXT: AddressOfEntryPoint: 0x1000 +# I386-CUSTOM-HEADER-NEXT: BaseOfCode: 0x0 +# I386-CUSTOM-HEADER-NEXT: BaseOfData: 0x0 +# I386-CUSTOM-HEADER-NEXT: ImageBase: 0x400000 +# I386-CUSTOM-HEADER-NEXT: SectionAlignment: 4096 +# I386-CUSTOM-HEADER-NEXT: FileAlignment: 512 +# I386-CUSTOM-HEADER-NEXT: MajorOperatingSystemVersion: 6 +# I386-CUSTOM-HEADER-NEXT: MinorOperatingSystemVersion: 0 +# I386-CUSTOM-HEADER-NEXT: MajorImageVersion: 0 +# I386-CUSTOM-HEADER-NEXT: MinorImageVersion: 0 +# I386-CUSTOM-HEADER-NEXT: MajorSubsystemVersion: 6 +# I386-CUSTOM-HEADER-NEXT: MinorSubsystemVersion: 0 +# I386-CUSTOM-HEADER-NEXT: SizeOfImage: 4096 +# I386-CUSTOM-HEADER-NEXT: SizeOfHeaders: 512 +# I386-CUSTOM-HEADER-NEXT: Subsystem: IMAGE_SUBSYSTEM_WINDOWS_CUI (0x3) +# I386-CUSTOM-HEADER-NEXT: Characteristics [ (0x8140) +# I386-CUSTOM-HEADER-NEXT: IMAGE_DLL_CHARACTERISTICS_DYNAMIC_BASE (0x40) +# I386-CUSTOM-HEADER-NEXT: IMAGE_DLL_CHARACTERISTICS_NX_COMPAT (0x100) +# I386-CUSTOM-HEADER-NEXT: IMAGE_DLL_CHARACTERISTICS_TERMINAL_SERVER_AWARE (0x8000) +# I386-CUSTOM-HEADER-NEXT: ] +# I386-CUSTOM-HEADER-NEXT: SizeOfStackReserve: 1048576 +# I386-CUSTOM-HEADER-NEXT: SizeOfStackCommit: 4096 +# I386-CUSTOM-HEADER-NEXT: SizeOfHeapReserve: 1048576 +# I386-CUSTOM-HEADER-NEXT: SizeOfHeapCommit: 4096 +# I386-CUSTOM-HEADER-NEXT: NumberOfRvaAndSize: 16 +# I386-CUSTOM-HEADER-NEXT: DataDirectory { +# I386-CUSTOM-HEADER-NEXT: ExportTableRVA: 0x0 +# I386-CUSTOM-HEADER-NEXT: ExportTableSize: 0x0 +# I386-CUSTOM-HEADER-NEXT: ImportTableRVA: 0x0 +# I386-CUSTOM-HEADER-NEXT: ImportTableSize: 0x0 +# I386-CUSTOM-HEADER-NEXT: ResourceTableRVA: 0x0 +# I386-CUSTOM-HEADER-NEXT: ResourceTableSize: 0x0 +# I386-CUSTOM-HEADER-NEXT: ExceptionTableRVA: 0x0 +# I386-CUSTOM-HEADER-NEXT: ExceptionTableSize: 0x0 +# I386-CUSTOM-HEADER-NEXT: CertificateTableRVA: 0x0 +# I386-CUSTOM-HEADER-NEXT: CertificateTableSize: 0x0 +# I386-CUSTOM-HEADER-NEXT: BaseRelocationTableRVA: 0x0 +# I386-CUSTOM-HEADER-NEXT: BaseRelocationTableSize: 0x0 +# I386-CUSTOM-HEADER-NEXT: DebugRVA: 0x0 +# I386-CUSTOM-HEADER-NEXT: DebugSize: 0x0 +# I386-CUSTOM-HEADER-NEXT: ArchitectureRVA: 0x0 +# I386-CUSTOM-HEADER-NEXT: ArchitectureSize: 0x0 +# I386-CUSTOM-HEADER-NEXT: GlobalPtrRVA: 0x0 +# I386-CUSTOM-HEADER-NEXT: GlobalPtrSize: 0x0 +# I386-CUSTOM-HEADER-NEXT: TLSTableRVA: 0x0 +# I386-CUSTOM-HEADER-NEXT: TLSTableSize: 0x0 +# I386-CUSTOM-HEADER-NEXT: LoadConfigTableRVA: 0x0 +# I386-CUSTOM-HEADER-NEXT: LoadConfigTableSize: 0x0 +# I386-CUSTOM-HEADER-NEXT: BoundImportRVA: 0x0 +# I386-CUSTOM-HEADER-NEXT: BoundImportSize: 0x0 +# I386-CUSTOM-HEADER-NEXT: IATRVA: 0x0 +# I386-CUSTOM-HEADER-NEXT: IATSize: 0x0 +# I386-CUSTOM-HEADER-NEXT: DelayImportDescriptorRVA: 0x0 +# I386-CUSTOM-HEADER-NEXT: DelayImportDescriptorSize: 0x0 +# I386-CUSTOM-HEADER-NEXT: CLRRuntimeHeaderRVA: 0x0 +# I386-CUSTOM-HEADER-NEXT: CLRRuntimeHeaderSize: 0x0 +# I386-CUSTOM-HEADER-NEXT: ReservedRVA: 0x0 +# I386-CUSTOM-HEADER-NEXT: ReservedSize: 0x0 +# I386-CUSTOM-HEADER-NEXT: } +# I386-CUSTOM-HEADER-NEXT:} +# I386-CUSTOM-HEADER-NEXT:DOSHeader { +# I386-CUSTOM-HEADER-NEXT: Magic: MZ +# I386-CUSTOM-HEADER-NEXT: UsedBytesInTheLastPage: 0 +# I386-CUSTOM-HEADER-NEXT: FileSizeInPages: 0 +# I386-CUSTOM-HEADER-NEXT: NumberOfRelocationItems: 0 +# I386-CUSTOM-HEADER-NEXT: HeaderSizeInParagraphs: 0 +# I386-CUSTOM-HEADER-NEXT: MinimumExtraParagraphs: 0 +# I386-CUSTOM-HEADER-NEXT: MaximumExtraParagraphs: 0 +# I386-CUSTOM-HEADER-NEXT: InitialRelativeSS: 0 +# I386-CUSTOM-HEADER-NEXT: InitialSP: 0 +# I386-CUSTOM-HEADER-NEXT: Checksum: 0 +# I386-CUSTOM-HEADER-NEXT: InitialIP: 0 +# I386-CUSTOM-HEADER-NEXT: InitialRelativeCS: 0 +# I386-CUSTOM-HEADER-NEXT: AddressOfRelocationTable: 64 +# I386-CUSTOM-HEADER-NEXT: OverlayNumber: 0 +# I386-CUSTOM-HEADER-NEXT: OEMid: 0 +# I386-CUSTOM-HEADER-NEXT: OEMinfo: 0 +# I386-CUSTOM-HEADER-NEXT: AddressOfNewExeHeader: 128 +# I386-CUSTOM-HEADER-NEXT:} +# I386-CUSTOM-HEADER-NOT:{{.}} + +--- !COFF +OptionalHeader: + AddressOfEntryPoint: 4096 + ImageBase: 4194304 + SectionAlignment: 4096 + FileAlignment: 512 + MajorOperatingSystemVersion: 6 + MinorOperatingSystemVersion: 0 + MajorImageVersion: 0 + MinorImageVersion: 0 + MajorSubsystemVersion: 6 + MinorSubsystemVersion: 0 + Subsystem: IMAGE_SUBSYSTEM_WINDOWS_CUI + DLLCharacteristics: [ IMAGE_DLL_CHARACTERISTICS_DYNAMIC_BASE, IMAGE_DLL_CHARACTERISTICS_NX_COMPAT, IMAGE_DLL_CHARACTERISTICS_TERMINAL_SERVER_AWARE ] + SizeOfStackReserve: 1048576 + SizeOfStackCommit: 4096 + SizeOfHeapReserve: 1048576 + SizeOfHeapCommit: 4096 + ExportTable: + RelativeVirtualAddress: 0 + Size: 0 + ImportTable: + RelativeVirtualAddress: 0 + Size: 0 + ResourceTable: + RelativeVirtualAddress: 0 + Size: 0 + ExceptionTable: + RelativeVirtualAddress: 0 + Size: 0 + CertificateTable: + RelativeVirtualAddress: 0 + Size: 0 + BaseRelocationTable: + RelativeVirtualAddress: 0 + Size: 0 + Debug: + RelativeVirtualAddress: 0 + Size: 0 + Architecture: + RelativeVirtualAddress: 0 + Size: 0 + GlobalPtr: + RelativeVirtualAddress: 0 + Size: 0 + TlsTable: + RelativeVirtualAddress: 0 + Size: 0 + LoadConfigTable: + RelativeVirtualAddress: 0 + Size: 0 + BoundImport: + RelativeVirtualAddress: 0 + Size: 0 + IAT: + RelativeVirtualAddress: 0 + Size: 0 + DelayImportDescriptor: + RelativeVirtualAddress: 0 + Size: 0 + ClrRuntimeHeader: + RelativeVirtualAddress: 0 + Size: 0 +header: + Machine: IMAGE_FILE_MACHINE_I386 + Characteristics: [ IMAGE_FILE_EXECUTABLE_IMAGE, IMAGE_FILE_32BIT_MACHINE ] +sections: +symbols: [] +... + +# RUN: yaml2obj %s --docnum=6 -o %t.unknown +# RUN: llvm-readobj -h %t.unknown \ +# RUN: | FileCheck %s --strict-whitespace --match-full-lines --check-prefix UNKNOWN + +# UNKNOWN:Format: COFF-<unknown arch> +# UNKNOWN-NEXT:Arch: unknown +# UNKNOWN-NEXT:AddressSize: 32bit +# UNKNOWN-NEXT:ImageFileHeader { +# UNKNOWN-NEXT: Machine: IMAGE_FILE_MACHINE_UNKNOWN (0x0) +# UNKNOWN-NEXT: SectionCount: 0 +# UNKNOWN-NEXT: TimeDateStamp: 1970-01-01 00:00:00 (0x0) +# UNKNOWN-NEXT: PointerToSymbolTable: 0x0 +# UNKNOWN-NEXT: SymbolCount: 0 +# UNKNOWN-NEXT: OptionalHeaderSize: 0 +# UNKNOWN-NEXT: Characteristics [ (0x0) +# UNKNOWN-NEXT: ] +# UNKNOWN-NEXT:} +# UNKNOWN-NOT:{{.}} + +--- !COFF +header: + Machine: IMAGE_FILE_MACHINE_UNKNOWN + Characteristics: [ ] +sections: +symbols: + +# RUN: llvm-readobj -h %p/Inputs/magic.coff-importlib \ +# RUN: | FileCheck %s --strict-whitespace --match-full-lines --check-prefix IMPORTLIB + +# IMPORTLIB:Format: COFF-import-file +# IMPORTLIB-NEXT:Type: code +# IMPORTLIB-NEXT:Name type: noprefix +# IMPORTLIB-NEXT:Symbol: __imp__func +# IMPORTLIB-NEXT:Symbol: _func +# IMPORTLIB-NOT:{{.}} diff --git a/llvm/test/tools/llvm-readobj/COFF/file-sections-reading.test b/llvm/test/tools/llvm-readobj/COFF/file-sections-reading.test new file mode 100644 index 00000000000..a60f03349f7 --- /dev/null +++ b/llvm/test/tools/llvm-readobj/COFF/file-sections-reading.test @@ -0,0 +1,39 @@ +# RUN: yaml2obj %s | llvm-readobj --symbols - | FileCheck %s + +# CHECK: Symbols [ +# CHECK: Symbol { +# CHECK: Name: .file +# CHECK: Value: 0 +# CHECK: Section: IMAGE_SYM_DEBUG (-2) +# CHECK: BaseType: Null (0x0) +# CHECK: ComplexType: Null (0x0) +# CHECK: StorageClass: File (0x67) +# CHECK: AuxSymbolCount: 3 +# CHECK: AuxFileRecord { +# CHECK: FileName: first-section-has-eighteen-characters.asm +# CHECK: } +# CHECK-NOT: AuxFileRecord { +# CHECK: } +# CHECK: ] + +!COFF +header: !Header + Machine: IMAGE_FILE_MACHINE_I386 # (0x14c) + Characteristics: [ IMAGE_FILE_DEBUG_STRIPPED ] +sections: +symbols: + - !Symbol + Name: .file + Value: 0 + SectionNumber: -2 + SimpleType: IMAGE_SYM_TYPE_NULL + ComplexType: IMAGE_SYM_DTYPE_NULL + StorageClass: IMAGE_SYM_CLASS_FILE + File: first-section-has-eighteen-characters.asm + - !Symbol + Name: '@comp.id' + Value: 13485607 + SectionNumber: -1 + SimpleType: IMAGE_SYM_TYPE_NULL + ComplexType: IMAGE_SYM_DTYPE_NULL + StorageClass: IMAGE_SYM_CLASS_STATIC diff --git a/llvm/test/tools/llvm-readobj/COFF/imports.test b/llvm/test/tools/llvm-readobj/COFF/imports.test new file mode 100644 index 00000000000..58512f42adc --- /dev/null +++ b/llvm/test/tools/llvm-readobj/COFF/imports.test @@ -0,0 +1,88 @@ +RUN: llvm-readobj --coff-imports %p/Inputs/imports.exe.coff-i386 | FileCheck -check-prefix=X86 %s +RUN: llvm-readobj --coff-imports %p/Inputs/imports.exe.coff-x86-64 | FileCheck -check-prefix=X64 %s + +X86: Import { +X86-NEXT: Name: KERNEL32.dll +X86-NEXT: ImportLookupTableRVA: 0x2108 +X86-NEXT: ImportAddressTableRVA: 0x2000 +X86-NEXT: Symbol: ExitProcess (337) +X86-NEXT: Symbol: GetProcAddress (669) +X86-NEXT: Symbol: FreeLibrary (414) +X86-NEXT: Symbol: GetLastError (592) +X86-NEXT: Symbol: RaiseException (1087) +X86-NEXT: Symbol: LoadLibraryExA (934) +X86-NEXT: } +X86-NEXT: Import { +X86-NEXT: Name: USER32.dll +X86-NEXT: ImportLookupTableRVA: 0x2124 +X86-NEXT: ImportAddressTableRVA: 0x201C +X86-NEXT: Symbol: MessageBoxA (582) +X86-NEXT: } +X86-NEXT: Import { +X86-NEXT: Name: mydll.dll +X86-NEXT: ImportLookupTableRVA: 0x212C +X86-NEXT: ImportAddressTableRVA: 0x2024 +X86-NEXT: Symbol: Func1 (0) +X86-NEXT: Symbol: Func2 (1) +X86-NEXT: Symbol: (3) +X86-NEXT: } +X86-NEXT: DelayImport { +X86-NEXT: Name: lazyload.dll +X86-NEXT: Attributes: 0x1 +X86-NEXT: ModuleHandle: 0x301C +X86-NEXT: ImportAddressTable: 0x3010 +X86-NEXT: ImportNameTable: 0x2090 +X86-NEXT: BoundDelayImportTable: 0x20AC +X86-NEXT: UnloadDelayImportTable: 0x0 +X86-NEXT: Import { +X86-NEXT: Symbol: Func5 (0) +X86-NEXT: Address: 0x401073 +X86-NEXT: } +X86-NEXT: Import { +X86-NEXT: Symbol: Func4 (0) +X86-NEXT: Address: 0x401052 +X86-NEXT: } +X86-NEXT: } + +X64: Import { +X64-NEXT: Name: KERNEL32.dll +X64-NEXT: ImportLookupTableRVA: 0x2170 +X64-NEXT: ImportAddressTableRVA: 0x2000 +X64-NEXT: Symbol: ExitProcess (343) +X64-NEXT: Symbol: GetProcAddress (676) +X64-NEXT: Symbol: FreeLibrary (420) +X64-NEXT: Symbol: GetLastError (598) +X64-NEXT: Symbol: RaiseException (1091) +X64-NEXT: Symbol: LoadLibraryExA (937) +X64-NEXT: } +X64-NEXT: Import { +X64-NEXT: Name: USER32.dll +X64-NEXT: ImportLookupTableRVA: 0x21A8 +X64-NEXT: ImportAddressTableRVA: 0x2038 +X64-NEXT: Symbol: MessageBoxA (586) +X64-NEXT: } +X64-NEXT: Import { +X64-NEXT: Name: mydll.dll +X64-NEXT: ImportLookupTableRVA: 0x21B8 +X64-NEXT: ImportAddressTableRVA: 0x2048 +X64-NEXT: Symbol: Func1 (0) +X64-NEXT: Symbol: Func2 (1) +X64-NEXT: Symbol: (3) +X64-NEXT: } +X64-NEXT: DelayImport { +X64-NEXT: Name: lazyload.dll +X64-NEXT: Attributes: 0x1 +X64-NEXT: ModuleHandle: 0x3028 +X64-NEXT: ImportAddressTable: 0x3010 +X64-NEXT: ImportNameTable: 0x20E0 +X64-NEXT: BoundDelayImportTable: 0x2108 +X64-NEXT: UnloadDelayImportTable: 0x0 +X64-NEXT: Import { +X64-NEXT: Symbol: Func5 (0) +X64-NEXT: Address: 0x1400010F1 +X64-NEXT: } +X64-NEXT: Import { +X64-NEXT: Symbol: Func4 (0) +X64-NEXT: Address: 0x140001066 +X64-NEXT: } +X64-NEXT: } diff --git a/llvm/test/tools/llvm-readobj/COFF/load-config.test b/llvm/test/tools/llvm-readobj/COFF/load-config.test new file mode 100644 index 00000000000..b65c83b8ace --- /dev/null +++ b/llvm/test/tools/llvm-readobj/COFF/load-config.test @@ -0,0 +1,98 @@ +RUN: llvm-readobj --coff-load-config %S/Inputs/coff-load-config-x86.dll | FileCheck %s --check-prefix=X86 +RUN: llvm-readobj --coff-load-config %S/Inputs/coff-load-config-x64.dll | FileCheck %s --check-prefix=X64 + +RUN: llvm-readobj --coff-load-config %S/Inputs/coff-load-config-data-end.exe | FileCheck %s --check-prefix=DATAEND + +RUN: llvm-readobj --coff-load-config %S/Inputs/coff-no-load-config.exe | FileCheck %s --check-prefix=NOCONFIG + +X86: LoadConfig [ +X86: Size: 0x5C +X86: TimeDateStamp: 1970-01-01 00:00:00 (0x0) +X86: MajorVersion: 0x0 +X86: MinorVersion: 0x0 +X86: GlobalFlagsClear: 0x0 +X86: GlobalFlagsSet: 0x0 +X86: CriticalSectionDefaultTimeout: 0x0 +X86: DeCommitFreeBlockThreshold: 0x0 +X86: DeCommitTotalFreeThreshold: 0x0 +X86: LockPrefixTable: 0x0 +X86: MaximumAllocationSize: 0x0 +X86: VirtualMemoryThreshold: 0x0 +X86: ProcessHeapFlags: 0x0 +X86: ProcessAffinityMask: 0x0 +X86: CSDVersion: 0x0 +X86: DependentLoadFlags: 0x0 +X86: EditList: 0x0 +X86: SecurityCookie: 0x10003004 +X86: SEHandlerTable: 0x100021C0 +X86: SEHandlerCount: 2 +X86: GuardCFCheckFunction: 0x1000207C +X86: GuardCFCheckDispatch: 0x0 +X86: GuardCFFunctionTable: 0x100020A4 +X86: GuardCFFunctionCount: 11 +X86: GuardFlags: 0x13500 +X86: ] +X86: SEHTable [ +X86: 0x10001BE0 +X86: 0x10001E30 +X86: ] +X86: GuardFidTable [ +X86: 0x10001000 +X86: 0x10001040 +X86: 0x10001060 +X86: 0x10001100 +X86: 0x10001120 +X86: 0x10001150 +X86: 0x10001460 +X86: 0x100019B0 +X86: 0x10001B40 +X86: 0x10001BE0 +X86: 0x10001DC0 +X86: ] + +X64: LoadConfig [ +X64: Size: 0x94 +X64: TimeDateStamp: 1970-01-01 00:00:00 (0x0) +X64: MajorVersion: 0x0 +X64: MinorVersion: 0x0 +X64: GlobalFlagsClear: 0x0 +X64: GlobalFlagsSet: 0x0 +X64: CriticalSectionDefaultTimeout: 0x0 +X64: DeCommitFreeBlockThreshold: 0x0 +X64: DeCommitTotalFreeThreshold: 0x0 +X64: LockPrefixTable: 0x0 +X64: MaximumAllocationSize: 0x0 +X64: VirtualMemoryThreshold: 0x0 +X64: ProcessHeapFlags: 0x0 +X64: ProcessAffinityMask: 0x0 +X64: CSDVersion: 0x0 +X64: DependentLoadFlags: 0x0 +X64: EditList: 0x0 +X64: SecurityCookie: 0x180003018 +X64: SEHandlerTable: 0 +X64: SEHandlerCount: 0 +X64: GuardCFCheckFunction: 0x180002100 +X64: GuardCFCheckDispatch: 0x180002108 +X64: GuardCFFunctionTable: 0x180002158 +X64: GuardCFFunctionCount: 9 +X64: GuardFlags: 0x13500 +X64: ] +X64-NOT: SEHTable +X64: GuardFidTable [ +X64: 0x180001000 +X64: 0x180001050 +X64: 0x180001070 +X64: 0x1800010E0 +X64: 0x180001110 +X64: 0x180001460 +X64: 0x180001970 +X64: 0x180001B50 +X64: 0x180001D90 +X64: ] + +DATAEND: SEHTable [ +DATAEND-NEXT: 0x402006 +DATAEND-NEXT: ] + +NOCONFIG: Format: COFF-x86-64 +NOCONFIG-NOT: LoadConfig diff --git a/llvm/test/tools/llvm-readobj/COFF/needed-libs.test b/llvm/test/tools/llvm-readobj/COFF/needed-libs.test new file mode 100644 index 00000000000..7009f9c1a2e --- /dev/null +++ b/llvm/test/tools/llvm-readobj/COFF/needed-libs.test @@ -0,0 +1,5 @@ +RUN: llvm-readobj --needed-libs %p/Inputs/needed-libs.obj.coff-am64 | FileCheck %s + +CHECK: NeededLibraries [ +CHECK-NEXT: KERNEL32.dll +CHECK-NEXT: ] diff --git a/llvm/test/tools/llvm-readobj/COFF/non-null-terminated-file.test b/llvm/test/tools/llvm-readobj/COFF/non-null-terminated-file.test new file mode 100644 index 00000000000..960f8f3f79e --- /dev/null +++ b/llvm/test/tools/llvm-readobj/COFF/non-null-terminated-file.test @@ -0,0 +1,41 @@ +# RUN: yaml2obj %s | llvm-readobj --symbols - | FileCheck %s + +# CHECK: Symbols [ +# CHECK: Symbol { +# CHECK: Name: .file +# CHECK: Value: 0 +# CHECK: StorageClass: File +# CHECK: AuxSymbolCount: 1 +# CHECK: AuxFileRecord { +# CHECK: FileName: eighteen-chars.obj{{$}} +# CHECK: } +# CHECK: } +# CHECK: Symbol { +# CHECK: Name: @comp.id +# CHECK: Value: 13485607 +# CHECK: StorageClass: Static +# CHECK: AuxSymbolCount: 0 +# CHECK: } +# CHECK: ] + +!COFF +header: !Header + Machine: IMAGE_FILE_MACHINE_I386 # (0x14c) + Characteristics: [ IMAGE_FILE_DEBUG_STRIPPED ] +sections: +symbols: + - !Symbol + Name: .file + Value: 0 + SectionNumber: -2 + SimpleType: IMAGE_SYM_TYPE_NULL + ComplexType: IMAGE_SYM_DTYPE_NULL + StorageClass: IMAGE_SYM_CLASS_FILE + File: eighteen-chars.obj + - !Symbol + Name: '@comp.id' + Value: 13485607 + SectionNumber: -1 + SimpleType: IMAGE_SYM_TYPE_NULL + ComplexType: IMAGE_SYM_DTYPE_NULL + StorageClass: IMAGE_SYM_CLASS_STATIC diff --git a/llvm/test/tools/llvm-readobj/COFF/peplus.test b/llvm/test/tools/llvm-readobj/COFF/peplus.test new file mode 100644 index 00000000000..ff21d91372b --- /dev/null +++ b/llvm/test/tools/llvm-readobj/COFF/peplus.test @@ -0,0 +1,84 @@ +RUN: llvm-readobj --file-headers %p/Inputs/nop.exe.coff-x86-64 | FileCheck %s + +CHECK: Format: COFF-x86-64 +CHECK: Arch: x86_64 +CHECK: AddressSize: 64bit +CHECK: ImageFileHeader { +CHECK: Machine: IMAGE_FILE_MACHINE_AMD64 (0x8664) +CHECK: SectionCount: 1 +CHECK: TimeDateStamp: 2014-01-26 03:43:56 (0x52E4847C) +CHECK: PointerToSymbolTable: 0x0 +CHECK: SymbolCount: 0 +CHECK: OptionalHeaderSize: 240 +CHECK: Characteristics [ (0x22) +CHECK: IMAGE_FILE_EXECUTABLE_IMAGE (0x2) +CHECK: IMAGE_FILE_LARGE_ADDRESS_AWARE (0x20) +CHECK: ] +CHECK: } +CHECK: ImageOptionalHeader { +CHECK: Magic: 0x20B +CHECK: MajorLinkerVersion: 11 +CHECK: MinorLinkerVersion: 0 +CHECK: SizeOfCode: 512 +CHECK: SizeOfInitializedData: 0 +CHECK: SizeOfUninitializedData: 0 +CHECK: AddressOfEntryPoint: 0x1000 +CHECK: BaseOfCode: 0x1000 +CHECK: ImageBase: 0x140000000 +CHECK: SectionAlignment: 4096 +CHECK: FileAlignment: 512 +CHECK: MajorOperatingSystemVersion: 6 +CHECK: MinorOperatingSystemVersion: 0 +CHECK: MajorImageVersion: 0 +CHECK: MinorImageVersion: 0 +CHECK: MajorSubsystemVersion: 6 +CHECK: MinorSubsystemVersion: 0 +CHECK: SizeOfImage: 8192 +CHECK: SizeOfHeaders: 512 +CHECK: Subsystem: IMAGE_SUBSYSTEM_WINDOWS_CUI (0x3) +CHECK: Characteristics [ (0x8160) +CHECK: IMAGE_DLL_CHARACTERISTICS_DYNAMIC_BASE (0x40) +CHECK: IMAGE_DLL_CHARACTERISTICS_HIGH_ENTROPY_VA (0x20) +CHECK: IMAGE_DLL_CHARACTERISTICS_NX_COMPAT (0x100) +CHECK: IMAGE_DLL_CHARACTERISTICS_TERMINAL_SERVER_AWARE (0x8000) +CHECK: ] +CHECK: SizeOfStackReserve: 1048576 +CHECK: SizeOfStackCommit: 4096 +CHECK: SizeOfHeapReserve: 1048576 +CHECK: SizeOfHeapCommit: 4096 +CHECK: NumberOfRvaAndSize: 16 +CHECK: DataDirectory { +CHECK: ExportTableRVA: 0x0 +CHECK: ExportTableSize: 0x0 +CHECK: ImportTableRVA: 0x0 +CHECK: ImportTableSize: 0x0 +CHECK: ResourceTableRVA: 0x0 +CHECK: ResourceTableSize: 0x0 +CHECK: ExceptionTableRVA: 0x0 +CHECK: ExceptionTableSize: 0x0 +CHECK: CertificateTableRVA: 0x0 +CHECK: CertificateTableSize: 0x0 +CHECK: BaseRelocationTableRVA: 0x0 +CHECK: BaseRelocationTableSize: 0x0 +CHECK: DebugRVA: 0x0 +CHECK: DebugSize: 0x0 +CHECK: ArchitectureRVA: 0x0 +CHECK: ArchitectureSize: 0x0 +CHECK: GlobalPtrRVA: 0x0 +CHECK: GlobalPtrSize: 0x0 +CHECK: TLSTableRVA: 0x0 +CHECK: TLSTableSize: 0x0 +CHECK: LoadConfigTableRVA: 0x0 +CHECK: LoadConfigTableSize: 0x0 +CHECK: BoundImportRVA: 0x0 +CHECK: BoundImportSize: 0x0 +CHECK: IATRVA: 0x0 +CHECK: IATSize: 0x0 +CHECK: DelayImportDescriptorRVA: 0x0 +CHECK: DelayImportDescriptorSize: 0x0 +CHECK: CLRRuntimeHeaderRVA: 0x0 +CHECK: CLRRuntimeHeaderSize: 0x0 +CHECK: ReservedRVA: 0x0 +CHECK: ReservedSize: 0x0 +CHECK: } +CHECK: } diff --git a/llvm/test/tools/llvm-readobj/COFF/reloc-types-coff-i386.test b/llvm/test/tools/llvm-readobj/COFF/reloc-types-coff-i386.test new file mode 100644 index 00000000000..466530c53ed --- /dev/null +++ b/llvm/test/tools/llvm-readobj/COFF/reloc-types-coff-i386.test @@ -0,0 +1,63 @@ +## Test that llvm-readobj/llvm-readelf shows proper relocation type +## names and values for coff-i386 target. + +# RUN: yaml2obj %s -o %t-coff-i386.o +# RUN: llvm-readobj -r --expand-relocs %t-coff-i386.o | FileCheck %s + +# CHECK: Type: IMAGE_REL_I386_ABSOLUTE (0) +# CHECK: Type: IMAGE_REL_I386_DIR16 (1) +# CHECK: Type: IMAGE_REL_I386_REL16 (2) +# CHECK: Type: IMAGE_REL_I386_DIR32 (6) +# CHECK: Type: IMAGE_REL_I386_DIR32NB (7) +# CHECK: Type: IMAGE_REL_I386_SEG12 (9) +# CHECK: Type: IMAGE_REL_I386_SECTION (10) +# CHECK: Type: IMAGE_REL_I386_SECREL (11) +# CHECK: Type: IMAGE_REL_I386_TOKEN (12) +# CHECK: Type: IMAGE_REL_I386_SECREL7 (13) +# CHECK: Type: IMAGE_REL_I386_REL32 (20) + +--- !COFF +header: + Machine: IMAGE_FILE_MACHINE_I386 + Characteristics: [ ] +sections: + - Name: .text + Characteristics: [ IMAGE_SCN_CNT_CODE, IMAGE_SCN_MEM_EXECUTE, IMAGE_SCN_MEM_READ ] + Alignment: 4 + SectionData: 00 + Relocations: + - VirtualAddress: 3 + Type: IMAGE_REL_I386_ABSOLUTE + - VirtualAddress: 10 + Type: IMAGE_REL_I386_DIR16 + - VirtualAddress: 17 + Type: IMAGE_REL_I386_REL16 + - VirtualAddress: 24 + Type: IMAGE_REL_I386_DIR32 + - VirtualAddress: 31 + Type: IMAGE_REL_I386_DIR32NB + - VirtualAddress: 38 + Type: IMAGE_REL_I386_SEG12 + - VirtualAddress: 45 + Type: IMAGE_REL_I386_SECTION + - VirtualAddress: 52 + Type: IMAGE_REL_I386_SECREL + - VirtualAddress: 59 + Type: IMAGE_REL_I386_TOKEN + - VirtualAddress: 66 + Type: IMAGE_REL_I386_SECREL7 + - VirtualAddress: 73 + Type: IMAGE_REL_I386_REL32 +symbols: + - Name: .text + Value: 0 + SectionNumber: 1 + SimpleType: IMAGE_SYM_TYPE_NULL + ComplexType: IMAGE_SYM_DTYPE_NULL + StorageClass: IMAGE_SYM_CLASS_STATIC + SectionDefinition: + Length: 77 + NumberOfRelocations: 11 + NumberOfLinenumbers: 0 + CheckSum: 0 + Number: 1 diff --git a/llvm/test/tools/llvm-readobj/COFF/reloc-types-coff-x64.test b/llvm/test/tools/llvm-readobj/COFF/reloc-types-coff-x64.test new file mode 100644 index 00000000000..b78cc037073 --- /dev/null +++ b/llvm/test/tools/llvm-readobj/COFF/reloc-types-coff-x64.test @@ -0,0 +1,81 @@ +## Test that llvm-readobj/llvm-readelf shows proper relocation type +## names and values for coff-x64 target. + +# RUN: yaml2obj %s -o %t-coff-x86_64.o +# RUN: llvm-readobj -r --expand-relocs %t-coff-x86_64.o | FileCheck %s + +# CHECK: Type: IMAGE_REL_AMD64_ABSOLUTE (0) +# CHECK: Type: IMAGE_REL_AMD64_ADDR64 (1) +# CHECK: Type: IMAGE_REL_AMD64_ADDR32 (2) +# CHECK: Type: IMAGE_REL_AMD64_ADDR32NB (3) +# CHECK: Type: IMAGE_REL_AMD64_REL32 (4) +# CHECK: Type: IMAGE_REL_AMD64_REL32_1 (5) +# CHECK: Type: IMAGE_REL_AMD64_REL32_2 (6) +# CHECK: Type: IMAGE_REL_AMD64_REL32_3 (7) +# CHECK: Type: IMAGE_REL_AMD64_REL32_4 (8) +# CHECK: Type: IMAGE_REL_AMD64_REL32_5 (9) +# CHECK: Type: IMAGE_REL_AMD64_SECTION (10) +# CHECK: Type: IMAGE_REL_AMD64_SECREL (11) +# CHECK: Type: IMAGE_REL_AMD64_SECREL7 (12) +# CHECK: Type: IMAGE_REL_AMD64_TOKEN (13) +# CHECK: Type: IMAGE_REL_AMD64_SREL32 (14) +# CHECK: Type: IMAGE_REL_AMD64_PAIR (15) +# CHECK: Type: IMAGE_REL_AMD64_SSPAN32 (16) + +--- !COFF +header: + Machine: IMAGE_FILE_MACHINE_AMD64 + Characteristics: [ ] +sections: + - Name: .text + Characteristics: [ IMAGE_SCN_CNT_CODE, IMAGE_SCN_MEM_EXECUTE, IMAGE_SCN_MEM_READ ] + Alignment: 4 + SectionData: 00 + Relocations: + - VirtualAddress: 4 + Type: IMAGE_REL_AMD64_ABSOLUTE + - VirtualAddress: 12 + Type: IMAGE_REL_AMD64_ADDR64 + - VirtualAddress: 20 + Type: IMAGE_REL_AMD64_ADDR32 + - VirtualAddress: 28 + Type: IMAGE_REL_AMD64_ADDR32NB + - VirtualAddress: 36 + Type: IMAGE_REL_AMD64_REL32 + - VirtualAddress: 44 + Type: IMAGE_REL_AMD64_REL32_1 + - VirtualAddress: 52 + Type: IMAGE_REL_AMD64_REL32_2 + - VirtualAddress: 60 + Type: IMAGE_REL_AMD64_REL32_3 + - VirtualAddress: 68 + Type: IMAGE_REL_AMD64_REL32_4 + - VirtualAddress: 76 + Type: IMAGE_REL_AMD64_REL32_5 + - VirtualAddress: 84 + Type: IMAGE_REL_AMD64_SECTION + - VirtualAddress: 92 + Type: IMAGE_REL_AMD64_SECREL + - VirtualAddress: 100 + Type: IMAGE_REL_AMD64_SECREL7 + - VirtualAddress: 108 + Type: IMAGE_REL_AMD64_TOKEN + - VirtualAddress: 116 + Type: IMAGE_REL_AMD64_SREL32 + - VirtualAddress: 124 + Type: IMAGE_REL_AMD64_PAIR + - VirtualAddress: 132 + Type: IMAGE_REL_AMD64_SSPAN32 +symbols: + - Name: .text + Value: 0 + SectionNumber: 1 + SimpleType: IMAGE_SYM_TYPE_NULL + ComplexType: IMAGE_SYM_DTYPE_NULL + StorageClass: IMAGE_SYM_CLASS_STATIC + SectionDefinition: + Length: 136 + NumberOfRelocations: 17 + NumberOfLinenumbers: 0 + CheckSum: 0 + Number: 1 diff --git a/llvm/test/tools/llvm-readobj/COFF/reloc_overflow.test b/llvm/test/tools/llvm-readobj/COFF/reloc_overflow.test new file mode 100644 index 00000000000..accb9e0ab55 --- /dev/null +++ b/llvm/test/tools/llvm-readobj/COFF/reloc_overflow.test @@ -0,0 +1,80 @@ +# RUN: llvm-readobj --sections %p/Inputs/xcoff-reloc-overflow.o | \ +# RUN: FileCheck --check-prefix=SECOVERFLOW %s + +# RUN: llvm-readobj --relocs --expand-relocs %p/Inputs/xcoff-reloc-overflow.o | \ +# RUN: FileCheck --check-prefix=RELOCOVERFLOW %s + +# SECOVERFLOW: File: {{.*}}xcoff-reloc-overflow.o +# SECOVERFLOW-NEXT: Format: aixcoff-rs6000 +# SECOVERFLOW-NEXT: Arch: powerpc +# SECOVERFLOW-NEXT: AddressSize: 32bit +# SECOVERFLOW-NEXT: Sections [ +# SECOVERFLOW-NEXT: Section { +# SECOVERFLOW-NEXT: Index: 1 +# SECOVERFLOW-NEXT: Name: .text +# SECOVERFLOW-NEXT: PhysicalAddress: 0x0 +# SECOVERFLOW-NEXT: VirtualAddress: 0x0 +# SECOVERFLOW-NEXT: Size: 0x38 +# SECOVERFLOW-NEXT: RawDataOffset: 0x8C +# SECOVERFLOW-NEXT: RelocationPointer: 0x0 +# SECOVERFLOW-NEXT: LineNumberPointer: 0x0 +# SECOVERFLOW-NEXT: NumberOfRelocations: 0 +# SECOVERFLOW-NEXT: NumberOfLineNumbers: 0 +# SECOVERFLOW-NEXT: Type: STYP_TEXT (0x20) +# SECOVERFLOW-NEXT: } +# SECOVERFLOW-NEXT: Section { +# SECOVERFLOW-NEXT: Index: 2 +# SECOVERFLOW-NEXT: Name: .data +# SECOVERFLOW-NEXT: PhysicalAddress: 0x38 +# SECOVERFLOW-NEXT: VirtualAddress: 0x38 +# SECOVERFLOW-NEXT: Size: 0x1C +# SECOVERFLOW-NEXT: RawDataOffset: 0xC4 +# SECOVERFLOW-NEXT: RelocationPointer: 0xE0 +# SECOVERFLOW-NEXT: LineNumberPointer: 0x0 +# SECOVERFLOW-NEXT: NumberOfRelocations: 65535 +# SECOVERFLOW-NEXT: NumberOfLineNumbers: 65535 +# SECOVERFLOW-NEXT: Type: STYP_DATA (0x40) +# SECOVERFLOW-NEXT: } +# SECOVERFLOW-NEXT: Section { +# SECOVERFLOW-NEXT: Index: 3 +# SECOVERFLOW-NEXT: Name: .ovrflo +# SECOVERFLOW-NEXT: NumberOfRelocations: 3 +# SECOVERFLOW-NEXT: NumberOfLineNumbers: 3 +# SECOVERFLOW-NEXT: Size: 0x0 +# SECOVERFLOW-NEXT: RawDataOffset: 0x0 +# SECOVERFLOW-NEXT: RelocationPointer: 0xE0 +# SECOVERFLOW-NEXT: LineNumberPointer: 0x0 +# SECOVERFLOW-NEXT: IndexOfSectionOverflowed: 2 +# SECOVERFLOW-NEXT: IndexOfSectionOverflowed: 2 +# SECOVERFLOW-NEXT: Type: STYP_OVRFLO (0x8000) +# SECOVERFLOW-NEXT: } +# SECOVERFLOW-NEXT: ] + +# RELOCOVERFLOW: Relocations [ +# RELOCOVERFLOW-NEXT: Section (index: 2) .data { +# RELOCOVERFLOW-NEXT: Relocation { +# RELOCOVERFLOW-NEXT: Virtual Address: 0x38 +# RELOCOVERFLOW-NEXT: Symbol: .pb (4) +# RELOCOVERFLOW-NEXT: IsSigned: No +# RELOCOVERFLOW-NEXT: FixupBitValue: 0 +# RELOCOVERFLOW-NEXT: Length: 32 +# RELOCOVERFLOW-NEXT: Type: R_POS (0x0) +# RELOCOVERFLOW-NEXT: } +# RELOCOVERFLOW-NEXT: Relocation { +# RELOCOVERFLOW-NEXT: Virtual Address: 0x3C +# RELOCOVERFLOW-NEXT: Symbol: TOC (12) +# RELOCOVERFLOW-NEXT: IsSigned: No +# RELOCOVERFLOW-NEXT: FixupBitValue: 0 +# RELOCOVERFLOW-NEXT: Length: 32 +# RELOCOVERFLOW-NEXT: Type: R_POS (0x0) +# RELOCOVERFLOW-NEXT: } +# RELOCOVERFLOW-NEXT: Relocation { +# RELOCOVERFLOW-NEXT: Virtual Address: 0x50 +# RELOCOVERFLOW-NEXT: Symbol: .text (2) +# RELOCOVERFLOW-NEXT: IsSigned: No +# RELOCOVERFLOW-NEXT: FixupBitValue: 0 +# RELOCOVERFLOW-NEXT: Length: 32 +# RELOCOVERFLOW-NEXT: Type: R_POS (0x0) +# RELOCOVERFLOW-NEXT: } +# RELOCOVERFLOW-NEXT: } +# RELOCOVERFLOW-NEXT: ] diff --git a/llvm/test/tools/llvm-readobj/COFF/res-resources.test b/llvm/test/tools/llvm-readobj/COFF/res-resources.test new file mode 100644 index 00000000000..561eb4dc06f --- /dev/null +++ b/llvm/test/tools/llvm-readobj/COFF/res-resources.test @@ -0,0 +1,163 @@ +// Check dumping of the resources stored in .res files. +// The input was generated with the following commands, using the original Windows +// rc.exe: +// > rc /fo test_resource.res /nologo test_resource.rc + +// RUN: llvm-readobj %p/Inputs/resources/test_resource.res | FileCheck %s + +// CHECK: Resource type (int): ACCELERATOR (ID 9) +// CHECK-NEXT: Resource name (string): MYACCELERATORS +// CHECK-NEXT: Data version: 0 +// CHECK-NEXT: Memory flags: 0x30 +// CHECK-NEXT: Language ID: 1033 +// CHECK-NEXT: Version (major): 0 +// CHECK-NEXT: Version (minor): 0 +// CHECK-NEXT: Characteristics: 0 +// CHECK-NEXT: Data size: 24 +// CHECK-NEXT: Data: ( +// CHECK-NEXT: 0000: 11000300 E7030000 0D004400 4C040000 |..........D.L...| +// CHECK-NEXT: 0010: 82001200 BC010000 |........| +// CHECK-NEXT: ) + +// CHECK-DAG: Resource type (int): BITMAP (ID 2) +// CHECK-NEXT: Resource name (string): CURSOR +// CHECK-NEXT: Data version: 0 +// CHECK-NEXT: Memory flags: 0x30 +// CHECK-NEXT: Language ID: 1033 +// CHECK-NEXT: Version (major): 0 +// CHECK-NEXT: Version (minor): 0 +// CHECK-NEXT: Characteristics: 0 +// CHECK-NEXT: Data size: 808 +// CHECK-NEXT: Data: ( +// CHECK-NEXT: 0000: 28000000 10000000 10000000 01001800 |(...............| +// CHECK-NEXT: 0010: 00000000 00030000 C40E0000 C40E0000 |................| +// CHECK-NEXT: 0020: 00000000 00000000 FFFFFFFF FFFFFFFF |................| +// CHECK-NEXT: 0030: FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF |................| +// CHECK-NEXT: 0040: FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF |................| +// CHECK-NEXT: 0050: FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF |................| +// CHECK-NEXT: 0060: FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF |................| +// CHECK-NEXT: 0070: FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF |................| +// CHECK-NEXT: 0080: FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF |................| +// CHECK-NEXT: 0090: FFFFFFFF FFFFFFFF FFFFFFFF FF7F7F7F |................| +// CHECK-NEXT: 00A0: 7C7C7C78 78787575 75FFFFFF FFFFFFFF ||||xxxuuu.......| +// CHECK-NEXT: 00B0: FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF |................| +// CHECK-NEXT: 00C0: FFFFFFFF 979797FF FFFFFFFF FF838383 |................| +// CHECK-NEXT: 00D0: AAAAAADB DBDB7979 79757575 FFFFFFFF |......yyyuuu....| +// CHECK-NEXT: 00E0: FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF |................| +// CHECK-NEXT: 00F0: FFFFFFFF 9C9C9C98 9898FFFF FF888888 |................| +// CHECK-NEXT: 0100: DBDBDBB7 B7B77D7D 7DFFFFFF FFFFFFFF |......}}}.......| +// CHECK-NEXT: 0110: FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF |................| +// CHECK-NEXT: 0120: FFFFFFFF A0A0A09C 9C9C9393 93ADADAD |................| +// CHECK-NEXT: 0130: F2F2F284 84848181 81FFFFFF FFFFFFFF |................| +// CHECK-NEXT: 0140: FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF |................| +// CHECK-NEXT: 0150: FFFFFFFF A4A4A4D7 D7D79D9D 9DD0D0D0 |................| +// CHECK-NEXT: 0160: EEEEEE91 91918D8D 8DFFFFFF FFFFFF81 |................| +// CHECK-NEXT: 0170: 81817E7E 7EFFFFFF FFFFFFFF FFFFFFFF |..~~~...........| +// CHECK-NEXT: 0180: FFFFFFFF A9A9A9F2 F2F2E5E5 E5E2E2E2 |................| +// CHECK-NEXT: 0190: 95959591 91918D8D 8D898989 868686FF |................| +// CHECK-NEXT: 01A0: FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF |................| +// CHECK-NEXT: 01B0: FFFFFFFF ADADADF2 F2F2E1E1 E1DFDFDF |................| +// CHECK-NEXT: 01C0: E7E7E7E4 E4E4BBBB BB8E8E8E FFFFFFFF |................| +// CHECK-NEXT: 01D0: FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF |................| +// CHECK-NEXT: 01E0: FFFFFFFF B5B5B5F2 F2F2E8E8 E8E7E7E7 |................| +// CHECK-NEXT: 01F0: EAEAEAC6 C6C69E9E 9EFFFFFF FFFFFFFF |................| +// CHECK-NEXT: 0200: FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF |................| +// CHECK-NEXT: 0210: FFFFFFFF B9B9B9F4 F4F4ECEC ECEDEDED |................| +// CHECK-NEXT: 0220: CBCBCBA7 A7A7FFFF FFFFFFFF FFFFFFFF |................| +// CHECK-NEXT: 0230: FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF |................| +// CHECK-NEXT: 0240: FFFFFFFF BDBDBDF7 F7F7EFEF EFD0D0D0 |................| +// CHECK-NEXT: 0250: AFAFAFFF FFFFFFFF FFFFFFFF FFFFFFFF |................| +// CHECK-NEXT: 0260: FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF |................| +// CHECK-NEXT: 0270: FFFFFFFF C1C1C1F7 F7F7D5D5 D5B6B6B6 |................| +// CHECK-NEXT: 0280: FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF |................| +// CHECK-NEXT: 0290: FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF |................| +// CHECK-NEXT: 02A0: FFFFFFFF C4C4C4D9 D9D9BEBE BEFFFFFF |................| +// CHECK-NEXT: 02B0: FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF |................| +// CHECK-NEXT: 02C0: FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF |................| +// CHECK-NEXT: 02D0: FFFFFFFF C8C8C8C5 C5C5FFFF FFFFFFFF |................| +// CHECK-NEXT: 02E0: FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF |................| +// CHECK-NEXT: 02F0: FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF |................| +// CHECK-NEXT: 0300: FFFFFFFF CBCBCBFF FFFFFFFF FFFFFFFF |................| +// CHECK-NEXT: 0310: FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF |................| +// CHECK-NEXT: 0320: FFFFFFFF FFFFFFFF |........| +// CHECK-NEXT: ) + +// CHECK-DAG: Resource type (int): BITMAP (ID 2) +// CHECK-NEXT: Resource name (string): OKAY +// CHECK-NEXT: Data version: 0 +// CHECK-NEXT: Memory flags: 0x30 +// CHECK-NEXT: Language ID: 1033 +// CHECK-NEXT: Version (major): 0 +// CHECK-NEXT: Version (minor): 0 +// CHECK-NEXT: Characteristics: 0 +// CHECK-NEXT: Data size: 808 +// CHECK-NEXT: Data: ( +// CHECK-NEXT: 0000: 28000000 10000000 10000000 01001800 |(...............| +// CHECK-NEXT: 0010: 00000000 00030000 C40E0000 C40E0000 |................| +// (...) +// CHECK-DAG: 0310: FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF |................| +// CHECK-NEXT: 0320: FFFFFFFF FFFFFFFF |........| +// CHECK-NEXT: ) + +// CHECK-DAG: Resource type (int): MENU (ID 4) +// CHECK-NEXT: Resource name (int): 14432 +// CHECK-NEXT: Data version: 0 +// CHECK-NEXT: Memory flags: 0x1030 +// CHECK-NEXT: Language ID: 2052 +// CHECK-NEXT: Version (major): 0 +// CHECK-NEXT: Version (minor): 0 +// CHECK-NEXT: Characteristics: 0 +// CHECK-NEXT: Data size: 46 +// CHECK-NEXT: Data: ( +// CHECK-NEXT: 0000: 00000000 00006400 79007500 00000000 |......d.y.u.....| +// CHECK-NEXT: 0010: 65007300 68006100 6C006100 00008000 |e.s.h.a.l.a.....| +// CHECK-NEXT: 0020: 66006B00 61006F00 79006100 0000 |f.k.a.o.y.a...| +// CHECK-NEXT: ) + +// CHECK-DAG: Resource type (int): DIALOG (ID 5) +// CHECK-NEXT: Resource name (string): TESTDIALOG +// CHECK-NEXT: Data version: 0 +// CHECK-NEXT: Memory flags: 0x1030 +// CHECK-NEXT: Language ID: 1033 +// CHECK-NEXT: Version (major): 0 +// CHECK-NEXT: Version (minor): 0 +// CHECK-NEXT: Characteristics: 0 +// CHECK-NEXT: Data size: 108 +// CHECK-NEXT: Data: ( +// CHECK-NEXT: 0000: 0000C080 00000000 02000A00 0A00C800 |................| +// CHECK-NEXT: 0010: 2C010000 00005400 65007300 74000000 |,.....T.e.s.t...| +// CHECK-NEXT: 0020: 01000250 00000000 0A000A00 E6000E00 |...P............| +// CHECK-NEXT: 0030: 0100FFFF 82004300 6F006E00 74006900 |......C.o.n.t.i.| +// CHECK-NEXT: 0040: 6E007500 65003A00 00000000 00000150 |n.u.e.:........P| +// CHECK-NEXT: 0050: 00000000 42008600 A1000D00 0200FFFF |....B...........| +// CHECK-NEXT: 0060: 80002600 4F004B00 00000000 |..&.O.K.....| +// CHECK-NEXT: ) + +// CHECK-DAG: Resource type (int): ACCELERATOR (ID 9) +// CHECK-NEXT: Resource name (int): 12 +// CHECK-NEXT: Data version: 0 +// CHECK-NEXT: Memory flags: 0x30 +// CHECK-NEXT: Language ID: 1033 +// CHECK-NEXT: Version (major): 0 +// CHECK-NEXT: Version (minor): 0 +// CHECK-NEXT: Characteristics: 0 +// CHECK-NEXT: Data size: 24 +// CHECK-NEXT: Data: ( +// CHECK-NEXT: 0000: 11005800 A4000000 0D004800 2E160000 |..X.......H.....| +// CHECK-NEXT: 0010: 82001200 BC010000 |........| +// CHECK-NEXT: ) + +// CHECK-DAG: Resource type (int): MENU (ID 4) +// CHECK-NEXT: Resource name (string): "EAT" +// CHECK-NEXT: Data version: 0 +// CHECK-NEXT: Memory flags: 0x1030 +// CHECK-NEXT: Language ID: 3081 +// CHECK-NEXT: Version (major): 0 +// CHECK-NEXT: Version (minor): 0 +// CHECK-NEXT: Characteristics: 0 +// CHECK-NEXT: Data size: 48 +// CHECK-NEXT: Data: ( +// CHECK-NEXT: 0000: 00000000 00006400 66006900 73006800 |......d.f.i.s.h.| +// CHECK-NEXT: 0010: 00000000 65007300 61006C00 61006400 |....e.s.a.l.a.d.| +// CHECK-NEXT: 0020: 00008000 66006400 75006300 6B000000 |....f.d.u.c.k...| +// CHECK-NEXT: ) diff --git a/llvm/test/tools/llvm-readobj/COFF/resources.test b/llvm/test/tools/llvm-readobj/COFF/resources.test new file mode 100644 index 00000000000..0d91755a668 --- /dev/null +++ b/llvm/test/tools/llvm-readobj/COFF/resources.test @@ -0,0 +1,210 @@ +// Check dumping of the .rsrc section(s) +// The input was generated with the following commands, using the original Windows +// rc.exe and cvtres.exe: +// > rc /fo test_resource.res /nologo test_resource.rc +// > cvtres /machine:X86 /readonly /nologo /out:test_resource.o test_resource.res + +RUN: llvm-readobj --coff-resources --section-data %p/Inputs/zero-string-table.obj.coff-i386 \ +RUN: | FileCheck %s -check-prefix ZERO +RUN: llvm-readobj --coff-resources %p/Inputs/resources/test_resource.obj.coff \ +RUN: | FileCheck %s -check-prefix TEST_RES + +ZERO: Resources [ +ZERO-NEXT: Total Number of Resources: 1 +ZERO-NEXT: Base Table Address: 0x188 +ZERO-DAG: Number of String Entries: 0 +ZERO-NEXT: Number of ID Entries: 1 +ZERO-NEXT: Type: STRINGTABLE (ID 6) [ +ZERO-NEXT: Table Offset: 0x18 +ZERO-NEXT: Number of String Entries: 0 +ZERO-NEXT: Number of ID Entries: 1 +ZERO-NEXT: Name: (ID 1) [ +ZERO-NEXT: Table Offset: 0x30 +ZERO-NEXT: Number of String Entries: 0 +ZERO-NEXT: Number of ID Entries: 1 +ZERO-NEXT: Language: (ID 1033) [ +ZERO-NEXT: Entry Offset: 0x48 +ZERO-NEXT: Time/Date Stamp: 1970-01-01 00:00:00 (0x0) +ZERO-NEXT: Major Version: 0 +ZERO-NEXT: Minor Version: 0 +ZERO-NEXT: Characteristics: 0 +ZERO-NEXT: Data [ +ZERO-NEXT: DataRVA: 0x0 +ZERO-NEXT: DataSize: 42 +ZERO-NEXT: Codepage: 0 +ZERO-NEXT: Reserved: 0 +ZERO-NEXT: Data ( +ZERO-NEXT: 0000: 00000500 48006500 6C006C00 6F000000 |....H.e.l.l.o...| +ZERO-NEXT: 0010: 00000000 00000000 00000000 00000000 |................| +ZERO-NEXT: 0020: 00000000 00000000 0000 |..........| +ZERO-NEXT: ) +ZERO-NEXT: ] +ZERO-NEXT: ] +ZERO-NEXT: ] +ZERO-NEXT: ] + +TEST_RES: Resources [ +TEST_RES-NEXT: Total Number of Resources: 7 +TEST_RES-NEXT: Base Table Address: 0x1C0 +TEST_RES-DAG: Number of String Entries: 0 +TEST_RES-NEXT: Number of ID Entries: 4 +TEST_RES-NEXT: Type: BITMAP (ID 2) [ +TEST_RES-NEXT: Table Offset: 0x30 +TEST_RES-NEXT: Number of String Entries: 2 +TEST_RES-NEXT: Number of ID Entries: 0 +TEST_RES-NEXT: Name: CURSOR [ +TEST_RES-NEXT: Table Offset: 0xA8 +TEST_RES-NEXT: Number of String Entries: 0 +TEST_RES-NEXT: Number of ID Entries: 1 +TEST_RES-NEXT: Language: (ID 1033) [ +TEST_RES-NEXT: Entry Offset: 0x150 +TEST_RES-NEXT: Time/Date Stamp: 1970-01-01 00:00:00 (0x0) +TEST_RES-NEXT: Major Version: 0 +TEST_RES-NEXT: Minor Version: 0 +TEST_RES-NEXT: Characteristics: 0 +TEST_RES-NEXT: Data [ +TEST_RES-NEXT: DataRVA: 0x0 +TEST_RES-NEXT: DataSize: 808 +TEST_RES-NEXT: Codepage: 0 +TEST_RES-NEXT: Reserved: 0 +TEST_RES-NEXT: Data ( +TEST_RES: ) +TEST_RES-NEXT: ] +TEST_RES-NEXT: ] +TEST_RES-NEXT: ] +TEST_RES-NEXT: Name: OKAY [ +TEST_RES-NEXT: Table Offset: 0xC0 +TEST_RES-NEXT: Number of String Entries: 0 +TEST_RES-NEXT: Number of ID Entries: 1 +TEST_RES-NEXT: Language: (ID 1033) [ +TEST_RES-NEXT: Entry Offset: 0x160 +TEST_RES-NEXT: Time/Date Stamp: 1970-01-01 00:00:00 (0x0) +TEST_RES-NEXT: Major Version: 0 +TEST_RES-NEXT: Minor Version: 0 +TEST_RES-NEXT: Characteristics: 0 +TEST_RES-NEXT: Data [ +TEST_RES-NEXT: DataRVA: 0x0 +TEST_RES-NEXT: DataSize: 808 +TEST_RES-NEXT: Codepage: 0 +TEST_RES-NEXT: Reserved: 0 +TEST_RES-NEXT: Data ( +TEST_RES: ) +TEST_RES-NEXT: ] +TEST_RES-NEXT: ] +TEST_RES-NEXT: ] +TEST_RES-NEXT: ] +TEST_RES-NEXT: Type: MENU (ID 4) [ +TEST_RES-NEXT: Table Offset: 0x50 +TEST_RES-NEXT: Number of String Entries: 1 +TEST_RES-NEXT: Number of ID Entries: 1 +TEST_RES-NEXT: Name: "EAT" [ +TEST_RES-NEXT: Table Offset: 0xD8 +TEST_RES-NEXT: Number of String Entries: 0 +TEST_RES-NEXT: Number of ID Entries: 1 +TEST_RES-NEXT: Language: (ID 3081) [ +TEST_RES-NEXT: Entry Offset: 0x170 +TEST_RES-NEXT: Time/Date Stamp: 1970-01-01 00:00:00 (0x0) +TEST_RES-NEXT: Major Version: 0 +TEST_RES-NEXT: Minor Version: 0 +TEST_RES-NEXT: Characteristics: 0 +TEST_RES-NEXT: Data [ +TEST_RES-NEXT: DataRVA: 0x0 +TEST_RES-NEXT: DataSize: 48 +TEST_RES-NEXT: Codepage: 0 +TEST_RES-NEXT: Reserved: 0 +TEST_RES-NEXT: Data ( +TEST_RES: ) +TEST_RES-NEXT: ] +TEST_RES-NEXT: ] +TEST_RES-NEXT: ] +TEST_RES-NEXT: Name: (ID 14432) [ +TEST_RES-NEXT: Table Offset: 0xF0 +TEST_RES-NEXT: Number of String Entries: 0 +TEST_RES-NEXT: Number of ID Entries: 1 +TEST_RES-NEXT: Language: (ID 2052) [ +TEST_RES-NEXT: Entry Offset: 0x180 +TEST_RES-NEXT: Time/Date Stamp: 1970-01-01 00:00:00 (0x0) +TEST_RES-NEXT: Major Version: 0 +TEST_RES-NEXT: Minor Version: 0 +TEST_RES-NEXT: Characteristics: 0 +TEST_RES-NEXT: Data [ +TEST_RES-NEXT: DataRVA: 0x0 +TEST_RES-NEXT: DataSize: 46 +TEST_RES-NEXT: Codepage: 0 +TEST_RES-NEXT: Reserved: 0 +TEST_RES-NEXT: Data ( +TEST_RES: ) +TEST_RES-NEXT: ] +TEST_RES-NEXT: ] +TEST_RES-NEXT: ] +TEST_RES-NEXT: ] +TEST_RES-NEXT: Type: DIALOG (ID 5) [ +TEST_RES-NEXT: Table Offset: 0x70 +TEST_RES-NEXT: Number of String Entries: 1 +TEST_RES-NEXT: Number of ID Entries: 0 +TEST_RES-NEXT: Name: TESTDIALOG [ +TEST_RES-NEXT: Table Offset: 0x108 +TEST_RES-NEXT: Number of String Entries: 0 +TEST_RES-NEXT: Number of ID Entries: 1 +TEST_RES-NEXT: Language: (ID 1033) [ +TEST_RES-NEXT: Entry Offset: 0x190 +TEST_RES-NEXT: Time/Date Stamp: 1970-01-01 00:00:00 (0x0) +TEST_RES-NEXT: Major Version: 0 +TEST_RES-NEXT: Minor Version: 0 +TEST_RES-NEXT: Characteristics: 0 +TEST_RES-NEXT: Data [ +TEST_RES-NEXT: DataRVA: 0x0 +TEST_RES-NEXT: DataSize: 108 +TEST_RES-NEXT: Codepage: 0 +TEST_RES-NEXT: Reserved: 0 +TEST_RES-NEXT: Data ( +TEST_RES: ) +TEST_RES-NEXT: ] +TEST_RES-NEXT: ] +TEST_RES-NEXT: ] +TEST_RES-NEXT: ] +TEST_RES-NEXT: Type: ACCELERATOR (ID 9) [ +TEST_RES-NEXT: Table Offset: 0x88 +TEST_RES-NEXT: Number of String Entries: 1 +TEST_RES-NEXT: Number of ID Entries: 1 +TEST_RES-NEXT: Name: MYACCELERATORS [ +TEST_RES-NEXT: Table Offset: 0x120 +TEST_RES-NEXT: Number of String Entries: 0 +TEST_RES-NEXT: Number of ID Entries: 1 +TEST_RES-NEXT: Language: (ID 1033) [ +TEST_RES-NEXT: Entry Offset: 0x1A0 +TEST_RES-NEXT: Time/Date Stamp: 1970-01-01 00:00:00 (0x0) +TEST_RES-NEXT: Major Version: 0 +TEST_RES-NEXT: Minor Version: 0 +TEST_RES-NEXT: Characteristics: 0 +TEST_RES-NEXT: Data [ +TEST_RES-NEXT: DataRVA: 0x0 +TEST_RES-NEXT: DataSize: 24 +TEST_RES-NEXT: Codepage: 0 +TEST_RES-NEXT: Reserved: 0 +TEST_RES-NEXT: Data ( +TEST_RES: ) +TEST_RES-NEXT: ] +TEST_RES-NEXT: ] +TEST_RES-NEXT: ] +TEST_RES-NEXT: Name: (ID 12) [ +TEST_RES-NEXT: Table Offset: 0x138 +TEST_RES-NEXT: Number of String Entries: 0 +TEST_RES-NEXT: Number of ID Entries: 1 +TEST_RES-NEXT: Language: (ID 1033) [ +TEST_RES-NEXT: Entry Offset: 0x1B0 +TEST_RES-NEXT: Time/Date Stamp: 1970-01-01 00:00:00 (0x0) +TEST_RES-NEXT: Major Version: 0 +TEST_RES-NEXT: Minor Version: 0 +TEST_RES-NEXT: Characteristics: 0 +TEST_RES-NEXT: Data [ +TEST_RES-NEXT: DataRVA: 0x0 +TEST_RES-NEXT: DataSize: 24 +TEST_RES-NEXT: Codepage: 0 +TEST_RES-NEXT: Reserved: 0 +TEST_RES-NEXT: Data ( +TEST_RES: ) +TEST_RES-NEXT: ] +TEST_RES-NEXT: ] +TEST_RES-NEXT: ] +TEST_RES-NEXT: ] diff --git a/llvm/test/tools/llvm-readobj/COFF/unwind-arm64-windows.test b/llvm/test/tools/llvm-readobj/COFF/unwind-arm64-windows.test new file mode 100644 index 00000000000..17d05163346 --- /dev/null +++ b/llvm/test/tools/llvm-readobj/COFF/unwind-arm64-windows.test @@ -0,0 +1,69 @@ +RUN: llvm-readobj --unwind %p/Inputs/arm64-win1.obj | FileCheck %s -check-prefix=UNWIND1 +RUN: llvm-readobj --unwind %p/Inputs/arm64-win2.obj | FileCheck %s -check-prefix=UNWIND2 + +UNWIND1: ExceptionData { +UNWIND1-NEXT: FunctionLength: 340 +UNWIND1-NEXT: Version: 0 +UNWIND1-NEXT: ExceptionData: No +UNWIND1-NEXT: EpiloguePacked: Yes +UNWIND1-NEXT: EpilogueOffset: 15 +UNWIND1-NEXT: ByteCodeLength: 28 +UNWIND1-NEXT: Prologue [ +UNWIND1-NEXT: 0xe002dac8 ; sub sp, #2993280 +UNWIND1-NEXT: 0xe3 ; nop +UNWIND1-NEXT: 0xe3 ; nop +UNWIND1-NEXT: 0xe3 ; nop +UNWIND1-NEXT: 0xd885 ; stp d10, d11, [sp, #40] +UNWIND1-NEXT: 0xd803 ; stp d8, d9, [sp, #24] +UNWIND1-NEXT: 0xd2c2 ; str x30, [sp, #16] +UNWIND1-NEXT: 0x28 ; stp x19, x20, [sp, #-64]! +UNWIND1-NEXT: 0xe4 ; end +UNWIND1-NEXT: ] +UNWIND1-NEXT: Epilogue [ +UNWIND1-NEXT: 0xe002dac8 ; add sp, #2993280 +UNWIND1-NEXT: 0xd885 ; ldp d10, d11, [sp, #40] +UNWIND1-NEXT: 0xd803 ; ldp d8, d9, [sp, #24] +UNWIND1-NEXT: 0xd2c2 ; ldr x30, [sp, #16] +UNWIND1-NEXT: 0x28 ; ldp x19, x20, [sp], #64 +UNWIND1-NEXT: 0xe4 ; end +UNWIND1-NEXT: ] +UNWIND1_NEXT: } + + +UNWIND2: ExceptionData { +UNWIND2-NEXT: FunctionLength: 72 +UNWIND2-NEXT: Version: 0 +UNWIND2-NEXT: ExceptionData: No +UNWIND2-NEXT: EpiloguePacked: No +UNWIND2-NEXT: EpilogueScopes: 2 +UNWIND2-NEXT: ByteCodeLength: 8 +UNWIND2-NEXT: Prologue [ +UNWIND2-NEXT: 0x1f ; sub sp, #496 +UNWIND2-NEXT: 0xd600 ; stp x19, lr, [sp, #0] +UNWIND2-NEXT: 0x01 ; sub sp, #16 +UNWIND2-NEXT: 0xe4 ; end +UNWIND2-NEXT: ] +UNWIND2-NEXT: EpilogueScopes [ +UNWIND2-NEXT: EpilogueScope { +UNWIND2-NEXT: StartOffset: 8 +UNWIND2-NEXT: EpilogueStartIndex: 0 +UNWIND2-NEXT: Opcodes [ +UNWIND2-NEXT: 0x1f ; add sp, #496 +UNWIND2-NEXT: 0xd600 ; ldp x19, lr, [sp, #0] +UNWIND2-NEXT: 0x01 ; add sp, #16 +UNWIND2-NEXT: 0xe4 ; end +UNWIND2-NEXT: ] +UNWIND2-NEXT: } +UNWIND2-NEXT: EpilogueScope { +UNWIND2-NEXT: StartOffset: 14 +UNWIND2-NEXT: EpilogueStartIndex: 0 +UNWIND2-NEXT: Opcodes [ +UNWIND2-NEXT: 0x1f ; add sp, #496 +UNWIND2-NEXT: 0xd600 ; ldp x19, lr, [sp, #0] +UNWIND2-NEXT: 0x01 ; add sp, #16 +UNWIND2-NEXT: 0xe4 ; end +UNWIND2-NEXT: ] +UNWIND2-NEXT: } +UNWIND2-NEXT: ] +UNWIND2-NEXT: } + diff --git a/llvm/test/tools/llvm-readobj/COFF/xcoff-basic.test b/llvm/test/tools/llvm-readobj/COFF/xcoff-basic.test new file mode 100644 index 00000000000..8219f20e53d --- /dev/null +++ b/llvm/test/tools/llvm-readobj/COFF/xcoff-basic.test @@ -0,0 +1,160 @@ +# RUN: llvm-readobj --file-header %p/Inputs/xcoff-basic.o | \ +# RUN: FileCheck --check-prefix=FILEHEADER %s +# +# RUN: llvm-readobj --file-header %p/Inputs/xcoff-basic-64.o | \ +# RUN: FileCheck --check-prefix=FILEHEADER64 %s + +# RUN: llvm-readobj --file-header %p/Inputs/xcoff-basic-neg-time.o | \ +# RUN: FileCheck --check-prefix=NEGTIME %s + +# RUN: llvm-readobj --file-header %p/Inputs/xcoff-basic-neg-sym-count.o | \ +# RUN: FileCheck --check-prefix=NEGSYMCOUNT %s + +# RUN: llvm-readobj --relocs --expand-relocs %p/Inputs/xcoff-basic.o | \ +# RUN: FileCheck --check-prefix=RELOCSEXP %s + +# FILEHEADER: File: {{.*}}xcoff-basic.o +# FILEHEADER-NEXT: Format: aixcoff-rs6000 +# FILEHEADER-NEXT: Arch: powerpc +# FILEHEADER-NEXT: AddressSize: 32bit +# FILEHEADER-NEXT: FileHeader { +# FILEHEADER-NEXT: Magic: 0x1DF +# FILEHEADER-NEXT: NumberOfSections: 6 +# FILEHEADER-NEXT: TimeStamp: 2019-03-12T14:04:43Z (0x5C87BC7B) +# FILEHEADER-NEXT: SymbolTableOffset: 0x52E +# FILEHEADER-NEXT: SymbolTableEntries: 120 +# FILEHEADER-NEXT: OptionalHeaderSize: 0x1C +# FILEHEADER-NEXT: Flags: 0x0 +# FILEHEADER-NEXT: } + +# FILEHEADER64: File: {{.*}}xcoff-basic-64.o +# FILEHEADER64-NEXT: Format: aix5coff64-rs6000 +# FILEHEADER64-NEXT: Arch: powerpc64 +# FILEHEADER64-NEXT: AddressSize: 64bit +# FILEHEADER64-NEXT: FileHeader { +# FILEHEADER64-NEXT: Magic: 0x1F7 +# FILEHEADER64-NEXT: NumberOfSections: 5 +# FILEHEADER64-NEXT: TimeStamp: 2019-03-18T20:03:47Z (0x5C8FF9A3) +# FILEHEADER64-NEXT: SymbolTableOffset: 0x54C +# FILEHEADER64-NEXT: SymbolTableEntries: 58 +# FILEHEADER64-NEXT: OptionalHeaderSize: 0x0 +# FILEHEADER64-NEXT: Flags: 0x0 +# FILEHEADER64-NEXT: } + +# NEGTIME: File: {{.*}}xcoff-basic-neg-time.o +# NEGTIME-NEXT: Format: aixcoff-rs6000 +# NEGTIME-NEXT: Arch: powerpc +# NEGTIME-NEXT: AddressSize: 32bit +# NEGTIME-NEXT: FileHeader { +# NEGTIME-NEXT: Magic: 0x1DF +# NEGTIME-NEXT: NumberOfSections: 6 +# NEGTIME-NEXT: TimeStamp: Reserved Value (0xDC87BC7B) +# NEGTIME-NEXT: SymbolTableOffset: 0x52E +# NEGTIME-NEXT: SymbolTableEntries: 120 +# NEGTIME-NEXT: OptionalHeaderSize: 0x1C +# NEGTIME-NEXT: Flags: 0x0 +# NEGTIME-NEXT: } + +# NEGSYMCOUNT: File: {{.*}}xcoff-basic-neg-sym-count.o +# NEGSYMCOUNT-NEXT: Format: aixcoff-rs6000 +# NEGSYMCOUNT-NEXT: Arch: powerpc +# NEGSYMCOUNT-NEXT: AddressSize: 32bit +# NEGSYMCOUNT-NEXT: FileHeader { +# NEGSYMCOUNT-NEXT: Magic: 0x1DF +# NEGSYMCOUNT-NEXT: NumberOfSections: 5 +# NEGSYMCOUNT-NEXT: TimeStamp: 2019-03-12T14:04:43Z (0x5C87BC7B) +# NEGSYMCOUNT-NEXT: SymbolTableOffset: 0x0 +# NEGSYMCOUNT-NEXT: SymbolTableEntries: Reserved Value (0x80000000) +# NEGSYMCOUNT-NEXT: OptionalHeaderSize: 0x1C +# NEGSYMCOUNT-NEXT: Flags: 0xD +# NEGSYMCOUNT-NEXT: } + +# xcoff-basic.o was compiled with `xlc -qtls -O3 -g -c xcoff-basic.c` +# from the following source: +# int a = 55; +# int b; +# __thread int j = 55; +# __thread double d; +# int A() { return a; } +# int B() { return b; } +# int J() { return j; } +# double D() { return d; } +# +# xcoff-basic-neg-time.o was manually edited to include a negative time stamp. +# xcoff-basic-neg-sym-count.o was stripped using the 'strip' utility, and +# manually edited to have a negative symbol table entry count. + +# RELOCSEXP: File: {{.*}}xcoff-basic.o +# RELOCSEXP-NEXT: Format: aixcoff-rs6000 +# RELOCSEXP-NEXT: Arch: powerpc +# RELOCSEXP-NEXT: AddressSize: 32bit +# RELOCSEXP-NEXT: Relocations [ +# RELOCSEXP-NEXT: Section (index: 1) .text { +# RELOCSEXP-NEXT: Relocation { +# RELOCSEXP-NEXT: Virtual Address: 0x2 +# RELOCSEXP-NEXT: Symbol: a (85) +# RELOCSEXP-NEXT: IsSigned: Yes +# RELOCSEXP-NEXT: FixupBitValue: 0 +# RELOCSEXP-NEXT: Length: 16 +# RELOCSEXP-NEXT: Type: R_TOC (0x3) +# RELOCSEXP-NEXT: } + +# RELOCSEXP: Virtual Address: 0x90 +# RELOCSEXP-NEXT: Symbol: .__tls_get_addr (118) +# RELOCSEXP-NEXT: IsSigned: Yes +# RELOCSEXP-NEXT: FixupBitValue: 0 +# RELOCSEXP-NEXT: Length: 26 +# RELOCSEXP-NEXT: Type: R_RBA (0x18) +# RELOCSEXP-NEXT: } +# RELOCSEXP-NEXT: } +# RELOCSEXP-NEXT: Section (index: 2) .data { +# RELOCSEXP-NEXT: Relocation { +# RELOCSEXP-NEXT: Virtual Address: 0x100 +# RELOCSEXP-NEXT: Symbol: A (78) +# RELOCSEXP-NEXT: IsSigned: No +# RELOCSEXP-NEXT: FixupBitValue: 0 +# RELOCSEXP-NEXT: Length: 32 +# RELOCSEXP-NEXT: Type: R_POS (0x0) +# RELOCSEXP-NEXT: } + +# RELOCSEXP: Virtual Address: 0x110 +# RELOCSEXP-NEXT: Symbol: J (96) +# RELOCSEXP-NEXT: IsSigned: No +# RELOCSEXP-NEXT: FixupBitValue: 0 +# RELOCSEXP-NEXT: Length: 32 +# RELOCSEXP-NEXT: Type: R_POS (0x0) +# RELOCSEXP-NEXT: } + +# RELOCSEXP: Virtual Address: 0x114 +# RELOCSEXP-NEXT: Symbol: j (100) +# RELOCSEXP-NEXT: IsSigned: No +# RELOCSEXP-NEXT: FixupBitValue: 0 +# RELOCSEXP-NEXT: Length: 32 +# RELOCSEXP-NEXT: Type: R_TLS (0x20) +# RELOCSEXP-NEXT: } + +# RELOCSEXP: Virtual Address: 0x124 +# RELOCSEXP-NEXT: Symbol: d (111) +# RELOCSEXP-NEXT: IsSigned: No +# RELOCSEXP-NEXT: FixupBitValue: 0 +# RELOCSEXP-NEXT: Length: 32 +# RELOCSEXP-NEXT: Type: R_TLSM (0x24) +# RELOCSEXP-NEXT: } + +# RELOCSEXP: Virtual Address: 0x128 +# RELOCSEXP-NEXT: Symbol: (76) +# RELOCSEXP-NEXT: IsSigned: No +# RELOCSEXP-NEXT: FixupBitValue: 0 +# RELOCSEXP-NEXT: Length: 32 +# RELOCSEXP-NEXT: Type: R_POS (0x0) +# RELOCSEXP-NEXT: } + +# RELOCSEXP: Virtual Address: 0x154 +# RELOCSEXP-NEXT: Symbol: TOC (72) +# RELOCSEXP-NEXT: IsSigned: No +# RELOCSEXP-NEXT: FixupBitValue: 0 +# RELOCSEXP-NEXT: Length: 32 +# RELOCSEXP-NEXT: Type: R_POS (0x0) +# RELOCSEXP-NEXT: } +# RELOCSEXP-NEXT: } +# RELOCSEXP-NEXT:] diff --git a/llvm/test/tools/llvm-readobj/COFF/xcoff-overflow-section.test b/llvm/test/tools/llvm-readobj/COFF/xcoff-overflow-section.test new file mode 100644 index 00000000000..8ff911b1d79 --- /dev/null +++ b/llvm/test/tools/llvm-readobj/COFF/xcoff-overflow-section.test @@ -0,0 +1,47 @@ +# RUN: llvm-readobj --sections %p/Inputs/xcoff-reloc-overflow.o | \ +# RUN: FileCheck --check-prefix=SECOVERFLOW %s +# SECOVERFLOW: File: {{.*}}xcoff-reloc-overflow.o +# SECOVERFLOW-NEXT: Format: aixcoff-rs6000 +# SECOVERFLOW-NEXT: Arch: powerpc +# SECOVERFLOW-NEXT: AddressSize: 32bit +# SECOVERFLOW-NEXT: Sections [ +# SECOVERFLOW-NEXT: Section { +# SECOVERFLOW-NEXT: Index: 1 +# SECOVERFLOW-NEXT: Name: .text +# SECOVERFLOW-NEXT: PhysicalAddress: 0x0 +# SECOVERFLOW-NEXT: VirtualAddress: 0x0 +# SECOVERFLOW-NEXT: Size: 0x38 +# SECOVERFLOW-NEXT: RawDataOffset: 0x8C +# SECOVERFLOW-NEXT: RelocationPointer: 0x0 +# SECOVERFLOW-NEXT: LineNumberPointer: 0x0 +# SECOVERFLOW-NEXT: NumberOfRelocations: 0 +# SECOVERFLOW-NEXT: NumberOfLineNumbers: 0 +# SECOVERFLOW-NEXT: Type: STYP_TEXT (0x20) +# SECOVERFLOW-NEXT: } +# SECOVERFLOW-NEXT: Section { +# SECOVERFLOW-NEXT: Index: 2 +# SECOVERFLOW-NEXT: Name: .data +# SECOVERFLOW-NEXT: PhysicalAddress: 0x38 +# SECOVERFLOW-NEXT: VirtualAddress: 0x38 +# SECOVERFLOW-NEXT: Size: 0x1C +# SECOVERFLOW-NEXT: RawDataOffset: 0xC4 +# SECOVERFLOW-NEXT: RelocationPointer: 0xE0 +# SECOVERFLOW-NEXT: LineNumberPointer: 0x0 +# SECOVERFLOW-NEXT: NumberOfRelocations: 65535 +# SECOVERFLOW-NEXT: NumberOfLineNumbers: 65535 +# SECOVERFLOW-NEXT: Type: STYP_DATA (0x40) +# SECOVERFLOW-NEXT: } +# SECOVERFLOW-NEXT: Section { +# SECOVERFLOW-NEXT: Index: 3 +# SECOVERFLOW-NEXT: Name: .ovrflo +# SECOVERFLOW-NEXT: NumberOfRelocations: 3 +# SECOVERFLOW-NEXT: NumberOfLineNumbers: 3 +# SECOVERFLOW-NEXT: Size: 0x0 +# SECOVERFLOW-NEXT: RawDataOffset: 0x0 +# SECOVERFLOW-NEXT: RelocationPointer: 0xE0 +# SECOVERFLOW-NEXT: LineNumberPointer: 0x0 +# SECOVERFLOW-NEXT: IndexOfSectionOverflowed: 2 +# SECOVERFLOW-NEXT: IndexOfSectionOverflowed: 2 +# SECOVERFLOW-NEXT: Type: STYP_OVRFLO (0x8000) +# SECOVERFLOW-NEXT: } +# SECOVERFLOW-NEXT: ] diff --git a/llvm/test/tools/llvm-readobj/COFF/xcoff-sections.test b/llvm/test/tools/llvm-readobj/COFF/xcoff-sections.test new file mode 100644 index 00000000000..d80f9d8e344 --- /dev/null +++ b/llvm/test/tools/llvm-readobj/COFF/xcoff-sections.test @@ -0,0 +1,164 @@ +# RUN: llvm-readobj --section-headers %p/Inputs/xcoff-basic.o | \ +# RUN: FileCheck --check-prefix=SEC32 %s + +# RUN: llvm-readobj --section-headers %p/Inputs/xcoff-basic-64.o | \ +# RUN: FileCheck --check-prefix=SEC64 %s + +# SEC32: File: {{.*}}xcoff-basic.o +# SEC32-NEXT: Format: aixcoff-rs6000 +# SEC32-NEXT: Arch: powerpc +# SEC32-NEXT: AddressSize: 32bit +# SEC32-NEXT: Sections [ +# SEC32-NEXT: Section { +# SEC32-NEXT: Index: 1 +# SEC32-NEXT: Name: .text +# SEC32-NEXT: PhysicalAddress: 0x0 +# SEC32-NEXT: VirtualAddress: 0x0 +# SEC32-NEXT: Size: 0x100 +# SEC32-NEXT: RawDataOffset: 0x200 +# SEC32-NEXT: RelocationPointer: 0x3D8 +# SEC32-NEXT: LineNumberPointer: 0x4E6 +# SEC32-NEXT: NumberOfRelocations: 8 +# SEC32-NEXT: NumberOfLineNumbers: 12 +# SEC32-NEXT: Type: STYP_TEXT (0x20) +# SEC32-NEXT: } +# SEC32-NEXT: Section { +# SEC32-NEXT: Index: 2 +# SEC32-NEXT: Name: .data +# SEC32-NEXT: PhysicalAddress: 0x100 +# SEC32-NEXT: VirtualAddress: 0x100 +# SEC32-NEXT: Size: 0x68 +# SEC32-NEXT: RawDataOffset: 0x300 +# SEC32-NEXT: RelocationPointer: 0x428 +# SEC32-NEXT: LineNumberPointer: 0x0 +# SEC32-NEXT: NumberOfRelocations: 19 +# SEC32-NEXT: NumberOfLineNumbers: 0 +# SEC32-NEXT: Type: STYP_DATA (0x40) +# SEC32-NEXT: } +# SEC32-NEXT: Section { +# SEC32-NEXT: Index: 3 +# SEC32-NEXT: Name: .bss +# SEC32-NEXT: PhysicalAddress: 0x168 +# SEC32-NEXT: VirtualAddress: 0x168 +# SEC32-NEXT: Size: 0x4 +# SEC32-NEXT: RawDataOffset: 0x0 +# SEC32-NEXT: RelocationPointer: 0x0 +# SEC32-NEXT: LineNumberPointer: 0x0 +# SEC32-NEXT: NumberOfRelocations: 0 +# SEC32-NEXT: NumberOfLineNumbers: 0 +# SEC32-NEXT: Type: STYP_BSS (0x80) +# SEC32-NEXT: } +# SEC32-NEXT: Section { +# SEC32-NEXT: Index: 4 +# SEC32-NEXT: Name: .tdata +# SEC32-NEXT: PhysicalAddress: 0x0 +# SEC32-NEXT: VirtualAddress: 0x0 +# SEC32-NEXT: Size: 0x4 +# SEC32-NEXT: RawDataOffset: 0x368 +# SEC32-NEXT: RelocationPointer: 0x47A +# SEC32-NEXT: LineNumberPointer: 0x0 +# SEC32-NEXT: NumberOfRelocations: 0 +# SEC32-NEXT: NumberOfLineNumbers: 0 +# SEC32-NEXT: Type: STYP_TDATA (0x400) +# SEC32-NEXT: } +# SEC32-NEXT: Section { +# SEC32-NEXT: Index: 5 +# SEC32-NEXT: Name: .tbss +# SEC32-NEXT: PhysicalAddress: 0x4 +# SEC32-NEXT: VirtualAddress: 0x4 +# SEC32-NEXT: Size: 0x8 +# SEC32-NEXT: RawDataOffset: 0x0 +# SEC32-NEXT: RelocationPointer: 0x0 +# SEC32-NEXT: LineNumberPointer: 0x0 +# SEC32-NEXT: NumberOfRelocations: 0 +# SEC32-NEXT: NumberOfLineNumbers: 0 +# SEC32-NEXT: Type: STYP_TBSS (0x800) +# SEC32-NEXT: } +# SEC32-NEXT: Section { +# SEC32-NEXT: Index: 6 +# SEC32-NEXT: Name: .debug +# SEC32-NEXT: PhysicalAddress: 0x0 +# SEC32-NEXT: VirtualAddress: 0x0 +# SEC32-NEXT: Size: 0x6C +# SEC32-NEXT: RawDataOffset: 0x36C +# SEC32-NEXT: RelocationPointer: 0x0 +# SEC32-NEXT: LineNumberPointer: 0x0 +# SEC32-NEXT: NumberOfRelocations: 0 +# SEC32-NEXT: NumberOfLineNumbers: 0 +# SEC32-NEXT: Type: STYP_DEBUG (0x2000) +# SEC32-NEXT: } +# SEC32-NEXT: ] + + +# SEC64: File: {{.*}}xcoff-basic-64.o +# SEC64-NEXT: Format: aix5coff64-rs6000 +# SEC64-NEXT: Arch: powerpc64 +# SEC64-NEXT: AddressSize: 64bit +# SEC64-NEXT: Sections [ +# SEC64-NEXT: Section { +# SEC64-NEXT: Index: 1 +# SEC64-NEXT: Name: .text +# SEC64-NEXT: PhysicalAddress: 0x0 +# SEC64-NEXT: VirtualAddress: 0x0 +# SEC64-NEXT: Size: 0x100 +# SEC64-NEXT: RawDataOffset: 0x200 +# SEC64-NEXT: RelocationPointer: 0x3C4 +# SEC64-NEXT: LineNumberPointer: 0x0 +# SEC64-NEXT: NumberOfRelocations: 9 +# SEC64-NEXT: NumberOfLineNumbers: 0 +# SEC64-NEXT: Type: STYP_TEXT (0x20) +# SEC64-NEXT: } +# SEC64-NEXT: Section { +# SEC64-NEXT: Index: 2 +# SEC64-NEXT: Name: .data +# SEC64-NEXT: PhysicalAddress: 0x100 +# SEC64-NEXT: VirtualAddress: 0x100 +# SEC64-NEXT: Size: 0xC0 +# SEC64-NEXT: RawDataOffset: 0x300 +# SEC64-NEXT: RelocationPointer: 0x442 +# SEC64-NEXT: LineNumberPointer: 0x0 +# SEC64-NEXT: NumberOfRelocations: 19 +# SEC64-NEXT: NumberOfLineNumbers: 0 +# SEC64-NEXT: Type: STYP_DATA (0x40) +# SEC64-NEXT: } +# SEC64-NEXT: Section { +# SEC64-NEXT: Index: 3 +# SEC64-NEXT: Name: .bss +# SEC64-NEXT: PhysicalAddress: 0x1C0 +# SEC64-NEXT: VirtualAddress: 0x1C0 +# SEC64-NEXT: Size: 0x8 +# SEC64-NEXT: RawDataOffset: 0x0 +# SEC64-NEXT: RelocationPointer: 0x0 +# SEC64-NEXT: LineNumberPointer: 0x0 +# SEC64-NEXT: NumberOfRelocations: 0 +# SEC64-NEXT: NumberOfLineNumbers: 0 +# SEC64-NEXT: Type: STYP_BSS (0x80) +# SEC64-NEXT: } +# SEC64-NEXT: Section { +# SEC64-NEXT: Index: 4 +# SEC64-NEXT: Name: .tdata +# SEC64-NEXT: PhysicalAddress: 0x0 +# SEC64-NEXT: VirtualAddress: 0x0 +# SEC64-NEXT: Size: 0x4 +# SEC64-NEXT: RawDataOffset: 0x3C0 +# SEC64-NEXT: RelocationPointer: 0x54C +# SEC64-NEXT: LineNumberPointer: 0x0 +# SEC64-NEXT: NumberOfRelocations: 0 +# SEC64-NEXT: NumberOfLineNumbers: 0 +# SEC64-NEXT: Type: STYP_TDATA (0x400) +# SEC64-NEXT: } +# SEC64-NEXT: Section { +# SEC64-NEXT: Index: 5 +# SEC64-NEXT: Name: .tbss +# SEC64-NEXT: PhysicalAddress: 0x4 +# SEC64-NEXT: VirtualAddress: 0x4 +# SEC64-NEXT: Size: 0x8 +# SEC64-NEXT: RawDataOffset: 0x0 +# SEC64-NEXT: RelocationPointer: 0x0 +# SEC64-NEXT: LineNumberPointer: 0x0 +# SEC64-NEXT: NumberOfRelocations: 0 +# SEC64-NEXT: NumberOfLineNumbers: 0 +# SEC64-NEXT: Type: STYP_TBSS (0x800) +# SEC64-NEXT: } +# SEC64-NEXT: ] + diff --git a/llvm/test/tools/llvm-readobj/COFF/xcoff-symbols.test b/llvm/test/tools/llvm-readobj/COFF/xcoff-symbols.test new file mode 100644 index 00000000000..15de3dba21b --- /dev/null +++ b/llvm/test/tools/llvm-readobj/COFF/xcoff-symbols.test @@ -0,0 +1,446 @@ +# This file tests the ability of llvm-readobj to display the symbol table for a +# 32-bit XCOFF object file. +RUN: llvm-readobj --symbols %p/Inputs/aix_xcoff_xlc_test8.o | \ +RUN: FileCheck --check-prefix=SYMBOL32 %s + +SYMBOL32: File: {{.*}}aix_xcoff_xlc_test8.o +SYMBOL32-NEXT: Format: aixcoff-rs6000 +SYMBOL32-NEXT: Arch: powerpc +SYMBOL32-NEXT: AddressSize: 32bit +SYMBOL32-NEXT: Symbols [ +SYMBOL32-NEXT: Symbol { +SYMBOL32-NEXT: Index: 0 +SYMBOL32-NEXT: Name: .file +SYMBOL32-NEXT: Value (SymbolTableIndex): 0x0 +SYMBOL32-NEXT: Section: N_DEBUG +SYMBOL32-NEXT: Source Language ID: TB_C (0x0) +SYMBOL32-NEXT: CPU Version ID: TCPU_COM (0x3) +SYMBOL32-NEXT: StorageClass: C_FILE (0x67) +SYMBOL32-NEXT: NumberOfAuxEntries: 3 +SYMBOL32-NEXT: File Auxiliary Entry { +SYMBOL32-NEXT: Index: 1 +SYMBOL32-NEXT: Name: test8.c +SYMBOL32-NEXT: Type: XFT_FN (0x0) +SYMBOL32-NEXT: } +SYMBOL32-NEXT: File Auxiliary Entry { +SYMBOL32-NEXT: Index: 2 +SYMBOL32-NEXT: Name: Sun Apr 28 15:56:49 2019 +SYMBOL32-NEXT: Type: XFT_CT (0x1) +SYMBOL32-NEXT: } +SYMBOL32-NEXT: File Auxiliary Entry { +SYMBOL32-NEXT: Index: 3 +SYMBOL32-NEXT: Name: IBM XL C for AIX, Version 16.1.0.2 +SYMBOL32-NEXT: Type: XFT_CV (0x2) +SYMBOL32-NEXT: } +SYMBOL32-NEXT: } +SYMBOL32-NEXT: Symbol { +SYMBOL32-NEXT: Index: 4 +SYMBOL32-NEXT: Name: .text +SYMBOL32-NEXT: Value (RelocatableAddress): 0x0 +SYMBOL32-NEXT: Section: .text +SYMBOL32-NEXT: Type: 0x0 +SYMBOL32-NEXT: StorageClass: C_STAT (0x3) +SYMBOL32-NEXT: NumberOfAuxEntries: 1 +SYMBOL32-NEXT: Sect Auxiliary Entry For Stat { +SYMBOL32-NEXT: Index: 5 +SYMBOL32-NEXT: SectionLength: 256 +SYMBOL32-NEXT: NumberOfRelocEnt: 4 +SYMBOL32-NEXT: NumberOfLineNum: 0 +SYMBOL32-NEXT: } +SYMBOL32-NEXT: } +SYMBOL32-NEXT: Symbol { +SYMBOL32-NEXT: Index: 6 +SYMBOL32-NEXT: Name: .data +SYMBOL32-NEXT: Value (RelocatableAddress): 0x100 +SYMBOL32-NEXT: Section: .data +SYMBOL32-NEXT: Type: 0x0 +SYMBOL32-NEXT: StorageClass: C_STAT (0x3) +SYMBOL32-NEXT: NumberOfAuxEntries: 1 +SYMBOL32-NEXT: Sect Auxiliary Entry For Stat { +SYMBOL32-NEXT: Index: 7 +SYMBOL32-NEXT: SectionLength: 60 +SYMBOL32-NEXT: NumberOfRelocEnt: 11 +SYMBOL32-NEXT: NumberOfLineNum: 0 +SYMBOL32-NEXT: } +SYMBOL32-NEXT: } +SYMBOL32-NEXT: Symbol { +SYMBOL32-NEXT: Index: 8 +SYMBOL32-NEXT: Name: .bss +SYMBOL32-NEXT: Value (RelocatableAddress): 0x13C +SYMBOL32-NEXT: Section: .bss +SYMBOL32-NEXT: Type: 0x0 +SYMBOL32-NEXT: StorageClass: C_STAT (0x3) +SYMBOL32-NEXT: NumberOfAuxEntries: 1 +SYMBOL32-NEXT: Sect Auxiliary Entry For Stat { +SYMBOL32-NEXT: Index: 9 +SYMBOL32-NEXT: SectionLength: 4 +SYMBOL32-NEXT: NumberOfRelocEnt: 0 +SYMBOL32-NEXT: NumberOfLineNum: 0 +SYMBOL32-NEXT: } +SYMBOL32-NEXT: } +SYMBOL32-NEXT: Symbol { +SYMBOL32-NEXT: Index: 10 +SYMBOL32-NEXT: Name: +SYMBOL32-NEXT: Value (RelocatableAddress): 0x0 +SYMBOL32-NEXT: Section: .text +SYMBOL32-NEXT: Type: 0x0 +SYMBOL32-NEXT: StorageClass: C_HIDEXT (0x6B) +SYMBOL32-NEXT: NumberOfAuxEntries: 1 +SYMBOL32-NEXT: CSECT Auxiliary Entry { +SYMBOL32-NEXT: Index: 11 +SYMBOL32-NEXT: SectionLen: 256 +SYMBOL32-NEXT: ParameterHashIndex: 0x0 +SYMBOL32-NEXT: TypeChkSectNum: 0x0 +SYMBOL32-NEXT: SymbolAlignmentLog2: 7 +SYMBOL32-NEXT: SymbolType: XTY_SD (0x1) +SYMBOL32-NEXT: StorageMappingClass: XMC_PR (0x0) +SYMBOL32-NEXT: StabInfoIndex: 0x0 +SYMBOL32-NEXT: StabSectNum: 0x0 +SYMBOL32-NEXT: } +SYMBOL32-NEXT: } +SYMBOL32-NEXT: Symbol { +SYMBOL32-NEXT: Index: 12 +SYMBOL32-NEXT: Name: .fun1 +SYMBOL32-NEXT: Value (RelocatableAddress): 0x0 +SYMBOL32-NEXT: Section: .text +SYMBOL32-NEXT: Type: 0x20 +SYMBOL32-NEXT: StorageClass: C_EXT (0x2) +SYMBOL32-NEXT: NumberOfAuxEntries: 1 +SYMBOL32-NEXT: CSECT Auxiliary Entry { +SYMBOL32-NEXT: Index: 13 +SYMBOL32-NEXT: ContainingCsectSymbolIndex: 10 +SYMBOL32-NEXT: ParameterHashIndex: 0x0 +SYMBOL32-NEXT: TypeChkSectNum: 0x0 +SYMBOL32-NEXT: SymbolAlignmentLog2: 0 +SYMBOL32-NEXT: SymbolType: XTY_LD (0x2) +SYMBOL32-NEXT: StorageMappingClass: XMC_PR (0x0) +SYMBOL32-NEXT: StabInfoIndex: 0x0 +SYMBOL32-NEXT: StabSectNum: 0x0 +SYMBOL32-NEXT: } +SYMBOL32-NEXT: } +SYMBOL32-NEXT: Symbol { +SYMBOL32-NEXT: Index: 14 +SYMBOL32-NEXT: Name: .main +SYMBOL32-NEXT: Value (RelocatableAddress): 0x60 +SYMBOL32-NEXT: Section: .text +SYMBOL32-NEXT: Type: 0x20 +SYMBOL32-NEXT: StorageClass: C_EXT (0x2) +SYMBOL32-NEXT: NumberOfAuxEntries: 1 +SYMBOL32-NEXT: CSECT Auxiliary Entry { +SYMBOL32-NEXT: Index: 15 +SYMBOL32-NEXT: ContainingCsectSymbolIndex: 10 +SYMBOL32-NEXT: ParameterHashIndex: 0x0 +SYMBOL32-NEXT: TypeChkSectNum: 0x0 +SYMBOL32-NEXT: SymbolAlignmentLog2: 0 +SYMBOL32-NEXT: SymbolType: XTY_LD (0x2) +SYMBOL32-NEXT: StorageMappingClass: XMC_PR (0x0) +SYMBOL32-NEXT: StabInfoIndex: 0x0 +SYMBOL32-NEXT: StabSectNum: 0x0 +SYMBOL32-NEXT: } +SYMBOL32-NEXT: } +SYMBOL32-NEXT: Symbol { +SYMBOL32-NEXT: Index: 16 +SYMBOL32-NEXT: Name: TOC +SYMBOL32-NEXT: Value (RelocatableAddress): 0x100 +SYMBOL32-NEXT: Section: .data +SYMBOL32-NEXT: Type: 0x0 +SYMBOL32-NEXT: StorageClass: C_HIDEXT (0x6B) +SYMBOL32-NEXT: NumberOfAuxEntries: 1 +SYMBOL32-NEXT: CSECT Auxiliary Entry { +SYMBOL32-NEXT: Index: 17 +SYMBOL32-NEXT: SectionLen: 0 +SYMBOL32-NEXT: ParameterHashIndex: 0x0 +SYMBOL32-NEXT: TypeChkSectNum: 0x0 +SYMBOL32-NEXT: SymbolAlignmentLog2: 2 +SYMBOL32-NEXT: SymbolType: XTY_SD (0x1) +SYMBOL32-NEXT: StorageMappingClass: XMC_TC0 (0xF) +SYMBOL32-NEXT: StabInfoIndex: 0x0 +SYMBOL32-NEXT: StabSectNum: 0x0 +SYMBOL32-NEXT: } +SYMBOL32-NEXT: } +SYMBOL32-NEXT: Symbol { +SYMBOL32-NEXT: Index: 18 +SYMBOL32-NEXT: Name: +SYMBOL32-NEXT: Value (RelocatableAddress): 0x114 +SYMBOL32-NEXT: Section: .data +SYMBOL32-NEXT: Type: 0x0 +SYMBOL32-NEXT: StorageClass: C_HIDEXT (0x6B) +SYMBOL32-NEXT: NumberOfAuxEntries: 1 +SYMBOL32-NEXT: CSECT Auxiliary Entry { +SYMBOL32-NEXT: Index: 19 +SYMBOL32-NEXT: SectionLen: 4 +SYMBOL32-NEXT: ParameterHashIndex: 0x0 +SYMBOL32-NEXT: TypeChkSectNum: 0x0 +SYMBOL32-NEXT: SymbolAlignmentLog2: 2 +SYMBOL32-NEXT: SymbolType: XTY_SD (0x1) +SYMBOL32-NEXT: StorageMappingClass: XMC_TC (0x3) +SYMBOL32-NEXT: StabInfoIndex: 0x0 +SYMBOL32-NEXT: StabSectNum: 0x0 +SYMBOL32-NEXT: } +SYMBOL32-NEXT: } +SYMBOL32-NEXT: Symbol { +SYMBOL32-NEXT: Index: 20 +SYMBOL32-NEXT: Name: +SYMBOL32-NEXT: Value (RelocatableAddress): 0x134 +SYMBOL32-NEXT: Section: .data +SYMBOL32-NEXT: Type: 0x0 +SYMBOL32-NEXT: StorageClass: C_HIDEXT (0x6B) +SYMBOL32-NEXT: NumberOfAuxEntries: 1 +SYMBOL32-NEXT: CSECT Auxiliary Entry { +SYMBOL32-NEXT: Index: 21 +SYMBOL32-NEXT: SectionLen: 5 +SYMBOL32-NEXT: ParameterHashIndex: 0x0 +SYMBOL32-NEXT: TypeChkSectNum: 0x0 +SYMBOL32-NEXT: SymbolAlignmentLog2: 3 +SYMBOL32-NEXT: SymbolType: XTY_SD (0x1) +SYMBOL32-NEXT: StorageMappingClass: XMC_RO (0x1) +SYMBOL32-NEXT: StabInfoIndex: 0x0 +SYMBOL32-NEXT: StabSectNum: 0x0 +SYMBOL32-NEXT: } +SYMBOL32-NEXT: } +SYMBOL32-NEXT: Symbol { +SYMBOL32-NEXT: Index: 22 +SYMBOL32-NEXT: Name: _$STATIC_BSS +SYMBOL32-NEXT: Value (RelocatableAddress): 0x13C +SYMBOL32-NEXT: Section: .bss +SYMBOL32-NEXT: Type: 0x0 +SYMBOL32-NEXT: StorageClass: C_HIDEXT (0x6B) +SYMBOL32-NEXT: NumberOfAuxEntries: 1 +SYMBOL32-NEXT: CSECT Auxiliary Entry { +SYMBOL32-NEXT: Index: 23 +SYMBOL32-NEXT: SectionLen: 4 +SYMBOL32-NEXT: ParameterHashIndex: 0x0 +SYMBOL32-NEXT: TypeChkSectNum: 0x0 +SYMBOL32-NEXT: SymbolAlignmentLog2: 2 +SYMBOL32-NEXT: SymbolType: XTY_CM (0x3) +SYMBOL32-NEXT: StorageMappingClass: XMC_RW (0x5) +SYMBOL32-NEXT: StabInfoIndex: 0x0 +SYMBOL32-NEXT: StabSectNum: 0x0 +SYMBOL32-NEXT: } +SYMBOL32-NEXT: } +SYMBOL32-NEXT: Symbol { +SYMBOL32-NEXT: Index: 24 +SYMBOL32-NEXT: Name: _$STATIC_BSS +SYMBOL32-NEXT: Value (RelocatableAddress): 0x104 +SYMBOL32-NEXT: Section: .data +SYMBOL32-NEXT: Type: 0x0 +SYMBOL32-NEXT: StorageClass: C_HIDEXT (0x6B) +SYMBOL32-NEXT: NumberOfAuxEntries: 1 +SYMBOL32-NEXT: CSECT Auxiliary Entry { +SYMBOL32-NEXT: Index: 25 +SYMBOL32-NEXT: SectionLen: 4 +SYMBOL32-NEXT: ParameterHashIndex: 0x0 +SYMBOL32-NEXT: TypeChkSectNum: 0x0 +SYMBOL32-NEXT: SymbolAlignmentLog2: 2 +SYMBOL32-NEXT: SymbolType: XTY_SD (0x1) +SYMBOL32-NEXT: StorageMappingClass: XMC_TC (0x3) +SYMBOL32-NEXT: StabInfoIndex: 0x0 +SYMBOL32-NEXT: StabSectNum: 0x0 +SYMBOL32-NEXT: } +SYMBOL32-NEXT: } +SYMBOL32-NEXT: Symbol { +SYMBOL32-NEXT: Index: 26 +SYMBOL32-NEXT: Name: fun1 +SYMBOL32-NEXT: Value (RelocatableAddress): 0x118 +SYMBOL32-NEXT: Section: .data +SYMBOL32-NEXT: Type: 0x0 +SYMBOL32-NEXT: StorageClass: C_EXT (0x2) +SYMBOL32-NEXT: NumberOfAuxEntries: 1 +SYMBOL32-NEXT: CSECT Auxiliary Entry { +SYMBOL32-NEXT: Index: 27 +SYMBOL32-NEXT: SectionLen: 12 +SYMBOL32-NEXT: ParameterHashIndex: 0x0 +SYMBOL32-NEXT: TypeChkSectNum: 0x0 +SYMBOL32-NEXT: SymbolAlignmentLog2: 2 +SYMBOL32-NEXT: SymbolType: XTY_SD (0x1) +SYMBOL32-NEXT: StorageMappingClass: XMC_DS (0xA) +SYMBOL32-NEXT: StabInfoIndex: 0x0 +SYMBOL32-NEXT: StabSectNum: 0x0 +SYMBOL32-NEXT: } +SYMBOL32-NEXT: } +SYMBOL32-NEXT: Symbol { +SYMBOL32-NEXT: Index: 28 +SYMBOL32-NEXT: Name: fun1 +SYMBOL32-NEXT: Value (RelocatableAddress): 0x100 +SYMBOL32-NEXT: Section: .data +SYMBOL32-NEXT: Type: 0x0 +SYMBOL32-NEXT: StorageClass: C_HIDEXT (0x6B) +SYMBOL32-NEXT: NumberOfAuxEntries: 1 +SYMBOL32-NEXT: CSECT Auxiliary Entry { +SYMBOL32-NEXT: Index: 29 +SYMBOL32-NEXT: SectionLen: 4 +SYMBOL32-NEXT: ParameterHashIndex: 0x0 +SYMBOL32-NEXT: TypeChkSectNum: 0x0 +SYMBOL32-NEXT: SymbolAlignmentLog2: 2 +SYMBOL32-NEXT: SymbolType: XTY_SD (0x1) +SYMBOL32-NEXT: StorageMappingClass: XMC_TC (0x3) +SYMBOL32-NEXT: StabInfoIndex: 0x0 +SYMBOL32-NEXT: StabSectNum: 0x0 +SYMBOL32-NEXT: } +SYMBOL32-NEXT: } +SYMBOL32-NEXT: Symbol { +SYMBOL32-NEXT: Index: 30 +SYMBOL32-NEXT: Name: p +SYMBOL32-NEXT: Value (RelocatableAddress): 0x130 +SYMBOL32-NEXT: Section: .data +SYMBOL32-NEXT: Type: 0x0 +SYMBOL32-NEXT: StorageClass: C_EXT (0x2) +SYMBOL32-NEXT: NumberOfAuxEntries: 1 +SYMBOL32-NEXT: CSECT Auxiliary Entry { +SYMBOL32-NEXT: Index: 31 +SYMBOL32-NEXT: SectionLen: 4 +SYMBOL32-NEXT: ParameterHashIndex: 0x0 +SYMBOL32-NEXT: TypeChkSectNum: 0x0 +SYMBOL32-NEXT: SymbolAlignmentLog2: 2 +SYMBOL32-NEXT: SymbolType: XTY_SD (0x1) +SYMBOL32-NEXT: StorageMappingClass: XMC_RW (0x5) +SYMBOL32-NEXT: StabInfoIndex: 0x0 +SYMBOL32-NEXT: StabSectNum: 0x0 +SYMBOL32-NEXT: } +SYMBOL32-NEXT: } +SYMBOL32-NEXT: Symbol { +SYMBOL32-NEXT: Index: 32 +SYMBOL32-NEXT: Name: p +SYMBOL32-NEXT: Value (RelocatableAddress): 0x108 +SYMBOL32-NEXT: Section: .data +SYMBOL32-NEXT: Type: 0x0 +SYMBOL32-NEXT: StorageClass: C_HIDEXT (0x6B) +SYMBOL32-NEXT: NumberOfAuxEntries: 1 +SYMBOL32-NEXT: CSECT Auxiliary Entry { +SYMBOL32-NEXT: Index: 33 +SYMBOL32-NEXT: SectionLen: 4 +SYMBOL32-NEXT: ParameterHashIndex: 0x0 +SYMBOL32-NEXT: TypeChkSectNum: 0x0 +SYMBOL32-NEXT: SymbolAlignmentLog2: 2 +SYMBOL32-NEXT: SymbolType: XTY_SD (0x1) +SYMBOL32-NEXT: StorageMappingClass: XMC_TC (0x3) +SYMBOL32-NEXT: StabInfoIndex: 0x0 +SYMBOL32-NEXT: StabSectNum: 0x0 +SYMBOL32-NEXT: } +SYMBOL32-NEXT: } +SYMBOL32-NEXT: Symbol { +SYMBOL32-NEXT: Index: 34 +SYMBOL32-NEXT: Name: main +SYMBOL32-NEXT: Value (RelocatableAddress): 0x124 +SYMBOL32-NEXT: Section: .data +SYMBOL32-NEXT: Type: 0x0 +SYMBOL32-NEXT: StorageClass: C_EXT (0x2) +SYMBOL32-NEXT: NumberOfAuxEntries: 1 +SYMBOL32-NEXT: CSECT Auxiliary Entry { +SYMBOL32-NEXT: Index: 35 +SYMBOL32-NEXT: SectionLen: 12 +SYMBOL32-NEXT: ParameterHashIndex: 0x0 +SYMBOL32-NEXT: TypeChkSectNum: 0x0 +SYMBOL32-NEXT: SymbolAlignmentLog2: 2 +SYMBOL32-NEXT: SymbolType: XTY_SD (0x1) +SYMBOL32-NEXT: StorageMappingClass: XMC_DS (0xA) +SYMBOL32-NEXT: StabInfoIndex: 0x0 +SYMBOL32-NEXT: StabSectNum: 0x0 +SYMBOL32-NEXT: } +SYMBOL32-NEXT: } +SYMBOL32-NEXT: Symbol { +SYMBOL32-NEXT: Index: 36 +SYMBOL32-NEXT: Name: main +SYMBOL32-NEXT: Value (RelocatableAddress): 0x10C +SYMBOL32-NEXT: Section: .data +SYMBOL32-NEXT: Type: 0x0 +SYMBOL32-NEXT: StorageClass: C_HIDEXT (0x6B) +SYMBOL32-NEXT: NumberOfAuxEntries: 1 +SYMBOL32-NEXT: CSECT Auxiliary Entry { +SYMBOL32-NEXT: Index: 37 +SYMBOL32-NEXT: SectionLen: 4 +SYMBOL32-NEXT: ParameterHashIndex: 0x0 +SYMBOL32-NEXT: TypeChkSectNum: 0x0 +SYMBOL32-NEXT: SymbolAlignmentLog2: 2 +SYMBOL32-NEXT: SymbolType: XTY_SD (0x1) +SYMBOL32-NEXT: StorageMappingClass: XMC_TC (0x3) +SYMBOL32-NEXT: StabInfoIndex: 0x0 +SYMBOL32-NEXT: StabSectNum: 0x0 +SYMBOL32-NEXT: } +SYMBOL32-NEXT: } +SYMBOL32-NEXT: Symbol { +SYMBOL32-NEXT: Index: 38 +SYMBOL32-NEXT: Name: i +SYMBOL32-NEXT: Value (RelocatableAddress): 0x0 +SYMBOL32-NEXT: Section: N_UNDEF +SYMBOL32-NEXT: Type: 0x0 +SYMBOL32-NEXT: StorageClass: C_EXT (0x2) +SYMBOL32-NEXT: NumberOfAuxEntries: 1 +SYMBOL32-NEXT: CSECT Auxiliary Entry { +SYMBOL32-NEXT: Index: 39 +SYMBOL32-NEXT: SectionLen: 0 +SYMBOL32-NEXT: ParameterHashIndex: 0x0 +SYMBOL32-NEXT: TypeChkSectNum: 0x0 +SYMBOL32-NEXT: SymbolAlignmentLog2: 0 +SYMBOL32-NEXT: SymbolType: XTY_ER (0x0) +SYMBOL32-NEXT: StorageMappingClass: XMC_UA (0x4) +SYMBOL32-NEXT: StabInfoIndex: 0x0 +SYMBOL32-NEXT: StabSectNum: 0x0 +SYMBOL32-NEXT: } +SYMBOL32-NEXT: } +SYMBOL32-NEXT: Symbol { +SYMBOL32-NEXT: Index: 40 +SYMBOL32-NEXT: Name: i +SYMBOL32-NEXT: Value (RelocatableAddress): 0x110 +SYMBOL32-NEXT: Section: .data +SYMBOL32-NEXT: Type: 0x0 +SYMBOL32-NEXT: StorageClass: C_HIDEXT (0x6B) +SYMBOL32-NEXT: NumberOfAuxEntries: 1 +SYMBOL32-NEXT: CSECT Auxiliary Entry { +SYMBOL32-NEXT: Index: 41 +SYMBOL32-NEXT: SectionLen: 4 +SYMBOL32-NEXT: ParameterHashIndex: 0x0 +SYMBOL32-NEXT: TypeChkSectNum: 0x0 +SYMBOL32-NEXT: SymbolAlignmentLog2: 2 +SYMBOL32-NEXT: SymbolType: XTY_SD (0x1) +SYMBOL32-NEXT: StorageMappingClass: XMC_TC (0x3) +SYMBOL32-NEXT: StabInfoIndex: 0x0 +SYMBOL32-NEXT: StabSectNum: 0x0 +SYMBOL32-NEXT: } +SYMBOL32-NEXT: } +SYMBOL32-NEXT: Symbol { +SYMBOL32-NEXT: Index: 42 +SYMBOL32-NEXT: Name: .fun +SYMBOL32-NEXT: Value (RelocatableAddress): 0x0 +SYMBOL32-NEXT: Section: N_UNDEF +SYMBOL32-NEXT: Type: 0x0 +SYMBOL32-NEXT: StorageClass: C_EXT (0x2) +SYMBOL32-NEXT: NumberOfAuxEntries: 1 +SYMBOL32-NEXT: CSECT Auxiliary Entry { +SYMBOL32-NEXT: Index: 43 +SYMBOL32-NEXT: SectionLen: 0 +SYMBOL32-NEXT: ParameterHashIndex: 0x0 +SYMBOL32-NEXT: TypeChkSectNum: 0x0 +SYMBOL32-NEXT: SymbolAlignmentLog2: 0 +SYMBOL32-NEXT: SymbolType: XTY_ER (0x0) +SYMBOL32-NEXT: StorageMappingClass: XMC_PR (0x0) +SYMBOL32-NEXT: StabInfoIndex: 0x0 +SYMBOL32-NEXT: StabSectNum: 0x0 +SYMBOL32-NEXT: } +SYMBOL32-NEXT: } +SYMBOL32-NEXT: ] + +# The object file used is generated by the following source file +# and command on AIX: +# +# > cat test8.c +# +# extern int i; +# extern int TestforXcoff; +# extern int fun(int i); +# static int static_i; +# char* p="abcd"; +# int fun1(int j) { +# static_i++; +# j++; +# j=j+*p; +# return j; +# } +# +# int main() { +# i++; +# fun(i); +# return fun1(i); +# } +# +# > xlc -c test8.c -o aix_xcoff_xlc_test8.o diff --git a/llvm/test/tools/llvm-readobj/COFF/zero-string-table.test b/llvm/test/tools/llvm-readobj/COFF/zero-string-table.test new file mode 100644 index 00000000000..03354c50ecf --- /dev/null +++ b/llvm/test/tools/llvm-readobj/COFF/zero-string-table.test @@ -0,0 +1,8 @@ +Ensure that we can read COFF objects with a string table size of 0 (instead +of 4) for empty string tables. + +RUN: llvm-readobj --symbols %p/Inputs/zero-string-table.obj.coff-i386 | FileCheck %s + +CHECK: Symbols [ +CHECK: Symbol { +CHECK: Name: $R000000 |

