Be slightly more relaxed about how ppc64le global-entry TOC references look. Clang 4.0 on ppc64le generated symbols called “.LCE0” and so on. Change-Id: I6bacf24365aa547d0ca9e5f338e4bb966df31708 Reviewed-on: https://boringssl-review.googlesource.com/17005 Commit-Queue: Adam Langley <agl@google.com> Commit-Queue: David Benjamin <davidben@google.com> Reviewed-by: David Benjamin <davidben@google.com>
diff --git a/util/fipstools/delocate.peg b/util/fipstools/delocate.peg index 8aca69b..85cb72d 100644 --- a/util/fipstools/delocate.peg +++ b/util/fipstools/delocate.peg
@@ -58,8 +58,8 @@ Instruction <- InstructionName (WS InstructionArg ((WS? ',' WS?) InstructionArg)*)? InstructionName <- [[A-Z]][[A-Z0-9]]* [.+\-]? InstructionArg <- IndirectionIndicator? (RegisterOrConstant / LocalLabelRef / TOCRefHigh / TOCRefLow / MemoryRef) -TOCRefHigh <- '.TOC.-' ('0b' / ('.Lfunc_gep' [0-9]+)) "@ha" -TOCRefLow <- '.TOC.-' ('0b' / ('.Lfunc_gep' [0-9]+)) "@l" +TOCRefHigh <- '.TOC.-' ('0b' / ('.L' [a-zA-Z_0-9]+)) "@ha" +TOCRefLow <- '.TOC.-' ('0b' / ('.L' [a-zA-Z_0-9]+)) "@l" IndirectionIndicator <- '*' RegisterOrConstant <- (('%'[[A-Z]][[A-Z0-9]]*) / ('$'? ((Offset Offset) / Offset))) ![fb:(+\-] # Compilers only output a very limited number of expression forms. Rather than
diff --git a/util/fipstools/delocate.peg.go b/util/fipstools/delocate.peg.go index 3af31f3..9afd4d3 100644 --- a/util/fipstools/delocate.peg.go +++ b/util/fipstools/delocate.peg.go
@@ -2908,7 +2908,7 @@ position, tokenIndex = position356, tokenIndex356 return false }, - /* 28 TOCRefHigh <- <('.' 'T' 'O' 'C' '.' '-' (('0' 'b') / ('.' 'L' 'f' 'u' 'n' 'c' '_' 'g' 'e' 'p' [0-9]+)) ('@' ('h' / 'H') ('a' / 'A')))> */ + /* 28 TOCRefHigh <- <('.' 'T' 'O' 'C' '.' '-' (('0' 'b') / ('.' 'L' ([a-z] / [A-Z] / '_' / [0-9])+)) ('@' ('h' / 'H') ('a' / 'A')))> */ func() bool { position365, tokenIndex365 := position, tokenIndex { @@ -2958,49 +2958,67 @@ goto l365 } position++ - if buffer[position] != rune('f') { - goto l365 + { + position371, tokenIndex371 := position, tokenIndex + if c := buffer[position]; c < rune('a') || c > rune('z') { + goto l372 + } + position++ + goto l371 + l372: + position, tokenIndex = position371, tokenIndex371 + if c := buffer[position]; c < rune('A') || c > rune('Z') { + goto l373 + } + position++ + goto l371 + l373: + position, tokenIndex = position371, tokenIndex371 + if buffer[position] != rune('_') { + goto l374 + } + position++ + goto l371 + l374: + position, tokenIndex = position371, tokenIndex371 + if c := buffer[position]; c < rune('0') || c > rune('9') { + goto l365 + } + position++ } - position++ - if buffer[position] != rune('u') { - goto l365 - } - position++ - if buffer[position] != rune('n') { - goto l365 - } - position++ - if buffer[position] != rune('c') { - goto l365 - } - position++ - if buffer[position] != rune('_') { - goto l365 - } - position++ - if buffer[position] != rune('g') { - goto l365 - } - position++ - if buffer[position] != rune('e') { - goto l365 - } - position++ - if buffer[position] != rune('p') { - goto l365 - } - position++ - if c := buffer[position]; c < rune('0') || c > rune('9') { - goto l365 - } - position++ + l371: l369: { position370, tokenIndex370 := position, tokenIndex - if c := buffer[position]; c < rune('0') || c > rune('9') { - goto l370 + { + position375, tokenIndex375 := position, tokenIndex + if c := buffer[position]; c < rune('a') || c > rune('z') { + goto l376 + } + position++ + goto l375 + l376: + position, tokenIndex = position375, tokenIndex375 + if c := buffer[position]; c < rune('A') || c > rune('Z') { + goto l377 + } + position++ + goto l375 + l377: + position, tokenIndex = position375, tokenIndex375 + if buffer[position] != rune('_') { + goto l378 + } + position++ + goto l375 + l378: + position, tokenIndex = position375, tokenIndex375 + if c := buffer[position]; c < rune('0') || c > rune('9') { + goto l370 + } + position++ } - position++ + l375: goto l369 l370: position, tokenIndex = position370, tokenIndex370 @@ -3012,35 +3030,35 @@ } position++ { - position371, tokenIndex371 := position, tokenIndex + position379, tokenIndex379 := position, tokenIndex if buffer[position] != rune('h') { - goto l372 + goto l380 } position++ - goto l371 - l372: - position, tokenIndex = position371, tokenIndex371 + goto l379 + l380: + position, tokenIndex = position379, tokenIndex379 if buffer[position] != rune('H') { goto l365 } position++ } - l371: + l379: { - position373, tokenIndex373 := position, tokenIndex + position381, tokenIndex381 := position, tokenIndex if buffer[position] != rune('a') { - goto l374 + goto l382 } position++ - goto l373 - l374: - position, tokenIndex = position373, tokenIndex373 + goto l381 + l382: + position, tokenIndex = position381, tokenIndex381 if buffer[position] != rune('A') { goto l365 } position++ } - l373: + l381: add(ruleTOCRefHigh, position366) } return true @@ -3048,156 +3066,54 @@ position, tokenIndex = position365, tokenIndex365 return false }, - /* 29 TOCRefLow <- <('.' 'T' 'O' 'C' '.' '-' (('0' 'b') / ('.' 'L' 'f' 'u' 'n' 'c' '_' 'g' 'e' 'p' [0-9]+)) ('@' ('l' / 'L')))> */ - func() bool { - position375, tokenIndex375 := position, tokenIndex - { - position376 := position - if buffer[position] != rune('.') { - goto l375 - } - position++ - if buffer[position] != rune('T') { - goto l375 - } - position++ - if buffer[position] != rune('O') { - goto l375 - } - position++ - if buffer[position] != rune('C') { - goto l375 - } - position++ - if buffer[position] != rune('.') { - goto l375 - } - position++ - if buffer[position] != rune('-') { - goto l375 - } - position++ - { - position377, tokenIndex377 := position, tokenIndex - if buffer[position] != rune('0') { - goto l378 - } - position++ - if buffer[position] != rune('b') { - goto l378 - } - position++ - goto l377 - l378: - position, tokenIndex = position377, tokenIndex377 - if buffer[position] != rune('.') { - goto l375 - } - position++ - if buffer[position] != rune('L') { - goto l375 - } - position++ - if buffer[position] != rune('f') { - goto l375 - } - position++ - if buffer[position] != rune('u') { - goto l375 - } - position++ - if buffer[position] != rune('n') { - goto l375 - } - position++ - if buffer[position] != rune('c') { - goto l375 - } - position++ - if buffer[position] != rune('_') { - goto l375 - } - position++ - if buffer[position] != rune('g') { - goto l375 - } - position++ - if buffer[position] != rune('e') { - goto l375 - } - position++ - if buffer[position] != rune('p') { - goto l375 - } - position++ - if c := buffer[position]; c < rune('0') || c > rune('9') { - goto l375 - } - position++ - l379: - { - position380, tokenIndex380 := position, tokenIndex - if c := buffer[position]; c < rune('0') || c > rune('9') { - goto l380 - } - position++ - goto l379 - l380: - position, tokenIndex = position380, tokenIndex380 - } - } - l377: - if buffer[position] != rune('@') { - goto l375 - } - position++ - { - position381, tokenIndex381 := position, tokenIndex - if buffer[position] != rune('l') { - goto l382 - } - position++ - goto l381 - l382: - position, tokenIndex = position381, tokenIndex381 - if buffer[position] != rune('L') { - goto l375 - } - position++ - } - l381: - add(ruleTOCRefLow, position376) - } - return true - l375: - position, tokenIndex = position375, tokenIndex375 - return false - }, - /* 30 IndirectionIndicator <- <'*'> */ + /* 29 TOCRefLow <- <('.' 'T' 'O' 'C' '.' '-' (('0' 'b') / ('.' 'L' ([a-z] / [A-Z] / '_' / [0-9])+)) ('@' ('l' / 'L')))> */ func() bool { position383, tokenIndex383 := position, tokenIndex { position384 := position - if buffer[position] != rune('*') { + if buffer[position] != rune('.') { goto l383 } position++ - add(ruleIndirectionIndicator, position384) - } - return true - l383: - position, tokenIndex = position383, tokenIndex383 - return false - }, - /* 31 RegisterOrConstant <- <((('%' ([a-z] / [A-Z]) ([a-z] / [A-Z] / ([0-9] / [0-9]))*) / ('$'? ((Offset Offset) / Offset))) !('f' / 'b' / ':' / '(' / '+' / '-'))> */ - func() bool { - position385, tokenIndex385 := position, tokenIndex - { - position386 := position + if buffer[position] != rune('T') { + goto l383 + } + position++ + if buffer[position] != rune('O') { + goto l383 + } + position++ + if buffer[position] != rune('C') { + goto l383 + } + position++ + if buffer[position] != rune('.') { + goto l383 + } + position++ + if buffer[position] != rune('-') { + goto l383 + } + position++ { - position387, tokenIndex387 := position, tokenIndex - if buffer[position] != rune('%') { - goto l388 + position385, tokenIndex385 := position, tokenIndex + if buffer[position] != rune('0') { + goto l386 + } + position++ + if buffer[position] != rune('b') { + goto l386 + } + position++ + goto l385 + l386: + position, tokenIndex = position385, tokenIndex385 + if buffer[position] != rune('.') { + goto l383 + } + position++ + if buffer[position] != rune('L') { + goto l383 } position++ { @@ -3210,14 +3126,28 @@ l390: position, tokenIndex = position389, tokenIndex389 if c := buffer[position]; c < rune('A') || c > rune('Z') { - goto l388 + goto l391 + } + position++ + goto l389 + l391: + position, tokenIndex = position389, tokenIndex389 + if buffer[position] != rune('_') { + goto l392 + } + position++ + goto l389 + l392: + position, tokenIndex = position389, tokenIndex389 + if c := buffer[position]; c < rune('0') || c > rune('9') { + goto l383 } position++ } l389: - l391: + l387: { - position392, tokenIndex392 := position, tokenIndex + position388, tokenIndex388 := position, tokenIndex { position393, tokenIndex393 := position, tokenIndex if c := buffer[position]; c < rune('a') || c > rune('z') { @@ -3234,709 +3164,815 @@ goto l393 l395: position, tokenIndex = position393, tokenIndex393 - { - position396, tokenIndex396 := position, tokenIndex - if c := buffer[position]; c < rune('0') || c > rune('9') { - goto l397 - } - position++ + if buffer[position] != rune('_') { goto l396 - l397: - position, tokenIndex = position396, tokenIndex396 - if c := buffer[position]; c < rune('0') || c > rune('9') { - goto l392 - } - position++ } + position++ + goto l393 l396: + position, tokenIndex = position393, tokenIndex393 + if c := buffer[position]; c < rune('0') || c > rune('9') { + goto l388 + } + position++ } l393: - goto l391 - l392: - position, tokenIndex = position392, tokenIndex392 + goto l387 + l388: + position, tokenIndex = position388, tokenIndex388 } - goto l387 - l388: - position, tokenIndex = position387, tokenIndex387 - { - position398, tokenIndex398 := position, tokenIndex - if buffer[position] != rune('$') { - goto l398 - } - position++ - goto l399 - l398: - position, tokenIndex = position398, tokenIndex398 - } - l399: - { - position400, tokenIndex400 := position, tokenIndex - if !_rules[ruleOffset]() { - goto l401 - } - if !_rules[ruleOffset]() { - goto l401 - } - goto l400 - l401: - position, tokenIndex = position400, tokenIndex400 - if !_rules[ruleOffset]() { - goto l385 - } - } - l400: } - l387: + l385: + if buffer[position] != rune('@') { + goto l383 + } + position++ { - position402, tokenIndex402 := position, tokenIndex + position397, tokenIndex397 := position, tokenIndex + if buffer[position] != rune('l') { + goto l398 + } + position++ + goto l397 + l398: + position, tokenIndex = position397, tokenIndex397 + if buffer[position] != rune('L') { + goto l383 + } + position++ + } + l397: + add(ruleTOCRefLow, position384) + } + return true + l383: + position, tokenIndex = position383, tokenIndex383 + return false + }, + /* 30 IndirectionIndicator <- <'*'> */ + func() bool { + position399, tokenIndex399 := position, tokenIndex + { + position400 := position + if buffer[position] != rune('*') { + goto l399 + } + position++ + add(ruleIndirectionIndicator, position400) + } + return true + l399: + position, tokenIndex = position399, tokenIndex399 + return false + }, + /* 31 RegisterOrConstant <- <((('%' ([a-z] / [A-Z]) ([a-z] / [A-Z] / ([0-9] / [0-9]))*) / ('$'? ((Offset Offset) / Offset))) !('f' / 'b' / ':' / '(' / '+' / '-'))> */ + func() bool { + position401, tokenIndex401 := position, tokenIndex + { + position402 := position + { + position403, tokenIndex403 := position, tokenIndex + if buffer[position] != rune('%') { + goto l404 + } + position++ { - position403, tokenIndex403 := position, tokenIndex - if buffer[position] != rune('f') { - goto l404 - } - position++ - goto l403 - l404: - position, tokenIndex = position403, tokenIndex403 - if buffer[position] != rune('b') { - goto l405 - } - position++ - goto l403 - l405: - position, tokenIndex = position403, tokenIndex403 - if buffer[position] != rune(':') { + position405, tokenIndex405 := position, tokenIndex + if c := buffer[position]; c < rune('a') || c > rune('z') { goto l406 } position++ - goto l403 + goto l405 l406: - position, tokenIndex = position403, tokenIndex403 - if buffer[position] != rune('(') { - goto l407 + position, tokenIndex = position405, tokenIndex405 + if c := buffer[position]; c < rune('A') || c > rune('Z') { + goto l404 } position++ - goto l403 - l407: - position, tokenIndex = position403, tokenIndex403 - if buffer[position] != rune('+') { - goto l408 + } + l405: + l407: + { + position408, tokenIndex408 := position, tokenIndex + { + position409, tokenIndex409 := position, tokenIndex + if c := buffer[position]; c < rune('a') || c > rune('z') { + goto l410 + } + position++ + goto l409 + l410: + position, tokenIndex = position409, tokenIndex409 + if c := buffer[position]; c < rune('A') || c > rune('Z') { + goto l411 + } + position++ + goto l409 + l411: + position, tokenIndex = position409, tokenIndex409 + { + position412, tokenIndex412 := position, tokenIndex + if c := buffer[position]; c < rune('0') || c > rune('9') { + goto l413 + } + position++ + goto l412 + l413: + position, tokenIndex = position412, tokenIndex412 + if c := buffer[position]; c < rune('0') || c > rune('9') { + goto l408 + } + position++ + } + l412: } - position++ - goto l403 + l409: + goto l407 l408: - position, tokenIndex = position403, tokenIndex403 - if buffer[position] != rune('-') { - goto l402 + position, tokenIndex = position408, tokenIndex408 + } + goto l403 + l404: + position, tokenIndex = position403, tokenIndex403 + { + position414, tokenIndex414 := position, tokenIndex + if buffer[position] != rune('$') { + goto l414 } position++ + goto l415 + l414: + position, tokenIndex = position414, tokenIndex414 } - l403: - goto l385 - l402: - position, tokenIndex = position402, tokenIndex402 - } - add(ruleRegisterOrConstant, position386) - } - return true - l385: - position, tokenIndex = position385, tokenIndex385 - return false - }, - /* 32 MemoryRef <- <((SymbolRef BaseIndexScale) / SymbolRef / (Offset* BaseIndexScale) / (SegmentRegister Offset BaseIndexScale) / (SegmentRegister BaseIndexScale) / (SegmentRegister Offset) / BaseIndexScale)> */ - func() bool { - position409, tokenIndex409 := position, tokenIndex - { - position410 := position - { - position411, tokenIndex411 := position, tokenIndex - if !_rules[ruleSymbolRef]() { - goto l412 - } - if !_rules[ruleBaseIndexScale]() { - goto l412 - } - goto l411 - l412: - position, tokenIndex = position411, tokenIndex411 - if !_rules[ruleSymbolRef]() { - goto l413 - } - goto l411 - l413: - position, tokenIndex = position411, tokenIndex411 l415: { position416, tokenIndex416 := position, tokenIndex if !_rules[ruleOffset]() { - goto l416 + goto l417 } - goto l415 - l416: + if !_rules[ruleOffset]() { + goto l417 + } + goto l416 + l417: position, tokenIndex = position416, tokenIndex416 + if !_rules[ruleOffset]() { + goto l401 + } } - if !_rules[ruleBaseIndexScale]() { - goto l414 - } - goto l411 - l414: - position, tokenIndex = position411, tokenIndex411 - if !_rules[ruleSegmentRegister]() { - goto l417 - } - if !_rules[ruleOffset]() { - goto l417 - } - if !_rules[ruleBaseIndexScale]() { - goto l417 - } - goto l411 - l417: - position, tokenIndex = position411, tokenIndex411 - if !_rules[ruleSegmentRegister]() { - goto l418 - } - if !_rules[ruleBaseIndexScale]() { - goto l418 - } - goto l411 - l418: - position, tokenIndex = position411, tokenIndex411 - if !_rules[ruleSegmentRegister]() { - goto l419 - } - if !_rules[ruleOffset]() { - goto l419 - } - goto l411 - l419: - position, tokenIndex = position411, tokenIndex411 - if !_rules[ruleBaseIndexScale]() { - goto l409 - } + l416: } - l411: - add(ruleMemoryRef, position410) + l403: + { + position418, tokenIndex418 := position, tokenIndex + { + position419, tokenIndex419 := position, tokenIndex + if buffer[position] != rune('f') { + goto l420 + } + position++ + goto l419 + l420: + position, tokenIndex = position419, tokenIndex419 + if buffer[position] != rune('b') { + goto l421 + } + position++ + goto l419 + l421: + position, tokenIndex = position419, tokenIndex419 + if buffer[position] != rune(':') { + goto l422 + } + position++ + goto l419 + l422: + position, tokenIndex = position419, tokenIndex419 + if buffer[position] != rune('(') { + goto l423 + } + position++ + goto l419 + l423: + position, tokenIndex = position419, tokenIndex419 + if buffer[position] != rune('+') { + goto l424 + } + position++ + goto l419 + l424: + position, tokenIndex = position419, tokenIndex419 + if buffer[position] != rune('-') { + goto l418 + } + position++ + } + l419: + goto l401 + l418: + position, tokenIndex = position418, tokenIndex418 + } + add(ruleRegisterOrConstant, position402) } return true - l409: - position, tokenIndex = position409, tokenIndex409 + l401: + position, tokenIndex = position401, tokenIndex401 + return false + }, + /* 32 MemoryRef <- <((SymbolRef BaseIndexScale) / SymbolRef / (Offset* BaseIndexScale) / (SegmentRegister Offset BaseIndexScale) / (SegmentRegister BaseIndexScale) / (SegmentRegister Offset) / BaseIndexScale)> */ + func() bool { + position425, tokenIndex425 := position, tokenIndex + { + position426 := position + { + position427, tokenIndex427 := position, tokenIndex + if !_rules[ruleSymbolRef]() { + goto l428 + } + if !_rules[ruleBaseIndexScale]() { + goto l428 + } + goto l427 + l428: + position, tokenIndex = position427, tokenIndex427 + if !_rules[ruleSymbolRef]() { + goto l429 + } + goto l427 + l429: + position, tokenIndex = position427, tokenIndex427 + l431: + { + position432, tokenIndex432 := position, tokenIndex + if !_rules[ruleOffset]() { + goto l432 + } + goto l431 + l432: + position, tokenIndex = position432, tokenIndex432 + } + if !_rules[ruleBaseIndexScale]() { + goto l430 + } + goto l427 + l430: + position, tokenIndex = position427, tokenIndex427 + if !_rules[ruleSegmentRegister]() { + goto l433 + } + if !_rules[ruleOffset]() { + goto l433 + } + if !_rules[ruleBaseIndexScale]() { + goto l433 + } + goto l427 + l433: + position, tokenIndex = position427, tokenIndex427 + if !_rules[ruleSegmentRegister]() { + goto l434 + } + if !_rules[ruleBaseIndexScale]() { + goto l434 + } + goto l427 + l434: + position, tokenIndex = position427, tokenIndex427 + if !_rules[ruleSegmentRegister]() { + goto l435 + } + if !_rules[ruleOffset]() { + goto l435 + } + goto l427 + l435: + position, tokenIndex = position427, tokenIndex427 + if !_rules[ruleBaseIndexScale]() { + goto l425 + } + } + l427: + add(ruleMemoryRef, position426) + } + return true + l425: + position, tokenIndex = position425, tokenIndex425 return false }, /* 33 SymbolRef <- <((Offset* '+')? (LocalSymbol / SymbolName) Offset* ('@' Section Offset*)?)> */ func() bool { - position420, tokenIndex420 := position, tokenIndex + position436, tokenIndex436 := position, tokenIndex { - position421 := position - { - position422, tokenIndex422 := position, tokenIndex - l424: - { - position425, tokenIndex425 := position, tokenIndex - if !_rules[ruleOffset]() { - goto l425 - } - goto l424 - l425: - position, tokenIndex = position425, tokenIndex425 - } - if buffer[position] != rune('+') { - goto l422 - } - position++ - goto l423 - l422: - position, tokenIndex = position422, tokenIndex422 - } - l423: - { - position426, tokenIndex426 := position, tokenIndex - if !_rules[ruleLocalSymbol]() { - goto l427 - } - goto l426 - l427: - position, tokenIndex = position426, tokenIndex426 - if !_rules[ruleSymbolName]() { - goto l420 - } - } - l426: - l428: - { - position429, tokenIndex429 := position, tokenIndex - if !_rules[ruleOffset]() { - goto l429 - } - goto l428 - l429: - position, tokenIndex = position429, tokenIndex429 - } - { - position430, tokenIndex430 := position, tokenIndex - if buffer[position] != rune('@') { - goto l430 - } - position++ - if !_rules[ruleSection]() { - goto l430 - } - l432: - { - position433, tokenIndex433 := position, tokenIndex - if !_rules[ruleOffset]() { - goto l433 - } - goto l432 - l433: - position, tokenIndex = position433, tokenIndex433 - } - goto l431 - l430: - position, tokenIndex = position430, tokenIndex430 - } - l431: - add(ruleSymbolRef, position421) - } - return true - l420: - position, tokenIndex = position420, tokenIndex420 - return false - }, - /* 34 BaseIndexScale <- <('(' RegisterOrConstant? WS? (',' WS? RegisterOrConstant WS? (',' [0-9]+)?)? ')')> */ - func() bool { - position434, tokenIndex434 := position, tokenIndex - { - position435 := position - if buffer[position] != rune('(') { - goto l434 - } - position++ - { - position436, tokenIndex436 := position, tokenIndex - if !_rules[ruleRegisterOrConstant]() { - goto l436 - } - goto l437 - l436: - position, tokenIndex = position436, tokenIndex436 - } - l437: + position437 := position { position438, tokenIndex438 := position, tokenIndex - if !_rules[ruleWS]() { + l440: + { + position441, tokenIndex441 := position, tokenIndex + if !_rules[ruleOffset]() { + goto l441 + } + goto l440 + l441: + position, tokenIndex = position441, tokenIndex441 + } + if buffer[position] != rune('+') { goto l438 } + position++ goto l439 l438: position, tokenIndex = position438, tokenIndex438 } l439: { - position440, tokenIndex440 := position, tokenIndex - if buffer[position] != rune(',') { - goto l440 + position442, tokenIndex442 := position, tokenIndex + if !_rules[ruleLocalSymbol]() { + goto l443 + } + goto l442 + l443: + position, tokenIndex = position442, tokenIndex442 + if !_rules[ruleSymbolName]() { + goto l436 + } + } + l442: + l444: + { + position445, tokenIndex445 := position, tokenIndex + if !_rules[ruleOffset]() { + goto l445 + } + goto l444 + l445: + position, tokenIndex = position445, tokenIndex445 + } + { + position446, tokenIndex446 := position, tokenIndex + if buffer[position] != rune('@') { + goto l446 } position++ + if !_rules[ruleSection]() { + goto l446 + } + l448: { - position442, tokenIndex442 := position, tokenIndex - if !_rules[ruleWS]() { - goto l442 + position449, tokenIndex449 := position, tokenIndex + if !_rules[ruleOffset]() { + goto l449 } - goto l443 - l442: - position, tokenIndex = position442, tokenIndex442 + goto l448 + l449: + position, tokenIndex = position449, tokenIndex449 } - l443: - if !_rules[ruleRegisterOrConstant]() { - goto l440 - } - { - position444, tokenIndex444 := position, tokenIndex - if !_rules[ruleWS]() { - goto l444 - } - goto l445 - l444: - position, tokenIndex = position444, tokenIndex444 - } - l445: - { - position446, tokenIndex446 := position, tokenIndex - if buffer[position] != rune(',') { - goto l446 - } - position++ - if c := buffer[position]; c < rune('0') || c > rune('9') { - goto l446 - } - position++ - l448: - { - position449, tokenIndex449 := position, tokenIndex - if c := buffer[position]; c < rune('0') || c > rune('9') { - goto l449 - } - position++ - goto l448 - l449: - position, tokenIndex = position449, tokenIndex449 - } - goto l447 - l446: - position, tokenIndex = position446, tokenIndex446 - } - l447: - goto l441 - l440: - position, tokenIndex = position440, tokenIndex440 + goto l447 + l446: + position, tokenIndex = position446, tokenIndex446 } - l441: - if buffer[position] != rune(')') { - goto l434 - } - position++ - add(ruleBaseIndexScale, position435) + l447: + add(ruleSymbolRef, position437) } return true - l434: - position, tokenIndex = position434, tokenIndex434 + l436: + position, tokenIndex = position436, tokenIndex436 return false }, - /* 35 Operator <- <('+' / '-')> */ + /* 34 BaseIndexScale <- <('(' RegisterOrConstant? WS? (',' WS? RegisterOrConstant WS? (',' [0-9]+)?)? ')')> */ func() bool { position450, tokenIndex450 := position, tokenIndex { position451 := position + if buffer[position] != rune('(') { + goto l450 + } + position++ { position452, tokenIndex452 := position, tokenIndex - if buffer[position] != rune('+') { - goto l453 + if !_rules[ruleRegisterOrConstant]() { + goto l452 } - position++ - goto l452 - l453: + goto l453 + l452: position, tokenIndex = position452, tokenIndex452 - if buffer[position] != rune('-') { - goto l450 + } + l453: + { + position454, tokenIndex454 := position, tokenIndex + if !_rules[ruleWS]() { + goto l454 + } + goto l455 + l454: + position, tokenIndex = position454, tokenIndex454 + } + l455: + { + position456, tokenIndex456 := position, tokenIndex + if buffer[position] != rune(',') { + goto l456 } position++ + { + position458, tokenIndex458 := position, tokenIndex + if !_rules[ruleWS]() { + goto l458 + } + goto l459 + l458: + position, tokenIndex = position458, tokenIndex458 + } + l459: + if !_rules[ruleRegisterOrConstant]() { + goto l456 + } + { + position460, tokenIndex460 := position, tokenIndex + if !_rules[ruleWS]() { + goto l460 + } + goto l461 + l460: + position, tokenIndex = position460, tokenIndex460 + } + l461: + { + position462, tokenIndex462 := position, tokenIndex + if buffer[position] != rune(',') { + goto l462 + } + position++ + if c := buffer[position]; c < rune('0') || c > rune('9') { + goto l462 + } + position++ + l464: + { + position465, tokenIndex465 := position, tokenIndex + if c := buffer[position]; c < rune('0') || c > rune('9') { + goto l465 + } + position++ + goto l464 + l465: + position, tokenIndex = position465, tokenIndex465 + } + goto l463 + l462: + position, tokenIndex = position462, tokenIndex462 + } + l463: + goto l457 + l456: + position, tokenIndex = position456, tokenIndex456 } - l452: - add(ruleOperator, position451) + l457: + if buffer[position] != rune(')') { + goto l450 + } + position++ + add(ruleBaseIndexScale, position451) } return true l450: position, tokenIndex = position450, tokenIndex450 return false }, + /* 35 Operator <- <('+' / '-')> */ + func() bool { + position466, tokenIndex466 := position, tokenIndex + { + position467 := position + { + position468, tokenIndex468 := position, tokenIndex + if buffer[position] != rune('+') { + goto l469 + } + position++ + goto l468 + l469: + position, tokenIndex = position468, tokenIndex468 + if buffer[position] != rune('-') { + goto l466 + } + position++ + } + l468: + add(ruleOperator, position467) + } + return true + l466: + position, tokenIndex = position466, tokenIndex466 + return false + }, /* 36 Offset <- <('+'? '-'? (('0' ('b' / 'B') ('0' / '1')+) / ('0' ('x' / 'X') ([0-9] / [0-9] / ([a-f] / [A-F]))+) / [0-9]+))> */ func() bool { - position454, tokenIndex454 := position, tokenIndex + position470, tokenIndex470 := position, tokenIndex { - position455 := position + position471 := position { - position456, tokenIndex456 := position, tokenIndex + position472, tokenIndex472 := position, tokenIndex if buffer[position] != rune('+') { - goto l456 + goto l472 } position++ - goto l457 - l456: - position, tokenIndex = position456, tokenIndex456 + goto l473 + l472: + position, tokenIndex = position472, tokenIndex472 } - l457: + l473: { - position458, tokenIndex458 := position, tokenIndex + position474, tokenIndex474 := position, tokenIndex if buffer[position] != rune('-') { - goto l458 + goto l474 } position++ - goto l459 - l458: - position, tokenIndex = position458, tokenIndex458 + goto l475 + l474: + position, tokenIndex = position474, tokenIndex474 } - l459: + l475: { - position460, tokenIndex460 := position, tokenIndex + position476, tokenIndex476 := position, tokenIndex if buffer[position] != rune('0') { - goto l461 + goto l477 } position++ { - position462, tokenIndex462 := position, tokenIndex + position478, tokenIndex478 := position, tokenIndex if buffer[position] != rune('b') { - goto l463 + goto l479 } position++ - goto l462 - l463: - position, tokenIndex = position462, tokenIndex462 + goto l478 + l479: + position, tokenIndex = position478, tokenIndex478 if buffer[position] != rune('B') { - goto l461 - } - position++ - } - l462: - { - position466, tokenIndex466 := position, tokenIndex - if buffer[position] != rune('0') { - goto l467 - } - position++ - goto l466 - l467: - position, tokenIndex = position466, tokenIndex466 - if buffer[position] != rune('1') { - goto l461 - } - position++ - } - l466: - l464: - { - position465, tokenIndex465 := position, tokenIndex - { - position468, tokenIndex468 := position, tokenIndex - if buffer[position] != rune('0') { - goto l469 - } - position++ - goto l468 - l469: - position, tokenIndex = position468, tokenIndex468 - if buffer[position] != rune('1') { - goto l465 - } - position++ - } - l468: - goto l464 - l465: - position, tokenIndex = position465, tokenIndex465 - } - goto l460 - l461: - position, tokenIndex = position460, tokenIndex460 - if buffer[position] != rune('0') { - goto l470 - } - position++ - { - position471, tokenIndex471 := position, tokenIndex - if buffer[position] != rune('x') { - goto l472 - } - position++ - goto l471 - l472: - position, tokenIndex = position471, tokenIndex471 - if buffer[position] != rune('X') { - goto l470 - } - position++ - } - l471: - { - position475, tokenIndex475 := position, tokenIndex - if c := buffer[position]; c < rune('0') || c > rune('9') { - goto l476 - } - position++ - goto l475 - l476: - position, tokenIndex = position475, tokenIndex475 - if c := buffer[position]; c < rune('0') || c > rune('9') { goto l477 } position++ - goto l475 - l477: - position, tokenIndex = position475, tokenIndex475 - { - position478, tokenIndex478 := position, tokenIndex - if c := buffer[position]; c < rune('a') || c > rune('f') { - goto l479 - } - position++ - goto l478 - l479: - position, tokenIndex = position478, tokenIndex478 - if c := buffer[position]; c < rune('A') || c > rune('F') { - goto l470 - } - position++ - } - l478: } - l475: - l473: + l478: { - position474, tokenIndex474 := position, tokenIndex + position482, tokenIndex482 := position, tokenIndex + if buffer[position] != rune('0') { + goto l483 + } + position++ + goto l482 + l483: + position, tokenIndex = position482, tokenIndex482 + if buffer[position] != rune('1') { + goto l477 + } + position++ + } + l482: + l480: + { + position481, tokenIndex481 := position, tokenIndex { - position480, tokenIndex480 := position, tokenIndex - if c := buffer[position]; c < rune('0') || c > rune('9') { + position484, tokenIndex484 := position, tokenIndex + if buffer[position] != rune('0') { + goto l485 + } + position++ + goto l484 + l485: + position, tokenIndex = position484, tokenIndex484 + if buffer[position] != rune('1') { goto l481 } position++ - goto l480 - l481: - position, tokenIndex = position480, tokenIndex480 - if c := buffer[position]; c < rune('0') || c > rune('9') { - goto l482 - } - position++ - goto l480 - l482: - position, tokenIndex = position480, tokenIndex480 - { - position483, tokenIndex483 := position, tokenIndex - if c := buffer[position]; c < rune('a') || c > rune('f') { - goto l484 - } - position++ - goto l483 - l484: - position, tokenIndex = position483, tokenIndex483 - if c := buffer[position]; c < rune('A') || c > rune('F') { - goto l474 - } - position++ - } - l483: } - l480: - goto l473 - l474: - position, tokenIndex = position474, tokenIndex474 + l484: + goto l480 + l481: + position, tokenIndex = position481, tokenIndex481 } - goto l460 - l470: - position, tokenIndex = position460, tokenIndex460 - if c := buffer[position]; c < rune('0') || c > rune('9') { - goto l454 + goto l476 + l477: + position, tokenIndex = position476, tokenIndex476 + if buffer[position] != rune('0') { + goto l486 } position++ - l485: { - position486, tokenIndex486 := position, tokenIndex - if c := buffer[position]; c < rune('0') || c > rune('9') { + position487, tokenIndex487 := position, tokenIndex + if buffer[position] != rune('x') { + goto l488 + } + position++ + goto l487 + l488: + position, tokenIndex = position487, tokenIndex487 + if buffer[position] != rune('X') { goto l486 } position++ - goto l485 - l486: - position, tokenIndex = position486, tokenIndex486 + } + l487: + { + position491, tokenIndex491 := position, tokenIndex + if c := buffer[position]; c < rune('0') || c > rune('9') { + goto l492 + } + position++ + goto l491 + l492: + position, tokenIndex = position491, tokenIndex491 + if c := buffer[position]; c < rune('0') || c > rune('9') { + goto l493 + } + position++ + goto l491 + l493: + position, tokenIndex = position491, tokenIndex491 + { + position494, tokenIndex494 := position, tokenIndex + if c := buffer[position]; c < rune('a') || c > rune('f') { + goto l495 + } + position++ + goto l494 + l495: + position, tokenIndex = position494, tokenIndex494 + if c := buffer[position]; c < rune('A') || c > rune('F') { + goto l486 + } + position++ + } + l494: + } + l491: + l489: + { + position490, tokenIndex490 := position, tokenIndex + { + position496, tokenIndex496 := position, tokenIndex + if c := buffer[position]; c < rune('0') || c > rune('9') { + goto l497 + } + position++ + goto l496 + l497: + position, tokenIndex = position496, tokenIndex496 + if c := buffer[position]; c < rune('0') || c > rune('9') { + goto l498 + } + position++ + goto l496 + l498: + position, tokenIndex = position496, tokenIndex496 + { + position499, tokenIndex499 := position, tokenIndex + if c := buffer[position]; c < rune('a') || c > rune('f') { + goto l500 + } + position++ + goto l499 + l500: + position, tokenIndex = position499, tokenIndex499 + if c := buffer[position]; c < rune('A') || c > rune('F') { + goto l490 + } + position++ + } + l499: + } + l496: + goto l489 + l490: + position, tokenIndex = position490, tokenIndex490 + } + goto l476 + l486: + position, tokenIndex = position476, tokenIndex476 + if c := buffer[position]; c < rune('0') || c > rune('9') { + goto l470 + } + position++ + l501: + { + position502, tokenIndex502 := position, tokenIndex + if c := buffer[position]; c < rune('0') || c > rune('9') { + goto l502 + } + position++ + goto l501 + l502: + position, tokenIndex = position502, tokenIndex502 } } - l460: - add(ruleOffset, position455) + l476: + add(ruleOffset, position471) } return true - l454: - position, tokenIndex = position454, tokenIndex454 + l470: + position, tokenIndex = position470, tokenIndex470 return false }, /* 37 Section <- <([a-z] / [A-Z] / '@')+> */ func() bool { - position487, tokenIndex487 := position, tokenIndex + position503, tokenIndex503 := position, tokenIndex { - position488 := position + position504 := position { - position491, tokenIndex491 := position, tokenIndex + position507, tokenIndex507 := position, tokenIndex if c := buffer[position]; c < rune('a') || c > rune('z') { - goto l492 + goto l508 } position++ - goto l491 - l492: - position, tokenIndex = position491, tokenIndex491 + goto l507 + l508: + position, tokenIndex = position507, tokenIndex507 if c := buffer[position]; c < rune('A') || c > rune('Z') { - goto l493 + goto l509 } position++ - goto l491 - l493: - position, tokenIndex = position491, tokenIndex491 + goto l507 + l509: + position, tokenIndex = position507, tokenIndex507 if buffer[position] != rune('@') { - goto l487 + goto l503 } position++ } - l491: - l489: + l507: + l505: { - position490, tokenIndex490 := position, tokenIndex + position506, tokenIndex506 := position, tokenIndex { - position494, tokenIndex494 := position, tokenIndex + position510, tokenIndex510 := position, tokenIndex if c := buffer[position]; c < rune('a') || c > rune('z') { - goto l495 + goto l511 } position++ - goto l494 - l495: - position, tokenIndex = position494, tokenIndex494 + goto l510 + l511: + position, tokenIndex = position510, tokenIndex510 if c := buffer[position]; c < rune('A') || c > rune('Z') { - goto l496 + goto l512 } position++ - goto l494 - l496: - position, tokenIndex = position494, tokenIndex494 + goto l510 + l512: + position, tokenIndex = position510, tokenIndex510 if buffer[position] != rune('@') { - goto l490 + goto l506 } position++ } - l494: - goto l489 - l490: - position, tokenIndex = position490, tokenIndex490 + l510: + goto l505 + l506: + position, tokenIndex = position506, tokenIndex506 } - add(ruleSection, position488) + add(ruleSection, position504) } return true - l487: - position, tokenIndex = position487, tokenIndex487 + l503: + position, tokenIndex = position503, tokenIndex503 return false }, /* 38 SegmentRegister <- <('%' ([c-g] / 's') ('s' ':'))> */ func() bool { - position497, tokenIndex497 := position, tokenIndex + position513, tokenIndex513 := position, tokenIndex { - position498 := position + position514 := position if buffer[position] != rune('%') { - goto l497 + goto l513 } position++ { - position499, tokenIndex499 := position, tokenIndex + position515, tokenIndex515 := position, tokenIndex if c := buffer[position]; c < rune('c') || c > rune('g') { - goto l500 + goto l516 } position++ - goto l499 - l500: - position, tokenIndex = position499, tokenIndex499 + goto l515 + l516: + position, tokenIndex = position515, tokenIndex515 if buffer[position] != rune('s') { - goto l497 + goto l513 } position++ } - l499: + l515: if buffer[position] != rune('s') { - goto l497 + goto l513 } position++ if buffer[position] != rune(':') { - goto l497 + goto l513 } position++ - add(ruleSegmentRegister, position498) + add(ruleSegmentRegister, position514) } return true - l497: - position, tokenIndex = position497, tokenIndex497 + l513: + position, tokenIndex = position513, tokenIndex513 return false }, }
diff --git a/util/fipstools/delocate_test.go b/util/fipstools/delocate_test.go index 277d188..6eae786 100644 --- a/util/fipstools/delocate_test.go +++ b/util/fipstools/delocate_test.go
@@ -46,6 +46,7 @@ {"ppc64le-Sample", []string{"in.s"}, "out.s"}, {"ppc64le-Sample2", []string{"in.s"}, "out.s"}, {"ppc64le-TOCWithOffset", []string{"in.s"}, "out.s"}, + {"ppc64le-GlobalEntry", []string{"in.s"}, "out.s"}, } func TestDelocate(t *testing.T) {
diff --git a/util/fipstools/testdata/ppc64le-GlobalEntry/in.s b/util/fipstools/testdata/ppc64le-GlobalEntry/in.s new file mode 100644 index 0000000..af1a182 --- /dev/null +++ b/util/fipstools/testdata/ppc64le-GlobalEntry/in.s
@@ -0,0 +1,9 @@ + .text +foo: +.LCF0: +0: + addis 2,12,.TOC.-.LCF0@ha + addi 2,2,.TOC.-.LCF0@l + .localentry foo,.-foo +.LVL0: + bl
diff --git a/util/fipstools/testdata/ppc64le-GlobalEntry/out.s b/util/fipstools/testdata/ppc64le-GlobalEntry/out.s new file mode 100644 index 0000000..56f5b5f --- /dev/null +++ b/util/fipstools/testdata/ppc64le-GlobalEntry/out.s
@@ -0,0 +1,91 @@ +.text +BORINGSSL_bcm_text_start: + .text +.Lfoo_local_target: +foo: +.LCF0: + +0: + +999: + addis 2, 12, .LBORINGSSL_external_toc-999b@ha + addi 2, 2, .LBORINGSSL_external_toc-999b@l + ld 12, 0(2) + add 2, 2, 12 +# WAS addi 2,2,.TOC.-.LCF0@l + .localentry foo,.-foo +.Lfoo_local_entry: +.LVL0: + + bl +.text +BORINGSSL_bcm_text_end: +.LBORINGSSL_external_toc: +.quad .TOC.-.LBORINGSSL_external_toc +.type BORINGSSL_bcm_text_hash, @object +.size BORINGSSL_bcm_text_hash, 64 +BORINGSSL_bcm_text_hash: +.byte 0xae +.byte 0x2c +.byte 0xea +.byte 0x2a +.byte 0xbd +.byte 0xa6 +.byte 0xf3 +.byte 0xec +.byte 0x97 +.byte 0x7f +.byte 0x9b +.byte 0xf6 +.byte 0x94 +.byte 0x9a +.byte 0xfc +.byte 0x83 +.byte 0x68 +.byte 0x27 +.byte 0xcb +.byte 0xa0 +.byte 0xa0 +.byte 0x9f +.byte 0x6b +.byte 0x6f +.byte 0xde +.byte 0x52 +.byte 0xcd +.byte 0xe2 +.byte 0xcd +.byte 0xff +.byte 0x31 +.byte 0x80 +.byte 0xa2 +.byte 0xd4 +.byte 0xc3 +.byte 0x66 +.byte 0xf +.byte 0xc2 +.byte 0x6a +.byte 0x7b +.byte 0xf4 +.byte 0xbe +.byte 0x39 +.byte 0xa2 +.byte 0xd7 +.byte 0x25 +.byte 0xdb +.byte 0x21 +.byte 0x98 +.byte 0xe9 +.byte 0xd5 +.byte 0x53 +.byte 0xbf +.byte 0x5c +.byte 0x32 +.byte 0x6 +.byte 0x83 +.byte 0x34 +.byte 0xc +.byte 0x65 +.byte 0x89 +.byte 0x52 +.byte 0xbd +.byte 0x1f