blob: 73ab4bdb770f56e9411c32bdebb36e330ac8eac8 [file] [log] [blame]
Nico Rieck2c9c89b2013-07-29 12:30:12 +00001// 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)
Nico Rieck9d2c15e2014-02-22 16:12:20 +00006// (999999, 0xFFFFFFFF]: base 64 string table index (//AAAAAA)
Nico Rieck2c9c89b2013-07-29 12:30:12 +00007//
8// RUN: llvm-mc -triple x86_64-pc-win32 -filetype=obj %s | llvm-readobj -s | FileCheck %s
9
10// Raw encoding
11
12// CHECK: Section {
Saleem Abdulrasoole9bd9162014-06-06 21:40:16 +000013// CHECK: Number: 4
Nico Rieck2c9c89b2013-07-29 12:30:12 +000014// CHECK: Name: s (73 00 00 00 00 00 00 00)
15// CHECK: }
16// CHECK: Section {
Saleem Abdulrasoole9bd9162014-06-06 21:40:16 +000017// CHECK: Number: 5
Nico Rieck2c9c89b2013-07-29 12:30:12 +000018// CHECK: Name: s1234567 (73 31 32 33 34 35 36 37)
19// CHECK: }
20.section s; .long 1
21.section s1234567; .long 1
22
23
Hans Wennborgf26bfc12014-09-29 22:43:20 +000024// Note: the names in the string table will be sorted in reverse
25// lexicographical order. Use a suffix letter (z, y, x, ...) to
26// get the preferred ordering of names in the test.
27
Nico Rieck2c9c89b2013-07-29 12:30:12 +000028// Base 10 encoding
Hans Wennborgf26bfc12014-09-29 22:43:20 +000029// Ending in z should put the name first in the string table.
Nico Rieck2c9c89b2013-07-29 12:30:12 +000030
31// /4
32// CHECK: Section {
Saleem Abdulrasoole9bd9162014-06-06 21:40:16 +000033// CHECK: Number: 6
Hans Wennborgf26bfc12014-09-29 22:43:20 +000034// CHECK: Name: s1234567z (2F 34 00 00 00 00 00 00)
Nico Rieck2c9c89b2013-07-29 12:30:12 +000035// CHECK: }
Hans Wennborgf26bfc12014-09-29 22:43:20 +000036.section s1234567z; .long 1
Nico Rieck2c9c89b2013-07-29 12:30:12 +000037
38
39// Generate padding sections to increase the string table size to at least
40// 1,000,000 bytes.
41.macro pad_sections2 pad
42 // 10x \pad
43 .section p0\pad\pad\pad\pad\pad\pad\pad\pad\pad\pad; .long 1
44 .section p1\pad\pad\pad\pad\pad\pad\pad\pad\pad\pad; .long 1
45 .section p2\pad\pad\pad\pad\pad\pad\pad\pad\pad\pad; .long 1
46 .section p3\pad\pad\pad\pad\pad\pad\pad\pad\pad\pad; .long 1
47 .section p4\pad\pad\pad\pad\pad\pad\pad\pad\pad\pad; .long 1
48.endm
49
50.macro pad_sections pad
51 // 20x \pad
52 pad_sections2 \pad\pad\pad\pad\pad\pad\pad\pad\pad\pad\pad\pad\pad\pad\pad\pad\pad\pad\pad\pad
53.endm
54
Hans Wennborgf26bfc12014-09-29 22:43:20 +000055// 1000x 'y'
56pad_sections yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy
Nico Rieck2c9c89b2013-07-29 12:30:12 +000057
58
59// /1000029 == 4 + 10 + (5 * (2 + (20 * 10 * 1000) + 1))
60// v | | v ~~~~~~~~~~~~~~ v
Alp Tokercb402912014-01-24 17:20:08 +000061// table size v v "p0" pad NUL separator
Hans Wennborgf26bfc12014-09-29 22:43:20 +000062// "s1234567z\0" # of pad sections
Nico Rieck2c9c89b2013-07-29 12:30:12 +000063//
64// CHECK: Section {
Saleem Abdulrasoole9bd9162014-06-06 21:40:16 +000065// CHECK: Number: 12
Hans Wennborgf26bfc12014-09-29 22:43:20 +000066// CHECK: Name: sevendigitx (2F 31 30 30 30 30 32 39)
Nico Rieck2c9c89b2013-07-29 12:30:12 +000067// CHECK: }
Hans Wennborgf26bfc12014-09-29 22:43:20 +000068.section sevendigitx; .long 1
Nico Rieck9d2c15e2014-02-22 16:12:20 +000069
70
71// Generate padding sections to increase the string table size to at least
72// 10,000,000 bytes.
73.macro pad_sections_ex pad
74 // 9x \pad
75 pad_sections \pad\pad\pad\pad\pad\pad\pad\pad\pad
76.endm
77
78// 1000x 'a'
Hans Wennborgf26bfc12014-09-29 22:43:20 +000079pad_sections_ex wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
Nico Rieck9d2c15e2014-02-22 16:12:20 +000080
81
82// //AAmJa4 == 1000029 + 12 + (5 * (2 + (9 * 20 * 10 * 1000) + 1)) == 38*64^3 + 9*64^2 + 26*64 + 56
83// v | | v ~~~~~~~~~~~~~~~~~~ v
Alp Toker70b36992014-02-25 04:21:15 +000084// seven_digit offset v v "p0" pad NUL separator
Hans Wennborgf26bfc12014-09-29 22:43:20 +000085// "sevendigitx\0" # of pad sections
Nico Rieck9d2c15e2014-02-22 16:12:20 +000086//
87// "2F 2F 41 41 6D 4A 61 34" is "//AAmJa4", which decodes to "0 0 38 9 26 56".
88//
89// CHECK: Section {
Saleem Abdulrasoole9bd9162014-06-06 21:40:16 +000090// CHECK: Number: 18
Hans Wennborgf26bfc12014-09-29 22:43:20 +000091// CHECK: Name: doubleslashv (2F 2F 41 41 6D 4A 61 34)
Nico Rieck9d2c15e2014-02-22 16:12:20 +000092// CHECK: }
Hans Wennborgf26bfc12014-09-29 22:43:20 +000093.section doubleslashv; .long 1