Remove ppc64le delocate and FIPS build.

Change-Id: I81ae040c23ff07cac9156456ba7050dc35775608
Reviewed-on: https://boringssl-review.googlesource.com/c/boringssl/+/56387
Commit-Queue: David Benjamin <davidben@google.com>
Reviewed-by: Adam Langley <agl@google.com>
diff --git a/util/fipstools/acvp/modulewrapper/main.cc b/util/fipstools/acvp/modulewrapper/main.cc
index a903361..03aead5 100644
--- a/util/fipstools/acvp/modulewrapper/main.cc
+++ b/util/fipstools/acvp/modulewrapper/main.cc
@@ -33,8 +33,6 @@
     puts("ARM (32-bit)");
 #elif defined(OPENSSL_AARCH64)
     puts("aarch64 (64-bit)");
-#elif defined(OPENSSL_PPC64LE)
-    puts("PPC64LE (64-bit)");
 #else
 #error "FIPS build not supported on this architecture"
 #endif
diff --git a/util/fipstools/delocate/delocate.go b/util/fipstools/delocate/delocate.go
index 7f4b8f5..c9daff9 100644
--- a/util/fipstools/delocate/delocate.go
+++ b/util/fipstools/delocate/delocate.go
@@ -54,8 +54,7 @@
 type processorType int
 
 const (
-	ppc64le processorType = iota + 1
-	x86_64
+	x86_64 processorType = iota + 1
 	aarch64
 )
 
@@ -68,8 +67,6 @@
 
 	// symbols is the set of symbols defined in the module.
 	symbols map[string]struct{}
-	// localEntrySymbols is the set of symbols with .localentry directives.
-	localEntrySymbols map[string]struct{}
 	// redirectors maps from out-call symbol name to the name of a
 	// redirector function for that symbol. E.g. “memcpy” ->
 	// “bcm_redirector_memcpy”.
@@ -78,9 +75,6 @@
 	// should be used to reference it. E.g. “P384_data_storage” ->
 	// “P384_data_storage”.
 	bssAccessorsNeeded map[string]string
-	// tocLoaders is a set of symbol names for which TOC helper functions
-	// are required. (ppc64le only.)
-	tocLoaders map[string]struct{}
 	// gotExternalsNeeded is a set of symbol names for which we need
 	// “delta” symbols: symbols that contain the offset from their location
 	// to the memory in question.
@@ -157,8 +151,6 @@
 			switch d.processor {
 			case x86_64:
 				statement, err = d.processIntelInstruction(statement, node.up)
-			case ppc64le:
-				statement, err = d.processPPCInstruction(statement, node.up)
 			case aarch64:
 				statement, err = d.processAarch64Instruction(statement, node.up)
 			default:
@@ -255,7 +247,7 @@
 			d.writeNode(statement)
 			break
 
-		case ".debug", ".note", ".toc":
+		case ".debug", ".note":
 			d.writeNode(statement)
 			break
 
@@ -315,10 +307,6 @@
 		d.output.WriteString("\t" + name + "\t" + strings.Join(args, ", ") + "\n")
 	}
 
-	if name == ".localentry" {
-		d.output.WriteString(localEntryName(args[0]) + ":\n")
-	}
-
 	return statement, nil
 }
 
@@ -629,191 +617,6 @@
 	return statement, nil
 }
 
-/* ppc64le
-
-[PABI]: “64-Bit ELF V2 ABI Specification. Power Architecture.” March 21st,
-        2017
-
-(Also useful is “Power ISA Version 2.07 B”. Note that version three of that
-document is /not/ good as that's POWER9 specific.)
-
-ppc64le doesn't have IP-relative addressing and does a lot to work around this.
-Rather than reference a PLT and GOT direction, it has a single structure called
-the TOC (Table Of Contents). Within the TOC is the contents of .rodata, .data,
-.got, .plt, .bss, etc sections [PABI;3.3].
-
-A pointer to the TOC is maintained in r2 and the following pattern is used to
-load the address of an element into a register:
-
-  addis <address register>, 2, foo@toc@ha
-  addi <address register>, <address register>, foo@toc@l
-
-The “addis” instruction shifts a signed constant left 16 bits and adds the
-result to its second argument, saving the result in the first argument. The
-“addi” instruction does the same, but without shifting. Thus the “@toc@ha"
-suffix on a symbol means “the top 16 bits of the TOC offset” and “@toc@l” means
-“the bottom 16 bits of the offset”. However, note that both values are signed,
-thus offsets in the top half of a 64KB chunk will have an @ha value that's one
-greater than expected and a negative @l value.
-
-The TOC is specific to a “module” (basically an executable or shared object).
-This means that there's not a single TOC in a process and that r2 needs to
-change as control moves between modules. Thus functions have two entry points:
-the “global” entry point and the “local” entry point. Jumps from within the
-same module can use the local entry while jumps from other modules must use the
-global entry. The global entry establishes the correct value of r2 before
-running the function and the local entry skips that code.
-
-The global entry point for a function is defined by its label. The local entry
-is a power-of-two number of bytes from the global entry, set by the
-“.localentry” directive. (ppc64le instructions are always 32 bits, so an offset
-of 1 or 2 bytes is treated as an offset of zero.)
-
-In order to help the global entry code set r2 to point to the local TOC, r12 is
-set to the address of the global entry point when called [PABI;2.2.1.1]. Thus
-the global entry will typically use an addis+addi pair to add a known offset to
-r12 and store it in r2. For example:
-
-foo:
-  addis 2, 12, .TOC. - foo@ha
-  addi  2, 2,  .TOC. - foo@l
-
-(It's worth noting that the '@' operator binds very loosely, so the 3rd
-arguments parse as (.TOC. - foo)@ha and (.TOC. - foo)@l.)
-
-When calling a function, the compiler doesn't know whether that function is in
-the same module or not. Thus it doesn't know whether r12 needs to be set nor
-whether r2 will be clobbered on return. Rather than always assume the worst,
-the linker fixes stuff up once it knows that a call is going out of module:
-
-Firstly, calling, say, memcpy (which we assume to be in a different module)
-won't actually jump directly to memcpy, or even a PLT resolution function.
-It'll call a synthesised function that:
-  a) saves r2 in the caller's stack frame
-  b) loads the address of memcpy@PLT into r12
-  c) jumps to r12.
-
-As this synthesised function loads memcpy@PLT, a call to memcpy from the
-compiled code just references “memcpy” directly, not “memcpy@PLT”.
-
-Since it jumps directly to memcpy@PLT, it can't restore r2 on return. Thus
-calls must be followed by a nop. If the call ends up going out-of-module, the
-linker will rewrite that nop to load r2 from the stack.
-
-Speaking of the stack, the stack pointer is kept in r1 and there's a 288-byte
-red-zone. The format of the stack frame is defined [PABI;2.2.2] and must be
-followed as called functions will write into their parent's stack frame. For
-example, the synthesised out-of-module trampolines will save r2 24 bytes into
-the caller's frame and all non-leaf functions save the return address 16 bytes
-into the caller's frame.
-
-A final point worth noting: some RISC ISAs have r0 wired to zero: all reads
-result in zero and all writes are discarded. POWER does something a little like
-that, but r0 is only special in certain argument positions for certain
-instructions. You just have to read the manual to know which they are.
-
-
-Delocation is easier than Intel because there's just TOC references, but it's
-also harder because there's no IP-relative addressing.
-
-Jumps are IP-relative however, and have a 24-bit immediate value. So we can
-jump to functions that set a register to the needed value. (r3 is the
-return-value register and so that's what is generally used here.) */
-
-// isPPC64LEAPair recognises an addis+addi pair that's adding the offset of
-// source to relative and writing the result to target.
-func (d *delocation) isPPC64LEAPair(statement *node32) (target, source, relative string, ok bool) {
-	instruction := skipWS(statement.up).up
-	assertNodeType(instruction, ruleInstructionName)
-	name1 := d.contents(instruction)
-	args1 := instructionArgs(instruction.next)
-
-	statement = statement.next
-	instruction = skipWS(statement.up).up
-	assertNodeType(instruction, ruleInstructionName)
-	name2 := d.contents(instruction)
-	args2 := instructionArgs(instruction.next)
-
-	if name1 != "addis" ||
-		len(args1) != 3 ||
-		name2 != "addi" ||
-		len(args2) != 3 {
-		return "", "", "", false
-	}
-
-	target = d.contents(args1[0])
-	relative = d.contents(args1[1])
-	source1 := d.contents(args1[2])
-	source2 := d.contents(args2[2])
-
-	if !strings.HasSuffix(source1, "@ha") ||
-		!strings.HasSuffix(source2, "@l") ||
-		source1[:len(source1)-3] != source2[:len(source2)-2] ||
-		d.contents(args2[0]) != target ||
-		d.contents(args2[1]) != target {
-		return "", "", "", false
-	}
-
-	source = source1[:len(source1)-3]
-	ok = true
-	return
-}
-
-// establishTOC writes the global entry prelude for a function. The standard
-// prelude involves relocations so this version moves the relocation outside
-// the integrity-checked area.
-func establishTOC(w stringWriter) {
-	w.WriteString("999:\n")
-	w.WriteString("\taddis 2, 12, .LBORINGSSL_external_toc-999b@ha\n")
-	w.WriteString("\taddi 2, 2, .LBORINGSSL_external_toc-999b@l\n")
-	w.WriteString("\tld 12, 0(2)\n")
-	w.WriteString("\tadd 2, 2, 12\n")
-}
-
-// loadTOCFuncName returns the name of a synthesized function that sets r3 to
-// the value of “symbol+offset”.
-func loadTOCFuncName(symbol, offset string) string {
-	symbol = strings.Replace(symbol, ".", "_dot_", -1)
-	ret := ".Lbcm_loadtoc_" + symbol
-	if len(offset) != 0 {
-		offset = strings.Replace(offset, "+", "_plus_", -1)
-		offset = strings.Replace(offset, "-", "_minus_", -1)
-		ret += "_" + offset
-	}
-	return ret
-}
-
-func (d *delocation) loadFromTOC(w stringWriter, symbol, offset, dest string) wrapperFunc {
-	d.tocLoaders[symbol+"\x00"+offset] = struct{}{}
-
-	return func(k func()) {
-		w.WriteString("\taddi 1, 1, -288\n")   // Clear the red zone.
-		w.WriteString("\tmflr " + dest + "\n") // Stash the link register.
-		w.WriteString("\tstd " + dest + ", -8(1)\n")
-		// The TOC loader will use r3, so stash it if necessary.
-		if dest != "3" {
-			w.WriteString("\tstd 3, -16(1)\n")
-		}
-
-		// Because loadTOCFuncName returns a “.L” name, we don't need a
-		// nop after this call.
-		w.WriteString("\tbl " + loadTOCFuncName(symbol, offset) + "\n")
-
-		// Cycle registers around. We need r3 -> destReg, -8(1) ->
-		// lr and, optionally, -16(1) -> r3.
-		w.WriteString("\tstd 3, -24(1)\n")
-		w.WriteString("\tld 3, -8(1)\n")
-		w.WriteString("\tmtlr 3\n")
-		w.WriteString("\tld " + dest + ", -24(1)\n")
-		if dest != "3" {
-			w.WriteString("\tld 3, -16(1)\n")
-		}
-		w.WriteString("\taddi 1, 1, 288\n")
-
-		k()
-	}
-}
-
 func (d *delocation) gatherOffsets(symRef *node32, offsets string) (*node32, string) {
 	for symRef != nil && symRef.pegRule == ruleOffset {
 		offset := d.contents(symRef)
@@ -868,215 +671,6 @@
 	return
 }
 
-func (d *delocation) processPPCInstruction(statement, instruction *node32) (*node32, error) {
-	assertNodeType(instruction, ruleInstructionName)
-	instructionName := d.contents(instruction)
-	isBranch := instructionName[0] == 'b'
-
-	argNodes := instructionArgs(instruction.next)
-
-	var wrappers wrapperStack
-	var args []string
-	changed := false
-
-Args:
-	for i, arg := range argNodes {
-		fullArg := arg
-		isIndirect := false
-
-		if arg.pegRule == ruleIndirectionIndicator {
-			arg = arg.next
-			isIndirect = true
-		}
-
-		switch arg.pegRule {
-		case ruleRegisterOrConstant, ruleLocalLabelRef:
-			args = append(args, d.contents(fullArg))
-
-		case ruleTOCRefLow:
-			return nil, errors.New("Found low TOC reference outside preamble pattern")
-
-		case ruleTOCRefHigh:
-			target, _, relative, ok := d.isPPC64LEAPair(statement)
-			if !ok {
-				return nil, errors.New("Found high TOC reference outside preamble pattern")
-			}
-
-			if relative != "12" {
-				return nil, fmt.Errorf("preamble is relative to %q, not r12", relative)
-			}
-
-			if target != "2" {
-				return nil, fmt.Errorf("preamble is setting %q, not r2", target)
-			}
-
-			statement = statement.next
-			establishTOC(d.output)
-			instructionName = ""
-			changed = true
-			break Args
-
-		case ruleMemoryRef:
-			symbol, offset, section, didChange, symbolIsLocal, memRef := d.parseMemRef(arg.up)
-			changed = didChange
-
-			if len(symbol) > 0 {
-				if _, localEntrySymbol := d.localEntrySymbols[symbol]; localEntrySymbol && isBranch {
-					symbol = localEntryName(symbol)
-					changed = true
-				} else if _, knownSymbol := d.symbols[symbol]; knownSymbol {
-					symbol = localTargetName(symbol)
-					changed = true
-				} else if !symbolIsLocal && !isSynthesized(symbol) && len(section) == 0 {
-					changed = true
-					d.redirectors[symbol] = redirectorName(symbol)
-					symbol = redirectorName(symbol)
-					// TODO(davidben): This should sanity-check the next
-					// instruction is a nop and ideally remove it.
-					wrappers = append(wrappers, func(k func()) {
-						k()
-						// Like the linker's PLT stubs, redirector functions
-						// expect callers to restore r2.
-						d.output.WriteString("\tld 2, 24(1)\n")
-					})
-				}
-			}
-
-			switch section {
-			case "":
-
-			case "tls":
-				// This section identifier just tells the
-				// assembler to use r13, the pointer to the
-				// thread-local data [PABI;3.7.3.3].
-
-			case "toc@ha":
-				// Delete toc@ha instructions. Per
-				// [PABI;3.6.3], the linker is allowed to erase
-				// toc@ha instructions. We take advantage of
-				// this by unconditionally erasing the toc@ha
-				// instructions and doing the full lookup when
-				// processing toc@l.
-				//
-				// Note that any offset here applies before @ha
-				// and @l. That is, 42+foo@toc@ha is
-				// #ha(42+foo-.TOC.), not 42+#ha(foo-.TOC.). Any
-				// corresponding toc@l references are required
-				// by the ABI to have the same offset. The
-				// offset will be incorporated in full when
-				// those are processed.
-				if instructionName != "addis" || len(argNodes) != 3 || i != 2 || args[1] != "2" {
-					return nil, errors.New("can't process toc@ha reference")
-				}
-				changed = true
-				instructionName = ""
-				break Args
-
-			case "toc@l":
-				// Per [PAB;3.6.3], this instruction must take
-				// as input a register which was the output of
-				// a toc@ha computation and compute the actual
-				// address of some symbol. The toc@ha
-				// computation was elided, so we ignore that
-				// input register and compute the address
-				// directly.
-				changed = true
-
-				// For all supported toc@l instructions, the
-				// destination register is the first argument.
-				destReg := args[0]
-
-				wrappers = append(wrappers, d.loadFromTOC(d.output, symbol, offset, destReg))
-				switch instructionName {
-				case "addi":
-					// The original instruction was:
-					//   addi destReg, tocHaReg, offset+symbol@toc@l
-					instructionName = ""
-
-				case "ld", "lhz", "lwz":
-					// The original instruction was:
-					//   l?? destReg, offset+symbol@toc@l(tocHaReg)
-					//
-					// We transform that into the
-					// equivalent dereference of destReg:
-					//   l?? destReg, 0(destReg)
-					origInstructionName := instructionName
-					instructionName = ""
-
-					assertNodeType(memRef, ruleBaseIndexScale)
-					assertNodeType(memRef.up, ruleRegisterOrConstant)
-					if memRef.next != nil || memRef.up.next != nil {
-						return nil, errors.New("expected single register in BaseIndexScale for ld argument")
-					}
-
-					baseReg := destReg
-					if baseReg == "0" {
-						// Register zero is special as the base register for a load.
-						// Avoid it by spilling and using r3 instead.
-						baseReg = "3"
-						wrappers = append(wrappers, func(k func()) {
-							d.output.WriteString("\taddi 1, 1, -288\n") // Clear the red zone.
-							d.output.WriteString("\tstd " + baseReg + ", -8(1)\n")
-							d.output.WriteString("\tmr " + baseReg + ", " + destReg + "\n")
-							k()
-							d.output.WriteString("\tld " + baseReg + ", -8(1)\n")
-							d.output.WriteString("\taddi 1, 1, 288\n") // Clear the red zone.
-						})
-					}
-
-					wrappers = append(wrappers, func(k func()) {
-						d.output.WriteString("\t" + origInstructionName + " " + destReg + ", 0(" + baseReg + ")\n")
-					})
-				default:
-					return nil, fmt.Errorf("can't process TOC argument to %q", instructionName)
-				}
-
-			default:
-				return nil, fmt.Errorf("Unknown section type %q", section)
-			}
-
-			argStr := ""
-			if isIndirect {
-				argStr += "*"
-			}
-			argStr += symbol
-			if len(offset) > 0 {
-				argStr += offset
-			}
-			if len(section) > 0 {
-				argStr += "@"
-				argStr += section
-			}
-
-			for ; memRef != nil; memRef = memRef.next {
-				argStr += d.contents(memRef)
-			}
-
-			args = append(args, argStr)
-
-		default:
-			panic(fmt.Sprintf("unknown instruction argument type %q", rul3s[arg.pegRule]))
-		}
-	}
-
-	if changed {
-		d.writeCommentedNode(statement)
-
-		var replacement string
-		if len(instructionName) > 0 {
-			replacement = "\t" + instructionName + "\t" + strings.Join(args, ", ") + "\n"
-		}
-
-		wrappers.do(func() {
-			d.output.WriteString(replacement)
-		})
-	} else {
-		d.writeNode(statement)
-	}
-
-	return statement, nil
-}
-
 /* Intel */
 
 type instructionType int
@@ -1674,8 +1268,6 @@
 func transform(w stringWriter, inputs []inputFile) error {
 	// symbols contains all defined symbols.
 	symbols := make(map[string]struct{})
-	// localEntrySymbols contains all symbols with a .localentry directive.
-	localEntrySymbols := make(map[string]struct{})
 	// fileNumbers is the set of IDs seen in .file directives.
 	fileNumbers := make(map[int]struct{})
 	// maxObservedFileNumber contains the largest seen file number in a
@@ -1699,25 +1291,6 @@
 		}, ruleStatement, ruleLabel, ruleSymbolName)
 
 		forEachPath(input.ast.up, func(node *node32) {
-			node = node.up
-			assertNodeType(node, ruleLabelContainingDirectiveName)
-			directive := input.contents[node.begin:node.end]
-			if directive != ".localentry" {
-				return
-			}
-			// Extract the first argument.
-			node = skipWS(node.next)
-			assertNodeType(node, ruleSymbolArgs)
-			node = node.up
-			assertNodeType(node, ruleSymbolArg)
-			symbol := input.contents[node.begin:node.end]
-			if _, ok := localEntrySymbols[symbol]; ok {
-				panic(fmt.Sprintf("Duplicate .localentry directive found: %q in %q", symbol, input.path))
-			}
-			localEntrySymbols[symbol] = struct{}{}
-		}, ruleStatement, ruleLabelContainingDirective)
-
-		forEachPath(input.ast.up, func(node *node32) {
 			assertNodeType(node, ruleLocationDirective)
 			directive := input.contents[node.begin:node.end]
 			if !strings.HasPrefix(directive, ".file") {
@@ -1765,13 +1338,11 @@
 
 	d := &delocation{
 		symbols:             symbols,
-		localEntrySymbols:   localEntrySymbols,
 		processor:           processor,
 		commentIndicator:    commentIndicator,
 		output:              w,
 		redirectors:         make(map[string]string),
 		bssAccessorsNeeded:  make(map[string]string),
-		tocLoaders:          make(map[string]struct{}),
 		gotExternalsNeeded:  make(map[string]struct{}),
 		gotOffsetsNeeded:    make(map[string]struct{}),
 		gotOffOffsetsNeeded: make(map[string]struct{}),
@@ -1806,22 +1377,6 @@
 	for _, name := range redirectorNames {
 		redirector := d.redirectors[name]
 		switch d.processor {
-		case ppc64le:
-			w.WriteString(".section \".toc\", \"aw\"\n")
-			w.WriteString(".Lredirector_toc_" + name + ":\n")
-			w.WriteString(".quad " + name + "\n")
-			w.WriteString(".text\n")
-			w.WriteString(".type " + redirector + ", @function\n")
-			w.WriteString(redirector + ":\n")
-			// |name| will clobber r2, so save it. This is matched by a restore in
-			// redirector calls.
-			w.WriteString("\tstd 2, 24(1)\n")
-			// Load and call |name|'s global entry point.
-			w.WriteString("\taddis 12, 2, .Lredirector_toc_" + name + "@toc@ha\n")
-			w.WriteString("\tld 12, .Lredirector_toc_" + name + "@toc@l(12)\n")
-			w.WriteString("\tmtctr 12\n")
-			w.WriteString("\tbctr\n")
-
 		case aarch64:
 			writeAarch64Function(w, redirector, func(w stringWriter) {
 				w.WriteString("\tb " + name + "\n")
@@ -1846,13 +1401,6 @@
 		target := d.bssAccessorsNeeded[name]
 
 		switch d.processor {
-		case ppc64le:
-			w.WriteString(".type " + funcName + ", @function\n")
-			w.WriteString(funcName + ":\n")
-			w.WriteString("\taddis 3, 2, " + target + "@toc@ha\n")
-			w.WriteString("\taddi 3, 3, " + target + "@toc@l\n")
-			w.WriteString("\tblr\n")
-
 		case x86_64:
 			w.WriteString(".type " + funcName + ", @function\n")
 			w.WriteString(funcName + ":\n")
@@ -1868,26 +1416,6 @@
 	}
 
 	switch d.processor {
-	case ppc64le:
-		loadTOCNames := sortedSet(d.tocLoaders)
-		for _, symbolAndOffset := range loadTOCNames {
-			parts := strings.SplitN(symbolAndOffset, "\x00", 2)
-			symbol, offset := parts[0], parts[1]
-
-			funcName := loadTOCFuncName(symbol, offset)
-			ref := symbol + offset
-
-			w.WriteString(".type " + funcName[2:] + ", @function\n")
-			w.WriteString(funcName[2:] + ":\n")
-			w.WriteString(funcName + ":\n")
-			w.WriteString("\taddis 3, 2, " + ref + "@toc@ha\n")
-			w.WriteString("\taddi 3, 3, " + ref + "@toc@l\n")
-			w.WriteString("\tblr\n")
-		}
-
-		w.WriteString(".LBORINGSSL_external_toc:\n")
-		w.WriteString(".quad .TOC.-.LBORINGSSL_external_toc\n")
-
 	case aarch64:
 		externalNames := sortedSet(d.gotExternalsNeeded)
 		for _, symbol := range externalNames {
@@ -2201,10 +1729,6 @@
 	return ".L" + name + "_local_target"
 }
 
-func localEntryName(name string) string {
-	return ".L" + name + "_local_entry"
-}
-
 func isSynthesized(symbol string) bool {
 	return strings.HasSuffix(symbol, "_bss_get") ||
 		symbol == "OPENSSL_ia32cap_get" ||
@@ -2260,8 +1784,6 @@
 		switch instructionName {
 		case "movq", "call", "leaq":
 			return x86_64
-		case "addis", "addi", "mflr":
-			return ppc64le
 		case "str", "bl", "ldr", "st1":
 			return aarch64
 		}
diff --git a/util/fipstools/delocate/delocate_test.go b/util/fipstools/delocate/delocate_test.go
index 082b3aa..e3dff54 100644
--- a/util/fipstools/delocate/delocate_test.go
+++ b/util/fipstools/delocate/delocate_test.go
@@ -39,11 +39,6 @@
 
 var delocateTests = []delocateTest{
 	{"generic-FileDirectives", []string{"in.s"}, "out.s"},
-	{"ppc64le-GlobalEntry", []string{"in.s"}, "out.s"},
-	{"ppc64le-LoadToR0", []string{"in.s"}, "out.s"},
-	{"ppc64le-Sample2", []string{"in.s"}, "out.s"},
-	{"ppc64le-Sample", []string{"in.s"}, "out.s"},
-	{"ppc64le-TOCWithOffset", []string{"in.s"}, "out.s"},
 	{"x86_64-Basic", []string{"in.s"}, "out.s"},
 	{"x86_64-BSS", []string{"in.s"}, "out.s"},
 	{"x86_64-GOTRewrite", []string{"in.s"}, "out.s"},
diff --git a/util/fipstools/delocate/testdata/ppc64le-GlobalEntry/in.s b/util/fipstools/delocate/testdata/ppc64le-GlobalEntry/in.s
deleted file mode 100644
index af1a182..0000000
--- a/util/fipstools/delocate/testdata/ppc64le-GlobalEntry/in.s
+++ /dev/null
@@ -1,9 +0,0 @@
-	.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/delocate/testdata/ppc64le-GlobalEntry/out.s b/util/fipstools/delocate/testdata/ppc64le-GlobalEntry/out.s
deleted file mode 100644
index d75e2c7..0000000
--- a/util/fipstools/delocate/testdata/ppc64le-GlobalEntry/out.s
+++ /dev/null
@@ -1,62 +0,0 @@
-.text
-.file 1 "inserted_by_delocate.c"
-.loc 1 1 0
-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
-.loc 1 2 0
-BORINGSSL_bcm_text_end:
-.LBORINGSSL_external_toc:
-.quad .TOC.-.LBORINGSSL_external_toc
-.type BORINGSSL_bcm_text_hash, @object
-.size BORINGSSL_bcm_text_hash, 32
-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
diff --git a/util/fipstools/delocate/testdata/ppc64le-LoadToR0/in.s b/util/fipstools/delocate/testdata/ppc64le-LoadToR0/in.s
deleted file mode 100644
index 81766dc..0000000
--- a/util/fipstools/delocate/testdata/ppc64le-LoadToR0/in.s
+++ /dev/null
@@ -1,4 +0,0 @@
-	.text
-foo:
-	addis 22,2,bar@toc@ha
-	ld 0,bar@toc@l(22)
diff --git a/util/fipstools/delocate/testdata/ppc64le-LoadToR0/out.s b/util/fipstools/delocate/testdata/ppc64le-LoadToR0/out.s
deleted file mode 100644
index dad7603..0000000
--- a/util/fipstools/delocate/testdata/ppc64le-LoadToR0/out.s
+++ /dev/null
@@ -1,72 +0,0 @@
-.text
-.file 1 "inserted_by_delocate.c"
-.loc 1 1 0
-BORINGSSL_bcm_text_start:
-	.text
-.Lfoo_local_target:
-foo:
-# WAS addis 22,2,bar@toc@ha
-# WAS ld 0,bar@toc@l(22)
-	addi 1, 1, -288
-	mflr 0
-	std 0, -8(1)
-	std 3, -16(1)
-	bl .Lbcm_loadtoc_bar
-	std 3, -24(1)
-	ld 3, -8(1)
-	mtlr 3
-	ld 0, -24(1)
-	ld 3, -16(1)
-	addi 1, 1, 288
-	addi 1, 1, -288
-	std 3, -8(1)
-	mr 3, 0
-	ld 0, 0(3)
-	ld 3, -8(1)
-	addi 1, 1, 288
-.text
-.loc 1 2 0
-BORINGSSL_bcm_text_end:
-.type bcm_loadtoc_bar, @function
-bcm_loadtoc_bar:
-.Lbcm_loadtoc_bar:
-	addis 3, 2, bar@toc@ha
-	addi 3, 3, bar@toc@l
-	blr
-.LBORINGSSL_external_toc:
-.quad .TOC.-.LBORINGSSL_external_toc
-.type BORINGSSL_bcm_text_hash, @object
-.size BORINGSSL_bcm_text_hash, 32
-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
diff --git a/util/fipstools/delocate/testdata/ppc64le-Sample/in.s b/util/fipstools/delocate/testdata/ppc64le-Sample/in.s
deleted file mode 100644
index 6e7422a..0000000
--- a/util/fipstools/delocate/testdata/ppc64le-Sample/in.s
+++ /dev/null
@@ -1,161 +0,0 @@
-	.file	"foo.c"
-	.abiversion 2
-	.section	".toc","aw"
-	.section	".text"
-	.section	.rodata
-	.align 3
-	.type	kString, @object
-	.size	kString, 12
-kString:
-	.string	"hello world"
-	.globl kExportedString
-	.align 3
-	.type	kExportedString, @object
-	.size	kExportedString, 26
-kExportedString:
-	.string	"hello world, more visibly"
-	.align 2
-	.type	kGiantArray, @object
-	.size	kGiantArray, 400000
-kGiantArray:
-	.long	1
-	.long	0
-	.zero	399992
-	.lcomm	bss,20,4
-	.type	bss, @object
-	.align 3
-.LC1:
-	.string	"kString is %p\n"
-	.align 3
-.LC2:
-	.string	"kExportedString is %p\n"
-	.align 3
-.LC4:
-	.string	"function is %p\n"
-	.align 3
-.LC5:
-	.string	"exported_function is %p\n"
-	.align 3
-.LC7:
-	.string	"&kString[5] is %p\n"
-	.align 3
-.LC9:
-	.string	"&kGiantArray[0x12345] is %p\n"
-	.section	".toc","aw"
-.LC0:
-	.quad	stderr
-.LC3:
-	.quad	kExportedString
-.LC6:
-	.quad	exported_function
-.LC8:
-	.quad	kString+5
-.LC10:
-	.quad	kGiantArray+298260
-	.section	".text"
-	.align 2
-	.type	function, @function
-function:
-0:	addis 2,12,.TOC.-0b@ha
-	addi 2,2,.TOC.-0b@l
-	.localentry	function,.-function
-	mflr 0
-	std 0,16(1)
-	std 31,-8(1)
-	stdu 1,-112(1)
-	mr 31,1
-	addis 10,2,.LC0@toc@ha
-	ld 9,.LC0@toc@l(10)
-	ld 9,0(9)
-	mr 3,9
-	addis 4,2,.LC1@toc@ha
-	addi 4,4,.LC1@toc@l
-	addis 5,2,kString@toc@ha
-	addi 5,5,kString@toc@l
-	bl fprintf
-	nop
-	addis 10,2,.LC0@toc@ha
-	ld 9,.LC0@toc@l(10)
-	ld 9,0(9)
-	mr 3,9
-	addis 4,2,.LC2@toc@ha
-	addi 4,4,.LC2@toc@l
-	addis 9,2,.LC3@toc@ha
-	ld 5,.LC3@toc@l(9)
-	bl fprintf
-	nop
-	addis 10,2,.LC0@toc@ha
-	ld 9,.LC0@toc@l(10)
-	ld 9,0(9)
-	mr 3,9
-	addis 4,2,.LC4@toc@ha
-	addi 4,4,.LC4@toc@l
-	addis 5,2,function@toc@ha
-	addi 5,5,function@toc@l
-	bl fprintf
-	nop
-	addis 10,2,.LC0@toc@ha
-	ld 9,.LC0@toc@l(10)
-	ld 9,0(9)
-	mr 3,9
-	addis 4,2,.LC5@toc@ha
-	addi 4,4,.LC5@toc@l
-	addis 9,2,.LC6@toc@ha
-	ld 5,.LC6@toc@l(9)
-	bl fprintf
-	nop
-	addis 10,2,.LC0@toc@ha
-	ld 9,.LC0@toc@l(10)
-	ld 9,0(9)
-	mr 3,9
-	addis 4,2,.LC7@toc@ha
-	addi 4,4,.LC7@toc@l
-	addis 9,2,.LC8@toc@ha
-	ld 5,.LC8@toc@l(9)
-	bl fprintf
-	nop
-	addis 10,2,.LC0@toc@ha
-	ld 9,.LC0@toc@l(10)
-	ld 9,0(9)
-	mr 3,9
-	addis 4,2,.LC9@toc@ha
-	addi 4,4,.LC9@toc@l
-	addis 9,2,.LC10@toc@ha
-	ld 5,.LC10@toc@l(9)
-	bl fprintf
-	nop
-	bl exported_function
-	nop
-	mr 3,9
-	addi 1,31,112
-	ld 0,16(1)
-	mtlr 0
-	ld 31,-8(1)
-	blr
-	.long 0
-	.byte 0,0,0,1,128,1,0,1
-	.size	function,.-function
-	.align 2
-	.globl exported_function
-	.type	exported_function, @function
-exported_function:
-0:	addis 2,12,.TOC.-0b@ha
-	addi 2,2,.TOC.-0b@l
-	.localentry	exported_function,.-exported_function
-	mflr 0
-	std 0,16(1)
-	std 31,-8(1)
-	stdu 1,-48(1)
-	mr 31,1
-	bl function
-	mr 3,9
-	addi 1,31,48
-	ld 0,16(1)
-	mtlr 0
-	ld 31,-8(1)
-	blr
-	.long 0
-	.byte 0,0,0,1,128,1,0,1
-	.size	exported_function,.-exported_function
-	.ident	"GCC: (Ubuntu 4.9.2-10ubuntu13) 4.9.2"
-	.section	.note.GNU-stack,"",@progbits
diff --git a/util/fipstools/delocate/testdata/ppc64le-Sample/out.s b/util/fipstools/delocate/testdata/ppc64le-Sample/out.s
deleted file mode 100644
index 798bcf5..0000000
--- a/util/fipstools/delocate/testdata/ppc64le-Sample/out.s
+++ /dev/null
@@ -1,552 +0,0 @@
-.text
-.file 1 "inserted_by_delocate.c"
-.loc 1 1 0
-BORINGSSL_bcm_text_start:
-	.file	"foo.c"
-	.abiversion 2
-	.section	".toc","aw"
-# WAS .section	".text"
-.text
-# WAS .section	.rodata
-.text
-	.align 3
-	.type	kString, @object
-	.size	kString, 12
-.LkString_local_target:
-kString:
-	.string	"hello world"
-	.globl kExportedString
-	.align 3
-	.type	kExportedString, @object
-	.size	kExportedString, 26
-.LkExportedString_local_target:
-kExportedString:
-	.string	"hello world, more visibly"
-	.align 2
-	.type	kGiantArray, @object
-	.size	kGiantArray, 400000
-.LkGiantArray_local_target:
-kGiantArray:
-	.long	1
-	.long	0
-	.zero	399992
-	.lcomm	bss,20,4
-	.type	bss, @object
-	.align 3
-.LC1:
-
-	.string	"kString is %p\n"
-	.align 3
-.LC2:
-
-	.string	"kExportedString is %p\n"
-	.align 3
-.LC4:
-
-	.string	"function is %p\n"
-	.align 3
-.LC5:
-
-	.string	"exported_function is %p\n"
-	.align 3
-.LC7:
-
-	.string	"&kString[5] is %p\n"
-	.align 3
-.LC9:
-
-	.string	"&kGiantArray[0x12345] is %p\n"
-	.section	".toc","aw"
-.LC0:
-
-	.quad	stderr
-.LC3:
-
-	.quad	kExportedString
-.LC6:
-
-	.quad	exported_function
-.LC8:
-
-	.quad	kString+5
-.LC10:
-
-	.quad	kGiantArray+298260
-# WAS .section	".text"
-.text
-	.align 2
-	.type	function, @function
-.Lfunction_local_target:
-function:
-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.-0b@l
-	.localentry	function,.-function
-.Lfunction_local_entry:
-	mflr 0
-	std 0,16(1)
-	std 31,-8(1)
-	stdu 1,-112(1)
-	mr 31,1
-# WAS addis 10,2,.LC0@toc@ha
-# WAS ld 9,.LC0@toc@l(10)
-	addi 1, 1, -288
-	mflr 9
-	std 9, -8(1)
-	std 3, -16(1)
-	bl .Lbcm_loadtoc__dot_LC0
-	std 3, -24(1)
-	ld 3, -8(1)
-	mtlr 3
-	ld 9, -24(1)
-	ld 3, -16(1)
-	addi 1, 1, 288
-	ld 9, 0(9)
-	ld 9,0(9)
-	mr 3,9
-# WAS addis 4,2,.LC1@toc@ha
-# WAS addi 4,4,.LC1@toc@l
-	addi 1, 1, -288
-	mflr 4
-	std 4, -8(1)
-	std 3, -16(1)
-	bl .Lbcm_loadtoc__dot_LC1
-	std 3, -24(1)
-	ld 3, -8(1)
-	mtlr 3
-	ld 4, -24(1)
-	ld 3, -16(1)
-	addi 1, 1, 288
-# WAS addis 5,2,kString@toc@ha
-# WAS addi 5,5,kString@toc@l
-	addi 1, 1, -288
-	mflr 5
-	std 5, -8(1)
-	std 3, -16(1)
-	bl .Lbcm_loadtoc__dot_LkString_local_target
-	std 3, -24(1)
-	ld 3, -8(1)
-	mtlr 3
-	ld 5, -24(1)
-	ld 3, -16(1)
-	addi 1, 1, 288
-# WAS bl fprintf
-	bl	bcm_redirector_fprintf
-	ld 2, 24(1)
-	nop
-# WAS addis 10,2,.LC0@toc@ha
-# WAS ld 9,.LC0@toc@l(10)
-	addi 1, 1, -288
-	mflr 9
-	std 9, -8(1)
-	std 3, -16(1)
-	bl .Lbcm_loadtoc__dot_LC0
-	std 3, -24(1)
-	ld 3, -8(1)
-	mtlr 3
-	ld 9, -24(1)
-	ld 3, -16(1)
-	addi 1, 1, 288
-	ld 9, 0(9)
-	ld 9,0(9)
-	mr 3,9
-# WAS addis 4,2,.LC2@toc@ha
-# WAS addi 4,4,.LC2@toc@l
-	addi 1, 1, -288
-	mflr 4
-	std 4, -8(1)
-	std 3, -16(1)
-	bl .Lbcm_loadtoc__dot_LC2
-	std 3, -24(1)
-	ld 3, -8(1)
-	mtlr 3
-	ld 4, -24(1)
-	ld 3, -16(1)
-	addi 1, 1, 288
-# WAS addis 9,2,.LC3@toc@ha
-# WAS ld 5,.LC3@toc@l(9)
-	addi 1, 1, -288
-	mflr 5
-	std 5, -8(1)
-	std 3, -16(1)
-	bl .Lbcm_loadtoc__dot_LC3
-	std 3, -24(1)
-	ld 3, -8(1)
-	mtlr 3
-	ld 5, -24(1)
-	ld 3, -16(1)
-	addi 1, 1, 288
-	ld 5, 0(5)
-# WAS bl fprintf
-	bl	bcm_redirector_fprintf
-	ld 2, 24(1)
-	nop
-# WAS addis 10,2,.LC0@toc@ha
-# WAS ld 9,.LC0@toc@l(10)
-	addi 1, 1, -288
-	mflr 9
-	std 9, -8(1)
-	std 3, -16(1)
-	bl .Lbcm_loadtoc__dot_LC0
-	std 3, -24(1)
-	ld 3, -8(1)
-	mtlr 3
-	ld 9, -24(1)
-	ld 3, -16(1)
-	addi 1, 1, 288
-	ld 9, 0(9)
-	ld 9,0(9)
-	mr 3,9
-# WAS addis 4,2,.LC4@toc@ha
-# WAS addi 4,4,.LC4@toc@l
-	addi 1, 1, -288
-	mflr 4
-	std 4, -8(1)
-	std 3, -16(1)
-	bl .Lbcm_loadtoc__dot_LC4
-	std 3, -24(1)
-	ld 3, -8(1)
-	mtlr 3
-	ld 4, -24(1)
-	ld 3, -16(1)
-	addi 1, 1, 288
-# WAS addis 5,2,function@toc@ha
-# WAS addi 5,5,function@toc@l
-	addi 1, 1, -288
-	mflr 5
-	std 5, -8(1)
-	std 3, -16(1)
-	bl .Lbcm_loadtoc__dot_Lfunction_local_target
-	std 3, -24(1)
-	ld 3, -8(1)
-	mtlr 3
-	ld 5, -24(1)
-	ld 3, -16(1)
-	addi 1, 1, 288
-# WAS bl fprintf
-	bl	bcm_redirector_fprintf
-	ld 2, 24(1)
-	nop
-# WAS addis 10,2,.LC0@toc@ha
-# WAS ld 9,.LC0@toc@l(10)
-	addi 1, 1, -288
-	mflr 9
-	std 9, -8(1)
-	std 3, -16(1)
-	bl .Lbcm_loadtoc__dot_LC0
-	std 3, -24(1)
-	ld 3, -8(1)
-	mtlr 3
-	ld 9, -24(1)
-	ld 3, -16(1)
-	addi 1, 1, 288
-	ld 9, 0(9)
-	ld 9,0(9)
-	mr 3,9
-# WAS addis 4,2,.LC5@toc@ha
-# WAS addi 4,4,.LC5@toc@l
-	addi 1, 1, -288
-	mflr 4
-	std 4, -8(1)
-	std 3, -16(1)
-	bl .Lbcm_loadtoc__dot_LC5
-	std 3, -24(1)
-	ld 3, -8(1)
-	mtlr 3
-	ld 4, -24(1)
-	ld 3, -16(1)
-	addi 1, 1, 288
-# WAS addis 9,2,.LC6@toc@ha
-# WAS ld 5,.LC6@toc@l(9)
-	addi 1, 1, -288
-	mflr 5
-	std 5, -8(1)
-	std 3, -16(1)
-	bl .Lbcm_loadtoc__dot_LC6
-	std 3, -24(1)
-	ld 3, -8(1)
-	mtlr 3
-	ld 5, -24(1)
-	ld 3, -16(1)
-	addi 1, 1, 288
-	ld 5, 0(5)
-# WAS bl fprintf
-	bl	bcm_redirector_fprintf
-	ld 2, 24(1)
-	nop
-# WAS addis 10,2,.LC0@toc@ha
-# WAS ld 9,.LC0@toc@l(10)
-	addi 1, 1, -288
-	mflr 9
-	std 9, -8(1)
-	std 3, -16(1)
-	bl .Lbcm_loadtoc__dot_LC0
-	std 3, -24(1)
-	ld 3, -8(1)
-	mtlr 3
-	ld 9, -24(1)
-	ld 3, -16(1)
-	addi 1, 1, 288
-	ld 9, 0(9)
-	ld 9,0(9)
-	mr 3,9
-# WAS addis 4,2,.LC7@toc@ha
-# WAS addi 4,4,.LC7@toc@l
-	addi 1, 1, -288
-	mflr 4
-	std 4, -8(1)
-	std 3, -16(1)
-	bl .Lbcm_loadtoc__dot_LC7
-	std 3, -24(1)
-	ld 3, -8(1)
-	mtlr 3
-	ld 4, -24(1)
-	ld 3, -16(1)
-	addi 1, 1, 288
-# WAS addis 9,2,.LC8@toc@ha
-# WAS ld 5,.LC8@toc@l(9)
-	addi 1, 1, -288
-	mflr 5
-	std 5, -8(1)
-	std 3, -16(1)
-	bl .Lbcm_loadtoc__dot_LC8
-	std 3, -24(1)
-	ld 3, -8(1)
-	mtlr 3
-	ld 5, -24(1)
-	ld 3, -16(1)
-	addi 1, 1, 288
-	ld 5, 0(5)
-# WAS bl fprintf
-	bl	bcm_redirector_fprintf
-	ld 2, 24(1)
-	nop
-# WAS addis 10,2,.LC0@toc@ha
-# WAS ld 9,.LC0@toc@l(10)
-	addi 1, 1, -288
-	mflr 9
-	std 9, -8(1)
-	std 3, -16(1)
-	bl .Lbcm_loadtoc__dot_LC0
-	std 3, -24(1)
-	ld 3, -8(1)
-	mtlr 3
-	ld 9, -24(1)
-	ld 3, -16(1)
-	addi 1, 1, 288
-	ld 9, 0(9)
-	ld 9,0(9)
-	mr 3,9
-# WAS addis 4,2,.LC9@toc@ha
-# WAS addi 4,4,.LC9@toc@l
-	addi 1, 1, -288
-	mflr 4
-	std 4, -8(1)
-	std 3, -16(1)
-	bl .Lbcm_loadtoc__dot_LC9
-	std 3, -24(1)
-	ld 3, -8(1)
-	mtlr 3
-	ld 4, -24(1)
-	ld 3, -16(1)
-	addi 1, 1, 288
-# WAS addis 9,2,.LC10@toc@ha
-# WAS ld 5,.LC10@toc@l(9)
-	addi 1, 1, -288
-	mflr 5
-	std 5, -8(1)
-	std 3, -16(1)
-	bl .Lbcm_loadtoc__dot_LC10
-	std 3, -24(1)
-	ld 3, -8(1)
-	mtlr 3
-	ld 5, -24(1)
-	ld 3, -16(1)
-	addi 1, 1, 288
-	ld 5, 0(5)
-# WAS bl fprintf
-	bl	bcm_redirector_fprintf
-	ld 2, 24(1)
-	nop
-# WAS bl exported_function
-	bl	.Lexported_function_local_entry
-	nop
-	mr 3,9
-	addi 1,31,112
-	ld 0,16(1)
-	mtlr 0
-	ld 31,-8(1)
-	blr
-	.long 0
-	.byte 0,0,0,1,128,1,0,1
-	.size	function,.-function
-	.align 2
-	.globl exported_function
-	.type	exported_function, @function
-.Lexported_function_local_target:
-exported_function:
-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.-0b@l
-	.localentry	exported_function,.-exported_function
-.Lexported_function_local_entry:
-	mflr 0
-	std 0,16(1)
-	std 31,-8(1)
-	stdu 1,-48(1)
-	mr 31,1
-# WAS bl function
-	bl	.Lfunction_local_entry
-	mr 3,9
-	addi 1,31,48
-	ld 0,16(1)
-	mtlr 0
-	ld 31,-8(1)
-	blr
-	.long 0
-	.byte 0,0,0,1,128,1,0,1
-	.size	exported_function,.-exported_function
-	.ident	"GCC: (Ubuntu 4.9.2-10ubuntu13) 4.9.2"
-	.section	.note.GNU-stack,"",@progbits
-.text
-.loc 1 2 0
-BORINGSSL_bcm_text_end:
-.section ".toc", "aw"
-.Lredirector_toc_fprintf:
-.quad fprintf
-.text
-.type bcm_redirector_fprintf, @function
-bcm_redirector_fprintf:
-	std 2, 24(1)
-	addis 12, 2, .Lredirector_toc_fprintf@toc@ha
-	ld 12, .Lredirector_toc_fprintf@toc@l(12)
-	mtctr 12
-	bctr
-.type bss_bss_get, @function
-bss_bss_get:
-	addis 3, 2, bss@toc@ha
-	addi 3, 3, bss@toc@l
-	blr
-.type bcm_loadtoc__dot_LC0, @function
-bcm_loadtoc__dot_LC0:
-.Lbcm_loadtoc__dot_LC0:
-	addis 3, 2, .LC0@toc@ha
-	addi 3, 3, .LC0@toc@l
-	blr
-.type bcm_loadtoc__dot_LC1, @function
-bcm_loadtoc__dot_LC1:
-.Lbcm_loadtoc__dot_LC1:
-	addis 3, 2, .LC1@toc@ha
-	addi 3, 3, .LC1@toc@l
-	blr
-.type bcm_loadtoc__dot_LC10, @function
-bcm_loadtoc__dot_LC10:
-.Lbcm_loadtoc__dot_LC10:
-	addis 3, 2, .LC10@toc@ha
-	addi 3, 3, .LC10@toc@l
-	blr
-.type bcm_loadtoc__dot_LC2, @function
-bcm_loadtoc__dot_LC2:
-.Lbcm_loadtoc__dot_LC2:
-	addis 3, 2, .LC2@toc@ha
-	addi 3, 3, .LC2@toc@l
-	blr
-.type bcm_loadtoc__dot_LC3, @function
-bcm_loadtoc__dot_LC3:
-.Lbcm_loadtoc__dot_LC3:
-	addis 3, 2, .LC3@toc@ha
-	addi 3, 3, .LC3@toc@l
-	blr
-.type bcm_loadtoc__dot_LC4, @function
-bcm_loadtoc__dot_LC4:
-.Lbcm_loadtoc__dot_LC4:
-	addis 3, 2, .LC4@toc@ha
-	addi 3, 3, .LC4@toc@l
-	blr
-.type bcm_loadtoc__dot_LC5, @function
-bcm_loadtoc__dot_LC5:
-.Lbcm_loadtoc__dot_LC5:
-	addis 3, 2, .LC5@toc@ha
-	addi 3, 3, .LC5@toc@l
-	blr
-.type bcm_loadtoc__dot_LC6, @function
-bcm_loadtoc__dot_LC6:
-.Lbcm_loadtoc__dot_LC6:
-	addis 3, 2, .LC6@toc@ha
-	addi 3, 3, .LC6@toc@l
-	blr
-.type bcm_loadtoc__dot_LC7, @function
-bcm_loadtoc__dot_LC7:
-.Lbcm_loadtoc__dot_LC7:
-	addis 3, 2, .LC7@toc@ha
-	addi 3, 3, .LC7@toc@l
-	blr
-.type bcm_loadtoc__dot_LC8, @function
-bcm_loadtoc__dot_LC8:
-.Lbcm_loadtoc__dot_LC8:
-	addis 3, 2, .LC8@toc@ha
-	addi 3, 3, .LC8@toc@l
-	blr
-.type bcm_loadtoc__dot_LC9, @function
-bcm_loadtoc__dot_LC9:
-.Lbcm_loadtoc__dot_LC9:
-	addis 3, 2, .LC9@toc@ha
-	addi 3, 3, .LC9@toc@l
-	blr
-.type bcm_loadtoc__dot_Lfunction_local_target, @function
-bcm_loadtoc__dot_Lfunction_local_target:
-.Lbcm_loadtoc__dot_Lfunction_local_target:
-	addis 3, 2, .Lfunction_local_target@toc@ha
-	addi 3, 3, .Lfunction_local_target@toc@l
-	blr
-.type bcm_loadtoc__dot_LkString_local_target, @function
-bcm_loadtoc__dot_LkString_local_target:
-.Lbcm_loadtoc__dot_LkString_local_target:
-	addis 3, 2, .LkString_local_target@toc@ha
-	addi 3, 3, .LkString_local_target@toc@l
-	blr
-.LBORINGSSL_external_toc:
-.quad .TOC.-.LBORINGSSL_external_toc
-.type BORINGSSL_bcm_text_hash, @object
-.size BORINGSSL_bcm_text_hash, 32
-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
diff --git a/util/fipstools/delocate/testdata/ppc64le-Sample2/in.s b/util/fipstools/delocate/testdata/ppc64le-Sample2/in.s
deleted file mode 100644
index eb85626..0000000
--- a/util/fipstools/delocate/testdata/ppc64le-Sample2/in.s
+++ /dev/null
@@ -1,226 +0,0 @@
-	.file	"foo.c"
-	.abiversion 2
-	.section	".toc","aw"
-	.section	".text"
-	.section	".toc","aw"
-.LC0:
-	.quad	stderr
-.LC3:
-	.quad	kExportedString
-.LC6:
-	.quad	exported_function
-	.section	".text"
-	.align 2
-	.p2align 4,,15
-	.globl exported_function
-	.type	exported_function, @function
-exported_function:
-0:	addis 2,12,.TOC.-0b@ha
-	addi 2,2,.TOC.-0b@l
-	.localentry	exported_function,.-exported_function
-	mflr 0
-	std 19,-104(1)
-	std 20,-96(1)
-	std 21,-88(1)
-	std 22,-80(1)
-	addis 21,2,.LC1@toc@ha
-	addis 22,2,.LC2@toc@ha
-	std 23,-72(1)
-	std 24,-64(1)
-	addis 23,2,.LC4@toc@ha
-	addis 24,2,function@toc@ha
-	std 25,-56(1)
-	std 26,-48(1)
-	addis 25,2,.LC5@toc@ha
-	addis 26,2,.LC7@toc@ha
-	std 27,-40(1)
-	std 28,-32(1)
-	addis 28,2,.LC8@toc@ha
-	addi 21,21,.LC1@toc@l
-	std 29,-24(1)
-	std 30,-16(1)
-	addis 29,2,.LANCHOR0@toc@ha
-	addi 22,22,.LC2@toc@l
-	std 31,-8(1)
-	std 0,16(1)
-	addi 29,29,.LANCHOR0@toc@l
-	addi 23,23,.LC4@toc@l
-	stdu 1,-208(1)
-	addis 31,2,.LC0@toc@ha		# gpr load fusion, type long
-	ld 31,.LC0@toc@l(31)
-	addis 19,2,.LC3@toc@ha		# gpr load fusion, type long
-	ld 19,.LC3@toc@l(19)
-	addis 30,29,0x5
-	addi 24,24,function@toc@l
-	addis 20,2,.LC6@toc@ha		# gpr load fusion, type long
-	ld 20,.LC6@toc@l(20)
-	addi 25,25,.LC5@toc@l
-	addi 26,26,.LC7@toc@l
-	addi 27,29,5
-	addi 28,28,.LC8@toc@l
-	addi 30,30,-29404
-	.p2align 4,,15
-.L2:
-	ld 3,0(31)
-	mr 5,21
-	mr 6,29
-	li 4,1
-	bl __fprintf_chk
-	nop
-	ld 3,0(31)
-	mr 5,22
-	mr 6,19
-	li 4,1
-	bl __fprintf_chk
-	nop
-	ld 3,0(31)
-	mr 5,23
-	mr 6,24
-	li 4,1
-	bl __fprintf_chk
-	nop
-	ld 3,0(31)
-	mr 5,25
-	mr 6,20
-	li 4,1
-	bl __fprintf_chk
-	nop
-	ld 3,0(31)
-	mr 5,26
-	mr 6,27
-	li 4,1
-	bl __fprintf_chk
-	nop
-	ld 3,0(31)
-	li 4,1
-	mr 5,28
-	mr 6,30
-	bl __fprintf_chk
-	nop
-	b .L2
-	.long 0
-	.byte 0,0,0,1,128,13,0,0
-	.size	exported_function,.-exported_function
-	.section	".toc","aw"
-	.set .LC11,.LC0
-	.set .LC12,.LC3
-	.set .LC13,.LC6
-	.section	".text"
-	.align 2
-	.p2align 4,,15
-	.type	function, @function
-function:
-0:	addis 2,12,.TOC.-0b@ha
-	addi 2,2,.TOC.-0b@l
-	.localentry	function,.-function
-	mflr 0
-	std 31,-8(1)
-	addis 31,2,.LC11@toc@ha		# gpr load fusion, type long
-	ld 31,.LC11@toc@l(31)
-	addis 5,2,.LC1@toc@ha
-	std 30,-16(1)
-	addis 30,2,.LANCHOR0@toc@ha
-	addi 5,5,.LC1@toc@l
-	addi 30,30,.LANCHOR0@toc@l
-	li 4,1
-	mr 6,30
-	std 0,16(1)
-	stdu 1,-112(1)
-	ld 3,0(31)
-	bl __fprintf_chk
-	nop
-	addis 6,2,.LC12@toc@ha		# gpr load fusion, type long
-	ld 6,.LC12@toc@l(6)
-	ld 3,0(31)
-	addis 5,2,.LC2@toc@ha
-	li 4,1
-	addi 5,5,.LC2@toc@l
-	bl __fprintf_chk
-	nop
-	ld 3,0(31)
-	addis 5,2,.LC4@toc@ha
-	addis 6,2,function@toc@ha
-	addi 5,5,.LC4@toc@l
-	addi 6,6,function@toc@l
-	li 4,1
-	bl __fprintf_chk
-	nop
-	addis 6,2,.LC13@toc@ha		# gpr load fusion, type long
-	ld 6,.LC13@toc@l(6)
-	ld 3,0(31)
-	addis 5,2,.LC5@toc@ha
-	li 4,1
-	addi 5,5,.LC5@toc@l
-	bl __fprintf_chk
-	nop
-	ld 3,0(31)
-	addis 5,2,.LC7@toc@ha
-	addi 6,30,5
-	addi 5,5,.LC7@toc@l
-	li 4,1
-	bl __fprintf_chk
-	nop
-	ld 3,0(31)
-	addis 6,30,0x5
-	addis 5,2,.LC8@toc@ha
-	li 4,1
-	addi 5,5,.LC8@toc@l
-	addi 6,6,-29404
-	bl __fprintf_chk
-	nop
-	bl exported_function
-	nop
-	addi 1,1,112
-	ld 0,16(1)
-	ld 30,-16(1)
-	ld 31,-8(1)
-	mtlr 0
-	blr
-	.long 0
-	.byte 0,0,0,1,128,2,0,0
-	.size	function,.-function
-	.globl kExportedString
-	.section	.rodata
-	.align 4
-	.set	.LANCHOR0,. + 0
-	.type	kString, @object
-	.size	kString, 12
-kString:
-	.string	"hello world"
-	.zero	4
-	.type	kGiantArray, @object
-	.size	kGiantArray, 400000
-kGiantArray:
-	.long	1
-	.long	0
-	.zero	399992
-	.type	kExportedString, @object
-	.size	kExportedString, 26
-kExportedString:
-	.string	"hello world, more visibly"
-	.section	.rodata.str1.8,"aMS",@progbits,1
-	.align 3
-.LC1:
-	.string	"kString is %p\n"
-	.zero	1
-.LC2:
-	.string	"kExportedString is %p\n"
-	.zero	1
-.LC4:
-	.string	"function is %p\n"
-.LC5:
-	.string	"exported_function is %p\n"
-	.zero	7
-.LC7:
-	.string	"&kString[5] is %p\n"
-	.zero	5
-.LC8:
-	.string	"&kGiantArray[0x12345] is %p\n"
-	.section	".bss"
-	.align 2
-	.type	bss, @object
-	.size	bss, 20
-bss:
-	.zero	20
-	.ident	"GCC: (Ubuntu 4.9.2-10ubuntu13) 4.9.2"
-	.section	.note.GNU-stack,"",@progbits
diff --git a/util/fipstools/delocate/testdata/ppc64le-Sample2/out.s b/util/fipstools/delocate/testdata/ppc64le-Sample2/out.s
deleted file mode 100644
index 6439740..0000000
--- a/util/fipstools/delocate/testdata/ppc64le-Sample2/out.s
+++ /dev/null
@@ -1,677 +0,0 @@
-.text
-.file 1 "inserted_by_delocate.c"
-.loc 1 1 0
-BORINGSSL_bcm_text_start:
-	.file	"foo.c"
-	.abiversion 2
-	.section	".toc","aw"
-# WAS .section	".text"
-.text
-	.section	".toc","aw"
-.LC0:
-
-	.quad	stderr
-.LC3:
-
-	.quad	kExportedString
-.LC6:
-
-	.quad	exported_function
-# WAS .section	".text"
-.text
-	.align 2
-	.p2align 4,,15
-	.globl exported_function
-	.type	exported_function, @function
-.Lexported_function_local_target:
-exported_function:
-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.-0b@l
-	.localentry	exported_function,.-exported_function
-.Lexported_function_local_entry:
-	mflr 0
-	std 19,-104(1)
-	std 20,-96(1)
-	std 21,-88(1)
-	std 22,-80(1)
-# WAS addis 21,2,.LC1@toc@ha
-# WAS addis 22,2,.LC2@toc@ha
-	std 23,-72(1)
-	std 24,-64(1)
-# WAS addis 23,2,.LC4@toc@ha
-# WAS addis 24,2,function@toc@ha
-	std 25,-56(1)
-	std 26,-48(1)
-# WAS addis 25,2,.LC5@toc@ha
-# WAS addis 26,2,.LC7@toc@ha
-	std 27,-40(1)
-	std 28,-32(1)
-# WAS addis 28,2,.LC8@toc@ha
-# WAS addi 21,21,.LC1@toc@l
-	addi 1, 1, -288
-	mflr 21
-	std 21, -8(1)
-	std 3, -16(1)
-	bl .Lbcm_loadtoc__dot_LC1
-	std 3, -24(1)
-	ld 3, -8(1)
-	mtlr 3
-	ld 21, -24(1)
-	ld 3, -16(1)
-	addi 1, 1, 288
-	std 29,-24(1)
-	std 30,-16(1)
-# WAS addis 29,2,.LANCHOR0@toc@ha
-# WAS addi 22,22,.LC2@toc@l
-	addi 1, 1, -288
-	mflr 22
-	std 22, -8(1)
-	std 3, -16(1)
-	bl .Lbcm_loadtoc__dot_LC2
-	std 3, -24(1)
-	ld 3, -8(1)
-	mtlr 3
-	ld 22, -24(1)
-	ld 3, -16(1)
-	addi 1, 1, 288
-	std 31,-8(1)
-	std 0,16(1)
-# WAS addi 29,29,.LANCHOR0@toc@l
-	addi 1, 1, -288
-	mflr 29
-	std 29, -8(1)
-	std 3, -16(1)
-	bl .Lbcm_loadtoc__dot_LANCHOR0
-	std 3, -24(1)
-	ld 3, -8(1)
-	mtlr 3
-	ld 29, -24(1)
-	ld 3, -16(1)
-	addi 1, 1, 288
-# WAS addi 23,23,.LC4@toc@l
-	addi 1, 1, -288
-	mflr 23
-	std 23, -8(1)
-	std 3, -16(1)
-	bl .Lbcm_loadtoc__dot_LC4
-	std 3, -24(1)
-	ld 3, -8(1)
-	mtlr 3
-	ld 23, -24(1)
-	ld 3, -16(1)
-	addi 1, 1, 288
-	stdu 1,-208(1)
-# WAS addis 31,2,.LC0@toc@ha		# gpr load fusion, type long
-# WAS ld 31,.LC0@toc@l(31)
-	addi 1, 1, -288
-	mflr 31
-	std 31, -8(1)
-	std 3, -16(1)
-	bl .Lbcm_loadtoc__dot_LC0
-	std 3, -24(1)
-	ld 3, -8(1)
-	mtlr 3
-	ld 31, -24(1)
-	ld 3, -16(1)
-	addi 1, 1, 288
-	ld 31, 0(31)
-# WAS addis 19,2,.LC3@toc@ha		# gpr load fusion, type long
-# WAS ld 19,.LC3@toc@l(19)
-	addi 1, 1, -288
-	mflr 19
-	std 19, -8(1)
-	std 3, -16(1)
-	bl .Lbcm_loadtoc__dot_LC3
-	std 3, -24(1)
-	ld 3, -8(1)
-	mtlr 3
-	ld 19, -24(1)
-	ld 3, -16(1)
-	addi 1, 1, 288
-	ld 19, 0(19)
-	addis 30,29,0x5
-# WAS addi 24,24,function@toc@l
-	addi 1, 1, -288
-	mflr 24
-	std 24, -8(1)
-	std 3, -16(1)
-	bl .Lbcm_loadtoc__dot_Lfunction_local_target
-	std 3, -24(1)
-	ld 3, -8(1)
-	mtlr 3
-	ld 24, -24(1)
-	ld 3, -16(1)
-	addi 1, 1, 288
-# WAS addis 20,2,.LC6@toc@ha		# gpr load fusion, type long
-# WAS ld 20,.LC6@toc@l(20)
-	addi 1, 1, -288
-	mflr 20
-	std 20, -8(1)
-	std 3, -16(1)
-	bl .Lbcm_loadtoc__dot_LC6
-	std 3, -24(1)
-	ld 3, -8(1)
-	mtlr 3
-	ld 20, -24(1)
-	ld 3, -16(1)
-	addi 1, 1, 288
-	ld 20, 0(20)
-# WAS addi 25,25,.LC5@toc@l
-	addi 1, 1, -288
-	mflr 25
-	std 25, -8(1)
-	std 3, -16(1)
-	bl .Lbcm_loadtoc__dot_LC5
-	std 3, -24(1)
-	ld 3, -8(1)
-	mtlr 3
-	ld 25, -24(1)
-	ld 3, -16(1)
-	addi 1, 1, 288
-# WAS addi 26,26,.LC7@toc@l
-	addi 1, 1, -288
-	mflr 26
-	std 26, -8(1)
-	std 3, -16(1)
-	bl .Lbcm_loadtoc__dot_LC7
-	std 3, -24(1)
-	ld 3, -8(1)
-	mtlr 3
-	ld 26, -24(1)
-	ld 3, -16(1)
-	addi 1, 1, 288
-	addi 27,29,5
-# WAS addi 28,28,.LC8@toc@l
-	addi 1, 1, -288
-	mflr 28
-	std 28, -8(1)
-	std 3, -16(1)
-	bl .Lbcm_loadtoc__dot_LC8
-	std 3, -24(1)
-	ld 3, -8(1)
-	mtlr 3
-	ld 28, -24(1)
-	ld 3, -16(1)
-	addi 1, 1, 288
-	addi 30,30,-29404
-	.p2align 4,,15
-.L2:
-
-	ld 3,0(31)
-	mr 5,21
-	mr 6,29
-	li 4,1
-# WAS bl __fprintf_chk
-	bl	bcm_redirector___fprintf_chk
-	ld 2, 24(1)
-	nop
-	ld 3,0(31)
-	mr 5,22
-	mr 6,19
-	li 4,1
-# WAS bl __fprintf_chk
-	bl	bcm_redirector___fprintf_chk
-	ld 2, 24(1)
-	nop
-	ld 3,0(31)
-	mr 5,23
-	mr 6,24
-	li 4,1
-# WAS bl __fprintf_chk
-	bl	bcm_redirector___fprintf_chk
-	ld 2, 24(1)
-	nop
-	ld 3,0(31)
-	mr 5,25
-	mr 6,20
-	li 4,1
-# WAS bl __fprintf_chk
-	bl	bcm_redirector___fprintf_chk
-	ld 2, 24(1)
-	nop
-	ld 3,0(31)
-	mr 5,26
-	mr 6,27
-	li 4,1
-# WAS bl __fprintf_chk
-	bl	bcm_redirector___fprintf_chk
-	ld 2, 24(1)
-	nop
-	ld 3,0(31)
-	li 4,1
-	mr 5,28
-	mr 6,30
-# WAS bl __fprintf_chk
-	bl	bcm_redirector___fprintf_chk
-	ld 2, 24(1)
-	nop
-	b .L2
-	.long 0
-	.byte 0,0,0,1,128,13,0,0
-	.size	exported_function,.-exported_function
-	.section	".toc","aw"
-	.set .LC11,.LC0
-	.set .LC12,.LC3
-	.set .LC13,.LC6
-# WAS .section	".text"
-.text
-	.align 2
-	.p2align 4,,15
-	.type	function, @function
-.Lfunction_local_target:
-function:
-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.-0b@l
-	.localentry	function,.-function
-.Lfunction_local_entry:
-	mflr 0
-	std 31,-8(1)
-# WAS addis 31,2,.LC11@toc@ha		# gpr load fusion, type long
-# WAS ld 31,.LC11@toc@l(31)
-	addi 1, 1, -288
-	mflr 31
-	std 31, -8(1)
-	std 3, -16(1)
-	bl .Lbcm_loadtoc__dot_LC11
-	std 3, -24(1)
-	ld 3, -8(1)
-	mtlr 3
-	ld 31, -24(1)
-	ld 3, -16(1)
-	addi 1, 1, 288
-	ld 31, 0(31)
-# WAS addis 5,2,.LC1@toc@ha
-	std 30,-16(1)
-# WAS addis 30,2,.LANCHOR0@toc@ha
-# WAS addi 5,5,.LC1@toc@l
-	addi 1, 1, -288
-	mflr 5
-	std 5, -8(1)
-	std 3, -16(1)
-	bl .Lbcm_loadtoc__dot_LC1
-	std 3, -24(1)
-	ld 3, -8(1)
-	mtlr 3
-	ld 5, -24(1)
-	ld 3, -16(1)
-	addi 1, 1, 288
-# WAS addi 30,30,.LANCHOR0@toc@l
-	addi 1, 1, -288
-	mflr 30
-	std 30, -8(1)
-	std 3, -16(1)
-	bl .Lbcm_loadtoc__dot_LANCHOR0
-	std 3, -24(1)
-	ld 3, -8(1)
-	mtlr 3
-	ld 30, -24(1)
-	ld 3, -16(1)
-	addi 1, 1, 288
-	li 4,1
-	mr 6,30
-	std 0,16(1)
-	stdu 1,-112(1)
-	ld 3,0(31)
-# WAS bl __fprintf_chk
-	bl	bcm_redirector___fprintf_chk
-	ld 2, 24(1)
-	nop
-# WAS addis 6,2,.LC12@toc@ha		# gpr load fusion, type long
-# WAS ld 6,.LC12@toc@l(6)
-	addi 1, 1, -288
-	mflr 6
-	std 6, -8(1)
-	std 3, -16(1)
-	bl .Lbcm_loadtoc__dot_LC12
-	std 3, -24(1)
-	ld 3, -8(1)
-	mtlr 3
-	ld 6, -24(1)
-	ld 3, -16(1)
-	addi 1, 1, 288
-	ld 6, 0(6)
-	ld 3,0(31)
-# WAS addis 5,2,.LC2@toc@ha
-	li 4,1
-# WAS addi 5,5,.LC2@toc@l
-	addi 1, 1, -288
-	mflr 5
-	std 5, -8(1)
-	std 3, -16(1)
-	bl .Lbcm_loadtoc__dot_LC2
-	std 3, -24(1)
-	ld 3, -8(1)
-	mtlr 3
-	ld 5, -24(1)
-	ld 3, -16(1)
-	addi 1, 1, 288
-# WAS bl __fprintf_chk
-	bl	bcm_redirector___fprintf_chk
-	ld 2, 24(1)
-	nop
-	ld 3,0(31)
-# WAS addis 5,2,.LC4@toc@ha
-# WAS addis 6,2,function@toc@ha
-# WAS addi 5,5,.LC4@toc@l
-	addi 1, 1, -288
-	mflr 5
-	std 5, -8(1)
-	std 3, -16(1)
-	bl .Lbcm_loadtoc__dot_LC4
-	std 3, -24(1)
-	ld 3, -8(1)
-	mtlr 3
-	ld 5, -24(1)
-	ld 3, -16(1)
-	addi 1, 1, 288
-# WAS addi 6,6,function@toc@l
-	addi 1, 1, -288
-	mflr 6
-	std 6, -8(1)
-	std 3, -16(1)
-	bl .Lbcm_loadtoc__dot_Lfunction_local_target
-	std 3, -24(1)
-	ld 3, -8(1)
-	mtlr 3
-	ld 6, -24(1)
-	ld 3, -16(1)
-	addi 1, 1, 288
-	li 4,1
-# WAS bl __fprintf_chk
-	bl	bcm_redirector___fprintf_chk
-	ld 2, 24(1)
-	nop
-# WAS addis 6,2,.LC13@toc@ha		# gpr load fusion, type long
-# WAS ld 6,.LC13@toc@l(6)
-	addi 1, 1, -288
-	mflr 6
-	std 6, -8(1)
-	std 3, -16(1)
-	bl .Lbcm_loadtoc__dot_LC13
-	std 3, -24(1)
-	ld 3, -8(1)
-	mtlr 3
-	ld 6, -24(1)
-	ld 3, -16(1)
-	addi 1, 1, 288
-	ld 6, 0(6)
-	ld 3,0(31)
-# WAS addis 5,2,.LC5@toc@ha
-	li 4,1
-# WAS addi 5,5,.LC5@toc@l
-	addi 1, 1, -288
-	mflr 5
-	std 5, -8(1)
-	std 3, -16(1)
-	bl .Lbcm_loadtoc__dot_LC5
-	std 3, -24(1)
-	ld 3, -8(1)
-	mtlr 3
-	ld 5, -24(1)
-	ld 3, -16(1)
-	addi 1, 1, 288
-# WAS bl __fprintf_chk
-	bl	bcm_redirector___fprintf_chk
-	ld 2, 24(1)
-	nop
-	ld 3,0(31)
-# WAS addis 5,2,.LC7@toc@ha
-	addi 6,30,5
-# WAS addi 5,5,.LC7@toc@l
-	addi 1, 1, -288
-	mflr 5
-	std 5, -8(1)
-	std 3, -16(1)
-	bl .Lbcm_loadtoc__dot_LC7
-	std 3, -24(1)
-	ld 3, -8(1)
-	mtlr 3
-	ld 5, -24(1)
-	ld 3, -16(1)
-	addi 1, 1, 288
-	li 4,1
-# WAS bl __fprintf_chk
-	bl	bcm_redirector___fprintf_chk
-	ld 2, 24(1)
-	nop
-	ld 3,0(31)
-	addis 6,30,0x5
-# WAS addis 5,2,.LC8@toc@ha
-	li 4,1
-# WAS addi 5,5,.LC8@toc@l
-	addi 1, 1, -288
-	mflr 5
-	std 5, -8(1)
-	std 3, -16(1)
-	bl .Lbcm_loadtoc__dot_LC8
-	std 3, -24(1)
-	ld 3, -8(1)
-	mtlr 3
-	ld 5, -24(1)
-	ld 3, -16(1)
-	addi 1, 1, 288
-	addi 6,6,-29404
-# WAS bl __fprintf_chk
-	bl	bcm_redirector___fprintf_chk
-	ld 2, 24(1)
-	nop
-# WAS bl exported_function
-	bl	.Lexported_function_local_entry
-	nop
-	addi 1,1,112
-	ld 0,16(1)
-	ld 30,-16(1)
-	ld 31,-8(1)
-	mtlr 0
-	blr
-	.long 0
-	.byte 0,0,0,1,128,2,0,0
-	.size	function,.-function
-	.globl kExportedString
-# WAS .section	.rodata
-.text
-	.align 4
-	.set	.LANCHOR0,. + 0
-	.type	kString, @object
-	.size	kString, 12
-.LkString_local_target:
-kString:
-	.string	"hello world"
-	.zero	4
-	.type	kGiantArray, @object
-	.size	kGiantArray, 400000
-.LkGiantArray_local_target:
-kGiantArray:
-	.long	1
-	.long	0
-	.zero	399992
-	.type	kExportedString, @object
-	.size	kExportedString, 26
-.LkExportedString_local_target:
-kExportedString:
-	.string	"hello world, more visibly"
-# WAS .section	.rodata.str1.8,"aMS",@progbits,1
-.text
-	.align 3
-.LC1:
-
-	.string	"kString is %p\n"
-	.zero	1
-.LC2:
-
-	.string	"kExportedString is %p\n"
-	.zero	1
-.LC4:
-
-	.string	"function is %p\n"
-.LC5:
-
-	.string	"exported_function is %p\n"
-	.zero	7
-.LC7:
-
-	.string	"&kString[5] is %p\n"
-	.zero	5
-.LC8:
-
-	.string	"&kGiantArray[0x12345] is %p\n"
-	.section	".bss"
-	.align 2
-	.type	bss, @object
-	.size	bss, 20
-bss:
-.Lbss_local_target:
-
-	.zero	20
-	.ident	"GCC: (Ubuntu 4.9.2-10ubuntu13) 4.9.2"
-	.section	.note.GNU-stack,"",@progbits
-.text
-.loc 1 2 0
-BORINGSSL_bcm_text_end:
-.section ".toc", "aw"
-.Lredirector_toc___fprintf_chk:
-.quad __fprintf_chk
-.text
-.type bcm_redirector___fprintf_chk, @function
-bcm_redirector___fprintf_chk:
-	std 2, 24(1)
-	addis 12, 2, .Lredirector_toc___fprintf_chk@toc@ha
-	ld 12, .Lredirector_toc___fprintf_chk@toc@l(12)
-	mtctr 12
-	bctr
-.type bss_bss_get, @function
-bss_bss_get:
-	addis 3, 2, .Lbss_local_target@toc@ha
-	addi 3, 3, .Lbss_local_target@toc@l
-	blr
-.type bcm_loadtoc__dot_LANCHOR0, @function
-bcm_loadtoc__dot_LANCHOR0:
-.Lbcm_loadtoc__dot_LANCHOR0:
-	addis 3, 2, .LANCHOR0@toc@ha
-	addi 3, 3, .LANCHOR0@toc@l
-	blr
-.type bcm_loadtoc__dot_LC0, @function
-bcm_loadtoc__dot_LC0:
-.Lbcm_loadtoc__dot_LC0:
-	addis 3, 2, .LC0@toc@ha
-	addi 3, 3, .LC0@toc@l
-	blr
-.type bcm_loadtoc__dot_LC1, @function
-bcm_loadtoc__dot_LC1:
-.Lbcm_loadtoc__dot_LC1:
-	addis 3, 2, .LC1@toc@ha
-	addi 3, 3, .LC1@toc@l
-	blr
-.type bcm_loadtoc__dot_LC11, @function
-bcm_loadtoc__dot_LC11:
-.Lbcm_loadtoc__dot_LC11:
-	addis 3, 2, .LC11@toc@ha
-	addi 3, 3, .LC11@toc@l
-	blr
-.type bcm_loadtoc__dot_LC12, @function
-bcm_loadtoc__dot_LC12:
-.Lbcm_loadtoc__dot_LC12:
-	addis 3, 2, .LC12@toc@ha
-	addi 3, 3, .LC12@toc@l
-	blr
-.type bcm_loadtoc__dot_LC13, @function
-bcm_loadtoc__dot_LC13:
-.Lbcm_loadtoc__dot_LC13:
-	addis 3, 2, .LC13@toc@ha
-	addi 3, 3, .LC13@toc@l
-	blr
-.type bcm_loadtoc__dot_LC2, @function
-bcm_loadtoc__dot_LC2:
-.Lbcm_loadtoc__dot_LC2:
-	addis 3, 2, .LC2@toc@ha
-	addi 3, 3, .LC2@toc@l
-	blr
-.type bcm_loadtoc__dot_LC3, @function
-bcm_loadtoc__dot_LC3:
-.Lbcm_loadtoc__dot_LC3:
-	addis 3, 2, .LC3@toc@ha
-	addi 3, 3, .LC3@toc@l
-	blr
-.type bcm_loadtoc__dot_LC4, @function
-bcm_loadtoc__dot_LC4:
-.Lbcm_loadtoc__dot_LC4:
-	addis 3, 2, .LC4@toc@ha
-	addi 3, 3, .LC4@toc@l
-	blr
-.type bcm_loadtoc__dot_LC5, @function
-bcm_loadtoc__dot_LC5:
-.Lbcm_loadtoc__dot_LC5:
-	addis 3, 2, .LC5@toc@ha
-	addi 3, 3, .LC5@toc@l
-	blr
-.type bcm_loadtoc__dot_LC6, @function
-bcm_loadtoc__dot_LC6:
-.Lbcm_loadtoc__dot_LC6:
-	addis 3, 2, .LC6@toc@ha
-	addi 3, 3, .LC6@toc@l
-	blr
-.type bcm_loadtoc__dot_LC7, @function
-bcm_loadtoc__dot_LC7:
-.Lbcm_loadtoc__dot_LC7:
-	addis 3, 2, .LC7@toc@ha
-	addi 3, 3, .LC7@toc@l
-	blr
-.type bcm_loadtoc__dot_LC8, @function
-bcm_loadtoc__dot_LC8:
-.Lbcm_loadtoc__dot_LC8:
-	addis 3, 2, .LC8@toc@ha
-	addi 3, 3, .LC8@toc@l
-	blr
-.type bcm_loadtoc__dot_Lfunction_local_target, @function
-bcm_loadtoc__dot_Lfunction_local_target:
-.Lbcm_loadtoc__dot_Lfunction_local_target:
-	addis 3, 2, .Lfunction_local_target@toc@ha
-	addi 3, 3, .Lfunction_local_target@toc@l
-	blr
-.LBORINGSSL_external_toc:
-.quad .TOC.-.LBORINGSSL_external_toc
-.type BORINGSSL_bcm_text_hash, @object
-.size BORINGSSL_bcm_text_hash, 32
-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
diff --git a/util/fipstools/delocate/testdata/ppc64le-TOCWithOffset/in.s b/util/fipstools/delocate/testdata/ppc64le-TOCWithOffset/in.s
deleted file mode 100644
index 94ea211..0000000
--- a/util/fipstools/delocate/testdata/ppc64le-TOCWithOffset/in.s
+++ /dev/null
@@ -1,23 +0,0 @@
-	.text
-foo:
-	# TOC references may have offsets.
-	addis 3, 2, 5+foo@toc@ha
-	addi 3, 3, 10+foo@toc@l
-
-	addis 3, 2, 15+foo@toc@ha
-	addi 3, 3, 20+foo@toc@l
-
-	addis 4, 2, foo@toc@ha
-	addi 4, 4, foo@toc@l
-
-	addis 5, 2, 5+foo@toc@ha
-	ld 5, 10+foo@toc@l(5)
-
-	addis 4, 2, foo-10@toc@ha
-	addi 4, 4, foo-10@toc@l
-
-	addis 4, 2, foo@toc@ha+25
-	addi 4, 4, foo@toc@l+25
-
-	addis 4, 2, 1+foo-2@toc@ha+3
-	addi 4, 4, 1+foo-2@toc@l+3
diff --git a/util/fipstools/delocate/testdata/ppc64le-TOCWithOffset/out.s b/util/fipstools/delocate/testdata/ppc64le-TOCWithOffset/out.s
deleted file mode 100644
index fc55ef2..0000000
--- a/util/fipstools/delocate/testdata/ppc64le-TOCWithOffset/out.s
+++ /dev/null
@@ -1,178 +0,0 @@
-.text
-.file 1 "inserted_by_delocate.c"
-.loc 1 1 0
-BORINGSSL_bcm_text_start:
-	.text
-.Lfoo_local_target:
-foo:
-	# TOC references may have offsets.
-# WAS addis 3, 2, 5+foo@toc@ha
-# WAS addi 3, 3, 10+foo@toc@l
-	addi 1, 1, -288
-	mflr 3
-	std 3, -8(1)
-	bl .Lbcm_loadtoc__dot_Lfoo_local_target__plus_10
-	std 3, -24(1)
-	ld 3, -8(1)
-	mtlr 3
-	ld 3, -24(1)
-	addi 1, 1, 288
-
-# WAS addis 3, 2, 15+foo@toc@ha
-# WAS addi 3, 3, 20+foo@toc@l
-	addi 1, 1, -288
-	mflr 3
-	std 3, -8(1)
-	bl .Lbcm_loadtoc__dot_Lfoo_local_target__plus_20
-	std 3, -24(1)
-	ld 3, -8(1)
-	mtlr 3
-	ld 3, -24(1)
-	addi 1, 1, 288
-
-# WAS addis 4, 2, foo@toc@ha
-# WAS addi 4, 4, foo@toc@l
-	addi 1, 1, -288
-	mflr 4
-	std 4, -8(1)
-	std 3, -16(1)
-	bl .Lbcm_loadtoc__dot_Lfoo_local_target
-	std 3, -24(1)
-	ld 3, -8(1)
-	mtlr 3
-	ld 4, -24(1)
-	ld 3, -16(1)
-	addi 1, 1, 288
-
-# WAS addis 5, 2, 5+foo@toc@ha
-# WAS ld 5, 10+foo@toc@l(5)
-	addi 1, 1, -288
-	mflr 5
-	std 5, -8(1)
-	std 3, -16(1)
-	bl .Lbcm_loadtoc__dot_Lfoo_local_target__plus_10
-	std 3, -24(1)
-	ld 3, -8(1)
-	mtlr 3
-	ld 5, -24(1)
-	ld 3, -16(1)
-	addi 1, 1, 288
-	ld 5, 0(5)
-
-# WAS addis 4, 2, foo-10@toc@ha
-# WAS addi 4, 4, foo-10@toc@l
-	addi 1, 1, -288
-	mflr 4
-	std 4, -8(1)
-	std 3, -16(1)
-	bl .Lbcm_loadtoc__dot_Lfoo_local_target__minus_10
-	std 3, -24(1)
-	ld 3, -8(1)
-	mtlr 3
-	ld 4, -24(1)
-	ld 3, -16(1)
-	addi 1, 1, 288
-
-# WAS addis 4, 2, foo@toc@ha+25
-# WAS addi 4, 4, foo@toc@l+25
-	addi 1, 1, -288
-	mflr 4
-	std 4, -8(1)
-	std 3, -16(1)
-	bl .Lbcm_loadtoc__dot_Lfoo_local_target__plus_25
-	std 3, -24(1)
-	ld 3, -8(1)
-	mtlr 3
-	ld 4, -24(1)
-	ld 3, -16(1)
-	addi 1, 1, 288
-
-# WAS addis 4, 2, 1+foo-2@toc@ha+3
-# WAS addi 4, 4, 1+foo-2@toc@l+3
-	addi 1, 1, -288
-	mflr 4
-	std 4, -8(1)
-	std 3, -16(1)
-	bl .Lbcm_loadtoc__dot_Lfoo_local_target__plus_1_minus_2_plus_3
-	std 3, -24(1)
-	ld 3, -8(1)
-	mtlr 3
-	ld 4, -24(1)
-	ld 3, -16(1)
-	addi 1, 1, 288
-.text
-.loc 1 2 0
-BORINGSSL_bcm_text_end:
-.type bcm_loadtoc__dot_Lfoo_local_target, @function
-bcm_loadtoc__dot_Lfoo_local_target:
-.Lbcm_loadtoc__dot_Lfoo_local_target:
-	addis 3, 2, .Lfoo_local_target@toc@ha
-	addi 3, 3, .Lfoo_local_target@toc@l
-	blr
-.type bcm_loadtoc__dot_Lfoo_local_target__plus_1_minus_2_plus_3, @function
-bcm_loadtoc__dot_Lfoo_local_target__plus_1_minus_2_plus_3:
-.Lbcm_loadtoc__dot_Lfoo_local_target__plus_1_minus_2_plus_3:
-	addis 3, 2, .Lfoo_local_target+1-2+3@toc@ha
-	addi 3, 3, .Lfoo_local_target+1-2+3@toc@l
-	blr
-.type bcm_loadtoc__dot_Lfoo_local_target__plus_10, @function
-bcm_loadtoc__dot_Lfoo_local_target__plus_10:
-.Lbcm_loadtoc__dot_Lfoo_local_target__plus_10:
-	addis 3, 2, .Lfoo_local_target+10@toc@ha
-	addi 3, 3, .Lfoo_local_target+10@toc@l
-	blr
-.type bcm_loadtoc__dot_Lfoo_local_target__plus_20, @function
-bcm_loadtoc__dot_Lfoo_local_target__plus_20:
-.Lbcm_loadtoc__dot_Lfoo_local_target__plus_20:
-	addis 3, 2, .Lfoo_local_target+20@toc@ha
-	addi 3, 3, .Lfoo_local_target+20@toc@l
-	blr
-.type bcm_loadtoc__dot_Lfoo_local_target__plus_25, @function
-bcm_loadtoc__dot_Lfoo_local_target__plus_25:
-.Lbcm_loadtoc__dot_Lfoo_local_target__plus_25:
-	addis 3, 2, .Lfoo_local_target+25@toc@ha
-	addi 3, 3, .Lfoo_local_target+25@toc@l
-	blr
-.type bcm_loadtoc__dot_Lfoo_local_target__minus_10, @function
-bcm_loadtoc__dot_Lfoo_local_target__minus_10:
-.Lbcm_loadtoc__dot_Lfoo_local_target__minus_10:
-	addis 3, 2, .Lfoo_local_target-10@toc@ha
-	addi 3, 3, .Lfoo_local_target-10@toc@l
-	blr
-.LBORINGSSL_external_toc:
-.quad .TOC.-.LBORINGSSL_external_toc
-.type BORINGSSL_bcm_text_hash, @object
-.size BORINGSSL_bcm_text_hash, 32
-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