68 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
			
		
		
	
	
			68 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
| #!/bin/bash
 | |
| set -e -o pipefail
 | |
| 
 | |
| # This script wraps the go cross compilers.
 | |
| #
 | |
| # It ensures that Go binaries are linked with an external linker
 | |
| # by default (cross clang). Appropriate flags are added to build a
 | |
| # position independent executable (PIE) for ASLR.
 | |
| # "export GOPIE=0" to temporarily disable this behavior.
 | |
| 
 | |
| function pie_enabled()
 | |
| 	{
 | |
| 	[[ "${GOPIE}" != "0" ]]
 | |
| 	}
 | |
| 
 | |
| function has_ldflags()
 | |
| 	{
 | |
| 	# Check if any linker flags are present in argv.
 | |
| 	for arg in "$@"
 | |
| 	do
 | |
| 		case "${arg}" in
 | |
| 			-ldflags | -ldflags=*) return 0 ;;
 | |
| 			-linkmode | -linkmode=*) return 0 ;;
 | |
| 			-buildmode | -buildmode=*) return 0 ;;
 | |
| 			-installsuffix | -installsuffix=*) return 0 ;;
 | |
| 			-extld | -extld=*) return 0 ;;
 | |
| 			-extldflags | -extldflags=*) return 0 ;;
 | |
| 		esac
 | |
| 	done
 | |
| 	return 1
 | |
| 	}
 | |
| 
 | |
| pie_flags=()
 | |
| if pie_enabled && ! has_ldflags "$@"
 | |
| then
 | |
| 	case "$1" in
 | |
| 		build | install | run | test)
 | |
| 			# Add "-buildmode=pie" to "go build|install|run|test" commands.
 | |
| 			pie_flags=( "$1" )
 | |
| 			shift
 | |
| 			[[ "${GOOS}" == "android" ]] || pie_flags+=( "-buildmode=pie" )
 | |
| 			;;
 | |
| 		tool)
 | |
| 			case "$2" in
 | |
| 				asm)
 | |
| 					# Handle direct assembler invocations ("go tool asm <args>").
 | |
| 					pie_flags=( "$1" "$2" "-shared" )
 | |
| 					shift 2
 | |
| 					;;
 | |
| 				compile)
 | |
| 					# Handle direct compiler invocations ("go tool compile <args>").
 | |
| 					pie_flags=( "$1" "$2" "-shared" )
 | |
| 					shift 2
 | |
| 					[[ "${GOOS}" == "android" ]] || pie_flags+=( "-installsuffix=shared" )
 | |
| 					;;
 | |
| 				link)
 | |
| 					# Handle direct linker invocations ("go tool link <args>").
 | |
| 					pie_flags=( "$1" "$2" "-extld" "${CC}" "-buildmode=pie" )
 | |
| 					shift 2
 | |
| 					[[ "${GOOS}" == "android" ]] || pie_flags+=( "-installsuffix=shared" )
 | |
| 					;;
 | |
| 			esac
 | |
| 			;;
 | |
| 	esac
 | |
| fi
 | |
| 
 | |
| exec go "${pie_flags[@]}" "$@"
 |