1*9880d681SAndroid Build Coastguard Worker// Check that COFF section names are properly encoded. 2*9880d681SAndroid Build Coastguard Worker// 3*9880d681SAndroid Build Coastguard Worker// Encodings for different lengths: 4*9880d681SAndroid Build Coastguard Worker// [0, 8]: raw name 5*9880d681SAndroid Build Coastguard Worker// (8, 999999]: base 10 string table index (/9999999) 6*9880d681SAndroid Build Coastguard Worker// (999999, 0xFFFFFFFF]: base 64 string table index (//AAAAAA) 7*9880d681SAndroid Build Coastguard Worker// 8*9880d681SAndroid Build Coastguard Worker// RUN: llvm-mc -triple x86_64-pc-win32 -filetype=obj %s | llvm-readobj -s | FileCheck %s 9*9880d681SAndroid Build Coastguard Worker 10*9880d681SAndroid Build Coastguard Worker// Raw encoding 11*9880d681SAndroid Build Coastguard Worker 12*9880d681SAndroid Build Coastguard Worker// CHECK: Section { 13*9880d681SAndroid Build Coastguard Worker// CHECK: Number: 4 14*9880d681SAndroid Build Coastguard Worker// CHECK: Name: s (73 00 00 00 00 00 00 00) 15*9880d681SAndroid Build Coastguard Worker// CHECK: } 16*9880d681SAndroid Build Coastguard Worker// CHECK: Section { 17*9880d681SAndroid Build Coastguard Worker// CHECK: Number: 5 18*9880d681SAndroid Build Coastguard Worker// CHECK: Name: s1234567 (73 31 32 33 34 35 36 37) 19*9880d681SAndroid Build Coastguard Worker// CHECK: } 20*9880d681SAndroid Build Coastguard Worker.section s; .long 1 21*9880d681SAndroid Build Coastguard Worker.section s1234567; .long 1 22*9880d681SAndroid Build Coastguard Worker 23*9880d681SAndroid Build Coastguard Worker 24*9880d681SAndroid Build Coastguard Worker// Note: the names in the string table will be sorted in reverse 25*9880d681SAndroid Build Coastguard Worker// lexicographical order. Use a suffix letter (z, y, x, ...) to 26*9880d681SAndroid Build Coastguard Worker// get the preferred ordering of names in the test. 27*9880d681SAndroid Build Coastguard Worker 28*9880d681SAndroid Build Coastguard Worker// Base 10 encoding 29*9880d681SAndroid Build Coastguard Worker// Ending in z should put the name first in the string table. 30*9880d681SAndroid Build Coastguard Worker 31*9880d681SAndroid Build Coastguard Worker// /4 32*9880d681SAndroid Build Coastguard Worker// CHECK: Section { 33*9880d681SAndroid Build Coastguard Worker// CHECK: Number: 6 34*9880d681SAndroid Build Coastguard Worker// CHECK: Name: s1234567z (2F 34 00 00 00 00 00 00) 35*9880d681SAndroid Build Coastguard Worker// CHECK: } 36*9880d681SAndroid Build Coastguard Worker.section s1234567z; .long 1 37*9880d681SAndroid Build Coastguard Worker 38*9880d681SAndroid Build Coastguard Worker 39*9880d681SAndroid Build Coastguard Worker// Generate padding sections to increase the string table size to at least 40*9880d681SAndroid Build Coastguard Worker// 1,000,000 bytes. 41*9880d681SAndroid Build Coastguard Worker.macro pad_sections2 pad 42*9880d681SAndroid Build Coastguard Worker // 10x \pad 43*9880d681SAndroid Build Coastguard Worker .section p0\pad\pad\pad\pad\pad\pad\pad\pad\pad\pad; .long 1 44*9880d681SAndroid Build Coastguard Worker .section p1\pad\pad\pad\pad\pad\pad\pad\pad\pad\pad; .long 1 45*9880d681SAndroid Build Coastguard Worker .section p2\pad\pad\pad\pad\pad\pad\pad\pad\pad\pad; .long 1 46*9880d681SAndroid Build Coastguard Worker .section p3\pad\pad\pad\pad\pad\pad\pad\pad\pad\pad; .long 1 47*9880d681SAndroid Build Coastguard Worker .section p4\pad\pad\pad\pad\pad\pad\pad\pad\pad\pad; .long 1 48*9880d681SAndroid Build Coastguard Worker.endm 49*9880d681SAndroid Build Coastguard Worker 50*9880d681SAndroid Build Coastguard Worker.macro pad_sections pad 51*9880d681SAndroid Build Coastguard Worker // 20x \pad 52*9880d681SAndroid Build Coastguard Worker pad_sections2 \pad\pad\pad\pad\pad\pad\pad\pad\pad\pad\pad\pad\pad\pad\pad\pad\pad\pad\pad\pad 53*9880d681SAndroid Build Coastguard Worker.endm 54*9880d681SAndroid Build Coastguard Worker 55*9880d681SAndroid Build Coastguard Worker// 1000x 'y' 56*9880d681SAndroid Build Coastguard Workerpad_sections yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy 57*9880d681SAndroid Build Coastguard Worker 58*9880d681SAndroid Build Coastguard Worker 59*9880d681SAndroid Build Coastguard Worker// /1000029 == 4 + 10 + (5 * (2 + (20 * 10 * 1000) + 1)) 60*9880d681SAndroid Build Coastguard Worker// v | | v ~~~~~~~~~~~~~~ v 61*9880d681SAndroid Build Coastguard Worker// table size v v "p0" pad NUL separator 62*9880d681SAndroid Build Coastguard Worker// "s1234567z\0" # of pad sections 63*9880d681SAndroid Build Coastguard Worker// 64*9880d681SAndroid Build Coastguard Worker// CHECK: Section { 65*9880d681SAndroid Build Coastguard Worker// CHECK: Number: 12 66*9880d681SAndroid Build Coastguard Worker// CHECK: Name: sevendigitx (2F 31 30 30 30 30 32 39) 67*9880d681SAndroid Build Coastguard Worker// CHECK: } 68*9880d681SAndroid Build Coastguard Worker.section sevendigitx; .long 1 69*9880d681SAndroid Build Coastguard Worker 70*9880d681SAndroid Build Coastguard Worker 71*9880d681SAndroid Build Coastguard Worker// Generate padding sections to increase the string table size to at least 72*9880d681SAndroid Build Coastguard Worker// 10,000,000 bytes. 73*9880d681SAndroid Build Coastguard Worker.macro pad_sections_ex pad 74*9880d681SAndroid Build Coastguard Worker // 9x \pad 75*9880d681SAndroid Build Coastguard Worker pad_sections \pad\pad\pad\pad\pad\pad\pad\pad\pad 76*9880d681SAndroid Build Coastguard Worker.endm 77*9880d681SAndroid Build Coastguard Worker 78*9880d681SAndroid Build Coastguard Worker// 1000x 'a' 79*9880d681SAndroid Build Coastguard Workerpad_sections_ex wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww 80*9880d681SAndroid Build Coastguard Worker 81*9880d681SAndroid Build Coastguard Worker 82*9880d681SAndroid Build Coastguard Worker// //AAmJa4 == 1000029 + 12 + (5 * (2 + (9 * 20 * 10 * 1000) + 1)) == 38*64^3 + 9*64^2 + 26*64 + 56 83*9880d681SAndroid Build Coastguard Worker// v | | v ~~~~~~~~~~~~~~~~~~ v 84*9880d681SAndroid Build Coastguard Worker// seven_digit offset v v "p0" pad NUL separator 85*9880d681SAndroid Build Coastguard Worker// "sevendigitx\0" # of pad sections 86*9880d681SAndroid Build Coastguard Worker// 87*9880d681SAndroid Build Coastguard Worker// "2F 2F 41 41 6D 4A 61 34" is "//AAmJa4", which decodes to "0 0 38 9 26 56". 88*9880d681SAndroid Build Coastguard Worker// 89*9880d681SAndroid Build Coastguard Worker// CHECK: Section { 90*9880d681SAndroid Build Coastguard Worker// CHECK: Number: 18 91*9880d681SAndroid Build Coastguard Worker// CHECK: Name: doubleslashv (2F 2F 41 41 6D 4A 61 34) 92*9880d681SAndroid Build Coastguard Worker// CHECK: } 93*9880d681SAndroid Build Coastguard Worker.section doubleslashv; .long 1 94