1c63dce3c59ac24b2656e06f7017cd4dce4bf733cNico Rieck// Check that COFF section names are properly encoded.
2c63dce3c59ac24b2656e06f7017cd4dce4bf733cNico Rieck//
3c63dce3c59ac24b2656e06f7017cd4dce4bf733cNico Rieck// Encodings for different lengths:
4c63dce3c59ac24b2656e06f7017cd4dce4bf733cNico Rieck//   [0, 8]:               raw name
5c63dce3c59ac24b2656e06f7017cd4dce4bf733cNico Rieck//   (8, 999999]:          base 10 string table index (/9999999)
636b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines//   (999999, 0xFFFFFFFF]: base 64 string table index (//AAAAAA)
7c63dce3c59ac24b2656e06f7017cd4dce4bf733cNico Rieck//
8c63dce3c59ac24b2656e06f7017cd4dce4bf733cNico Rieck// RUN: llvm-mc -triple x86_64-pc-win32 -filetype=obj %s | llvm-readobj -s | FileCheck %s
9c63dce3c59ac24b2656e06f7017cd4dce4bf733cNico Rieck
10c63dce3c59ac24b2656e06f7017cd4dce4bf733cNico Rieck// Raw encoding
11c63dce3c59ac24b2656e06f7017cd4dce4bf733cNico Rieck
12c63dce3c59ac24b2656e06f7017cd4dce4bf733cNico Rieck// CHECK:   Section {
13cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines// CHECK:     Number: 4
14c63dce3c59ac24b2656e06f7017cd4dce4bf733cNico Rieck// CHECK:     Name: s (73 00 00 00 00 00 00 00)
15c63dce3c59ac24b2656e06f7017cd4dce4bf733cNico Rieck// CHECK:   }
16c63dce3c59ac24b2656e06f7017cd4dce4bf733cNico Rieck// CHECK:   Section {
17cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines// CHECK:     Number: 5
18c63dce3c59ac24b2656e06f7017cd4dce4bf733cNico Rieck// CHECK:     Name: s1234567 (73 31 32 33 34 35 36 37)
19c63dce3c59ac24b2656e06f7017cd4dce4bf733cNico Rieck// CHECK:   }
20c63dce3c59ac24b2656e06f7017cd4dce4bf733cNico Rieck.section s;        .long 1
21c63dce3c59ac24b2656e06f7017cd4dce4bf733cNico Rieck.section s1234567; .long 1
22c63dce3c59ac24b2656e06f7017cd4dce4bf733cNico Rieck
23c63dce3c59ac24b2656e06f7017cd4dce4bf733cNico Rieck
24c63dce3c59ac24b2656e06f7017cd4dce4bf733cNico Rieck// Base 10 encoding
25c63dce3c59ac24b2656e06f7017cd4dce4bf733cNico Rieck
26c63dce3c59ac24b2656e06f7017cd4dce4bf733cNico Rieck// /4
27c63dce3c59ac24b2656e06f7017cd4dce4bf733cNico Rieck// CHECK:   Section {
28cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines// CHECK:     Number: 6
29c63dce3c59ac24b2656e06f7017cd4dce4bf733cNico Rieck// CHECK:     Name: s12345678 (2F 34 00 00 00 00 00 00)
30c63dce3c59ac24b2656e06f7017cd4dce4bf733cNico Rieck// CHECK:   }
31c63dce3c59ac24b2656e06f7017cd4dce4bf733cNico Rieck.section s12345678; .long 1
32c63dce3c59ac24b2656e06f7017cd4dce4bf733cNico Rieck
33c63dce3c59ac24b2656e06f7017cd4dce4bf733cNico Rieck
34c63dce3c59ac24b2656e06f7017cd4dce4bf733cNico Rieck// Generate padding sections to increase the string table size to at least
35c63dce3c59ac24b2656e06f7017cd4dce4bf733cNico Rieck// 1,000,000 bytes.
36c63dce3c59ac24b2656e06f7017cd4dce4bf733cNico Rieck.macro pad_sections2 pad
37c63dce3c59ac24b2656e06f7017cd4dce4bf733cNico Rieck  // 10x \pad
38c63dce3c59ac24b2656e06f7017cd4dce4bf733cNico Rieck  .section p0\pad\pad\pad\pad\pad\pad\pad\pad\pad\pad; .long 1
39c63dce3c59ac24b2656e06f7017cd4dce4bf733cNico Rieck  .section p1\pad\pad\pad\pad\pad\pad\pad\pad\pad\pad; .long 1
40c63dce3c59ac24b2656e06f7017cd4dce4bf733cNico Rieck  .section p2\pad\pad\pad\pad\pad\pad\pad\pad\pad\pad; .long 1
41c63dce3c59ac24b2656e06f7017cd4dce4bf733cNico Rieck  .section p3\pad\pad\pad\pad\pad\pad\pad\pad\pad\pad; .long 1
42c63dce3c59ac24b2656e06f7017cd4dce4bf733cNico Rieck  .section p4\pad\pad\pad\pad\pad\pad\pad\pad\pad\pad; .long 1
43c63dce3c59ac24b2656e06f7017cd4dce4bf733cNico Rieck.endm
44c63dce3c59ac24b2656e06f7017cd4dce4bf733cNico Rieck
45c63dce3c59ac24b2656e06f7017cd4dce4bf733cNico Rieck.macro pad_sections pad
46c63dce3c59ac24b2656e06f7017cd4dce4bf733cNico Rieck  // 20x \pad
47c63dce3c59ac24b2656e06f7017cd4dce4bf733cNico Rieck  pad_sections2 \pad\pad\pad\pad\pad\pad\pad\pad\pad\pad\pad\pad\pad\pad\pad\pad\pad\pad\pad\pad
48c63dce3c59ac24b2656e06f7017cd4dce4bf733cNico Rieck.endm
49c63dce3c59ac24b2656e06f7017cd4dce4bf733cNico Rieck
50c63dce3c59ac24b2656e06f7017cd4dce4bf733cNico Rieck// 1000x 'a'
51c63dce3c59ac24b2656e06f7017cd4dce4bf733cNico Rieckpad_sections aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
52c63dce3c59ac24b2656e06f7017cd4dce4bf733cNico Rieck
53c63dce3c59ac24b2656e06f7017cd4dce4bf733cNico Rieck
54c63dce3c59ac24b2656e06f7017cd4dce4bf733cNico Rieck// /1000029 == 4 + 10 + (5 * (2 + (20 * 10 * 1000) + 1))
55c63dce3c59ac24b2656e06f7017cd4dce4bf733cNico Rieck//             v   |     |    v    ~~~~~~~~~~~~~~    v
5636b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines//    table size   v     v   "p0"        pad         NUL separator
57c63dce3c59ac24b2656e06f7017cd4dce4bf733cNico Rieck//     "s12345678\0"     # of pad sections
58c63dce3c59ac24b2656e06f7017cd4dce4bf733cNico Rieck//
59c63dce3c59ac24b2656e06f7017cd4dce4bf733cNico Rieck// CHECK:   Section {
60cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines// CHECK:     Number: 12
61c63dce3c59ac24b2656e06f7017cd4dce4bf733cNico Rieck// CHECK:     Name: seven_digit (2F 31 30 30 30 30 32 39)
62c63dce3c59ac24b2656e06f7017cd4dce4bf733cNico Rieck// CHECK:   }
63c63dce3c59ac24b2656e06f7017cd4dce4bf733cNico Rieck.section seven_digit; .long 1
6436b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines
6536b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines
6636b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines// Generate padding sections to increase the string table size to at least
6736b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines// 10,000,000 bytes.
6836b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines.macro pad_sections_ex pad
6936b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  // 9x \pad
7036b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  pad_sections \pad\pad\pad\pad\pad\pad\pad\pad\pad
7136b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines.endm
7236b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines
7336b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines// 1000x 'a'
7436b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hinespad_sections_ex aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
7536b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines
7636b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines
7736b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines// //AAmJa4 == 1000029 + 12 + (5 * (2 + (9 * 20 * 10 * 1000) + 1)) == 38*64^3 + 9*64^2 + 26*64 + 56
7836b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines//             v         |     |    v    ~~~~~~~~~~~~~~~~~~    v
7936b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines// seven_digit offset    v     v   "p0"         pad            NUL separator
8036b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines//         "seven_digit\0"     # of pad sections
8136b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines//
8236b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines// "2F 2F 41 41 6D 4A 61 34" is "//AAmJa4", which decodes to "0 0 38 9 26 56".
8336b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines//
8436b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines// CHECK:   Section {
85cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines// CHECK:     Number: 18
8636b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines// CHECK:     Name: double_slash (2F 2F 41 41 6D 4A 61 34)
8736b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines// CHECK:   }
8836b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines.section double_slash; .long 1
89