Home | History | Annotate | Download | only in COFF
      1 // Check that COFF section names are properly encoded.
      2 //
      3 // Encodings for different lengths:
      4 //   [0, 8]:               raw name
      5 //   (8, 999999]:          base 10 string table index (/9999999)
      6 //
      7 // RUN: llvm-mc -triple x86_64-pc-win32 -filetype=obj %s | llvm-readobj -s | FileCheck %s
      8 
      9 // Raw encoding
     10 
     11 // CHECK:   Section {
     12 // CHECK:     Number: 1
     13 // CHECK:     Name: s (73 00 00 00 00 00 00 00)
     14 // CHECK:   }
     15 // CHECK:   Section {
     16 // CHECK:     Number: 2
     17 // CHECK:     Name: s1234567 (73 31 32 33 34 35 36 37)
     18 // CHECK:   }
     19 .section s;        .long 1
     20 .section s1234567; .long 1
     21 
     22 
     23 // Base 10 encoding
     24 
     25 // /4
     26 // CHECK:   Section {
     27 // CHECK:     Number: 3
     28 // CHECK:     Name: s12345678 (2F 34 00 00 00 00 00 00)
     29 // CHECK:   }
     30 .section s12345678; .long 1
     31 
     32 
     33 // Generate padding sections to increase the string table size to at least
     34 // 1,000,000 bytes.
     35 .macro pad_sections2 pad
     36   // 10x \pad
     37   .section p0\pad\pad\pad\pad\pad\pad\pad\pad\pad\pad; .long 1
     38   .section p1\pad\pad\pad\pad\pad\pad\pad\pad\pad\pad; .long 1
     39   .section p2\pad\pad\pad\pad\pad\pad\pad\pad\pad\pad; .long 1
     40   .section p3\pad\pad\pad\pad\pad\pad\pad\pad\pad\pad; .long 1
     41   .section p4\pad\pad\pad\pad\pad\pad\pad\pad\pad\pad; .long 1
     42 .endm
     43 
     44 .macro pad_sections pad
     45   // 20x \pad
     46   pad_sections2 \pad\pad\pad\pad\pad\pad\pad\pad\pad\pad\pad\pad\pad\pad\pad\pad\pad\pad\pad\pad
     47 .endm
     48 
     49 // 1000x 'a'
     50 pad_sections aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
     51 
     52 
     53 // /1000029 == 4 + 10 + (5 * (2 + (20 * 10 * 1000) + 1))
     54 //             v   |     |    v    ~~~~~~~~~~~~~~    v
     55 //    table size   v     v   "p0"        pad         NUL seperator
     56 //     "s12345678\0"     # of pad sections
     57 //
     58 // CHECK:   Section {
     59 // CHECK:     Number: 9
     60 // CHECK:     Name: seven_digit (2F 31 30 30 30 30 32 39)
     61 // CHECK:   }
     62 .section seven_digit; .long 1
     63