| ; Test the --syms option for xcoff object files. |
| ; Also test the --symbol-description option for xcoff object files, when specified with --syms. |
| ; RUN: llc -mtriple powerpc-ibm-aix -mcpu=pwr4 -filetype=obj -o %t.o < %s |
| ; RUN: llvm-objdump --syms %t.o | FileCheck --check-prefix=SYM %s |
| ; RUN: llvm-objdump --syms --symbol-description %t.o | FileCheck --check-prefix=SYM-DES %s |
| |
| ;; The IR below is generated by the following source code. |
| ;; bash> cat test.c |
| ;; const char* con= "Test for --symbols"; |
| ;; int i; |
| ;; char c ; |
| ;; char *ap; |
| ;; float f; |
| ;; long long ll; |
| ;; static int si; |
| ;; extern int ei; |
| ;; int bar(const char *v) { |
| ;; si = 1; |
| ;; return (int)v[0] + (int)v[2] + si + ei; |
| ;; } |
| ;; |
| ;; void foo() { |
| ;; bar(con); |
| ;; } |
| ;; |
| ;; __attribute__ ((weak)) int wi=2; |
| |
| |
| @.str = private unnamed_addr constant [19 x i8] c"Test for --symbols\00", align 1 |
| @con = global i8* getelementptr inbounds ([19 x i8], [19 x i8]* @.str, i32 0, i32 0), align 4 |
| @si = internal global i32 0, align 4 |
| @ei = external global i32, align 4 |
| @wi = weak global i32 2, align 4 |
| @i = global i32 0, align 4 |
| @c = global i8 0, align 1 |
| @ap = global i8* null, align 4 |
| @f = global float 0.000000e+00, align 4 |
| @ll = global i64 0, align 8 |
| |
| define i32 @bar(i8* %v) { |
| entry: |
| %v.addr = alloca i8*, align 4 |
| store i8* %v, i8** %v.addr, align 4 |
| store i32 1, i32* @si, align 4 |
| %0 = load i8*, i8** %v.addr, align 4 |
| %arrayidx = getelementptr inbounds i8, i8* %0, i32 0 |
| %1 = load i8, i8* %arrayidx, align 1 |
| %conv = zext i8 %1 to i32 |
| %2 = load i8*, i8** %v.addr, align 4 |
| %arrayidx1 = getelementptr inbounds i8, i8* %2, i32 2 |
| %3 = load i8, i8* %arrayidx1, align 1 |
| %conv2 = zext i8 %3 to i32 |
| %add = add nsw i32 %conv, %conv2 |
| %4 = load i32, i32* @si, align 4 |
| %add3 = add nsw i32 %add, %4 |
| %5 = load i32, i32* @ei, align 4 |
| %add4 = add nsw i32 %add3, %5 |
| ret i32 %add4 |
| } |
| |
| define void @foo() { |
| entry: |
| %0 = load i8*, i8** @con, align 4 |
| %call = call i32 @bar(i8* %0) |
| ret void |
| } |
| |
| ; SYM: SYMBOL TABLE: |
| ; SYM-NEXT: 00000000 df *DEBUG* 00000000 .file |
| ; SYM-NEXT: 00000000 *UND* 00000000 ei |
| ; SYM-NEXT: 00000000 l .text 00000091 .text |
| ; SYM-NEXT: 00000000 g F .text (csect: .text) 00000000 .bar |
| ; SYM-NEXT: 00000050 g F .text (csect: .text) 00000000 .foo |
| ; SYM-NEXT: 00000094 l .text 00000013 .rodata.str1.1L...str |
| ; SYM-NEXT: 000000a8 g O .data 00000004 con |
| ; SYM-NEXT: 000000ac w O .data 00000004 wi |
| ; SYM-NEXT: 000000b0 g O .data 00000004 i |
| ; SYM-NEXT: 000000b4 g O .data 00000001 c |
| ; SYM-NEXT: 000000b8 g O .data 00000004 ap |
| ; SYM-NEXT: 000000bc g O .data 00000004 f |
| ; SYM-NEXT: 000000c0 g O .data 00000008 ll |
| ; SYM-NEXT: 000000c8 g O .data 0000000c bar |
| ; SYM-NEXT: 000000d4 g O .data 0000000c foo |
| ; SYM-NEXT: 000000e0 l .data 00000000 TOC |
| ; SYM-NEXT: 000000e0 l O .data 00000004 si |
| ; SYM-NEXT: 000000e4 l O .data 00000004 ei |
| ; SYM-NEXT: 000000e8 l O .data 00000004 con |
| ; SYM-NEXT: 000000ec l O *COM* 00000004 si |
| |
| ; SYM-DES: SYMBOL TABLE: |
| ; SYM-DES-NEXT: 00000000 df *DEBUG* 00000000 (idx: 0) .file |
| ; SYM-DES-NEXT: 00000000 *UND* 00000000 (idx: 1) ei[UA] |
| ; SYM-DES-NEXT: 00000000 l .text 00000091 (idx: 3) .text[PR] |
| ; SYM-DES-NEXT: 00000000 g F .text (csect: (idx: 3) .text[PR]) 00000000 (idx: 5) .bar |
| ; SYM-DES-NEXT: 00000050 g F .text (csect: (idx: 3) .text[PR]) 00000000 (idx: 7) .foo |
| ; SYM-DES-NEXT: 00000094 l .text 00000013 (idx: 9) .rodata.str1.1L...str[RO] |
| ; SYM-DES-NEXT: 000000a8 g O .data 00000004 (idx: 11) con[RW] |
| ; SYM-DES-NEXT: 000000ac w O .data 00000004 (idx: 13) wi[RW] |
| ; SYM-DES-NEXT: 000000b0 g O .data 00000004 (idx: 15) i[RW] |
| ; SYM-DES-NEXT: 000000b4 g O .data 00000001 (idx: 17) c[RW] |
| ; SYM-DES-NEXT: 000000b8 g O .data 00000004 (idx: 19) ap[RW] |
| ; SYM-DES-NEXT: 000000bc g O .data 00000004 (idx: 21) f[RW] |
| ; SYM-DES-NEXT: 000000c0 g O .data 00000008 (idx: 23) ll[RW] |
| ; SYM-DES-NEXT: 000000c8 g O .data 0000000c (idx: 25) bar[DS] |
| ; SYM-DES-NEXT: 000000d4 g O .data 0000000c (idx: 27) foo[DS] |
| ; SYM-DES-NEXT: 000000e0 l .data 00000000 (idx: 29) TOC[TC0] |
| ; SYM-DES-NEXT: 000000e0 l O .data 00000004 (idx: 31) si[TC] |
| ; SYM-DES-NEXT: 000000e4 l O .data 00000004 (idx: 33) ei[TC] |
| ; SYM-DES-NEXT: 000000e8 l O .data 00000004 (idx: 35) con[TC] |
| ; SYM-DES-NEXT: 000000ec l O *COM* 00000004 (idx: 37) si[BS] |